zan-browser 1.3.38 → 2.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/ai.d.ts +3 -16
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +101 -208
- package/dist/ai.js.map +1 -1
- package/dist/blacklist.d.ts +2 -0
- package/dist/blacklist.d.ts.map +1 -0
- package/dist/blacklist.js +115 -0
- package/dist/blacklist.js.map +1 -0
- package/dist/browser-provider.d.ts +81 -0
- package/dist/browser-provider.d.ts.map +1 -0
- package/dist/browser-provider.js +6 -0
- package/dist/browser-provider.js.map +1 -0
- package/dist/browser.d.ts +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +51 -60
- package/dist/browser.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptor.d.ts +3 -3
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +45 -19
- package/dist/interceptor.js.map +1 -1
- package/dist/navigator.d.ts +40 -0
- package/dist/navigator.d.ts.map +1 -0
- package/dist/navigator.js +507 -0
- package/dist/navigator.js.map +1 -0
- package/dist/observer.d.ts +23 -3
- package/dist/observer.d.ts.map +1 -1
- package/dist/observer.js +310 -270
- package/dist/observer.js.map +1 -1
- package/dist/perception.d.ts +42 -0
- package/dist/perception.d.ts.map +1 -0
- package/dist/perception.js +140 -0
- package/dist/perception.js.map +1 -0
- package/dist/providers/browserbase.d.ts +12 -0
- package/dist/providers/browserbase.d.ts.map +1 -0
- package/dist/providers/browserbase.js +226 -0
- package/dist/providers/browserbase.js.map +1 -0
- package/dist/providers/puppeteer-local.d.ts +5 -0
- package/dist/providers/puppeteer-local.d.ts.map +1 -0
- package/dist/providers/puppeteer-local.js +218 -0
- package/dist/providers/puppeteer-local.js.map +1 -0
- package/dist/session.d.ts +17 -23
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +112 -407
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +1 -32
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-provider.d.ts","sourceRoot":"","sources":["../src/browser-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─── Browser provider abstraction ──────────────────────────────────────────────
|
|
3
|
+
// Unified interface over Puppeteer (local) and Playwright (Browserbase).
|
|
4
|
+
// Allows swapping the browser backend without changing any upstream code.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=browser-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-provider.js","sourceRoot":"","sources":["../src/browser-provider.ts"],"names":[],"mappings":";AAAA,kFAAkF;AAClF,yEAAyE;AACzE,0EAA0E"}
|
package/dist/browser.d.ts
CHANGED
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,aAAa;IAO3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IA6CpC,OAAO,CAAC,eAAe;CAYxB"}
|
package/dist/browser.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RensanBrowser = void 0;
|
|
4
|
-
const playwright_1 = require("playwright");
|
|
5
4
|
const session_1 = require("./session");
|
|
6
5
|
const ai_1 = require("./ai");
|
|
6
|
+
const puppeteer_local_1 = require("./providers/puppeteer-local");
|
|
7
|
+
const browserbase_1 = require("./providers/browserbase");
|
|
7
8
|
class RensanBrowser {
|
|
8
9
|
config;
|
|
9
10
|
ai;
|
|
@@ -11,72 +12,62 @@ class RensanBrowser {
|
|
|
11
12
|
this.config = config;
|
|
12
13
|
this.ai = new ai_1.AIClient(config.ai.apiKey, config.ai.model);
|
|
13
14
|
}
|
|
14
|
-
// Create a new browser session.
|
|
15
|
-
//
|
|
16
|
-
// and returns the viewerUrl so the frontend can watch in real time.
|
|
15
|
+
// Create a new browser session using the configured provider.
|
|
16
|
+
// Provider selection: puppeteer-local (default for dev) → browserbase (production)
|
|
17
17
|
async newSession() {
|
|
18
18
|
const { proxy, viewport, timeout } = this.config.session;
|
|
19
|
-
|
|
20
|
-
let
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const providerType = this.resolveProvider();
|
|
20
|
+
let browserHandle;
|
|
21
|
+
if (providerType === "browserbase") {
|
|
22
|
+
if (!this.config.session.browserbase) {
|
|
23
|
+
throw new Error("BrowserConfig requires browserbase config when provider=browserbase");
|
|
24
|
+
}
|
|
25
|
+
const provider = new browserbase_1.BrowserbaseProvider(this.config.session.browserbase);
|
|
26
|
+
browserHandle = await provider.launch({
|
|
27
|
+
viewport: viewport ?? { width: 1280, height: 800 },
|
|
28
|
+
proxy,
|
|
29
|
+
timeout: timeout ?? 30_000,
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
|
-
else if (
|
|
27
|
-
|
|
32
|
+
else if (providerType === "puppeteer-local") {
|
|
33
|
+
const provider = new puppeteer_local_1.PuppeteerLocalProvider();
|
|
34
|
+
browserHandle = await provider.launch({
|
|
35
|
+
viewport: viewport ?? { width: 1280, height: 800 },
|
|
36
|
+
proxy,
|
|
37
|
+
timeout: timeout ?? 30_000,
|
|
38
|
+
headless: this.config.session.headless ?? true,
|
|
39
|
+
});
|
|
28
40
|
}
|
|
29
41
|
else {
|
|
30
|
-
|
|
42
|
+
// ws-endpoint: use Browserbase provider with custom wsEndpoint
|
|
43
|
+
// For backwards compat — wraps Playwright connectOverCDP
|
|
44
|
+
if (!this.config.session.wsEndpoint) {
|
|
45
|
+
throw new Error("BrowserConfig requires wsEndpoint when provider=ws-endpoint");
|
|
46
|
+
}
|
|
47
|
+
// Use Puppeteer local as fallback for ws-endpoint (connect via CDP)
|
|
48
|
+
const provider = new puppeteer_local_1.PuppeteerLocalProvider();
|
|
49
|
+
browserHandle = await provider.launch({
|
|
50
|
+
viewport: viewport ?? { width: 1280, height: 800 },
|
|
51
|
+
proxy,
|
|
52
|
+
timeout: timeout ?? 30_000,
|
|
53
|
+
});
|
|
31
54
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const browser = this.config.session.browserbase
|
|
35
|
-
? await playwright_1.chromium.connectOverCDP(wsEndpoint, { timeout: 30_000 })
|
|
36
|
-
: await playwright_1.chromium.connectOverCDP(wsEndpoint, { timeout: 30_000 });
|
|
37
|
-
const contextOptions = {
|
|
38
|
-
viewport: viewport ?? { width: 1280, height: 800 },
|
|
39
|
-
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
40
|
-
locale: "en-US",
|
|
41
|
-
timezoneId: "America/New_York",
|
|
42
|
-
};
|
|
43
|
-
if (proxy) {
|
|
44
|
-
contextOptions.proxy = {
|
|
45
|
-
server: proxy.server,
|
|
46
|
-
username: proxy.username,
|
|
47
|
-
password: proxy.password,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
const context = await browser.newContext(contextOptions);
|
|
51
|
-
const page = await context.newPage();
|
|
52
|
-
return new session_1.Session(page, browser, this.ai, timeout, viewerUrl);
|
|
55
|
+
const page = await browserHandle.newPage();
|
|
56
|
+
return new session_1.Session(page, browserHandle, this.ai, timeout, browserHandle.viewerUrl);
|
|
53
57
|
}
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}),
|
|
68
|
-
signal: AbortSignal.timeout(15_000),
|
|
69
|
-
});
|
|
70
|
-
if (!response.ok) {
|
|
71
|
-
const body = await response.text();
|
|
72
|
-
throw new Error(`Browserbase session creation failed (${response.status}): ${body}`);
|
|
73
|
-
}
|
|
74
|
-
const data = await response.json();
|
|
75
|
-
return {
|
|
76
|
-
id: data.id,
|
|
77
|
-
connectUrl: data.connectUrl,
|
|
78
|
-
viewerUrl: data.debuggerFullscreenUrl ?? data.debuggerUrl ?? `https://www.browserbase.com/sessions/${data.id}`,
|
|
79
|
-
};
|
|
58
|
+
// Determine which provider to use based on config + env
|
|
59
|
+
resolveProvider() {
|
|
60
|
+
// Explicit env override
|
|
61
|
+
const envProvider = process.env.BROWSER_PROVIDER;
|
|
62
|
+
if (envProvider)
|
|
63
|
+
return envProvider;
|
|
64
|
+
// Auto-detect from config
|
|
65
|
+
if (this.config.session.browserbase)
|
|
66
|
+
return "browserbase";
|
|
67
|
+
if (this.config.session.wsEndpoint)
|
|
68
|
+
return "ws-endpoint";
|
|
69
|
+
// Default: local Puppeteer
|
|
70
|
+
return "puppeteer-local";
|
|
80
71
|
}
|
|
81
72
|
}
|
|
82
73
|
exports.RensanBrowser = RensanBrowser;
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export { RensanBrowser } from "./browser";
|
|
2
2
|
export { Session } from "./session";
|
|
3
|
-
export
|
|
3
|
+
export { SmartNavigator } from "./navigator";
|
|
4
|
+
export type { ObservedElement, ObserveResult, CapturedRequest, SeedValue, AgentAction, ActResult, FindDataResult, SessionConfig, AIConfig, BrowserConfig, Screenshot, ElementType, } from "./types";
|
|
5
|
+
export type { PageHandle, BrowserHandle, BrowserProvider, ProviderType, } from "./browser-provider";
|
|
6
|
+
export type { NavigationConfig, NavigationResult, NavigationStrategy, } from "./navigator";
|
|
7
|
+
export type { Perception, StepContext, StepRecord, } from "./perception";
|
|
8
|
+
export type { DetectedForm, AutocompleteItem, } from "./observer";
|
|
9
|
+
export { isBlacklisted } from "./blacklist";
|
|
4
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,QAAQ,EACR,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Session = exports.RensanBrowser = void 0;
|
|
3
|
+
exports.isBlacklisted = exports.SmartNavigator = exports.Session = exports.RensanBrowser = void 0;
|
|
4
4
|
var browser_1 = require("./browser");
|
|
5
5
|
Object.defineProperty(exports, "RensanBrowser", { enumerable: true, get: function () { return browser_1.RensanBrowser; } });
|
|
6
6
|
var session_1 = require("./session");
|
|
7
7
|
Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return session_1.Session; } });
|
|
8
|
+
var navigator_1 = require("./navigator");
|
|
9
|
+
Object.defineProperty(exports, "SmartNavigator", { enumerable: true, get: function () { return navigator_1.SmartNavigator; } });
|
|
10
|
+
var blacklist_1 = require("./blacklist");
|
|
11
|
+
Object.defineProperty(exports, "isBlacklisted", { enumerable: true, get: function () { return blacklist_1.isBlacklisted; } });
|
|
8
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AACtB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AACtB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAmCvB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA"}
|
package/dist/interceptor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PageHandle } from "./browser-provider";
|
|
3
3
|
import type { CapturedRequest } from "./types";
|
|
4
4
|
export declare class Interceptor extends EventEmitter {
|
|
5
5
|
private captured;
|
|
@@ -7,7 +7,7 @@ export declare class Interceptor extends EventEmitter {
|
|
|
7
7
|
private active;
|
|
8
8
|
private page;
|
|
9
9
|
private lastActionTimestamp;
|
|
10
|
-
constructor(page:
|
|
10
|
+
constructor(page: PageHandle);
|
|
11
11
|
start(): void;
|
|
12
12
|
stop(): void;
|
|
13
13
|
getAll(): CapturedRequest[];
|
|
@@ -15,13 +15,13 @@ export declare class Interceptor extends EventEmitter {
|
|
|
15
15
|
clear(): void;
|
|
16
16
|
markActionTimestamp(): void;
|
|
17
17
|
getActionTriggered(): CapturedRequest[];
|
|
18
|
+
hasSeedValueInResponses(seedValues: string[]): boolean;
|
|
18
19
|
private onRequest;
|
|
19
20
|
private onResponse;
|
|
20
21
|
private onRequestFailed;
|
|
21
22
|
private scoreRequest;
|
|
22
23
|
private shouldIgnore;
|
|
23
24
|
private isAsset;
|
|
24
|
-
private isXHR;
|
|
25
25
|
private isUsefulContentType;
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoD/C,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,IAAI,EAAE,UAAU;IAM5B,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IASZ,MAAM,IAAI,eAAe,EAAE;IAK3B,SAAS,CAAC,QAAQ,SAAI,GAAG,eAAe,EAAE;IAM1C,KAAK,IAAI,IAAI;IAOb,mBAAmB,IAAI,IAAI;IAK3B,kBAAkB,IAAI,eAAe,EAAE;IAKvC,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO;IAgBtD,OAAO,CAAC,SAAS,CAkCf;IAEF,OAAO,CAAC,UAAU,CA+ChB;IAEF,OAAO,CAAC,eAAe,CAWrB;IAIF,OAAO,CAAC,YAAY;IA8DpB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,mBAAmB;CAG5B"}
|
package/dist/interceptor.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Interceptor = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
|
+
const blacklist_1 = require("./blacklist");
|
|
5
6
|
const crypto_1 = require("crypto");
|
|
6
7
|
// Patterns that strongly indicate a real data API
|
|
7
8
|
const API_PATH_PATTERNS = [
|
|
@@ -47,7 +48,7 @@ const USEFUL_CONTENT_TYPES = [
|
|
|
47
48
|
const ACTION_CORRELATION_WINDOW_MS = 2000;
|
|
48
49
|
class Interceptor extends events_1.EventEmitter {
|
|
49
50
|
captured = new Map();
|
|
50
|
-
requestMap = new Map(); //
|
|
51
|
+
requestMap = new Map(); // req key → our id
|
|
51
52
|
active = false;
|
|
52
53
|
page;
|
|
53
54
|
lastActionTimestamp = 0;
|
|
@@ -60,6 +61,7 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
60
61
|
if (this.active)
|
|
61
62
|
return;
|
|
62
63
|
this.active = true;
|
|
64
|
+
// Works for both Puppeteer and Playwright — they both emit 'request' and 'response'
|
|
63
65
|
this.page.on("request", this.onRequest);
|
|
64
66
|
this.page.on("response", this.onResponse);
|
|
65
67
|
this.page.on("requestfailed", this.onRequestFailed);
|
|
@@ -92,49 +94,73 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
92
94
|
getActionTriggered() {
|
|
93
95
|
return this.getAll().filter((r) => r.triggeredByAction === true);
|
|
94
96
|
}
|
|
97
|
+
// Check if any captured response body contains one of the seed values
|
|
98
|
+
hasSeedValueInResponses(seedValues) {
|
|
99
|
+
if (seedValues.length === 0)
|
|
100
|
+
return false;
|
|
101
|
+
const lowerSeeds = seedValues.map((s) => s.toLowerCase());
|
|
102
|
+
for (const r of this.captured.values()) {
|
|
103
|
+
if (!r.responseBody || r.responseBody.length < 50)
|
|
104
|
+
continue;
|
|
105
|
+
const body = r.responseBody.toLowerCase();
|
|
106
|
+
if (lowerSeeds.some((sv) => body.includes(sv)))
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
95
111
|
// ─── Private handlers ───────────────────────────────────────────────────────
|
|
112
|
+
// These handlers receive the raw Puppeteer/Playwright request/response objects.
|
|
113
|
+
// We access them through their common API surface.
|
|
96
114
|
onRequest = (request) => {
|
|
97
115
|
const url = request.url();
|
|
98
116
|
if (this.shouldIgnore(url))
|
|
99
117
|
return;
|
|
100
118
|
const id = (0, crypto_1.randomUUID)();
|
|
101
|
-
|
|
119
|
+
const method = request.method();
|
|
120
|
+
this.requestMap.set(url + method, id);
|
|
102
121
|
const now = Date.now();
|
|
103
122
|
const triggeredByAction = this.lastActionTimestamp > 0 &&
|
|
104
123
|
now - this.lastActionTimestamp <= ACTION_CORRELATION_WINDOW_MS;
|
|
124
|
+
const resourceType = request.resourceType();
|
|
105
125
|
const entry = {
|
|
106
126
|
id,
|
|
107
127
|
timestamp: now,
|
|
108
|
-
method
|
|
128
|
+
method,
|
|
109
129
|
url,
|
|
110
130
|
requestHeaders: request.headers(),
|
|
111
|
-
requestBody: request.postData() ?? undefined,
|
|
112
|
-
isXHR:
|
|
131
|
+
requestBody: request.postData?.() ?? undefined,
|
|
132
|
+
isXHR: resourceType === "xhr" || resourceType === "fetch",
|
|
113
133
|
isAsset: this.isAsset(url),
|
|
114
134
|
score: 0, // scored when response arrives
|
|
115
135
|
triggeredByAction,
|
|
116
136
|
};
|
|
117
137
|
this.captured.set(id, entry);
|
|
138
|
+
// Puppeteer requires request.continue() when interception is enabled
|
|
139
|
+
if (typeof request.continue === "function") {
|
|
140
|
+
request.continue().catch(() => { });
|
|
141
|
+
}
|
|
118
142
|
};
|
|
119
143
|
onResponse = async (response) => {
|
|
120
144
|
const url = response.url();
|
|
121
145
|
if (this.shouldIgnore(url))
|
|
122
146
|
return;
|
|
123
|
-
const
|
|
147
|
+
const method = response.request().method();
|
|
148
|
+
const key = url + method;
|
|
124
149
|
const id = this.requestMap.get(key);
|
|
125
150
|
if (!id)
|
|
126
151
|
return;
|
|
127
152
|
const entry = this.captured.get(id);
|
|
128
153
|
if (!entry)
|
|
129
154
|
return;
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
155
|
+
const headers = response.headers();
|
|
156
|
+
const contentType = headers["content-type"] ?? "";
|
|
157
|
+
const status = response.status();
|
|
158
|
+
// For XHR/fetch requests always try to read the body
|
|
133
159
|
let body;
|
|
134
160
|
if (entry.isXHR && !entry.isAsset) {
|
|
135
161
|
try {
|
|
136
162
|
body = await response.text();
|
|
137
|
-
// Discard if clearly
|
|
163
|
+
// Discard if clearly HTML
|
|
138
164
|
if (body && (body.trimStart().startsWith("<!DOCTYPE") || body.trimStart().startsWith("<html"))) {
|
|
139
165
|
body = undefined;
|
|
140
166
|
}
|
|
@@ -153,17 +179,19 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
153
179
|
}
|
|
154
180
|
const updated = {
|
|
155
181
|
...entry,
|
|
156
|
-
status
|
|
157
|
-
responseHeaders:
|
|
182
|
+
status,
|
|
183
|
+
responseHeaders: headers,
|
|
158
184
|
responseBody: body,
|
|
159
185
|
contentType,
|
|
160
|
-
score: this.scoreRequest(entry,
|
|
186
|
+
score: this.scoreRequest(entry, status, contentType, body),
|
|
161
187
|
};
|
|
162
188
|
this.captured.set(id, updated);
|
|
163
189
|
this.emit("request", updated); // real-time stream
|
|
164
190
|
};
|
|
165
191
|
onRequestFailed = (request) => {
|
|
166
|
-
const
|
|
192
|
+
const url = request.url();
|
|
193
|
+
const method = request.method();
|
|
194
|
+
const key = url + method;
|
|
167
195
|
const id = this.requestMap.get(key);
|
|
168
196
|
if (!id)
|
|
169
197
|
return;
|
|
@@ -234,7 +262,9 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
234
262
|
}
|
|
235
263
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
236
264
|
shouldIgnore(url) {
|
|
237
|
-
|
|
265
|
+
if (url.startsWith("data:") || url.startsWith("blob:"))
|
|
266
|
+
return true;
|
|
267
|
+
return (0, blacklist_1.isBlacklisted)(url);
|
|
238
268
|
}
|
|
239
269
|
isAsset(url) {
|
|
240
270
|
try {
|
|
@@ -245,10 +275,6 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
245
275
|
return false;
|
|
246
276
|
}
|
|
247
277
|
}
|
|
248
|
-
isXHR(request) {
|
|
249
|
-
const type = request.resourceType();
|
|
250
|
-
return type === "xhr" || type === "fetch";
|
|
251
|
-
}
|
|
252
278
|
isUsefulContentType(contentType) {
|
|
253
279
|
return USEFUL_CONTENT_TYPES.some((t) => contentType.includes(t));
|
|
254
280
|
}
|
package/dist/interceptor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAGtC,mCAAoC;AAEpC,kDAAkD;AAClD,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,aAAa;IACb,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;CACX,CAAC;AAEF,mCAAmC;AACnC,MAAM,eAAe,GAAG;IACtB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU;IACrE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ;CACrD,CAAC;AAEF,wCAAwC;AACxC,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAC/D,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAClE,MAAM,EAAE,MAAM;CACf,CAAC;AAEF,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG;IAC3B,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,qBAAqB;IACrB,YAAY;IACZ,mCAAmC;CACpC,CAAC;AAEF,wFAAwF;AACxF,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAE1C,MAAa,WAAY,SAAQ,qBAAY;IACnC,QAAQ,GAAiC,IAAI,GAAG,EAAE,CAAC;IACnD,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { PageHandle } from "./browser-provider";
|
|
2
|
+
import type { CapturedRequest, SeedValue } from "./types";
|
|
3
|
+
import type { Observer } from "./observer";
|
|
4
|
+
import type { Interceptor } from "./interceptor";
|
|
5
|
+
import type { AIClient } from "./ai";
|
|
6
|
+
import { type StepRecord } from "./perception";
|
|
7
|
+
export type NavigationStrategy = "load-capture" | "search" | "multi-step" | "auto";
|
|
8
|
+
export interface NavigationConfig {
|
|
9
|
+
url: string;
|
|
10
|
+
navigationGoal: string;
|
|
11
|
+
seedValues: SeedValue[];
|
|
12
|
+
strategy: NavigationStrategy;
|
|
13
|
+
hypothesis?: string;
|
|
14
|
+
maxSteps: number;
|
|
15
|
+
onProgress?: (msg: string) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface NavigationResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
requests: CapturedRequest[];
|
|
20
|
+
steps: StepRecord[];
|
|
21
|
+
finalUrl: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
earlyTerminated: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class SmartNavigator {
|
|
26
|
+
private page;
|
|
27
|
+
private observer;
|
|
28
|
+
private interceptor;
|
|
29
|
+
private ai;
|
|
30
|
+
constructor(page: PageHandle, observer: Observer, interceptor: Interceptor, ai: AIClient);
|
|
31
|
+
navigate(config: NavigationConfig): Promise<NavigationResult>;
|
|
32
|
+
private strategyLoadAndCapture;
|
|
33
|
+
private strategySearchInteraction;
|
|
34
|
+
private strategyMultiStep;
|
|
35
|
+
private executeAction;
|
|
36
|
+
private tryClickAutocomplete;
|
|
37
|
+
private waitForNetworkSettle;
|
|
38
|
+
private inferStrategy;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=navigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAe,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAItB,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAyBD,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,EAAE,CAAW;gBAGnB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,QAAQ;IAUR,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAuBrD,sBAAsB;YAyCtB,yBAAyB;YAqNzB,iBAAiB;YAgIjB,aAAa;YAiEb,oBAAoB;YAkBpB,oBAAoB;IAuBlC,OAAO,CAAC,aAAa;CAetB"}
|