agent-browser-stealth 0.17.0-fork.2 → 0.24.0-fork.2
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/README.md +1256 -240
- package/bin/agent-browser-darwin-arm64 +0 -0
- package/bin/agent-browser-darwin-x64 +0 -0
- package/bin/agent-browser-linux-arm64 +0 -0
- package/bin/agent-browser-linux-x64 +0 -0
- package/bin/agent-browser-win32-x64.exe +0 -0
- package/bin/agent-browser.js +13 -2
- package/extensions/tab-group-cdp/content-script.js +425 -0
- package/extensions/tab-group-cdp/icons/icon.svg +7 -0
- package/extensions/tab-group-cdp/manifest.json +34 -0
- package/extensions/tab-group-cdp/page-bridge.js +133 -0
- package/extensions/tab-group-cdp/service-worker.js +2249 -0
- package/extensions/tab-group-cdp/sidepanel.css +258 -0
- package/extensions/tab-group-cdp/sidepanel.html +28 -0
- package/extensions/tab-group-cdp/sidepanel.js +1225 -0
- package/package.json +17 -69
- package/scripts/build-all-platforms.sh +6 -0
- package/scripts/check-version-sync.js +14 -2
- package/scripts/copy-native.js +8 -50
- package/scripts/postinstall.js +149 -165
- package/scripts/windows-debug/provision.sh +220 -0
- package/scripts/windows-debug/run.sh +92 -0
- package/scripts/windows-debug/start.sh +43 -0
- package/scripts/windows-debug/stop.sh +28 -0
- package/scripts/windows-debug/sync.sh +27 -0
- package/skills/agent-browser/SKILL.md +256 -159
- package/skills/agent-browser/references/authentication.md +101 -0
- package/skills/agent-browser/references/commands.md +34 -2
- package/skills/agent-browser/references/snapshot-refs.md +25 -0
- package/skills/agentcore/SKILL.md +115 -0
- package/skills/dogfood/SKILL.md +4 -2
- package/skills/electron/SKILL.md +26 -2
- package/skills/slack/SKILL.md +0 -9
- package/skills/slack/references/slack-tasks.md +2 -8
- package/skills/vercel-sandbox/SKILL.md +280 -0
- package/bin/agent-browser-local +0 -0
- package/bin/agent-browser-stealth +0 -0
- package/bin/agent-browser-stealth.d +0 -1
- package/dist/action-policy.d.ts +0 -14
- package/dist/action-policy.d.ts.map +0 -1
- package/dist/action-policy.js +0 -253
- package/dist/action-policy.js.map +0 -1
- package/dist/actions.d.ts +0 -21
- package/dist/actions.d.ts.map +0 -1
- package/dist/actions.js +0 -2139
- package/dist/actions.js.map +0 -1
- package/dist/auth-cli.d.ts +0 -2
- package/dist/auth-cli.d.ts.map +0 -1
- package/dist/auth-cli.js +0 -97
- package/dist/auth-cli.js.map +0 -1
- package/dist/auth-vault.d.ts +0 -36
- package/dist/auth-vault.d.ts.map +0 -1
- package/dist/auth-vault.js +0 -125
- package/dist/auth-vault.js.map +0 -1
- package/dist/browser.d.ts +0 -665
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js +0 -3210
- package/dist/browser.js.map +0 -1
- package/dist/confirmation.d.ts +0 -8
- package/dist/confirmation.d.ts.map +0 -1
- package/dist/confirmation.js +0 -30
- package/dist/confirmation.js.map +0 -1
- package/dist/daemon.d.ts +0 -78
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js +0 -744
- package/dist/daemon.js.map +0 -1
- package/dist/diff.d.ts +0 -18
- package/dist/diff.d.ts.map +0 -1
- package/dist/diff.js +0 -271
- package/dist/diff.js.map +0 -1
- package/dist/domain-filter.d.ts +0 -28
- package/dist/domain-filter.d.ts.map +0 -1
- package/dist/domain-filter.js +0 -149
- package/dist/domain-filter.js.map +0 -1
- package/dist/encryption.d.ts +0 -73
- package/dist/encryption.d.ts.map +0 -1
- package/dist/encryption.js +0 -171
- package/dist/encryption.js.map +0 -1
- package/dist/ios-actions.d.ts +0 -11
- package/dist/ios-actions.d.ts.map +0 -1
- package/dist/ios-actions.js +0 -228
- package/dist/ios-actions.js.map +0 -1
- package/dist/ios-manager.d.ts +0 -266
- package/dist/ios-manager.d.ts.map +0 -1
- package/dist/ios-manager.js +0 -1073
- package/dist/ios-manager.js.map +0 -1
- package/dist/protocol.d.ts +0 -26
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -990
- package/dist/protocol.js.map +0 -1
- package/dist/snapshot.d.ts +0 -67
- package/dist/snapshot.d.ts.map +0 -1
- package/dist/snapshot.js +0 -514
- package/dist/snapshot.js.map +0 -1
- package/dist/state-utils.d.ts +0 -77
- package/dist/state-utils.d.ts.map +0 -1
- package/dist/state-utils.js +0 -178
- package/dist/state-utils.js.map +0 -1
- package/dist/stealth.d.ts +0 -41
- package/dist/stealth.d.ts.map +0 -1
- package/dist/stealth.js +0 -1743
- package/dist/stealth.js.map +0 -1
- package/dist/stream-server.d.ts +0 -117
- package/dist/stream-server.d.ts.map +0 -1
- package/dist/stream-server.js +0 -309
- package/dist/stream-server.js.map +0 -1
- package/dist/types.d.ts +0 -973
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/scripts/check-creepjs-headless.js +0 -137
- package/scripts/check-daemon-pid-recovery.js +0 -148
- package/scripts/check-sannysoft-webdriver.js +0 -112
- package/scripts/check-stealth-regression.js +0 -199
- package/scripts/check-turnstile-testkey.ts +0 -125
- package/scripts/clawhub-sync.sh +0 -27
- package/scripts/sync-upstream.sh +0 -142
- package/scripts/verify-bundled-binaries.js +0 -71
- package/scripts/verify-native-version.js +0 -48
- package/scripts/verify-packed-host-binary.js +0 -88
- package/scripts/verify-registry-host-binary.js +0 -120
- package/skills/agent-browser-stealth/SKILL.md +0 -127
package/dist/encryption.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Encryption utilities for state file protection using AES-256-GCM.
|
|
3
|
-
*/
|
|
4
|
-
import * as crypto from 'crypto';
|
|
5
|
-
import { execSync } from 'node:child_process';
|
|
6
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
import os from 'node:os';
|
|
9
|
-
// ============================================
|
|
10
|
-
// Constants
|
|
11
|
-
// ============================================
|
|
12
|
-
export const ENCRYPTION_ALGORITHM = 'aes-256-gcm';
|
|
13
|
-
export const ENCRYPTION_KEY_ENV = 'AGENT_BROWSER_ENCRYPTION_KEY';
|
|
14
|
-
export const IV_LENGTH = 12; // 96 bits for GCM
|
|
15
|
-
const KEY_FILE_NAME = '.encryption-key';
|
|
16
|
-
export function getKeyFilePath() {
|
|
17
|
-
return join(os.homedir(), '.agent-browser', KEY_FILE_NAME);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Restrict file permissions to the current user only.
|
|
21
|
-
* On Unix, the caller should use `mode: 0o600` when writing. This function
|
|
22
|
-
* handles Windows where Node's mode parameter is ignored.
|
|
23
|
-
*/
|
|
24
|
-
export function restrictFilePermissions(filePath) {
|
|
25
|
-
if (os.platform() !== 'win32')
|
|
26
|
-
return;
|
|
27
|
-
try {
|
|
28
|
-
execSync(`icacls "${filePath}" /inheritance:r /grant:r "%USERNAME%:F"`, {
|
|
29
|
-
stdio: 'ignore',
|
|
30
|
-
windowsHide: true,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// Best-effort; may fail in some environments (containers, restricted shells)
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Restrict directory permissions to the current user only.
|
|
39
|
-
* On Unix, the caller should use `mode: 0o700` when creating. This function
|
|
40
|
-
* handles Windows where Node's mode parameter is ignored.
|
|
41
|
-
*/
|
|
42
|
-
export function restrictDirPermissions(dirPath) {
|
|
43
|
-
if (os.platform() !== 'win32')
|
|
44
|
-
return;
|
|
45
|
-
try {
|
|
46
|
-
execSync(`icacls "${dirPath}" /inheritance:r /grant:r "%USERNAME%:(OI)(CI)F"`, {
|
|
47
|
-
stdio: 'ignore',
|
|
48
|
-
windowsHide: true,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// Best-effort
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function parseKeyHex(keyHex) {
|
|
56
|
-
if (!/^[a-fA-F0-9]{64}$/.test(keyHex.trim()))
|
|
57
|
-
return null;
|
|
58
|
-
return Buffer.from(keyHex.trim(), 'hex');
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get encryption key from environment variable or key file.
|
|
62
|
-
* The key should be a 32-byte (256-bit) hex-encoded string (64 characters).
|
|
63
|
-
* Generate with: openssl rand -hex 32
|
|
64
|
-
*
|
|
65
|
-
* Checks (in order):
|
|
66
|
-
* 1. AGENT_BROWSER_ENCRYPTION_KEY env var
|
|
67
|
-
* 2. ~/.agent-browser/.encryption-key file
|
|
68
|
-
*
|
|
69
|
-
* @returns Buffer containing the key, or null if not available
|
|
70
|
-
*/
|
|
71
|
-
export function getEncryptionKey() {
|
|
72
|
-
const keyHex = process.env[ENCRYPTION_KEY_ENV];
|
|
73
|
-
if (keyHex) {
|
|
74
|
-
const key = parseKeyHex(keyHex);
|
|
75
|
-
if (!key) {
|
|
76
|
-
console.warn(`Warning: ${ENCRYPTION_KEY_ENV} should be a 64-character hex string (256 bits). ` +
|
|
77
|
-
`Generate one with: openssl rand -hex 32`);
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
return key;
|
|
81
|
-
}
|
|
82
|
-
const keyFilePath = getKeyFilePath();
|
|
83
|
-
if (existsSync(keyFilePath)) {
|
|
84
|
-
try {
|
|
85
|
-
const fileHex = readFileSync(keyFilePath, 'utf-8');
|
|
86
|
-
return parseKeyHex(fileHex);
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Ensure an encryption key is available, auto-generating one if needed.
|
|
96
|
-
* On first call without an existing key, generates a random 256-bit key
|
|
97
|
-
* and writes it to ~/.agent-browser/.encryption-key (mode 0600).
|
|
98
|
-
*/
|
|
99
|
-
export function ensureEncryptionKey() {
|
|
100
|
-
const existing = getEncryptionKey();
|
|
101
|
-
if (existing)
|
|
102
|
-
return existing;
|
|
103
|
-
const key = crypto.randomBytes(32);
|
|
104
|
-
const keyHex = key.toString('hex');
|
|
105
|
-
const dir = join(os.homedir(), '.agent-browser');
|
|
106
|
-
if (!existsSync(dir)) {
|
|
107
|
-
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
108
|
-
restrictDirPermissions(dir);
|
|
109
|
-
}
|
|
110
|
-
const keyFilePath = getKeyFilePath();
|
|
111
|
-
writeFileSync(keyFilePath, keyHex + '\n', { mode: 0o600 });
|
|
112
|
-
restrictFilePermissions(keyFilePath);
|
|
113
|
-
console.error(`[agent-browser] Auto-generated encryption key at ${keyFilePath} -- back up this file or set ${ENCRYPTION_KEY_ENV}`);
|
|
114
|
-
return key;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Encrypt data using AES-256-GCM.
|
|
118
|
-
* Returns a JSON-serializable payload with IV, auth tag, and encrypted data.
|
|
119
|
-
*
|
|
120
|
-
* @param plaintext - The string to encrypt
|
|
121
|
-
* @param key - The 256-bit encryption key
|
|
122
|
-
* @returns Encrypted payload object
|
|
123
|
-
*/
|
|
124
|
-
export function encryptData(plaintext, key) {
|
|
125
|
-
const iv = crypto.randomBytes(IV_LENGTH);
|
|
126
|
-
const cipher = crypto.createCipheriv(ENCRYPTION_ALGORITHM, key, iv);
|
|
127
|
-
let encrypted = cipher.update(plaintext, 'utf8');
|
|
128
|
-
encrypted = Buffer.concat([encrypted, cipher.final()]);
|
|
129
|
-
return {
|
|
130
|
-
version: 1,
|
|
131
|
-
encrypted: true,
|
|
132
|
-
iv: iv.toString('base64'),
|
|
133
|
-
authTag: cipher.getAuthTag().toString('base64'),
|
|
134
|
-
data: encrypted.toString('base64'),
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Decrypt data using AES-256-GCM.
|
|
139
|
-
*
|
|
140
|
-
* @param payload - The encrypted payload object
|
|
141
|
-
* @param key - The 256-bit encryption key
|
|
142
|
-
* @returns Decrypted plaintext string
|
|
143
|
-
* @throws Error if decryption fails (wrong key, tampered data, etc.)
|
|
144
|
-
*/
|
|
145
|
-
export function decryptData(payload, key) {
|
|
146
|
-
const iv = Buffer.from(payload.iv, 'base64');
|
|
147
|
-
const authTag = Buffer.from(payload.authTag, 'base64');
|
|
148
|
-
const encryptedData = Buffer.from(payload.data, 'base64');
|
|
149
|
-
const decipher = crypto.createDecipheriv(ENCRYPTION_ALGORITHM, key, iv);
|
|
150
|
-
decipher.setAuthTag(authTag);
|
|
151
|
-
let decrypted = decipher.update(encryptedData);
|
|
152
|
-
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
|
153
|
-
return decrypted.toString('utf8');
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Check if a parsed JSON object is an encrypted payload.
|
|
157
|
-
*
|
|
158
|
-
* @param data - The object to check
|
|
159
|
-
* @returns True if the object is a valid encrypted payload
|
|
160
|
-
*/
|
|
161
|
-
export function isEncryptedPayload(data) {
|
|
162
|
-
return (typeof data === 'object' &&
|
|
163
|
-
data !== null &&
|
|
164
|
-
'encrypted' in data &&
|
|
165
|
-
data.encrypted === true &&
|
|
166
|
-
'version' in data &&
|
|
167
|
-
'iv' in data &&
|
|
168
|
-
'authTag' in data &&
|
|
169
|
-
'data' in data);
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=encryption.js.map
|
package/dist/encryption.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"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"}
|
package/dist/ios-actions.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iOS command execution - mirrors actions.ts but for iOS Safari via Appium.
|
|
3
|
-
* Provides 1:1 command parity where possible.
|
|
4
|
-
*/
|
|
5
|
-
import type { IOSManager } from './ios-manager.js';
|
|
6
|
-
import type { Command, Response } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Execute a command on the iOS manager
|
|
9
|
-
*/
|
|
10
|
-
export declare function executeIOSCommand(command: Command, manager: IOSManager): Promise<Response>;
|
|
11
|
-
//# sourceMappingURL=ios-actions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ios-actions.d.ts","sourceRoot":"","sources":["../src/ios-actions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUpD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6PhG"}
|
package/dist/ios-actions.js
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iOS command execution - mirrors actions.ts but for iOS Safari via Appium.
|
|
3
|
-
* Provides 1:1 command parity where possible.
|
|
4
|
-
*/
|
|
5
|
-
function successResponse(id, data) {
|
|
6
|
-
return { id, success: true, data };
|
|
7
|
-
}
|
|
8
|
-
function errorResponse(id, error) {
|
|
9
|
-
return { id, success: false, error };
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Execute a command on the iOS manager
|
|
13
|
-
*/
|
|
14
|
-
export async function executeIOSCommand(command, manager) {
|
|
15
|
-
const { id, action } = command;
|
|
16
|
-
try {
|
|
17
|
-
switch (action) {
|
|
18
|
-
case 'launch': {
|
|
19
|
-
const cmd = command;
|
|
20
|
-
await manager.launch({
|
|
21
|
-
device: cmd.device,
|
|
22
|
-
udid: cmd.udid,
|
|
23
|
-
});
|
|
24
|
-
const info = manager.getDeviceInfo();
|
|
25
|
-
return successResponse(id, {
|
|
26
|
-
launched: true,
|
|
27
|
-
device: info?.name ?? 'iOS Simulator',
|
|
28
|
-
udid: info?.udid,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
case 'navigate': {
|
|
32
|
-
const cmd = command;
|
|
33
|
-
const result = await manager.navigate(cmd.url);
|
|
34
|
-
return successResponse(id, result);
|
|
35
|
-
}
|
|
36
|
-
case 'click': {
|
|
37
|
-
const cmd = command;
|
|
38
|
-
await manager.click(cmd.selector);
|
|
39
|
-
return successResponse(id, { clicked: true });
|
|
40
|
-
}
|
|
41
|
-
case 'tap': {
|
|
42
|
-
const cmd = command;
|
|
43
|
-
await manager.tap(cmd.selector);
|
|
44
|
-
return successResponse(id, { tapped: true });
|
|
45
|
-
}
|
|
46
|
-
case 'type': {
|
|
47
|
-
const cmd = command;
|
|
48
|
-
await manager.type(cmd.selector, cmd.text, {
|
|
49
|
-
delay: cmd.delay,
|
|
50
|
-
clear: cmd.clear,
|
|
51
|
-
});
|
|
52
|
-
return successResponse(id, { typed: true });
|
|
53
|
-
}
|
|
54
|
-
case 'fill': {
|
|
55
|
-
const cmd = command;
|
|
56
|
-
await manager.fill(cmd.selector, cmd.value);
|
|
57
|
-
return successResponse(id, { filled: true });
|
|
58
|
-
}
|
|
59
|
-
case 'screenshot': {
|
|
60
|
-
const cmd = command;
|
|
61
|
-
const result = await manager.screenshot({
|
|
62
|
-
path: cmd.path,
|
|
63
|
-
fullPage: cmd.fullPage,
|
|
64
|
-
});
|
|
65
|
-
return successResponse(id, result);
|
|
66
|
-
}
|
|
67
|
-
case 'snapshot': {
|
|
68
|
-
const cmd = command;
|
|
69
|
-
const result = await manager.getSnapshot({
|
|
70
|
-
interactive: cmd.interactive,
|
|
71
|
-
});
|
|
72
|
-
return successResponse(id, { snapshot: result.tree, refs: result.refs });
|
|
73
|
-
}
|
|
74
|
-
case 'scroll': {
|
|
75
|
-
const cmd = command;
|
|
76
|
-
await manager.scroll({
|
|
77
|
-
selector: cmd.selector,
|
|
78
|
-
x: cmd.x,
|
|
79
|
-
y: cmd.y,
|
|
80
|
-
direction: cmd.direction,
|
|
81
|
-
amount: cmd.amount,
|
|
82
|
-
});
|
|
83
|
-
return successResponse(id, { scrolled: true });
|
|
84
|
-
}
|
|
85
|
-
case 'swipe': {
|
|
86
|
-
const cmd = command;
|
|
87
|
-
await manager.swipe(cmd.direction, { distance: cmd.distance });
|
|
88
|
-
return successResponse(id, { swiped: true });
|
|
89
|
-
}
|
|
90
|
-
case 'evaluate': {
|
|
91
|
-
const cmd = command;
|
|
92
|
-
const result = await manager.evaluate(cmd.script, ...(cmd.args ?? []));
|
|
93
|
-
return successResponse(id, { result });
|
|
94
|
-
}
|
|
95
|
-
case 'wait': {
|
|
96
|
-
const cmd = command;
|
|
97
|
-
await manager.wait({
|
|
98
|
-
selector: cmd.selector,
|
|
99
|
-
timeout: cmd.timeout,
|
|
100
|
-
state: cmd.state,
|
|
101
|
-
});
|
|
102
|
-
return successResponse(id, { waited: true });
|
|
103
|
-
}
|
|
104
|
-
case 'press': {
|
|
105
|
-
const cmd = command;
|
|
106
|
-
await manager.press(cmd.key);
|
|
107
|
-
return successResponse(id, { pressed: true });
|
|
108
|
-
}
|
|
109
|
-
case 'hover': {
|
|
110
|
-
const cmd = command;
|
|
111
|
-
await manager.hover(cmd.selector);
|
|
112
|
-
return successResponse(id, { hovered: true });
|
|
113
|
-
}
|
|
114
|
-
case 'content': {
|
|
115
|
-
const cmd = command;
|
|
116
|
-
const html = await manager.getContent(cmd.selector);
|
|
117
|
-
return successResponse(id, { html });
|
|
118
|
-
}
|
|
119
|
-
case 'gettext': {
|
|
120
|
-
const cmd = command;
|
|
121
|
-
const text = await manager.getText(cmd.selector);
|
|
122
|
-
return successResponse(id, { text });
|
|
123
|
-
}
|
|
124
|
-
case 'getattribute': {
|
|
125
|
-
const cmd = command;
|
|
126
|
-
const value = await manager.getAttribute(cmd.selector, cmd.attribute);
|
|
127
|
-
return successResponse(id, { value });
|
|
128
|
-
}
|
|
129
|
-
case 'isvisible': {
|
|
130
|
-
const cmd = command;
|
|
131
|
-
const visible = await manager.isVisible(cmd.selector);
|
|
132
|
-
return successResponse(id, { visible });
|
|
133
|
-
}
|
|
134
|
-
case 'isenabled': {
|
|
135
|
-
const cmd = command;
|
|
136
|
-
const enabled = await manager.isEnabled(cmd.selector);
|
|
137
|
-
return successResponse(id, { enabled });
|
|
138
|
-
}
|
|
139
|
-
case 'url': {
|
|
140
|
-
const url = await manager.getUrl();
|
|
141
|
-
return successResponse(id, { url });
|
|
142
|
-
}
|
|
143
|
-
case 'title': {
|
|
144
|
-
const title = await manager.getTitle();
|
|
145
|
-
return successResponse(id, { title });
|
|
146
|
-
}
|
|
147
|
-
case 'back': {
|
|
148
|
-
await manager.goBack();
|
|
149
|
-
return successResponse(id, { navigated: 'back' });
|
|
150
|
-
}
|
|
151
|
-
case 'forward': {
|
|
152
|
-
await manager.goForward();
|
|
153
|
-
return successResponse(id, { navigated: 'forward' });
|
|
154
|
-
}
|
|
155
|
-
case 'reload': {
|
|
156
|
-
await manager.reload();
|
|
157
|
-
return successResponse(id, { reloaded: true });
|
|
158
|
-
}
|
|
159
|
-
case 'select': {
|
|
160
|
-
const cmd = command;
|
|
161
|
-
await manager.select(cmd.selector, cmd.values);
|
|
162
|
-
return successResponse(id, { selected: true });
|
|
163
|
-
}
|
|
164
|
-
case 'check': {
|
|
165
|
-
const cmd = command;
|
|
166
|
-
await manager.check(cmd.selector);
|
|
167
|
-
return successResponse(id, { checked: true });
|
|
168
|
-
}
|
|
169
|
-
case 'uncheck': {
|
|
170
|
-
const cmd = command;
|
|
171
|
-
await manager.uncheck(cmd.selector);
|
|
172
|
-
return successResponse(id, { unchecked: true });
|
|
173
|
-
}
|
|
174
|
-
case 'focus': {
|
|
175
|
-
const cmd = command;
|
|
176
|
-
await manager.focus(cmd.selector);
|
|
177
|
-
return successResponse(id, { focused: true });
|
|
178
|
-
}
|
|
179
|
-
case 'clear': {
|
|
180
|
-
const cmd = command;
|
|
181
|
-
await manager.clear(cmd.selector);
|
|
182
|
-
return successResponse(id, { cleared: true });
|
|
183
|
-
}
|
|
184
|
-
case 'count': {
|
|
185
|
-
const cmd = command;
|
|
186
|
-
const count = await manager.count(cmd.selector);
|
|
187
|
-
return successResponse(id, { count });
|
|
188
|
-
}
|
|
189
|
-
case 'boundingbox': {
|
|
190
|
-
const cmd = command;
|
|
191
|
-
const box = await manager.getBoundingBox(cmd.selector);
|
|
192
|
-
return successResponse(id, { box });
|
|
193
|
-
}
|
|
194
|
-
case 'close': {
|
|
195
|
-
await manager.close();
|
|
196
|
-
return successResponse(id, { closed: true });
|
|
197
|
-
}
|
|
198
|
-
// iOS-specific: device list
|
|
199
|
-
case 'device_list': {
|
|
200
|
-
const devices = await manager.listDevices();
|
|
201
|
-
return successResponse(id, { devices });
|
|
202
|
-
}
|
|
203
|
-
// Commands that don't apply to iOS Safari
|
|
204
|
-
case 'tab_new':
|
|
205
|
-
case 'tab_list':
|
|
206
|
-
case 'tab_switch':
|
|
207
|
-
case 'tab_close':
|
|
208
|
-
case 'window_new':
|
|
209
|
-
return errorResponse(id, `Command '${action}' is not supported on iOS Safari. Mobile Safari does not support programmatic tab management.`);
|
|
210
|
-
case 'pdf':
|
|
211
|
-
return errorResponse(id, 'PDF generation is not supported on iOS Safari.');
|
|
212
|
-
case 'screencast_start':
|
|
213
|
-
case 'screencast_stop':
|
|
214
|
-
return errorResponse(id, 'Screencast is not supported on iOS (requires CDP).');
|
|
215
|
-
case 'recording_start':
|
|
216
|
-
case 'recording_stop':
|
|
217
|
-
case 'recording_restart':
|
|
218
|
-
return errorResponse(id, 'Video recording is not yet supported on iOS.');
|
|
219
|
-
default:
|
|
220
|
-
return errorResponse(id, `Unknown or unsupported iOS command: ${action}`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
catch (error) {
|
|
224
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
225
|
-
return errorResponse(id, message);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=ios-actions.js.map
|
package/dist/ios-actions.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ios-actions.js","sourceRoot":"","sources":["../src/ios-actions.ts"],"names":[],"mappings":"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"}
|