@dyyz1993/agent-browser 0.9.2 → 0.11.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/dist/__tests__/utils/parseCli.d.ts +1 -0
- package/dist/__tests__/utils/parseCli.d.ts.map +1 -1
- package/dist/__tests__/utils/parseCli.js +18 -10
- package/dist/__tests__/utils/parseCli.js.map +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +63 -3
- package/dist/actions.js.map +1 -1
- package/dist/browser.d.ts +46 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +343 -13
- package/dist/browser.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +8 -3
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/connection.d.ts.map +1 -1
- package/dist/cli/connection.js +39 -1
- package/dist/cli/connection.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +27 -20
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +5 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +147 -1
- package/dist/daemon.js.map +1 -1
- package/dist/message-bridge.d.ts.map +1 -1
- package/dist/message-bridge.js +22 -4
- package/dist/message-bridge.js.map +1 -1
- package/dist/openapi.d.ts +22 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +382 -0
- package/dist/openapi.js.map +1 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +18 -0
- package/dist/protocol.js.map +1 -1
- package/dist/recorder/inject.js +61 -134
- package/dist/stream-server-standalone.d.ts +10 -0
- package/dist/stream-server-standalone.d.ts.map +1 -1
- package/dist/stream-server-standalone.js +594 -74
- package/dist/stream-server-standalone.js.map +1 -1
- package/dist/stream-server.d.ts +67 -2
- package/dist/stream-server.d.ts.map +1 -1
- package/dist/stream-server.js +371 -51
- package/dist/stream-server.js.map +1 -1
- package/dist/swagger-ui.d.ts +6 -0
- package/dist/swagger-ui.d.ts.map +1 -0
- package/dist/swagger-ui.js +51 -0
- package/dist/swagger-ui.js.map +1 -0
- package/dist/test-live.d.ts +2 -0
- package/dist/test-live.d.ts.map +1 -0
- package/dist/test-live.js +333 -0
- package/dist/test-live.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/viewer-html.d.ts.map +1 -1
- package/dist/viewer-html.js +270 -58
- package/dist/viewer-html.js.map +1 -1
- package/dist/viewer-script.d.ts +20 -2
- package/dist/viewer-script.d.ts.map +1 -1
- package/dist/viewer-script.js +858 -102
- package/dist/viewer-script.js.map +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +6 -32
- package/scripts/test-cli-help.sh +51 -0
- package/scripts/verify-form.sh +67 -0
- package/scripts/verify-login.sh +65 -0
- package/scripts/verify-recording.sh +80 -0
- package/scripts/verify-upload.sh +41 -0
- package/skills/agent-browser/SKILL.md +88 -1
- package/skills/agent-browser/references/commands.md +3 -0
- package/skills/agent-browser/references/network-monitoring.md +232 -0
- package/skills/agent-browser/references/profiling.md +120 -0
- package/skills/agent-browser/references/recorder.md +319 -0
- package/skills/agent-browser/templates/network-intercept-crawl.sh +255 -0
- package/dist/__tests__/test-iframe.d.ts +0 -2
- package/dist/__tests__/test-iframe.d.ts.map +0 -1
- package/dist/__tests__/test-iframe.js +0 -52
- package/dist/__tests__/test-iframe.js.map +0 -1
- package/dist/cli-new.d.ts +0 -3
- package/dist/cli-new.d.ts.map +0 -1
- package/dist/cli-new.js +0 -308
- package/dist/cli-new.js.map +0 -1
- package/dist/cli-old.d.ts +0 -3
- package/dist/cli-old.d.ts.map +0 -1
- package/dist/cli-old.js +0 -1101
- package/dist/cli-old.js.map +0 -1
- package/dist/recorder/binding.d.ts +0 -24
- package/dist/recorder/binding.d.ts.map +0 -1
- package/dist/recorder/binding.js +0 -215
- package/dist/recorder/binding.js.map +0 -1
- package/dist/recorder/index.d.ts +0 -4
- package/dist/recorder/index.d.ts.map +0 -1
- package/dist/recorder/index.js +0 -4
- package/dist/recorder/index.js.map +0 -1
- package/dist/recorder/recorder.d.ts +0 -19
- package/dist/recorder/recorder.d.ts.map +0 -1
- package/dist/recorder/recorder.js +0 -101
- package/dist/recorder/recorder.js.map +0 -1
- package/dist/recorder/store.d.ts +0 -22
- package/dist/recorder/store.d.ts.map +0 -1
- package/dist/recorder/store.js +0 -150
- package/dist/recorder/store.js.map +0 -1
- package/dist/recorder/types.d.ts +0 -73
- package/dist/recorder/types.d.ts.map +0 -1
- package/dist/recorder/types.js +0 -5
- package/dist/recorder/types.js.map +0 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Network Interception Data Collection Template
|
|
3
|
+
# Usage: ./network-intercept-crawl.sh <url> <output-dir> [max-scrolls]
|
|
4
|
+
#
|
|
5
|
+
# This script demonstrates how to capture API data using network interception.
|
|
6
|
+
# It handles infinite scroll pages that load data via AJAX/fetch calls.
|
|
7
|
+
#
|
|
8
|
+
# Prerequisites:
|
|
9
|
+
# - agent-browser installed and in PATH
|
|
10
|
+
# - jq for JSON processing
|
|
11
|
+
#
|
|
12
|
+
# Environment Variables:
|
|
13
|
+
# SCROLL_CONTAINER - CSS selector for scroll container (default: auto-detect)
|
|
14
|
+
# SCROLL_DELAY - Seconds to wait after scroll (default: 2)
|
|
15
|
+
# MAX_NO_NEW - Stop after N scrolls with no new data (default: 3)
|
|
16
|
+
#
|
|
17
|
+
# Examples:
|
|
18
|
+
# ./network-intercept-crawl.sh https://example.com/feed ./output 20
|
|
19
|
+
# SCROLL_CONTAINER=".feed-list" ./network-intercept-crawl.sh https://example.com/products ./data
|
|
20
|
+
|
|
21
|
+
set -e
|
|
22
|
+
|
|
23
|
+
# Configuration
|
|
24
|
+
TARGET_URL="${1:-https://example.com}"
|
|
25
|
+
OUTPUT_DIR="${2:-./collected-data}"
|
|
26
|
+
MAX_SCROLLS="${3:-20}"
|
|
27
|
+
SCROLL_CONTAINER="${SCROLL_CONTAINER:-}" # CSS selector for scroll container (empty = auto-detect)
|
|
28
|
+
SCROLL_DELAY="${SCROLL_DELAY:-2}" # Seconds to wait after scroll
|
|
29
|
+
MAX_NO_NEW="${MAX_NO_NEW:-3}" # Stop after N scrolls with no new data
|
|
30
|
+
|
|
31
|
+
mkdir -p "$OUTPUT_DIR"
|
|
32
|
+
|
|
33
|
+
echo "=========================================="
|
|
34
|
+
echo " Network Interception Data Collection"
|
|
35
|
+
echo "=========================================="
|
|
36
|
+
echo " URL: $TARGET_URL"
|
|
37
|
+
echo " Output: $OUTPUT_DIR"
|
|
38
|
+
echo " Max scrolls: $MAX_SCROLLS"
|
|
39
|
+
echo "=========================================="
|
|
40
|
+
|
|
41
|
+
# Cleanup function
|
|
42
|
+
cleanup() {
|
|
43
|
+
echo ""
|
|
44
|
+
echo "[Cleanup] Closing browser..."
|
|
45
|
+
agent-browser kill 2>/dev/null || true
|
|
46
|
+
}
|
|
47
|
+
trap cleanup EXIT
|
|
48
|
+
|
|
49
|
+
# Step 1: Start fresh
|
|
50
|
+
echo ""
|
|
51
|
+
echo "[Step 1] Starting browser session..."
|
|
52
|
+
agent-browser kill 2>/dev/null || true
|
|
53
|
+
sleep 1
|
|
54
|
+
|
|
55
|
+
# Step 2: Enable network interception
|
|
56
|
+
echo "[Step 2] Enabling network request capture..."
|
|
57
|
+
agent-browser network requests --capture-response
|
|
58
|
+
|
|
59
|
+
# Step 3: Navigate to target page
|
|
60
|
+
echo "[Step 3] Opening target URL..."
|
|
61
|
+
agent-browser open "$TARGET_URL"
|
|
62
|
+
agent-browser wait --load networkidle
|
|
63
|
+
sleep 2
|
|
64
|
+
|
|
65
|
+
# Step 4: Auto-detect scroll container if not specified
|
|
66
|
+
if [ -z "$SCROLL_CONTAINER" ]; then
|
|
67
|
+
echo "[Step 4] Auto-detecting scroll container..."
|
|
68
|
+
DETECTED_CONTAINER=$(agent-browser eval --stdin <<'EOF'
|
|
69
|
+
(() => {
|
|
70
|
+
// Check for common scroll container patterns
|
|
71
|
+
const selectors = [
|
|
72
|
+
'.simulation-area',
|
|
73
|
+
'.feed-container',
|
|
74
|
+
'.scroll-container',
|
|
75
|
+
'[class*="scroll"]',
|
|
76
|
+
'[class*="feed"]',
|
|
77
|
+
'[class*="list"]',
|
|
78
|
+
'.content',
|
|
79
|
+
'main'
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
for (const sel of selectors) {
|
|
83
|
+
const el = document.querySelector(sel);
|
|
84
|
+
if (el && el.scrollHeight > el.clientHeight) {
|
|
85
|
+
return sel;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return ''; // Use window scroll
|
|
89
|
+
})()
|
|
90
|
+
EOF
|
|
91
|
+
)
|
|
92
|
+
# Extract container from JSON response
|
|
93
|
+
SCROLL_CONTAINER=$(echo "$DETECTED_CONTAINER" | jq -r '.' 2>/dev/null || echo "")
|
|
94
|
+
|
|
95
|
+
if [ -n "$SCROLL_CONTAINER" ] && [ "$SCROLL_CONTAINER" != "null" ] && [ "$SCROLL_CONTAINER" != "" ]; then
|
|
96
|
+
echo " Detected container: $SCROLL_CONTAINER"
|
|
97
|
+
else
|
|
98
|
+
echo " No container detected, using window scroll"
|
|
99
|
+
SCROLL_CONTAINER=""
|
|
100
|
+
fi
|
|
101
|
+
else
|
|
102
|
+
echo "[Step 4] Using specified container: $SCROLL_CONTAINER"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
# Step 5: Extract initial data
|
|
106
|
+
echo "[Step 5] Extracting initial captured requests..."
|
|
107
|
+
|
|
108
|
+
# Function to get all captured requests
|
|
109
|
+
get_all_requests() {
|
|
110
|
+
agent-browser network requests --capture-response --type json --json 2>/dev/null
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# Function to count requests with response bodies
|
|
114
|
+
count_valid_requests() {
|
|
115
|
+
local json_data="$1"
|
|
116
|
+
echo "$json_data" | jq '.data.requests | map(select(.responseBody != null)) | length' 2>/dev/null || echo "0"
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Function to count unique IDs in data
|
|
120
|
+
count_unique_ids() {
|
|
121
|
+
local json_data="$1"
|
|
122
|
+
local id_field="${2:-id}"
|
|
123
|
+
echo "$json_data" | jq -c "[.data.requests[].responseBody | select(. != null) | .[]?.${id_field}] | unique | length" 2>/dev/null || echo "0"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
# Initialize tracking - cumulative approach (no clearing!)
|
|
127
|
+
ALL_DATA_FILE="$OUTPUT_DIR/all-captures.json"
|
|
128
|
+
PROCESSED_COUNT=0 # Track how many requests we've already processed
|
|
129
|
+
|
|
130
|
+
# Get initial data
|
|
131
|
+
get_all_requests > "$ALL_DATA_FILE"
|
|
132
|
+
TOTAL_REQUESTS=$(count_valid_requests "$(cat "$ALL_DATA_FILE")")
|
|
133
|
+
INITIAL_IDS=$(count_unique_ids "$(cat "$ALL_DATA_FILE")")
|
|
134
|
+
PROCESSED_COUNT=$TOTAL_REQUESTS
|
|
135
|
+
|
|
136
|
+
echo " Initial capture: $TOTAL_REQUESTS requests, ~$INITIAL_IDS unique items"
|
|
137
|
+
echo " Using cumulative mode (no data loss from clearing)"
|
|
138
|
+
|
|
139
|
+
# Step 6: Scroll to load more data
|
|
140
|
+
echo ""
|
|
141
|
+
echo "[Step 6] Scrolling to load more data..."
|
|
142
|
+
|
|
143
|
+
NO_NEW_COUNT=0
|
|
144
|
+
SCROLL_COUNT=0
|
|
145
|
+
|
|
146
|
+
while [ $SCROLL_COUNT -lt $MAX_SCROLLS ]; do
|
|
147
|
+
SCROLL_COUNT=$((SCROLL_COUNT + 1))
|
|
148
|
+
|
|
149
|
+
# Perform scroll
|
|
150
|
+
if [ -n "$SCROLL_CONTAINER" ]; then
|
|
151
|
+
# Scroll within specific container
|
|
152
|
+
agent-browser eval --stdin <<EOF
|
|
153
|
+
(() => {
|
|
154
|
+
const container = document.querySelector('$SCROLL_CONTAINER');
|
|
155
|
+
if (container) {
|
|
156
|
+
container.scrollTop = container.scrollHeight;
|
|
157
|
+
return { scrolled: true, scrollTop: container.scrollTop };
|
|
158
|
+
}
|
|
159
|
+
return { scrolled: false, error: 'Container not found' };
|
|
160
|
+
})()
|
|
161
|
+
EOF
|
|
162
|
+
else
|
|
163
|
+
# Scroll the page
|
|
164
|
+
agent-browser scroll down 1000
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
# Wait for new requests
|
|
168
|
+
sleep "$SCROLL_DELAY"
|
|
169
|
+
|
|
170
|
+
# Get ALL requests (cumulative, no clearing!)
|
|
171
|
+
get_all_requests > "$ALL_DATA_FILE"
|
|
172
|
+
|
|
173
|
+
# Count total requests now
|
|
174
|
+
NEW_TOTAL=$(count_valid_requests "$(cat "$ALL_DATA_FILE")")
|
|
175
|
+
|
|
176
|
+
# Calculate how many new requests we got (offset from last processed)
|
|
177
|
+
NEW_COUNT=$((NEW_TOTAL - PROCESSED_COUNT))
|
|
178
|
+
|
|
179
|
+
if [ "$NEW_COUNT" -le 0 ]; then
|
|
180
|
+
echo " Scroll $SCROLL_COUNT: No new requests captured (total: $NEW_TOTAL)"
|
|
181
|
+
NO_NEW_COUNT=$((NO_NEW_COUNT + 1))
|
|
182
|
+
|
|
183
|
+
if [ $NO_NEW_COUNT -ge $MAX_NO_NEW ]; then
|
|
184
|
+
echo ""
|
|
185
|
+
echo " [Stop] Consecutive $MAX_NO_NEW scrolls with no new data"
|
|
186
|
+
break
|
|
187
|
+
fi
|
|
188
|
+
else
|
|
189
|
+
echo " Scroll $SCROLL_COUNT: Captured $NEW_COUNT new requests (total: $NEW_TOTAL)"
|
|
190
|
+
|
|
191
|
+
# Extract only NEW requests using offset
|
|
192
|
+
if [ $PROCESSED_COUNT -gt 0 ]; then
|
|
193
|
+
jq ".data.requests[$PROCESSED_COUNT:]" "$ALL_DATA_FILE" > "$OUTPUT_DIR/scroll-${SCROLL_COUNT}-new.json" 2>/dev/null || true
|
|
194
|
+
else
|
|
195
|
+
jq '.data.requests' "$ALL_DATA_FILE" > "$OUTPUT_DIR/scroll-${SCROLL_COUNT}-new.json" 2>/dev/null || true
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
# Update processed count
|
|
199
|
+
PROCESSED_COUNT=$NEW_TOTAL
|
|
200
|
+
NO_NEW_COUNT=0
|
|
201
|
+
fi
|
|
202
|
+
done
|
|
203
|
+
|
|
204
|
+
# Step 7: Extract and save final data
|
|
205
|
+
echo ""
|
|
206
|
+
echo "[Step 7] Processing collected data..."
|
|
207
|
+
|
|
208
|
+
# Extract response bodies from all captured requests
|
|
209
|
+
OUTPUT_DATA="$OUTPUT_DIR/collected-data.json"
|
|
210
|
+
jq '
|
|
211
|
+
.data.requests |
|
|
212
|
+
map(select(.responseBody != null)) |
|
|
213
|
+
map({
|
|
214
|
+
url: .url,
|
|
215
|
+
method: .method,
|
|
216
|
+
status: .status,
|
|
217
|
+
contentType: .contentType,
|
|
218
|
+
timestamp: .timestamp,
|
|
219
|
+
data: .responseBody
|
|
220
|
+
})
|
|
221
|
+
' "$ALL_DATA_FILE" > "$OUTPUT_DATA" 2>/dev/null || echo "[]" > "$OUTPUT_DATA"
|
|
222
|
+
|
|
223
|
+
TOTAL_ITEMS=$(jq 'map(select(.data != null and .data != [])) | length' "$OUTPUT_DATA")
|
|
224
|
+
UNIQUE_IDS=$(count_unique_ids "$(cat "$ALL_DATA_FILE")")
|
|
225
|
+
|
|
226
|
+
echo " Total API responses captured: $TOTAL_ITEMS"
|
|
227
|
+
echo " Unique items identified: $UNIQUE_IDS"
|
|
228
|
+
|
|
229
|
+
# Save summary
|
|
230
|
+
SUMMARY_FILE="$OUTPUT_DIR/summary.json"
|
|
231
|
+
jq -n "
|
|
232
|
+
{
|
|
233
|
+
collectedAt: \"$(date -Iseconds)\",
|
|
234
|
+
targetUrl: \"$TARGET_URL\",
|
|
235
|
+
scrollContainer: \"$SCROLL_CONTAINER\",
|
|
236
|
+
totalScrolls: $SCROLL_COUNT,
|
|
237
|
+
totalRequests: $TOTAL_ITEMS,
|
|
238
|
+
uniqueItems: $UNIQUE_IDS,
|
|
239
|
+
mode: \"cumulative-no-clear\",
|
|
240
|
+
outputFiles: [
|
|
241
|
+
\"collected-data.json\",
|
|
242
|
+
\"all-captures.json\"
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
" > "$SUMMARY_FILE"
|
|
246
|
+
|
|
247
|
+
echo ""
|
|
248
|
+
echo "=========================================="
|
|
249
|
+
echo " Collection Complete"
|
|
250
|
+
echo "=========================================="
|
|
251
|
+
echo " Output directory: $OUTPUT_DIR"
|
|
252
|
+
echo " Total responses: $TOTAL_ITEMS"
|
|
253
|
+
echo " Files created:"
|
|
254
|
+
ls -la "$OUTPUT_DIR"
|
|
255
|
+
echo "=========================================="
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-iframe.d.ts","sourceRoot":"","sources":["../../src/__tests__/test-iframe.ts"],"names":[],"mappings":""}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { chromium } from 'playwright-core';
|
|
2
|
-
async function test() {
|
|
3
|
-
const browser = await chromium.launch({ headless: true });
|
|
4
|
-
const context = await browser.newContext();
|
|
5
|
-
const page = await context.newPage();
|
|
6
|
-
// Listen for frame navigated events
|
|
7
|
-
page.on('framenavigated', (frame) => {
|
|
8
|
-
console.log('Frame navigated:', frame.url());
|
|
9
|
-
});
|
|
10
|
-
// Listen for console events
|
|
11
|
-
page.on('console', (msg) => {
|
|
12
|
-
console.log('Console:', msg.type(), msg.text());
|
|
13
|
-
});
|
|
14
|
-
// Listen for page errors
|
|
15
|
-
page.on('pageerror', (error) => {
|
|
16
|
-
console.log('Page error:', error.message);
|
|
17
|
-
});
|
|
18
|
-
// Listen for request failed
|
|
19
|
-
page.on('requestfailed', (request) => {
|
|
20
|
-
console.log('Request failed:', request.url(), request.failure()?.errorText);
|
|
21
|
-
});
|
|
22
|
-
await page.goto('https://www.example.com');
|
|
23
|
-
// Check CSP headers
|
|
24
|
-
const response = await page.evaluate(() => {
|
|
25
|
-
return {
|
|
26
|
-
csp: document.querySelector('meta[http-equiv="Content-Security-Policy"]')?.getAttribute('content'),
|
|
27
|
-
xFrameOptions: document.querySelector('meta[http-equiv="X-Frame-Options"]')?.getAttribute('content'),
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
console.log('CSP info:', response);
|
|
31
|
-
// Create iframe using DOM methods
|
|
32
|
-
await page.evaluate(() => {
|
|
33
|
-
const iframe = document.createElement('iframe');
|
|
34
|
-
iframe.id = 'cross-frame';
|
|
35
|
-
iframe.src = 'https://www.iana.org/domains/example';
|
|
36
|
-
iframe.width = '800';
|
|
37
|
-
iframe.height = '400';
|
|
38
|
-
document.body.appendChild(iframe);
|
|
39
|
-
});
|
|
40
|
-
// Wait for frame to be attached
|
|
41
|
-
await page.waitForSelector('#cross-frame');
|
|
42
|
-
// Wait longer
|
|
43
|
-
await page.waitForTimeout(5000);
|
|
44
|
-
// Check all frames
|
|
45
|
-
console.log('\n=== All frames ===');
|
|
46
|
-
const mainFrame = page.mainFrame();
|
|
47
|
-
console.log('Main frame URL:', mainFrame.url());
|
|
48
|
-
console.log('Child frames:', mainFrame.childFrames().map(f => ({ url: f.url(), name: f.name() })));
|
|
49
|
-
await browser.close();
|
|
50
|
-
}
|
|
51
|
-
test().catch(console.error);
|
|
52
|
-
//# sourceMappingURL=test-iframe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-iframe.js","sourceRoot":"","sources":["../../src/__tests__/test-iframe.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-new.d.ts
DELETED
package/dist/cli-new.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-new.d.ts","sourceRoot":"","sources":["../src/cli-new.ts"],"names":[],"mappings":""}
|
package/dist/cli-new.js
DELETED
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env npx tsx
|
|
2
|
-
import { parseFlags, cleanArgs } from './cli/flags.js';
|
|
3
|
-
import { ensureDaemon, sendCommand, listSessions, genId } from './cli/connection.js';
|
|
4
|
-
import { parseCommand, CliError } from './cli/commands.js';
|
|
5
|
-
import { printHelp, printCommandHelp, printVersion } from './cli/help.js';
|
|
6
|
-
import { printResponse, printSession, printError, printWarning, } from './cli/output.js';
|
|
7
|
-
import { spawn } from 'child_process';
|
|
8
|
-
function parseProxy(proxyStr) {
|
|
9
|
-
const protocolEnd = proxyStr.indexOf('://');
|
|
10
|
-
if (protocolEnd === -1) {
|
|
11
|
-
return { server: proxyStr };
|
|
12
|
-
}
|
|
13
|
-
const protocol = proxyStr.substring(0, protocolEnd + 3);
|
|
14
|
-
const rest = proxyStr.substring(protocolEnd + 3);
|
|
15
|
-
const atPos = rest.lastIndexOf('@');
|
|
16
|
-
if (atPos === -1) {
|
|
17
|
-
return { server: proxyStr };
|
|
18
|
-
}
|
|
19
|
-
const creds = rest.substring(0, atPos);
|
|
20
|
-
const serverPart = rest.substring(atPos + 1);
|
|
21
|
-
const server = protocol + serverPart;
|
|
22
|
-
const colonPos = creds.indexOf(':');
|
|
23
|
-
if (colonPos === -1) {
|
|
24
|
-
return { server, username: creds, password: '' };
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
server,
|
|
28
|
-
username: creds.substring(0, colonPos),
|
|
29
|
-
password: creds.substring(colonPos + 1),
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
async function runInstall(withDeps) {
|
|
33
|
-
const args = ['playwright', 'install', 'chromium'];
|
|
34
|
-
if (withDeps) {
|
|
35
|
-
args.push('--with-deps');
|
|
36
|
-
}
|
|
37
|
-
const child = spawn('npx', args, {
|
|
38
|
-
stdio: 'inherit',
|
|
39
|
-
shell: true,
|
|
40
|
-
});
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
child.on('close', (code) => {
|
|
43
|
-
if (code === 0) {
|
|
44
|
-
resolve();
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
reject(new Error(`Install failed with code ${code}`));
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
child.on('error', reject);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
async function runSession(flags) {
|
|
54
|
-
const sessions = await listSessions();
|
|
55
|
-
if (flags.json) {
|
|
56
|
-
console.log(JSON.stringify({
|
|
57
|
-
success: true,
|
|
58
|
-
data: { session: flags.session, sessions },
|
|
59
|
-
}));
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
printSession(flags.session, sessions, flags.json);
|
|
63
|
-
}
|
|
64
|
-
async function launchWithFlags(flags) {
|
|
65
|
-
const launchCmd = {
|
|
66
|
-
id: genId(),
|
|
67
|
-
action: 'launch',
|
|
68
|
-
headless: !flags.headed,
|
|
69
|
-
};
|
|
70
|
-
if (flags.profile) {
|
|
71
|
-
launchCmd.profile = flags.profile;
|
|
72
|
-
}
|
|
73
|
-
if (flags.state) {
|
|
74
|
-
launchCmd.storageState = flags.state;
|
|
75
|
-
}
|
|
76
|
-
if (flags.proxy) {
|
|
77
|
-
const proxyObj = parseProxy(flags.proxy);
|
|
78
|
-
if (flags.proxyBypass) {
|
|
79
|
-
proxyObj.bypass = flags.proxyBypass;
|
|
80
|
-
}
|
|
81
|
-
launchCmd.proxy = proxyObj;
|
|
82
|
-
}
|
|
83
|
-
if (flags.userAgent) {
|
|
84
|
-
launchCmd.userAgent = flags.userAgent;
|
|
85
|
-
}
|
|
86
|
-
if (flags.args) {
|
|
87
|
-
launchCmd.args = flags.args.split(/[,\n]/).map((a) => a.trim()).filter((a) => a);
|
|
88
|
-
}
|
|
89
|
-
if (flags.ignoreHttpsErrors) {
|
|
90
|
-
launchCmd.ignoreHTTPSErrors = true;
|
|
91
|
-
}
|
|
92
|
-
if (flags.allowFileAccess) {
|
|
93
|
-
launchCmd.allowFileAccess = true;
|
|
94
|
-
}
|
|
95
|
-
const resp = await sendCommand(launchCmd, flags.session);
|
|
96
|
-
if (!resp.success) {
|
|
97
|
-
throw new Error(resp.error || 'Browser launch failed');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
async function main() {
|
|
101
|
-
const rawArgs = process.argv.slice(2);
|
|
102
|
-
const flags = parseFlags(rawArgs);
|
|
103
|
-
const args = cleanArgs(rawArgs);
|
|
104
|
-
if (rawArgs.includes('--help') || rawArgs.includes('-h')) {
|
|
105
|
-
if (args[0]) {
|
|
106
|
-
if (printCommandHelp(args[0])) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
printHelp();
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (rawArgs.includes('--version') || rawArgs.includes('-V')) {
|
|
114
|
-
printVersion();
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (args.length === 0) {
|
|
118
|
-
printHelp();
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (args[0] === 'install') {
|
|
122
|
-
const withDeps = rawArgs.includes('--with-deps') || rawArgs.includes('-d');
|
|
123
|
-
try {
|
|
124
|
-
await runInstall(withDeps);
|
|
125
|
-
}
|
|
126
|
-
catch (e) {
|
|
127
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
128
|
-
process.exit(1);
|
|
129
|
-
}
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (args[0] === 'session') {
|
|
133
|
-
try {
|
|
134
|
-
await runSession(flags);
|
|
135
|
-
}
|
|
136
|
-
catch (e) {
|
|
137
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
138
|
-
process.exit(1);
|
|
139
|
-
}
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
let cmd;
|
|
143
|
-
try {
|
|
144
|
-
cmd = parseCommand(args, flags);
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
if (e instanceof CliError) {
|
|
148
|
-
printError(e.message, flags.json);
|
|
149
|
-
if (e.usage && !flags.json) {
|
|
150
|
-
console.error(`Usage: ${e.usage}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
155
|
-
}
|
|
156
|
-
process.exit(1);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
const daemonResult = await ensureDaemon({
|
|
161
|
-
session: flags.session,
|
|
162
|
-
headed: flags.headed,
|
|
163
|
-
executablePath: flags.executablePath,
|
|
164
|
-
extensions: flags.extensions,
|
|
165
|
-
args: flags.args,
|
|
166
|
-
userAgent: flags.userAgent,
|
|
167
|
-
proxy: flags.proxy,
|
|
168
|
-
proxyBypass: flags.proxyBypass,
|
|
169
|
-
ignoreHttpsErrors: flags.ignoreHttpsErrors,
|
|
170
|
-
allowFileAccess: flags.allowFileAccess,
|
|
171
|
-
profile: flags.profile,
|
|
172
|
-
state: flags.state,
|
|
173
|
-
provider: flags.provider,
|
|
174
|
-
device: flags.device,
|
|
175
|
-
});
|
|
176
|
-
if (daemonResult.alreadyRunning) {
|
|
177
|
-
const ignoredFlags = [];
|
|
178
|
-
if (flags.cliExecutablePath)
|
|
179
|
-
ignoredFlags.push('--executable-path');
|
|
180
|
-
if (flags.cliExtensions)
|
|
181
|
-
ignoredFlags.push('--extension');
|
|
182
|
-
if (flags.cliProfile)
|
|
183
|
-
ignoredFlags.push('--profile');
|
|
184
|
-
if (flags.cliState)
|
|
185
|
-
ignoredFlags.push('--state');
|
|
186
|
-
if (flags.cliArgs)
|
|
187
|
-
ignoredFlags.push('--args');
|
|
188
|
-
if (flags.cliUserAgent)
|
|
189
|
-
ignoredFlags.push('--user-agent');
|
|
190
|
-
if (flags.cliProxy)
|
|
191
|
-
ignoredFlags.push('--proxy');
|
|
192
|
-
if (flags.cliProxyBypass)
|
|
193
|
-
ignoredFlags.push('--proxy-bypass');
|
|
194
|
-
if (flags.ignoreHttpsErrors)
|
|
195
|
-
ignoredFlags.push('--ignore-https-errors');
|
|
196
|
-
if (flags.cliAllowFileAccess)
|
|
197
|
-
ignoredFlags.push('--allow-file-access');
|
|
198
|
-
if (ignoredFlags.length > 0 && !flags.json) {
|
|
199
|
-
printWarning(`${ignoredFlags.join(', ')} ignored: daemon already running. Use 'agent-browser close' first to restart with new options.`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
catch (e) {
|
|
204
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
205
|
-
process.exit(1);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (flags.cdp && flags.provider) {
|
|
209
|
-
printError('Cannot use --cdp and -p/--provider together', flags.json);
|
|
210
|
-
process.exit(1);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
if (flags.provider && flags.extensions.length > 0) {
|
|
214
|
-
printError('Cannot use --extension with -p/--provider (extensions require local browser)', flags.json);
|
|
215
|
-
process.exit(1);
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
if (flags.cdp) {
|
|
219
|
-
const cdpValue = flags.cdp;
|
|
220
|
-
let launchCmd;
|
|
221
|
-
if (cdpValue.startsWith('ws://') ||
|
|
222
|
-
cdpValue.startsWith('wss://') ||
|
|
223
|
-
cdpValue.startsWith('http://') ||
|
|
224
|
-
cdpValue.startsWith('https://')) {
|
|
225
|
-
launchCmd = { id: genId(), action: 'launch', cdpUrl: cdpValue };
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
const port = parseInt(cdpValue, 10);
|
|
229
|
-
if (isNaN(port) || port <= 0 || port > 65535) {
|
|
230
|
-
printError(`Invalid CDP port: ${cdpValue}`, flags.json);
|
|
231
|
-
process.exit(1);
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
launchCmd = { id: genId(), action: 'launch', cdpPort: port };
|
|
235
|
-
}
|
|
236
|
-
if (flags.ignoreHttpsErrors) {
|
|
237
|
-
launchCmd.ignoreHTTPSErrors = true;
|
|
238
|
-
}
|
|
239
|
-
try {
|
|
240
|
-
const resp = await sendCommand(launchCmd, flags.session);
|
|
241
|
-
if (!resp.success) {
|
|
242
|
-
printError(resp.error || 'CDP connection failed', flags.json);
|
|
243
|
-
process.exit(1);
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
catch (e) {
|
|
248
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
249
|
-
process.exit(1);
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
if (flags.provider) {
|
|
254
|
-
const launchCmd = {
|
|
255
|
-
id: genId(),
|
|
256
|
-
action: 'launch',
|
|
257
|
-
provider: flags.provider,
|
|
258
|
-
};
|
|
259
|
-
try {
|
|
260
|
-
const resp = await sendCommand(launchCmd, flags.session);
|
|
261
|
-
if (!resp.success) {
|
|
262
|
-
printError(resp.error || 'Provider connection failed', flags.json);
|
|
263
|
-
process.exit(1);
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch (e) {
|
|
268
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
269
|
-
process.exit(1);
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
if ((flags.headed ||
|
|
274
|
-
flags.profile ||
|
|
275
|
-
flags.state ||
|
|
276
|
-
flags.proxy ||
|
|
277
|
-
flags.args ||
|
|
278
|
-
flags.userAgent ||
|
|
279
|
-
flags.allowFileAccess) &&
|
|
280
|
-
!flags.cdp &&
|
|
281
|
-
!flags.provider) {
|
|
282
|
-
try {
|
|
283
|
-
await launchWithFlags(flags);
|
|
284
|
-
}
|
|
285
|
-
catch (e) {
|
|
286
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
287
|
-
process.exit(1);
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
try {
|
|
292
|
-
const resp = await sendCommand(cmd, flags.session);
|
|
293
|
-
const action = cmd.action;
|
|
294
|
-
printResponse(resp, flags.json, action);
|
|
295
|
-
if (!resp.success) {
|
|
296
|
-
process.exit(1);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
catch (e) {
|
|
300
|
-
printError(e instanceof Error ? e.message : String(e), flags.json);
|
|
301
|
-
process.exit(1);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
main().catch((e) => {
|
|
305
|
-
printError(e instanceof Error ? e.message : String(e), false);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
});
|
|
308
|
-
//# sourceMappingURL=cli-new.js.map
|
package/dist/cli-new.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-new.js","sourceRoot":"","sources":["../src/cli-new.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-old.d.ts
DELETED
package/dist/cli-old.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-old.d.ts","sourceRoot":"","sources":["../src/cli-old.ts"],"names":[],"mappings":""}
|