b4n1-web 0.7.0 → 0.9.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/README.md CHANGED
@@ -1,146 +1,108 @@
1
1
  # B4n1Web JavaScript/TypeScript SDK
2
2
 
3
- <p align="center">
4
- <a href="https://www.npmjs.com/package/b4n1-web"><img src="https://img.shields.io/npm/v/b4n1-web.svg" alt="NPM version"></a>
5
- <a href="https://www.npmjs.com/package/b4n1-web"><img src="https://img.shields.io/npm/dt/b4n1-web.svg" alt="NPM downloads"></a>
6
- <a href="https://github.com/B4N1-com/b4n1-web"><img src="https://img.shields.io/github/stars/B4N1-com/b4n1-web?style=flat" alt="GitHub stars"></a>
7
- </p>
3
+ [![npm version](https://badge.fury.io/js/b4n1-web.svg)](https://www.npmjs.com/package/b4n1-web)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
+ [![Node.js 18+](https://img.shields.io/badge/node-%3E%3D18-blue.svg)](https://nodejs.org/)
8
6
 
9
- TypeScript/JavaScript bindings for B4n1Web: The Agentic Browser Engine.
7
+ > Ultra-lightweight agentic browser engine with bundled binary.
10
8
 
11
- ## Installation
12
-
13
- ### 1. Install the B4n1Web Binary
14
-
15
- ```bash
16
- curl -sL https://github.com/B4N1-com/b4n1-web/releases/latest/download/b4n1web-v0.6.2-flat.tar.gz | tar -xz && ./b4n1web --version
17
- ```
18
-
19
- ### 2. Install the JavaScript SDK
9
+ ## Install
20
10
 
21
11
  ```bash
22
12
  npm install b4n1-web
23
13
  ```
24
14
 
25
- Or with yarn:
26
-
27
- ```bash
28
- yarn add b4n1-web
29
- ```
30
-
31
- Or with pnpm:
32
-
33
- ```bash
34
- pnpm add b4n1-web
35
- ```
15
+ Binary is bundled — no separate installation needed.
36
16
 
37
17
  ## Quick Start
38
18
 
39
19
  ```typescript
40
- import { AgentBrowser, BrowserMode, Page } from 'b4n1-web';
20
+ import { AgentBrowser, BrowserMode } from 'b4n1-web';
41
21
 
42
- // Create a browser instance
43
22
  const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
44
-
45
- // Navigate to a page
46
23
  const page = await browser.goto('https://example.com');
24
+ console.log(page.markdown);
25
+ console.log(`${page.links.length} links found`);
26
+ browser.close();
27
+ ```
47
28
 
48
- // Access structured data
49
- console.log('Page content:', page.markdown);
50
- console.log('Found', page.links.length, 'links');
51
-
52
- // Extract main content
53
- const mainContent = page.getMainContent();
54
- console.log('Main content:', mainContent.substring(0, 200) + '...');
29
+ ## Page API
55
30
 
56
- // Find specific links
57
- const githubLinks = page.findLinksByText('github');
58
- console.log('GitHub links:', githubLinks);
31
+ ```typescript
32
+ page.url // string
33
+ page.markdown // string
34
+ page.links // string[]
35
+ page.screenshot // string | undefined
59
36
 
60
- // Close browser when done
61
- browser.close();
37
+ page.getMainContent() // string: content without headers
38
+ page.findLinksByText("more") // string[]: matching links
62
39
  ```
63
40
 
64
41
  ## Browser Modes
65
42
 
66
- ### Light Mode (Default)
43
+ | Mode | Description |
44
+ |------|-------------|
45
+ | `BrowserMode.LIGHT` | HTTP + HTML parsing |
46
+ | `BrowserMode.JS` | Light + script extraction |
47
+ | `BrowserMode.RENDER` | Full Chromium + screenshots |
67
48
 
68
- - **Use case**: Reading articles, scraping static content, extracting links
69
- - **Performance**: < 15MB RAM, instant startup
70
- - **Capabilities**: HTML parsing, markdown conversion, link extraction
71
- - **Limitations**: No JavaScript execution
49
+ ## Security
72
50
 
73
51
  ```typescript
74
- const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
75
- ```
52
+ import { SecurityShield } from 'b4n1-web';
76
53
 
77
- ### JS Mode
54
+ const shield = new SecurityShield();
55
+ shield.markDomain('evil.com', false);
56
+ const { isSafe, needsApiCheck } = shield.isUrlSafe('https://evil.com');
57
+ ```
78
58
 
79
- - **Use case**: Extracting JavaScript from pages, SPA analysis
80
- - **Performance**: Same as Light, instant startup
81
- - **Capabilities**: HTML parsing + JavaScript tag extraction
59
+ ## Error Handling
82
60
 
83
61
  ```typescript
84
- const browser = new AgentBrowser({ mode: BrowserMode.JS });
62
+ import { BinaryNotFoundError } from 'b4n1-web';
63
+
64
+ try {
65
+ const browser = new AgentBrowser();
66
+ } catch (e) {
67
+ if (e instanceof BinaryNotFoundError) {
68
+ console.error('Install binary: curl -sL https://web.b4n1.com/install | bash');
69
+ }
70
+ }
85
71
  ```
86
72
 
87
- ### Render Mode (Coming Soon)
88
-
89
- - **Use case**: SPAs, form filling, visual verification, E2E testing
90
- - **Status**: Coming in v0.3.0
91
-
92
- ## API Reference
93
-
94
- ### AgentBrowser
95
-
96
- Main browser class for web automation.
97
-
98
- #### Constructor Options
99
-
100
- - `mode`: BrowserMode.LIGHT, BrowserMode.JS, or BrowserMode.RENDER
101
- - `timeout`: Request timeout in seconds (default: 30)
102
- - `userAgent`: Custom user agent string
103
-
104
- #### Methods
105
-
106
- - `goto(url: string)`: Navigate to URL and return structured page data
107
- - `close()`: Close the browser session
108
-
109
- ### Page
110
-
111
- Structured data from a web page.
112
-
113
- #### Properties
114
-
115
- - `url: string`: The page URL
116
- - `markdown: string`: Clean markdown content
117
- - `links: string[]`: Extracted links
118
- - `screenshot?: string`: Base64-encoded screenshot (render mode only)
119
-
120
- #### Methods
121
-
122
- - `getMainContent()`: Extract main content, skipping headers/footers
123
- - `findLinksByText(text: string)`: Find links containing specific text
124
-
125
- ## SecurityShield
126
-
127
- Optional security validation with caching:
73
+ ## Context Manager
128
74
 
129
75
  ```typescript
130
- import { SecurityShield, navigate } from 'b4n1-web';
131
-
132
- // With security check
133
- const result = await navigate('https://example.com');
134
-
135
- // With custom shield
136
- const shield = new SecurityShield({ cacheDays: 30 });
137
- const { isSafe, needsApiCheck } = shield.isUrlSafe('https://example.com');
76
+ import { AgentBrowser } from 'b4n1-web';
77
+
78
+ async function main() {
79
+ const browser = new AgentBrowser();
80
+ try {
81
+ const page = await browser.goto('https://example.com');
82
+ console.log(page.markdown);
83
+ } finally {
84
+ browser.close();
85
+ }
86
+ }
87
+
88
+ // Or with async dispose:
89
+ const browser = new AgentBrowser();
90
+ try {
91
+ await browser.goto('https://example.com');
92
+ } finally {
93
+ await browser[Symbol.asyncDispose]();
94
+ }
138
95
  ```
139
96
 
140
- ## TypeScript
97
+ ## Version
98
+
99
+ SDK: **0.4.0** | Binary: **0.4.0** (bundled)
141
100
 
142
- This package includes TypeScript type definitions. No additional installation needed.
101
+ ## Links
143
102
 
144
- ## License
103
+ - [npm](https://www.npmjs.com/package/b4n1-web)
104
+ - [GitHub](https://github.com/B4N1-com/b4n1-web)
105
+ - [Website](https://web.b4n1.com)
145
106
 
146
- MIT
107
+ ---
108
+ *Built by B4N1 with ❤️ · All rights reserved.*
package/bin/b4n1web ADDED
Binary file
package/bin/b4n1web-linux CHANGED
Binary file
package/dist/browser.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BrowserMode, type BrowserOptions, type PageData } from './types';
1
+ import { BrowserMode, type BrowserOptions, type PageData, type IframeInfo } from './types';
2
2
  export declare function getB4n1webBinary(): string | null;
3
3
  export declare function getB4n1webVersion(): string | null;
4
4
  export declare function checkVersionCompatibility(): string | null;
@@ -18,18 +18,30 @@ export declare class AgentBrowser {
18
18
  private userAgent;
19
19
  private binaryPath;
20
20
  private currentUrl;
21
+ private sessionId;
22
+ private sessionStarted;
23
+ private viewportWidth;
24
+ private viewportHeight;
25
+ private emulatedDevice;
21
26
  constructor(options?: BrowserOptions);
27
+ private escapeArg;
28
+ private runSessionCommand;
29
+ private ensureSession;
22
30
  goto(url: string, waitFor?: string): Promise<Page>;
23
31
  private parseOutput;
24
- close(): void;
25
- [Symbol.asyncDispose](): Promise<void>;
26
- screenshot(width?: number, height?: number): string;
27
- waitForSelector(selector: string, timeoutMs?: number): Promise<boolean>;
28
32
  click(selector: string): Promise<void>;
29
33
  typeText(selector: string, text: string, clearFirst?: boolean): Promise<void>;
34
+ waitForSelector(selector: string, timeoutMs?: number): Promise<boolean>;
35
+ screenshot(url?: string): Promise<string>;
36
+ frames(): Promise<IframeInfo[]>;
37
+ iframeText(index: number): Promise<string>;
38
+ setViewport(width: number, height: number): Promise<void>;
39
+ emulateDevice(device: string): Promise<void>;
30
40
  getLinks(): string[];
31
41
  static getLinksFromPage(url: string, mode?: BrowserMode): Promise<string[]>;
32
42
  static findBinary(): string | null;
43
+ close(): void;
44
+ [Symbol.asyncDispose](): Promise<void>;
33
45
  }
34
46
  export declare function createBrowserAndGoto(url: string, options?: BrowserOptions): Promise<Page>;
35
47
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAE/F,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAsChD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAejD;AAID,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAczD;AAED,qBAAa,IAAK,YAAW,QAAQ;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEN,IAAI,EAAE,QAAQ;IAQ1B,cAAc,IAAI,MAAM;IAMxB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAuB;gBAE7B,OAAO,GAAE,cAAmB;IAsBlC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD,OAAO,CAAC,WAAW;IAmCnB,KAAK,IAAI,IAAI;IAGP,CAAC,MAAM,CAAC,YAAY,CAAC;IAI3B,UAAU,CAAC,KAAK,GAAE,MAAa,EAAE,MAAM,GAAE,MAAY,GAAG,MAAM;IAkBxD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAe9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1F,QAAQ,IAAI,MAAM,EAAE;WAmBP,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAA+B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUpG,MAAM,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI;CAGnC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAuB,MAAM,SAAS,CAAC;AAEhH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAyChD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAejD;AAID,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAczD;AAED,qBAAa,IAAK,YAAW,QAAQ;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEN,IAAI,EAAE,QAAQ;IAQ1B,cAAc,IAAI,MAAM;IAMxB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,cAAc,CAAuB;gBAEjC,OAAO,GAAE,cAAmB;IAuBxC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,aAAa;IAaf,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD,OAAO,CAAC,WAAW;IAyCb,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB9E,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAa/B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY1C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAezD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,QAAQ,IAAI,MAAM,EAAE;WAmBP,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAA+B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUpG,MAAM,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;IAUP,CAAC,MAAM,CAAC,YAAY,CAAC;CAG5B;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAOf"}
package/dist/browser.js CHANGED
@@ -54,7 +54,10 @@ function getB4n1webBinary() {
54
54
  catch {
55
55
  }
56
56
  }
57
- paths.push('/usr/local/bin/b4n1web', '/usr/bin/b4n1web', home + '/.local/bin/b4n1web', home + '/.b4n1web/bin/b4n1web');
57
+ const envBinary = process.env.B4N1WEB_BINARY;
58
+ if (envBinary)
59
+ paths.push(envBinary);
60
+ paths.push(home + '/.local/bin/b4n1web', home + '/.b4n1web/bin/b4n1web', '/usr/local/bin/b4n1web', '/usr/bin/b4n1web');
58
61
  const pathEnv = process.env.PATH || '';
59
62
  const pathDirs = pathEnv.split(':').filter(p => p);
60
63
  for (const dir of pathDirs) {
@@ -91,7 +94,7 @@ function getB4n1webVersion() {
91
94
  return null;
92
95
  }
93
96
  }
94
- const SDK_VERSION = '0.5.0';
97
+ const SDK_VERSION = '0.8.0';
95
98
  function checkVersionCompatibility() {
96
99
  const binaryVersion = getB4n1webVersion();
97
100
  if (!binaryVersion) {
@@ -105,6 +108,11 @@ function checkVersionCompatibility() {
105
108
  return binaryVersion;
106
109
  }
107
110
  class Page {
111
+ url;
112
+ markdown;
113
+ links;
114
+ screenshot;
115
+ jsOutput;
108
116
  constructor(data) {
109
117
  this.url = data.url;
110
118
  this.markdown = data.markdown;
@@ -124,11 +132,21 @@ class Page {
124
132
  }
125
133
  exports.Page = Page;
126
134
  class AgentBrowser {
135
+ mode;
136
+ timeout;
137
+ userAgent;
138
+ binaryPath;
139
+ currentUrl = null;
140
+ sessionId;
141
+ sessionStarted = false;
142
+ viewportWidth = 1280;
143
+ viewportHeight = 720;
144
+ emulatedDevice = null;
127
145
  constructor(options = {}) {
128
- this.currentUrl = null;
129
146
  this.mode = options.mode ?? types_1.BrowserMode.LIGHT;
130
147
  this.timeout = options.timeout ?? 30;
131
148
  this.userAgent = options.userAgent ?? 'B4n1Web-Agent/1.0';
149
+ this.sessionId = `agent-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
132
150
  const binary = getB4n1webBinary();
133
151
  if (!binary) {
134
152
  const home = process.env.HOME || '';
@@ -143,6 +161,29 @@ class AgentBrowser {
143
161
  }
144
162
  this.binaryPath = binary;
145
163
  }
164
+ escapeArg(arg) {
165
+ return JSON.stringify(arg);
166
+ }
167
+ runSessionCommand(subcommand, ...args) {
168
+ try {
169
+ return (0, child_process_1.execSync)(`${this.binaryPath} session ${subcommand} ${this.sessionId} ${args.join(' ')}`, { timeout: this.timeout * 1000 }).toString().trim();
170
+ }
171
+ catch (error) {
172
+ if (error.message?.includes('timed out')) {
173
+ throw new Error(`Session command timed out after ${this.timeout}s`);
174
+ }
175
+ throw new Error(`Session command "${subcommand}" failed: ${error.message}`);
176
+ }
177
+ }
178
+ ensureSession(url) {
179
+ if (!this.sessionStarted) {
180
+ (0, child_process_1.execSync)(`${this.binaryPath} session start ${this.sessionId}`, { timeout: 10000 });
181
+ this.sessionStarted = true;
182
+ }
183
+ if (url) {
184
+ (0, child_process_1.execSync)(`${this.binaryPath} session goto ${this.sessionId} ${this.escapeArg(url)}`, { timeout: this.timeout * 1000 });
185
+ }
186
+ }
146
187
  async goto(url, waitFor) {
147
188
  this.currentUrl = url;
148
189
  return new Promise((resolve, reject) => {
@@ -186,10 +227,16 @@ class AgentBrowser {
186
227
  }
187
228
  }
188
229
  else if (line.startsWith('Screenshot:')) {
189
- screenshot = line.slice(10).trim() || undefined;
230
+ screenshot = line.slice(11).trim();
231
+ if (screenshot === '') {
232
+ screenshot = undefined;
233
+ }
190
234
  }
191
235
  else if (line.startsWith('js_output:')) {
192
- jsOutput = line.slice(10).trim() || undefined;
236
+ jsOutput = line.slice(10).trim();
237
+ if (jsOutput === '') {
238
+ jsOutput = undefined;
239
+ }
193
240
  }
194
241
  else {
195
242
  markdown += line + '\n';
@@ -203,62 +250,110 @@ class AgentBrowser {
203
250
  jsOutput,
204
251
  });
205
252
  }
206
- close() {
207
- }
208
- async [Symbol.asyncDispose]() {
209
- this.close();
210
- }
211
- screenshot(width = 1280, height = 720) {
253
+ async click(selector) {
212
254
  if (!this.currentUrl) {
213
255
  throw new Error('No page loaded. Call goto() first.');
214
256
  }
257
+ this.ensureSession(this.currentUrl);
215
258
  try {
216
- const output = (0, child_process_1.execSync)(`${this.binaryPath} screenshot --url ${this.currentUrl} --mode ${this.mode} --width ${width} --height ${height}`, { timeout: this.timeout * 1000 }).toString().trim();
217
- return output;
259
+ (0, child_process_1.execSync)(`${this.binaryPath} session click ${this.sessionId} ${this.escapeArg(selector)}`, { timeout: this.timeout * 1000 });
218
260
  }
219
261
  catch (error) {
220
- if (error.message?.includes('timed out')) {
221
- throw new Error(`Screenshot timed out after ${this.timeout}s`);
262
+ throw new Error(`Click failed on "${selector}": ${error.message}`);
263
+ }
264
+ }
265
+ async typeText(selector, text, clearFirst = false) {
266
+ if (!this.currentUrl) {
267
+ throw new Error('No page loaded. Call goto() first.');
268
+ }
269
+ this.ensureSession(this.currentUrl);
270
+ try {
271
+ let cmd = `${this.binaryPath} session type ${this.sessionId} ${this.escapeArg(selector)} ${this.escapeArg(text)}`;
272
+ if (clearFirst) {
273
+ cmd += ' --clear-first';
222
274
  }
223
- throw new Error(`Screenshot failed: ${error.message}`);
275
+ (0, child_process_1.execSync)(cmd, { timeout: this.timeout * 1000 });
276
+ }
277
+ catch (error) {
278
+ throw new Error(`Type text failed on "${selector}": ${error.message}`);
224
279
  }
225
280
  }
226
281
  async waitForSelector(selector, timeoutMs = 10000) {
227
282
  if (!this.currentUrl) {
228
283
  throw new Error('No page loaded. Call goto() first.');
229
284
  }
285
+ this.ensureSession(this.currentUrl);
230
286
  try {
231
- const output = (0, child_process_1.execSync)(`${this.binaryPath} wait-for-selector --url ${this.currentUrl} --selector ${JSON.stringify(selector)} --timeout ${timeoutMs}`, { timeout: Math.ceil(timeoutMs / 1000) + 5 }).toString().trim();
287
+ const output = (0, child_process_1.execSync)(`${this.binaryPath} session wait ${this.sessionId} ${this.escapeArg(selector)} --timeout-ms ${timeoutMs}`, { timeout: Math.ceil(timeoutMs / 1000) + 5 }).toString().trim();
232
288
  return output === 'true';
233
289
  }
234
290
  catch {
235
291
  return false;
236
292
  }
237
293
  }
238
- async click(selector) {
294
+ async screenshot(url) {
295
+ const targetUrl = url || this.currentUrl;
296
+ if (!targetUrl) {
297
+ throw new Error('No URL provided. Pass a URL or call goto() first.');
298
+ }
299
+ this.ensureSession(targetUrl);
300
+ try {
301
+ const output = (0, child_process_1.execSync)(`${this.binaryPath} session screenshot ${this.sessionId} ${this.escapeArg(targetUrl)}`, { timeout: this.timeout * 1000 }).toString().trim();
302
+ return output;
303
+ }
304
+ catch (error) {
305
+ if (error.message?.includes('timed out')) {
306
+ throw new Error(`Screenshot timed out after ${this.timeout}s`);
307
+ }
308
+ throw new Error(`Screenshot failed: ${error.message}`);
309
+ }
310
+ }
311
+ async frames() {
239
312
  if (!this.currentUrl) {
240
313
  throw new Error('No page loaded. Call goto() first.');
241
314
  }
315
+ this.ensureSession(this.currentUrl);
242
316
  try {
243
- (0, child_process_1.execSync)(`${this.binaryPath} click --url ${this.currentUrl} --mode ${this.mode} --selector ${JSON.stringify(selector)}`, { timeout: this.timeout * 1000 });
317
+ const output = this.runSessionCommand('frames');
318
+ return JSON.parse(output);
244
319
  }
245
320
  catch (error) {
246
- throw new Error(`Click failed on "${selector}": ${error.message}`);
321
+ throw new Error(`Failed to list frames: ${error.message}`);
247
322
  }
248
323
  }
249
- async typeText(selector, text, clearFirst = false) {
324
+ async iframeText(index) {
250
325
  if (!this.currentUrl) {
251
326
  throw new Error('No page loaded. Call goto() first.');
252
327
  }
328
+ this.ensureSession(this.currentUrl);
253
329
  try {
254
- let cmd = `${this.binaryPath} type-text --url ${this.currentUrl} --mode ${this.mode} --selector ${JSON.stringify(selector)} --text ${JSON.stringify(text)}`;
255
- if (clearFirst) {
256
- cmd += ' --clear-first';
257
- }
258
- (0, child_process_1.execSync)(cmd, { timeout: this.timeout * 1000 });
330
+ return this.runSessionCommand('iframe-text', String(index));
259
331
  }
260
332
  catch (error) {
261
- throw new Error(`Type text failed on "${selector}": ${error.message}`);
333
+ throw new Error(`Failed to get iframe text at index ${index}: ${error.message}`);
334
+ }
335
+ }
336
+ async setViewport(width, height) {
337
+ this.viewportWidth = width;
338
+ this.viewportHeight = height;
339
+ if (this.sessionStarted && this.currentUrl) {
340
+ try {
341
+ (0, child_process_1.execSync)(`${this.binaryPath} session goto ${this.sessionId} ${this.escapeArg(this.currentUrl)} --viewport-width ${width} --viewport-height ${height}`, { timeout: this.timeout * 1000 });
342
+ }
343
+ catch (error) {
344
+ throw new Error(`setViewport failed: ${error.message}`);
345
+ }
346
+ }
347
+ }
348
+ async emulateDevice(device) {
349
+ this.emulatedDevice = device;
350
+ if (this.sessionStarted && this.currentUrl) {
351
+ try {
352
+ (0, child_process_1.execSync)(`${this.binaryPath} session goto ${this.sessionId} ${this.escapeArg(this.currentUrl)} --emulate ${this.escapeArg(device)}`, { timeout: this.timeout * 1000 });
353
+ }
354
+ catch (error) {
355
+ throw new Error(`emulateDevice failed: ${error.message}`);
356
+ }
262
357
  }
263
358
  }
264
359
  getLinks() {
@@ -291,6 +386,19 @@ class AgentBrowser {
291
386
  static findBinary() {
292
387
  return getB4n1webBinary();
293
388
  }
389
+ close() {
390
+ if (this.sessionStarted) {
391
+ try {
392
+ (0, child_process_1.execSync)(`${this.binaryPath} session close ${this.sessionId}`, { timeout: 5000 });
393
+ }
394
+ catch {
395
+ }
396
+ this.sessionStarted = false;
397
+ }
398
+ }
399
+ async [Symbol.asyncDispose]() {
400
+ this.close();
401
+ }
294
402
  }
295
403
  exports.AgentBrowser = AgentBrowser;
296
404
  async function createBrowserAndGoto(url, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,4CAyCC;AAED,8CAeC;AAID,8DAcC;AAsUD,oDAUC;AAjaD,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,mCAAgH;AAEhH,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,aAAa,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7C,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CACR,IAAI,GAAG,qBAAqB,EAC5B,IAAI,GAAG,uBAAuB,EAC9B,wBAAwB,EACxB,kBAAkB,CACnB,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,wBAAQ,EAAC,GAAG,UAAU,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACzF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,SAAgB,yBAAyB;IACvC,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CACV,mCAAmC,WAAW,qBAAqB,WAAW,IAAI;YAClF,cAAc,aAAa,0CAA0C;YACrE,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAa,IAAI;IACf,GAAG,CAAS;IACZ,QAAQ,CAAS;IACjB,KAAK,CAAW;IAChB,UAAU,CAAU;IACpB,QAAQ,CAAU;IAElB,YAAY,IAAc;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF;AAzBD,oBAyBC;AAED,MAAa,YAAY;IACf,IAAI,CAAc;IAClB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,UAAU,CAAU;IACpB,UAAU,GAAkB,IAAI,CAAC;IACjC,SAAS,CAAS;IAClB,cAAc,GAAY,KAAK,CAAC;IAChC,aAAa,GAAW,IAAI,CAAC;IAC7B,cAAc,GAAW,GAAG,CAAC;IAC7B,cAAc,GAAkB,IAAI,CAAC;IAE7C,YAAY,UAA0B,EAAE;QACtC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAW,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,mBAAmB,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAEjF,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,IAAI,2BAAmB,CAC3B,6CAA6C;gBAC7C,4BAA4B;gBAC5B,sBAAsB;gBACtB,KAAK,IAAI,uBAAuB;gBAChC,KAAK,IAAI,yBAAyB;gBAClC,WAAW,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;gBACpC,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEO,iBAAiB,CAAC,UAAkB,EAAE,GAAG,IAAc;QAC7D,IAAI,CAAC;YACH,OAAO,IAAA,wBAAQ,EACb,GAAG,IAAI,CAAC,UAAU,YAAY,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAC9E,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAAY;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAA,wBAAQ,EAAC,GAAG,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACR,IAAA,wBAAQ,EACN,GAAG,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAC1E,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,OAAgB;QACtC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,SAAS,GAAG,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,OAAO,EAAE,CAAC;oBACZ,GAAG,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,CAAC;gBACD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,GAAW,EAAE,MAAc;QAC7C,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,UAA8B,CAAC;QACnC,IAAI,QAA4B,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;oBACtB,UAAU,GAAG,SAAS,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;oBACpB,QAAQ,GAAG,SAAS,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QAEF,OAAO,IAAI,IAAI,CAAC;YACd,GAAG;YACH,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;YACzB,KAAK;YACL,UAAU;YACV,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,IAAA,wBAAQ,EACN,GAAG,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAChF,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAY,EAAE,aAAsB,KAAK;QACxE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAClH,IAAI,UAAU,EAAE,CAAC;gBACf,GAAG,IAAI,gBAAgB,CAAC;YAC1B,CAAC;YACD,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,YAAoB,KAAK;QAC/D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,GAAG,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS,EAAE,EACzG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAC7C,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,MAAM,KAAK,MAAM,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAY;QAC3B,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,GAAG,IAAI,CAAC,UAAU,uBAAuB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EACtF,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAiB,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,MAAc;QAC7C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,GAAG,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,KAAK,sBAAsB,MAAM,EAAE,EAC5I,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,GAAG,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAC1H,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,GAAG,IAAI,CAAC,UAAU,oBAAoB,IAAI,CAAC,UAAU,WAAW,IAAI,CAAC,IAAI,EAAE,EAC3E,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAAoB,mBAAW,CAAC,KAAK;QAC9E,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,GAAG,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;YACT,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF;AAvSD,oCAuSC;AAEM,KAAK,UAAU,oBAAoB,CACxC,GAAW,EACX,UAA0B,EAAE;IAE5B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/errors.js CHANGED
@@ -10,6 +10,7 @@ class BinaryNotFoundError extends Error {
10
10
  }
11
11
  exports.BinaryNotFoundError = BinaryNotFoundError;
12
12
  class NavigationError extends Error {
13
+ url;
13
14
  constructor(message, url) {
14
15
  super(message);
15
16
  this.url = url;
@@ -19,6 +20,7 @@ class NavigationError extends Error {
19
20
  }
20
21
  exports.NavigationError = NavigationError;
21
22
  class BinaryError extends Error {
23
+ stderr;
22
24
  constructor(message, stderr) {
23
25
  super(message);
24
26
  this.stderr = stderr;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,oGAAoG;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACrD,CAAC;CACF;AAND,kDAMC;AAED,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe,EAAkB,GAAW;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,QAAG,GAAH,GAAG,CAAQ;QAEtD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;CACF;AAND,0CAMC;AAED,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAkB,MAAc;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,WAAM,GAAN,MAAM,CAAQ;QAEzD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;CACF;AAND,kCAMC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,QAAgB,EAAE,SAAiB;QAC7C,KAAK,CAAC,aAAa,QAAQ,sBAAsB,SAAS,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtD,CAAC;CACF;AAND,oDAMC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,oGAAoG;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACrD,CAAC;CACF;AAND,kDAMC;AAED,MAAa,eAAgB,SAAQ,KAAK;IACK;IAA7C,YAAY,OAAe,EAAkB,GAAW;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,QAAG,GAAH,GAAG,CAAQ;QAEtD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;CACF;AAND,0CAMC;AAED,MAAa,WAAY,SAAQ,KAAK;IACS;IAA7C,YAAY,OAAe,EAAkB,MAAc;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,WAAM,GAAN,MAAM,CAAQ;QAEzD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;CACF;AAND,kCAMC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,QAAgB,EAAE,SAAiB;QAC7C,KAAK,CAAC,aAAa,QAAQ,sBAAsB,SAAS,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtD,CAAC;CACF;AAND,oDAMC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { AgentBrowser, Page, getB4n1webBinary, getB4n1webVersion, checkVersionCompatibility, createBrowserAndGoto } from './browser';
2
2
  export { BrowserMode } from './types';
3
3
  export { BinaryNotFoundError, NavigationError, BinaryError, SelectorTimeoutError } from './errors';
4
+ export { SecurityShield } from './security';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrI,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrI,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectorTimeoutError = exports.BinaryError = exports.NavigationError = exports.BinaryNotFoundError = exports.BrowserMode = exports.createBrowserAndGoto = exports.checkVersionCompatibility = exports.getB4n1webVersion = exports.getB4n1webBinary = exports.Page = exports.AgentBrowser = void 0;
3
+ exports.SecurityShield = exports.SelectorTimeoutError = exports.BinaryError = exports.NavigationError = exports.BinaryNotFoundError = exports.BrowserMode = exports.createBrowserAndGoto = exports.checkVersionCompatibility = exports.getB4n1webVersion = exports.getB4n1webBinary = exports.Page = exports.AgentBrowser = void 0;
4
4
  var browser_1 = require("./browser");
5
5
  Object.defineProperty(exports, "AgentBrowser", { enumerable: true, get: function () { return browser_1.AgentBrowser; } });
6
6
  Object.defineProperty(exports, "Page", { enumerable: true, get: function () { return browser_1.Page; } });
@@ -15,4 +15,6 @@ Object.defineProperty(exports, "BinaryNotFoundError", { enumerable: true, get: f
15
15
  Object.defineProperty(exports, "NavigationError", { enumerable: true, get: function () { return errors_1.NavigationError; } });
16
16
  Object.defineProperty(exports, "BinaryError", { enumerable: true, get: function () { return errors_1.BinaryError; } });
17
17
  Object.defineProperty(exports, "SelectorTimeoutError", { enumerable: true, get: function () { return errors_1.SelectorTimeoutError; } });
18
+ var security_1 = require("./security");
19
+ Object.defineProperty(exports, "SecurityShield", { enumerable: true, get: function () { return security_1.SecurityShield; } });
18
20
  //# 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,qCAAqI;AAA5H,uGAAA,YAAY,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AACjH,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,mCAAmG;AAA1F,6GAAA,mBAAmB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,8GAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAqI;AAA5H,uGAAA,YAAY,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AACjH,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,mCAAmG;AAA1F,6GAAA,mBAAmB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAChF,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
@@ -1,65 +1,65 @@
1
1
  /**
2
- * B4n1Web SecurityShield - URL Security Validation
2
+ * B4n1Web SecurityShield URL security validation with in-memory cache.
3
3
  *
4
- * Provides URL security validation with caching.
5
- * Fall-safe: returns safe=true if any error occurs.
6
- */
7
- import type { SecurityShieldOptions, SecurityCheckResult } from './types';
8
- /**
9
- * SecurityShield - Domain safety validation with caching
4
+ * SecurityShield provides URL safety checking for agentic browser navigation.
10
5
  *
11
- * @example
12
- * ```typescript
13
- * import { SecurityShield, navigate } from 'b4n1-web';
14
- *
15
- * // Simple usage
16
- * const result = await navigate('https://example.com');
17
- *
18
- * // With custom shield
19
- * const shield = new SecurityShield({ cacheDays: 30 });
20
- * const { isSafe, needsApiCheck } = shield.isUrlSafe('https://example.com');
21
- * ```
6
+ * API:
7
+ * new SecurityShield({ dbPath?, cacheDays? })
8
+ * shield.isUrlSafe(url) → { isSafe: boolean, needsApiCheck: boolean }
9
+ * shield.markDomain(domain, isSafe)
10
+ * shield.clearCache()
22
11
  */
12
+ import type { SecurityShieldOptions, SecurityCheckResult } from './types';
23
13
  export declare class SecurityShield {
24
- private dbPath;
25
14
  private cacheDays;
26
15
  private cache;
27
- constructor(options?: SecurityShieldOptions);
28
16
  /**
29
- * Extract domain from URL
17
+ * Create a SecurityShield instance.
18
+ * @param opts - Optional configuration
19
+ * @param opts.cacheDays - TTL of a cached result in days (default 7)
30
20
  */
31
- private extractDomain;
21
+ constructor(opts?: SecurityShieldOptions);
32
22
  /**
33
- * Check if URL is safe to navigate
23
+ * Check whether a URL is safe to navigate.
24
+ *
25
+ * @param rawURL - The URL to check.
26
+ * @returns `{ isSafe, needsApiCheck }`
27
+ * isSafe — `true` if the domain is not blacklisted.
28
+ * needsApiCheck — `false` when the result was previously cached.
29
+ *
30
+ * @example
31
+ * const { isSafe, needsApiCheck } = shield.isUrlSafe('https://unknown.com');
32
+ * // → isSafe=true, needsApiCheck=true (unknown domain, needs screening)
33
+ *
34
+ * shield.markDomain('evil.com', false);
35
+ * shield.isUrlSafe('https://evil.com');
36
+ * // → isSafe=false, needsApiCheck=false (explicitly blacklisted)
34
37
  */
35
- isUrlSafe(url: string): SecurityCheckResult;
38
+ isUrlSafe(rawURL: string): SecurityCheckResult;
36
39
  /**
37
- * Mark a domain as safe or unsafe
40
+ * Explicitly mark a domain as safe (whitelist) or unsafe (blacklist).
41
+ * Overwrites any previous entry and resets the TTL timer.
42
+ *
43
+ * @param domain - The domain to mark, e.g. `"example.com"`
44
+ * @param isSafe - `true` to whitelist, `false` to blacklist
45
+ *
46
+ * @example
47
+ * shield.markDomain('trusted.com', true); // always allow
48
+ * shield.markDomain('malware.com', false); // always block
38
49
  */
39
50
  markDomain(domain: string, isSafe: boolean): void;
40
51
  /**
41
- * Clear all cached domains
52
+ * Remove all cached domain entries.
53
+ * After clearing, every next `isUrlSafe()` call for a previously-known domain
54
+ * will return `needsApiCheck=true` again.
42
55
  */
43
56
  clearCache(): void;
57
+ /**
58
+ * Extract the hostname from a URL string.
59
+ * Returns `''` for invalid / missing URLs.
60
+ * @internal — exposed for testing as `extractDomain`.
61
+ */
62
+ extractDomain(rawURL: string): string | null;
63
+ private _extractHost;
44
64
  }
45
- /**
46
- * Navigate to URL with optional security check
47
- *
48
- * @example
49
- * ```typescript
50
- * import { navigate } from 'b4n1-web';
51
- *
52
- * const result = await navigate('https://example.com');
53
- * if (result.success) {
54
- * console.log(result.markdown);
55
- * }
56
- * ```
57
- */
58
- export declare function navigate(url: string, ignoreSecurity?: boolean, securityShield?: SecurityShield): Promise<{
59
- url: string;
60
- success: boolean;
61
- markdown?: string;
62
- links?: string[];
63
- error?: string;
64
- }>;
65
65
  //# sourceMappingURL=security.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAoD;gBAErD,OAAO,GAAE,qBAA0B;IAM/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB;IAkB3C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAMjD;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,OAAe,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAkCD"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAQ1E,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA0B;IAEvC;;;;OAIG;gBACS,IAAI,GAAE,qBAA0B;IAK5C;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAsB9C;;;;;;;;;;OAUG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAMjD;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAsD5C,OAAO,CAAC,YAAY;CAIrB"}
package/dist/security.js CHANGED
@@ -1,126 +1,160 @@
1
1
  "use strict";
2
2
  /**
3
- * B4n1Web SecurityShield - URL Security Validation
3
+ * B4n1Web SecurityShield URL security validation with in-memory cache.
4
4
  *
5
- * Provides URL security validation with caching.
6
- * Fall-safe: returns safe=true if any error occurs.
5
+ * SecurityShield provides URL safety checking for agentic browser navigation.
6
+ *
7
+ * API:
8
+ * new SecurityShield({ dbPath?, cacheDays? })
9
+ * shield.isUrlSafe(url) → { isSafe: boolean, needsApiCheck: boolean }
10
+ * shield.markDomain(domain, isSafe)
11
+ * shield.clearCache()
7
12
  */
8
13
  Object.defineProperty(exports, "__esModule", { value: true });
9
14
  exports.SecurityShield = void 0;
10
- exports.navigate = navigate;
11
- const browser_1 = require("./browser");
12
- const types_1 = require("./types");
13
- /**
14
- * SecurityShield - Domain safety validation with caching
15
- *
16
- * @example
17
- * ```typescript
18
- * import { SecurityShield, navigate } from 'b4n1-web';
19
- *
20
- * // Simple usage
21
- * const result = await navigate('https://example.com');
22
- *
23
- * // With custom shield
24
- * const shield = new SecurityShield({ cacheDays: 30 });
25
- * const { isSafe, needsApiCheck } = shield.isUrlSafe('https://example.com');
26
- * ```
27
- */
15
+ /** Default cache TTL in days */
16
+ const DEFAULT_CACHE_DAYS = 7;
28
17
  class SecurityShield {
29
- constructor(options = {}) {
30
- this.dbPath = options.dbPath ?? `${process.env.HOME}/.b4n1web/security.db`;
31
- this.cacheDays = options.cacheDays ?? 7;
32
- this.cache = new Map();
33
- }
18
+ cacheDays;
19
+ cache;
34
20
  /**
35
- * Extract domain from URL
21
+ * Create a SecurityShield instance.
22
+ * @param opts - Optional configuration
23
+ * @param opts.cacheDays - TTL of a cached result in days (default 7)
36
24
  */
37
- extractDomain(url) {
38
- try {
39
- const parsed = new URL(url);
40
- return parsed.hostname.toLowerCase();
41
- }
42
- catch {
43
- return null;
44
- }
25
+ constructor(opts = {}) {
26
+ this.cacheDays = opts.cacheDays ?? DEFAULT_CACHE_DAYS;
27
+ this.cache = new Map();
45
28
  }
46
29
  /**
47
- * Check if URL is safe to navigate
30
+ * Check whether a URL is safe to navigate.
31
+ *
32
+ * @param rawURL - The URL to check.
33
+ * @returns `{ isSafe, needsApiCheck }`
34
+ * isSafe — `true` if the domain is not blacklisted.
35
+ * needsApiCheck — `false` when the result was previously cached.
36
+ *
37
+ * @example
38
+ * const { isSafe, needsApiCheck } = shield.isUrlSafe('https://unknown.com');
39
+ * // → isSafe=true, needsApiCheck=true (unknown domain, needs screening)
40
+ *
41
+ * shield.markDomain('evil.com', false);
42
+ * shield.isUrlSafe('https://evil.com');
43
+ * // → isSafe=false, needsApiCheck=false (explicitly blacklisted)
48
44
  */
49
- isUrlSafe(url) {
50
- const domain = this.extractDomain(url);
51
- if (!domain) {
45
+ isUrlSafe(rawURL) {
46
+ const host = this._extractHost(rawURL);
47
+ if (!host) {
48
+ // Invalid URL — safe default, no API check needed
52
49
  return { isSafe: true, needsApiCheck: false };
53
50
  }
54
- const cached = this.cache.get(domain);
55
- if (cached) {
56
- if (Date.now() > cached.expires) {
57
- this.cache.delete(domain);
58
- return { isSafe: true, needsApiCheck: true };
51
+ const now = Date.now();
52
+ const entry = this.cache.get(host);
53
+ if (entry) {
54
+ if (now < entry.expires) {
55
+ // Cached and fresh does not need an external API call
56
+ return { isSafe: entry.isSafe, needsApiCheck: false };
59
57
  }
60
- return { isSafe: cached.isSafe, needsApiCheck: false };
58
+ // Expired re-check
59
+ this.cache.delete(host);
61
60
  }
61
+ // New domain — safe but needs external API verification
62
62
  return { isSafe: true, needsApiCheck: true };
63
63
  }
64
64
  /**
65
- * Mark a domain as safe or unsafe
65
+ * Explicitly mark a domain as safe (whitelist) or unsafe (blacklist).
66
+ * Overwrites any previous entry and resets the TTL timer.
67
+ *
68
+ * @param domain - The domain to mark, e.g. `"example.com"`
69
+ * @param isSafe - `true` to whitelist, `false` to blacklist
70
+ *
71
+ * @example
72
+ * shield.markDomain('trusted.com', true); // always allow
73
+ * shield.markDomain('malware.com', false); // always block
66
74
  */
67
75
  markDomain(domain, isSafe) {
68
- const normalizedDomain = domain.toLowerCase();
69
- const expires = Date.now() + this.cacheDays * 24 * 60 * 60 * 1000;
70
- this.cache.set(normalizedDomain, { isSafe, expires });
76
+ const normalized = domain.toLowerCase().trim();
77
+ const expires = Date.now() + this.cacheDays * 86400_000; // days ms
78
+ this.cache.set(normalized, { isSafe, expires });
71
79
  }
72
80
  /**
73
- * Clear all cached domains
81
+ * Remove all cached domain entries.
82
+ * After clearing, every next `isUrlSafe()` call for a previously-known domain
83
+ * will return `needsApiCheck=true` again.
74
84
  */
75
85
  clearCache() {
76
86
  this.cache.clear();
77
87
  }
78
- }
79
- exports.SecurityShield = SecurityShield;
80
- /**
81
- * Navigate to URL with optional security check
82
- *
83
- * @example
84
- * ```typescript
85
- * import { navigate } from 'b4n1-web';
86
- *
87
- * const result = await navigate('https://example.com');
88
- * if (result.success) {
89
- * console.log(result.markdown);
90
- * }
91
- * ```
92
- */
93
- async function navigate(url, ignoreSecurity = false, securityShield) {
94
- if (!securityShield) {
95
- securityShield = new SecurityShield();
96
- }
97
- if (!ignoreSecurity) {
98
- const { isSafe } = securityShield.isUrlSafe(url);
99
- if (!isSafe) {
100
- return {
101
- url,
102
- success: false,
103
- error: 'URL flagged as unsafe by security check',
104
- };
88
+ // ── helpers ────────────────────────────────────────────────
89
+ /**
90
+ * Extract the hostname from a URL string.
91
+ * Returns `''` for invalid / missing URLs.
92
+ * @internal — exposed for testing as `extractDomain`.
93
+ */
94
+ extractDomain(rawURL) {
95
+ try {
96
+ const url = rawURL?.trim();
97
+ if (!url)
98
+ return null;
99
+ let rest;
100
+ // Check for scheme (handles both :// and : schemes like data:, javascript:)
101
+ const schemeIndex = url.indexOf(':');
102
+ if (schemeIndex === -1) {
103
+ // no scheme
104
+ return null;
105
+ }
106
+ const scheme = url.slice(0, schemeIndex);
107
+ rest = url.slice(schemeIndex + 1);
108
+ // Handle special cases for schemes
109
+ if (scheme === 'data' || scheme === 'javascript') {
110
+ return '';
111
+ }
112
+ // Handle // authority format (like //example.com/path)
113
+ if (rest.startsWith('//')) {
114
+ rest = rest.slice(2);
115
+ }
116
+ // For other schemes like http:, https:, ftp:, etc., we already removed the scheme above
117
+ // Strip userinfo "user:pass@"
118
+ const atIdx = rest.lastIndexOf('@');
119
+ const afterAuth = atIdx >= 0 ? rest.slice(atIdx + 1) : rest;
120
+ // Strip path/query/fragment
121
+ const [rawHost, ..._] = afterAuth.split(/[\/?#]/, 1);
122
+ if (!rawHost)
123
+ return null;
124
+ let host = rawHost.trim();
125
+ if (!host)
126
+ return null;
127
+ // IPv6 in brackets: [::1]:8080 → ::
128
+ if (host.startsWith('[')) {
129
+ const bracketEnd = host.indexOf(']');
130
+ if (bracketEnd === -1)
131
+ return null;
132
+ host = host.slice(1, bracketEnd); // Extract content between brackets
133
+ return host.toLowerCase(); // ::1 is final, no port to strip
134
+ }
135
+ // Strip port after last ':' — works for 'example.com:8080'
136
+ const colonIdx = host.lastIndexOf(':');
137
+ if (colonIdx > 0) {
138
+ host = host.slice(0, colonIdx);
139
+ }
140
+ // Accept localhost / single-label hosts too
141
+ return host.toLowerCase() || null;
142
+ }
143
+ catch {
144
+ return null;
105
145
  }
106
146
  }
107
- try {
108
- const browser = new browser_1.AgentBrowser({ mode: types_1.BrowserMode.LIGHT });
109
- const page = await browser.goto(url);
110
- browser.close();
111
- return {
112
- url: page.url,
113
- success: true,
114
- markdown: page.markdown,
115
- links: page.links,
116
- };
117
- }
118
- catch (error) {
119
- return {
120
- url,
121
- success: false,
122
- error: error.message,
123
- };
147
+ _extractHost(rawURL) {
148
+ const r = this.extractDomain(rawURL);
149
+ return r ?? '';
124
150
  }
125
151
  }
152
+ exports.SecurityShield = SecurityShield;
153
+ function _stripPort(host) {
154
+ const at = host.indexOf('@');
155
+ const colon = host.indexOf(':', at >= 0 ? at + 1 : 0);
156
+ if (colon >= 0)
157
+ return host.slice(0, colon);
158
+ return host;
159
+ }
126
160
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -30,6 +30,11 @@ export interface SecurityCheckResult {
30
30
  isSafe: boolean;
31
31
  needsApiCheck: boolean;
32
32
  }
33
+ export interface IframeInfo {
34
+ index: number;
35
+ src?: string;
36
+ title?: string;
37
+ }
33
38
  export declare class BinaryNotFoundError extends Error {
34
39
  constructor(message?: string);
35
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,EAAE,OAAO;IACT,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,SAAuG;CAI3H"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,EAAE,OAAO;IACT,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,SAAuG;CAI3H"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,wBAAS,CAAA;IACT,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAkCD,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,oGAAoG;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,wBAAS,CAAA;IACT,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAwCD,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,oGAAoG;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b4n1-web",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "B4n1Web SDK for JavaScript/TypeScript - Agentic Browser Engine with bundled binary",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  ],
29
29
  "author": "Bani Montoya <banimontoya@gmail.com>",
30
30
  "license": "MIT",
31
- "homepage": "https://github.com/B4N1-com/b4n1-web",
31
+ "homepage": "https://web.b4n1.com",
32
32
  "repository": {
33
33
  "type": "git",
34
34
  "url": "https://github.com/B4N1-com/b4n1-web.git"
@@ -38,7 +38,8 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^20.0.0",
41
- "typescript": "^5.0.0"
41
+ "typescript": "^5.0.0",
42
+ "vitest": "^4.1.7"
42
43
  },
43
44
  "engines": {
44
45
  "node": ">=18.0.0"