@lobu/connector-sdk 11.2.0 → 12.0.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/browser/cdp.d.ts +0 -18
- package/dist/browser/cdp.d.ts.map +1 -1
- package/dist/browser/cdp.js +3 -66
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/launcher.d.ts +0 -4
- package/dist/browser/launcher.d.ts.map +1 -1
- package/dist/browser/launcher.js +12 -14
- package/dist/browser/launcher.js.map +1 -1
- package/dist/browser/stealth.d.ts +2 -22
- package/dist/browser/stealth.d.ts.map +1 -1
- package/dist/browser/stealth.js +0 -72
- package/dist/browser/stealth.js.map +1 -1
- package/dist/browser-network.d.ts +5 -11
- package/dist/browser-network.d.ts.map +1 -1
- package/dist/browser-network.js +10 -30
- package/dist/browser-network.js.map +1 -1
- package/dist/connector-runtime.d.ts +35 -1
- package/dist/connector-runtime.d.ts.map +1 -1
- package/dist/connector-runtime.js +44 -0
- package/dist/connector-runtime.js.map +1 -1
- package/dist/connector-types.d.ts +30 -0
- package/dist/connector-types.d.ts.map +1 -1
- package/dist/connector-types.js.map +1 -1
- package/dist/define-connector.d.ts +7 -1
- package/dist/define-connector.d.ts.map +1 -1
- package/dist/define-connector.js +6 -0
- package/dist/define-connector.js.map +1 -1
- package/dist/extension-dom-scrape.d.ts +11 -1
- package/dist/extension-dom-scrape.d.ts.map +1 -1
- package/dist/extension-dom-scrape.js +18 -5
- package/dist/extension-dom-scrape.js.map +1 -1
- package/dist/extension-network.d.ts +3 -3
- package/dist/extension-network.js +3 -3
- package/dist/http-client.d.ts +27 -0
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +21 -2
- package/dist/http-client.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics.d.ts +173 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +84 -0
- package/dist/metrics.js.map +1 -0
- package/dist/nix-package.d.ts +24 -0
- package/dist/nix-package.d.ts.map +1 -0
- package/dist/nix-package.js +59 -0
- package/dist/nix-package.js.map +1 -0
- package/dist/reaction-client-types.d.ts +29 -2
- package/dist/reaction-client-types.d.ts.map +1 -1
- package/dist/sources/cache.d.ts +3 -3
- package/dist/sources/cache.d.ts.map +1 -1
- package/dist/sources/cache.js +1 -1
- package/dist/sources/cache.js.map +1 -1
- package/dist/sources/git-file-source.d.ts +2 -1
- package/dist/sources/git-file-source.d.ts.map +1 -1
- package/dist/sources/git-http.d.ts +1 -1
- package/dist/sources/git-http.d.ts.map +1 -1
- package/dist/sources/git-http.js +1 -1
- package/dist/sources/git-http.js.map +1 -1
- package/dist/sources/git-snapshot.d.ts +2 -1
- package/dist/sources/git-snapshot.d.ts.map +1 -1
- package/dist/sources/glob.d.ts +0 -8
- package/dist/sources/glob.d.ts.map +1 -1
- package/dist/sources/glob.js +1 -1
- package/dist/sources/glob.js.map +1 -1
- package/dist/sources/snapshot.d.ts +2 -1
- package/dist/sources/snapshot.d.ts.map +1 -1
- package/package.json +12 -14
- package/dist/browser/devtools-active-port.d.ts +0 -20
- package/dist/browser/devtools-active-port.d.ts.map +0 -1
- package/dist/browser/devtools-active-port.js +0 -46
- package/dist/browser/devtools-active-port.js.map +0 -1
- package/dist/browser/mirror-cookies.d.ts +0 -64
- package/dist/browser/mirror-cookies.d.ts.map +0 -1
- package/dist/browser/mirror-cookies.js +0 -292
- package/dist/browser/mirror-cookies.js.map +0 -1
package/dist/browser/cdp.d.ts
CHANGED
|
@@ -4,25 +4,7 @@ export interface CdpVersionInfo {
|
|
|
4
4
|
/** Whether the browser is headless (test/automation instance) */
|
|
5
5
|
isHeadless?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function normalizeCdpUrl(value: string): string;
|
|
8
7
|
export declare function fetchCdpVersionInfo(baseUrl: string): Promise<CdpVersionInfo | null>;
|
|
9
|
-
/**
|
|
10
|
-
* Try connecting to a Chrome DevTools endpoint via direct WebSocket.
|
|
11
|
-
* Chrome's DevTools remote debugging UI (chrome://inspect/#remote-debugging)
|
|
12
|
-
* exposes CDP over WebSocket at ws://{host}:{port}/devtools/browser
|
|
13
|
-
* without the HTTP /json/version endpoint.
|
|
14
|
-
*/
|
|
15
|
-
export declare function tryWebSocketCdp(host: string, port: number, timeoutMs?: number): Promise<CdpVersionInfo | null>;
|
|
16
|
-
/**
|
|
17
|
-
* Discover Chrome processes listening on TCP ports by parsing `lsof` output.
|
|
18
|
-
* Returns ports for processes named "Google" (Chrome) on macOS/Linux.
|
|
19
|
-
*/
|
|
20
|
-
export declare function discoverChromeListeningPorts(): Promise<number[]>;
|
|
21
|
-
/**
|
|
22
|
-
* Discover Chrome processes launched with --remote-debugging-port flag.
|
|
23
|
-
* Returns http:// URLs for those endpoints.
|
|
24
|
-
*/
|
|
25
|
-
export declare function discoverChromeProcessCdpUrls(): Promise<string[]>;
|
|
26
8
|
export interface ResolveCdpOptions {
|
|
27
9
|
defaultUrls?: string[];
|
|
28
10
|
loggerLabel?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/browser/cdp.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/browser/cdp.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAYD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgBzF;AAoED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAgGjB"}
|
package/dist/browser/cdp.js
CHANGED
|
@@ -7,7 +7,7 @@ const DEFAULT_CDP_URLS = [
|
|
|
7
7
|
'http://localhost:9222',
|
|
8
8
|
'http://127.0.0.1:9223',
|
|
9
9
|
];
|
|
10
|
-
|
|
10
|
+
function normalizeCdpUrl(value) {
|
|
11
11
|
let end = value.length;
|
|
12
12
|
while (end > 0 && value.charCodeAt(end - 1) === 47)
|
|
13
13
|
end--;
|
|
@@ -34,76 +34,13 @@ export async function fetchCdpVersionInfo(baseUrl) {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
37
|
-
// WebSocket-based discovery (new style: chrome://inspect remote debugging UI)
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
/**
|
|
40
|
-
* Try connecting to a Chrome DevTools endpoint via direct WebSocket.
|
|
41
|
-
* Chrome's DevTools remote debugging UI (chrome://inspect/#remote-debugging)
|
|
42
|
-
* exposes CDP over WebSocket at ws://{host}:{port}/devtools/browser
|
|
43
|
-
* without the HTTP /json/version endpoint.
|
|
44
|
-
*/
|
|
45
|
-
export async function tryWebSocketCdp(host, port, timeoutMs = 3000) {
|
|
46
|
-
const wsUrl = `ws://${host}:${port}/devtools/browser`;
|
|
47
|
-
return new Promise((resolve) => {
|
|
48
|
-
let ws;
|
|
49
|
-
const closeWs = () => {
|
|
50
|
-
try {
|
|
51
|
-
ws?.close();
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
/* best-effort */
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const timer = setTimeout(() => {
|
|
58
|
-
closeWs();
|
|
59
|
-
resolve(null);
|
|
60
|
-
}, timeoutMs);
|
|
61
|
-
try {
|
|
62
|
-
ws = new WebSocket(wsUrl);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
clearTimeout(timer);
|
|
66
|
-
resolve(null);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
ws.onopen = () => {
|
|
70
|
-
ws.send(JSON.stringify({ id: 1, method: 'Browser.getVersion' }));
|
|
71
|
-
};
|
|
72
|
-
ws.onmessage = (event) => {
|
|
73
|
-
clearTimeout(timer);
|
|
74
|
-
closeWs();
|
|
75
|
-
try {
|
|
76
|
-
const data = JSON.parse(event.data);
|
|
77
|
-
const result = data?.result;
|
|
78
|
-
if (!result?.product) {
|
|
79
|
-
resolve(null);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const ua = result.userAgent;
|
|
83
|
-
resolve({
|
|
84
|
-
Browser: result.product,
|
|
85
|
-
webSocketDebuggerUrl: wsUrl,
|
|
86
|
-
isHeadless: ua ? /headless/i.test(ua) : false,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
resolve(null);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
ws.onerror = () => {
|
|
94
|
-
clearTimeout(timer);
|
|
95
|
-
resolve(null);
|
|
96
|
-
};
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
// ---------------------------------------------------------------------------
|
|
100
37
|
// Port discovery
|
|
101
38
|
// ---------------------------------------------------------------------------
|
|
102
39
|
/**
|
|
103
40
|
* Discover Chrome processes listening on TCP ports by parsing `lsof` output.
|
|
104
41
|
* Returns ports for processes named "Google" (Chrome) on macOS/Linux.
|
|
105
42
|
*/
|
|
106
|
-
|
|
43
|
+
async function discoverChromeListeningPorts() {
|
|
107
44
|
if (process.platform === 'win32')
|
|
108
45
|
return [];
|
|
109
46
|
try {
|
|
@@ -130,7 +67,7 @@ export async function discoverChromeListeningPorts() {
|
|
|
130
67
|
* Discover Chrome processes launched with --remote-debugging-port flag.
|
|
131
68
|
* Returns http:// URLs for those endpoints.
|
|
132
69
|
*/
|
|
133
|
-
|
|
70
|
+
async function discoverChromeProcessCdpUrls() {
|
|
134
71
|
if (process.platform === 'win32')
|
|
135
72
|
return [];
|
|
136
73
|
try {
|
package/dist/browser/cdp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/browser/cdp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,gBAAgB,GAAG;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;CACxB,CAAC;AASF,
|
|
1
|
+
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/browser/cdp.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,4 @@ export declare function launchBrowser(options?: BrowserLaunchOptions): Promise<E
|
|
|
21
21
|
* Capture error artifacts (screenshot, HTML, trace) when feed fails
|
|
22
22
|
*/
|
|
23
23
|
export declare function captureErrorArtifacts(page: any, error: Error, feedType: string, screenshotDir: string): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Wrap feed execution with error artifact capture
|
|
26
|
-
*/
|
|
27
|
-
export declare function withErrorCapture<T>(fn: () => Promise<T>, page: any, feedType: string, screenshotDir: string): Promise<T>;
|
|
28
24
|
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/browser/launcher.ts"],"names":[],"mappings":"AACA;;;GAGG;AAOH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAYD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/browser/launcher.ts"],"names":[],"mappings":"AACA;;;GAGG;AAOH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAYD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,eAAe,CAAC,CA2F1B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAsEf"}
|
package/dist/browser/launcher.js
CHANGED
|
@@ -70,8 +70,18 @@ export async function launchBrowser(options = {}) {
|
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
72
|
catch (error) {
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
// The Chromium binary is present in the image but the runtime looked in the
|
|
74
|
+
// wrong directory — almost always a PLAYWRIGHT_BROWSERS_PATH mismatch between
|
|
75
|
+
// the install path and the lookup path (e.g. $HOME/.cache vs /ms-playwright).
|
|
76
|
+
if (error.message?.includes("Executable doesn't exist")) {
|
|
77
|
+
const browsersPath = process.env.PLAYWRIGHT_BROWSERS_PATH ?? '(unset → $HOME/.cache/ms-playwright)';
|
|
78
|
+
throw new Error(`Chromium binary not found at PLAYWRIGHT_BROWSERS_PATH=${browsersPath} — image install path mismatch.\n` +
|
|
79
|
+
'Ensure Chromium is installed into this exact directory (npx playwright install chromium) ' +
|
|
80
|
+
'and that PLAYWRIGHT_BROWSERS_PATH matches both at install time and at runtime.');
|
|
81
|
+
}
|
|
82
|
+
// The playwright/patchright package itself is not resolvable.
|
|
83
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
84
|
+
throw new Error('Playwright not installed.\n' +
|
|
75
85
|
'Install with: npm install -D playwright && npx playwright install chromium');
|
|
76
86
|
}
|
|
77
87
|
sdkLogger.error({ error }, '[BrowserLauncher] Failed to launch Playwright browser:');
|
|
@@ -145,16 +155,4 @@ export async function captureErrorArtifacts(page, error, feedType, screenshotDir
|
|
|
145
155
|
sdkLogger.error({ error: captureError }, '[BrowserLauncher] Failed to capture error artifacts');
|
|
146
156
|
}
|
|
147
157
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Wrap feed execution with error artifact capture
|
|
150
|
-
*/
|
|
151
|
-
export async function withErrorCapture(fn, page, feedType, screenshotDir) {
|
|
152
|
-
try {
|
|
153
|
-
return await fn();
|
|
154
|
-
}
|
|
155
|
-
catch (error) {
|
|
156
|
-
await captureErrorArtifacts(page, error, feedType, screenshotDir);
|
|
157
|
-
throw error;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
158
|
//# sourceMappingURL=launcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/browser/launcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/browser/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
type Browser = any;
|
|
6
6
|
type BrowserContext = any;
|
|
7
7
|
type Page = any;
|
|
8
|
-
|
|
8
|
+
interface StealthBrowserOptions {
|
|
9
9
|
headless?: boolean;
|
|
10
10
|
debug?: boolean;
|
|
11
11
|
userAgent?: string;
|
|
@@ -21,7 +21,7 @@ export interface StealthBrowserOptions {
|
|
|
21
21
|
password?: string;
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
interface StealthBrowser {
|
|
25
25
|
browser: Browser;
|
|
26
26
|
context: BrowserContext;
|
|
27
27
|
page: Page;
|
|
@@ -31,25 +31,5 @@ export interface StealthBrowser {
|
|
|
31
31
|
* Launch a stealth browser instance
|
|
32
32
|
*/
|
|
33
33
|
export declare function launchStealthBrowser(options?: StealthBrowserOptions): Promise<StealthBrowser>;
|
|
34
|
-
/**
|
|
35
|
-
* Human-like delay (50-200ms random)
|
|
36
|
-
*/
|
|
37
|
-
export declare function getRandomDelay(): number;
|
|
38
|
-
/**
|
|
39
|
-
* Random scroll behavior to mimic human browsing
|
|
40
|
-
*/
|
|
41
|
-
export declare function randomScroll(page: Page, direction?: 'down' | 'up'): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Wait with random duration to mimic human reading time
|
|
44
|
-
*/
|
|
45
|
-
export declare function humanWait(page: Page, minMs?: number, maxMs?: number): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Test bot detection on common detection sites
|
|
48
|
-
*/
|
|
49
|
-
export declare function testBotDetection(page: Page): Promise<{
|
|
50
|
-
site: string;
|
|
51
|
-
detected: boolean;
|
|
52
|
-
details?: string;
|
|
53
|
-
}[]>;
|
|
54
34
|
export {};
|
|
55
35
|
//# sourceMappingURL=stealth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth.d.ts","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,KAAK,OAAO,GAAG,GAAG,CAAC;AACnB,KAAK,cAAc,GAAG,GAAG,CAAC;AAC1B,KAAK,IAAI,GAAG,GAAG,CAAC;AAIhB,
|
|
1
|
+
{"version":3,"file":"stealth.d.ts","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,KAAK,OAAO,GAAG,GAAG,CAAC;AACnB,KAAK,cAAc,GAAG,GAAG,CAAC;AAC1B,KAAK,IAAI,GAAG,GAAG,CAAC;AAIhB,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAgBD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,cAAc,CAAC,CAgDzB"}
|
package/dist/browser/stealth.js
CHANGED
|
@@ -95,76 +95,4 @@ function getRealisticHeaders() {
|
|
|
95
95
|
'Cache-Control': 'max-age=0',
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
|
-
/**
|
|
99
|
-
* Human-like delay (50-200ms random)
|
|
100
|
-
*/
|
|
101
|
-
export function getRandomDelay() {
|
|
102
|
-
return Math.random() * (200 - 50) + 50;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Random scroll behavior to mimic human browsing
|
|
106
|
-
*/
|
|
107
|
-
export async function randomScroll(page, direction = 'down') {
|
|
108
|
-
const scrollY = (Math.floor(Math.random() * 500) + 200) * (direction === 'down' ? 1 : -1);
|
|
109
|
-
await page.evaluate((y) => {
|
|
110
|
-
window.scrollBy({
|
|
111
|
-
top: y,
|
|
112
|
-
behavior: 'smooth',
|
|
113
|
-
});
|
|
114
|
-
}, scrollY);
|
|
115
|
-
await page.waitForTimeout(1000 + Math.random() * 1000);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Wait with random duration to mimic human reading time
|
|
119
|
-
*/
|
|
120
|
-
export async function humanWait(page, minMs = 1000, maxMs = 3000) {
|
|
121
|
-
const delay = Math.random() * (maxMs - minMs) + minMs;
|
|
122
|
-
await page.waitForTimeout(delay);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Test bot detection on common detection sites
|
|
126
|
-
*/
|
|
127
|
-
export async function testBotDetection(page) {
|
|
128
|
-
const results = [];
|
|
129
|
-
try {
|
|
130
|
-
await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' });
|
|
131
|
-
await page.waitForTimeout(2000);
|
|
132
|
-
const webdriverDetected = await page.evaluate(() => {
|
|
133
|
-
return navigator.webdriver === true;
|
|
134
|
-
});
|
|
135
|
-
results.push({
|
|
136
|
-
site: 'bot.sannysoft.com',
|
|
137
|
-
detected: webdriverDetected,
|
|
138
|
-
details: `navigator.webdriver: ${webdriverDetected}`,
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
results.push({
|
|
143
|
-
site: 'bot.sannysoft.com',
|
|
144
|
-
detected: true,
|
|
145
|
-
details: `Error: ${error.message}`,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
await page.goto('https://arh.antoinevastel.com/bots/areyouheadless', {
|
|
150
|
-
waitUntil: 'networkidle',
|
|
151
|
-
});
|
|
152
|
-
await page.waitForTimeout(2000);
|
|
153
|
-
const headlessDetected = await page.textContent('body');
|
|
154
|
-
const isHeadless = headlessDetected?.includes('You are headless');
|
|
155
|
-
results.push({
|
|
156
|
-
site: 'arh.antoinevastel.com',
|
|
157
|
-
detected: isHeadless || false,
|
|
158
|
-
details: isHeadless ? 'Headless detected' : 'Not detected as headless',
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
results.push({
|
|
163
|
-
site: 'arh.antoinevastel.com',
|
|
164
|
-
detected: true,
|
|
165
|
-
details: `Error: ${error.message}`,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
return results;
|
|
169
|
-
}
|
|
170
98
|
//# sourceMappingURL=stealth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth.js","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stealth.js","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,17 +5,14 @@
|
|
|
5
5
|
* Two-layer cascade:
|
|
6
6
|
* 1. CDP — Playwright's connectOverCDP to user's real Chrome (default context).
|
|
7
7
|
* Works for network interception because we just open a tab and listen.
|
|
8
|
-
* 2. Playwright — launch headless browser
|
|
8
|
+
* 2. Playwright — launch headless browser (fallback).
|
|
9
9
|
*
|
|
10
10
|
* Both paths share the same intercept → scroll → parse pipeline.
|
|
11
|
-
* Fresh cookies are always captured and returned for persistence.
|
|
12
11
|
*/
|
|
13
|
-
import type {
|
|
12
|
+
import type { Page } from 'playwright';
|
|
14
13
|
export interface BrowserNetworkConfig {
|
|
15
14
|
/** URL patterns to intercept (glob or regex). Matched against response URLs. */
|
|
16
15
|
interceptPatterns: (string | RegExp)[];
|
|
17
|
-
/** Cookie domains required for auth (e.g., ['x.com', '.x.com']) */
|
|
18
|
-
authDomains: string[];
|
|
19
16
|
/** Maximum number of scroll iterations for pagination (default: 10) */
|
|
20
17
|
maxScrolls?: number;
|
|
21
18
|
/** Delay between scrolls in ms (default: 2000) */
|
|
@@ -29,7 +26,6 @@ export interface BrowserNetworkConfig {
|
|
|
29
26
|
}
|
|
30
27
|
export interface BrowserNetworkResult<TItem> {
|
|
31
28
|
items: TItem[];
|
|
32
|
-
cookies: Cookie[];
|
|
33
29
|
apiCallCount: number;
|
|
34
30
|
/** Which browser backend was used */
|
|
35
31
|
backend: 'cdp' | 'playwright';
|
|
@@ -37,20 +33,18 @@ export interface BrowserNetworkResult<TItem> {
|
|
|
37
33
|
export declare function browserNetworkSync<TItem>(opts: {
|
|
38
34
|
config: BrowserNetworkConfig;
|
|
39
35
|
url: string;
|
|
40
|
-
/** Stored cookies for Playwright fallback. Can be empty if CDP is expected. */
|
|
41
|
-
cookies: Cookie[];
|
|
42
36
|
parseResponse: (url: string, json: unknown) => TItem[];
|
|
43
37
|
triggerNextPage?: (page: Page) => Promise<void>;
|
|
44
38
|
checkAuth?: (page: Page) => Promise<boolean>;
|
|
45
39
|
/**
|
|
46
40
|
* CDP endpoint URL, 'auto' to auto-discover, or null/undefined to skip CDP.
|
|
47
|
-
* When set, CDP is tried first; if unavailable, falls back to Playwright
|
|
41
|
+
* When set, CDP is tried first; if unavailable, falls back to headless Playwright.
|
|
48
42
|
*/
|
|
49
43
|
cdpUrl?: string | 'auto' | null;
|
|
50
44
|
/**
|
|
51
45
|
* Device-bound managed --user-data-dir. When set, Playwright launches via
|
|
52
|
-
* launchPersistentContext and CDP is skipped —
|
|
53
|
-
* profile dir.
|
|
46
|
+
* launchPersistentContext and CDP is skipped — the session lives on disk in
|
|
47
|
+
* this profile dir.
|
|
54
48
|
*/
|
|
55
49
|
userDataDir?: string;
|
|
56
50
|
}): Promise<BrowserNetworkResult<TItem>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-network.d.ts","sourceRoot":"","sources":["../src/browser-network.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"browser-network.d.ts","sourceRoot":"","sources":["../src/browser-network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAA2B,IAAI,EAAY,MAAM,YAAY,CAAC;AAK1E,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,iBAAiB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK;IACzC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,KAAK,GAAG,YAAY,CAAC;CAC/B;AA6ID,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE;IACpD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CA8GvC"}
|
package/dist/browser-network.js
CHANGED
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* Two-layer cascade:
|
|
6
6
|
* 1. CDP — Playwright's connectOverCDP to user's real Chrome (default context).
|
|
7
7
|
* Works for network interception because we just open a tab and listen.
|
|
8
|
-
* 2. Playwright — launch headless browser
|
|
8
|
+
* 2. Playwright — launch headless browser (fallback).
|
|
9
9
|
*
|
|
10
10
|
* Both paths share the same intercept → scroll → parse pipeline.
|
|
11
|
-
* Fresh cookies are always captured and returned for persistence.
|
|
12
11
|
*/
|
|
13
12
|
import { resolveCdpUrl } from './browser/cdp.js';
|
|
14
13
|
import { captureErrorArtifacts, launchBrowser } from './browser/launcher.js';
|
|
@@ -19,18 +18,8 @@ const DEFAULT_CONFIG = {
|
|
|
19
18
|
responseTimeoutMs: 5000,
|
|
20
19
|
navigationTimeoutMs: 15000,
|
|
21
20
|
};
|
|
22
|
-
async function acquireForNetworkSync(cdpUrl,
|
|
23
|
-
//
|
|
24
|
-
// cookie set and didn't pin a specific CDP endpoint, force the headless
|
|
25
|
-
// Playwright + addCookies path. Otherwise an auto-CDP discovery would
|
|
26
|
-
// attach to the user's running Chrome (e.g. M144 remote-debugging
|
|
27
|
-
// toggle) and silently bypass the cookies we just decrypted — fine in
|
|
28
|
-
// the sense that it'd still scrape, but it'd be running through the
|
|
29
|
-
// user's live session instead of the isolated mirror we promised.
|
|
30
|
-
if (cookies.length > 0 && cdpUrl === 'auto') {
|
|
31
|
-
cdpUrl = null;
|
|
32
|
-
}
|
|
33
|
-
// --- Persistent profile path: cookies live on disk ---
|
|
21
|
+
async function acquireForNetworkSync(cdpUrl, stealth, userDataDir) {
|
|
22
|
+
// --- Persistent profile path: session lives on disk ---
|
|
34
23
|
if (userDataDir) {
|
|
35
24
|
const playwrightModule = 'playwright';
|
|
36
25
|
const { chromium } = await import(/* @vite-ignore */ playwrightModule);
|
|
@@ -41,12 +30,9 @@ async function acquireForNetworkSync(cdpUrl, cookies, stealth, userDataDir) {
|
|
|
41
30
|
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'],
|
|
42
31
|
}));
|
|
43
32
|
try {
|
|
44
|
-
if (cookies.length > 0) {
|
|
45
|
-
await context.addCookies(cookies);
|
|
46
|
-
}
|
|
47
33
|
const pages = context.pages();
|
|
48
34
|
const page = pages.length > 0 ? pages[0] : await context.newPage();
|
|
49
|
-
sdkLogger.info({ userDataDir
|
|
35
|
+
sdkLogger.info({ userDataDir }, '[BrowserNetwork] Launched with persistent --user-data-dir');
|
|
50
36
|
return {
|
|
51
37
|
browser: (context.browser() ?? null),
|
|
52
38
|
context,
|
|
@@ -57,8 +43,8 @@ async function acquireForNetworkSync(cdpUrl, cookies, stealth, userDataDir) {
|
|
|
57
43
|
};
|
|
58
44
|
}
|
|
59
45
|
catch (err) {
|
|
60
|
-
//
|
|
61
|
-
//
|
|
46
|
+
// newPage failed — close the persistent context so we don't leak a
|
|
47
|
+
// long-lived Chromium process holding the profile lock.
|
|
62
48
|
await context.close().catch(() => { });
|
|
63
49
|
throw err;
|
|
64
50
|
}
|
|
@@ -109,14 +95,10 @@ async function acquireForNetworkSync(cdpUrl, cookies, stealth, userDataDir) {
|
|
|
109
95
|
sdkLogger.info({ error: err.message }, '[BrowserNetwork] CDP not available, falling back to Playwright');
|
|
110
96
|
}
|
|
111
97
|
}
|
|
112
|
-
// --- Layer 2: Playwright
|
|
98
|
+
// --- Layer 2: Playwright headless fallback ---
|
|
113
99
|
const { browser, screenshotDir } = await launchBrowser({ stealth });
|
|
114
100
|
try {
|
|
115
101
|
const context = (await browser.newContext());
|
|
116
|
-
if (cookies.length > 0) {
|
|
117
|
-
await context.addCookies(cookies);
|
|
118
|
-
sdkLogger.info({ count: cookies.length }, '[BrowserNetwork] Loaded persisted cookies');
|
|
119
|
-
}
|
|
120
102
|
const page = await context.newPage();
|
|
121
103
|
return {
|
|
122
104
|
browser: browser,
|
|
@@ -142,7 +124,7 @@ export async function browserNetworkSync(opts) {
|
|
|
142
124
|
// Pre-compile string glob patterns into RegExp for hot-path matching
|
|
143
125
|
const matchers = cfg.interceptPatterns.map((p) => typeof p === 'string' ? compileGlob(p) : p);
|
|
144
126
|
const matchesUrl = (url) => matchers.some((re) => re.test(url));
|
|
145
|
-
const acquired = await acquireForNetworkSync(opts.userDataDir ? null : (opts.cdpUrl ?? null),
|
|
127
|
+
const acquired = await acquireForNetworkSync(opts.userDataDir ? null : (opts.cdpUrl ?? null), cfg.stealth ?? false, opts.userDataDir);
|
|
146
128
|
const { context, page, backend, ownsBrowser, browser, screenshotDir } = acquired;
|
|
147
129
|
try {
|
|
148
130
|
// Accumulates promises from async response handlers between drain points
|
|
@@ -173,7 +155,7 @@ export async function browserNetworkSync(opts) {
|
|
|
173
155
|
if (!authed) {
|
|
174
156
|
const msg = backend === 'cdp'
|
|
175
157
|
? 'Authentication check failed via CDP — you may not be logged in to this site in Chrome'
|
|
176
|
-
: 'Authentication failed —
|
|
158
|
+
: 'Authentication failed — the browser session is not logged in. Re-run: lobu memory browser-auth';
|
|
177
159
|
throw new Error(msg);
|
|
178
160
|
}
|
|
179
161
|
}
|
|
@@ -202,9 +184,7 @@ export async function browserNetworkSync(opts) {
|
|
|
202
184
|
sdkLogger.info({ scroll: scroll + 1, newItems: items.length - prevCount, total: items.length }, '[BrowserNetwork] Scroll pagination');
|
|
203
185
|
prevCount = items.length;
|
|
204
186
|
}
|
|
205
|
-
|
|
206
|
-
const cookies = await context.cookies(cfg.authDomains.map((d) => (d.startsWith('http') ? d : `https://${d}`)));
|
|
207
|
-
return { items, cookies, apiCallCount, backend };
|
|
187
|
+
return { items, apiCallCount, backend };
|
|
208
188
|
}
|
|
209
189
|
catch (error) {
|
|
210
190
|
if (page) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-network.js","sourceRoot":"","sources":["../src/browser-network.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"browser-network.js","sourceRoot":"","sources":["../src/browser-network.ts"],"names":[],"mappings":"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"}
|