b4n1-web 0.3.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 ADDED
@@ -0,0 +1,146 @@
1
+ # B4n1Web JavaScript/TypeScript SDK
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/b4n1web?style=flat" alt="GitHub stars"></a>
7
+ </p>
8
+
9
+ TypeScript/JavaScript bindings for B4n1Web: The Agentic Browser Engine.
10
+
11
+ ## Installation
12
+
13
+ ### 1. Install the B4n1Web Binary
14
+
15
+ ```bash
16
+ curl -sL https://web.b4n1.com/install | bash
17
+ ```
18
+
19
+ ### 2. Install the JavaScript SDK
20
+
21
+ ```bash
22
+ npm install b4n1-web
23
+ ```
24
+
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
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ ```typescript
40
+ import { AgentBrowser, BrowserMode, Page } from 'b4n1-web';
41
+
42
+ // Create a browser instance
43
+ const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
44
+
45
+ // Navigate to a page
46
+ const page = await browser.goto('https://example.com');
47
+
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) + '...');
55
+
56
+ // Find specific links
57
+ const githubLinks = page.findLinksByText('github');
58
+ console.log('GitHub links:', githubLinks);
59
+
60
+ // Close browser when done
61
+ browser.close();
62
+ ```
63
+
64
+ ## Browser Modes
65
+
66
+ ### Light Mode (Default)
67
+
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
72
+
73
+ ```typescript
74
+ const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
75
+ ```
76
+
77
+ ### JS Mode
78
+
79
+ - **Use case**: Extracting JavaScript from pages, SPA analysis
80
+ - **Performance**: Same as Light, instant startup
81
+ - **Capabilities**: HTML parsing + JavaScript tag extraction
82
+
83
+ ```typescript
84
+ const browser = new AgentBrowser({ mode: BrowserMode.JS });
85
+ ```
86
+
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:
128
+
129
+ ```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');
138
+ ```
139
+
140
+ ## TypeScript
141
+
142
+ This package includes TypeScript type definitions. No additional installation needed.
143
+
144
+ ## License
145
+
146
+ MIT
@@ -0,0 +1,70 @@
1
+ /**
2
+ * B4n1Web Browser - JavaScript/TypeScript Implementation
3
+ */
4
+ import { type BrowserOptions, type PageData } from './types';
5
+ /**
6
+ * Get B4n1Web binary version
7
+ */
8
+ export declare function getB4n1webVersion(): string;
9
+ /**
10
+ * Page data returned by B4n1Web
11
+ */
12
+ export declare class Page implements PageData {
13
+ url: string;
14
+ markdown: string;
15
+ links: string[];
16
+ screenshot?: string;
17
+ constructor(data: PageData);
18
+ /**
19
+ * Extract main content from markdown, skipping headers
20
+ */
21
+ getMainContent(): string;
22
+ /**
23
+ * Find links containing specific text
24
+ */
25
+ findLinksByText(text: string): string[];
26
+ }
27
+ /**
28
+ * B4n1Web Agent Browser
29
+ *
30
+ * A browser instance optimized for AI agent workflows.
31
+ * Requires B4n1Web binary to be installed.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * import { AgentBrowser, BrowserMode } from 'b4n1-web';
36
+ *
37
+ * const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
38
+ * const page = await browser.goto('https://example.com');
39
+ * console.log(page.markdown);
40
+ * browser.close();
41
+ * ```
42
+ */
43
+ export declare class AgentBrowser {
44
+ private mode;
45
+ private timeout;
46
+ private userAgent;
47
+ private binaryPath;
48
+ constructor(options?: BrowserOptions);
49
+ /**
50
+ * Navigate to a URL and extract structured content
51
+ */
52
+ goto(url: string): Promise<Page>;
53
+ /**
54
+ * Parse text output from the binary
55
+ */
56
+ private parseOutput;
57
+ /**
58
+ * Close the browser session
59
+ */
60
+ close(): void;
61
+ /**
62
+ * Use as async context manager
63
+ */
64
+ [Symbol.asyncDispose](): Promise<void>;
65
+ }
66
+ /**
67
+ * Create a browser and navigate in one go
68
+ */
69
+ export declare function createBrowserAndGoto(url: string, options?: BrowserOptions): Promise<Page>;
70
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAe,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAuB,MAAM,SAAS,CAAC;AA0B/F;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C;AAED;;GAEG;AACH,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;gBAER,IAAI,EAAE,QAAQ;IAO1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAMxB;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;gBAEhB,OAAO,GAAE,cAAmB;IAYxC;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtC;;OAEG;IACH,OAAO,CAAC,WAAW;IA2BnB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC;CAG5B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * B4n1Web Browser - JavaScript/TypeScript Implementation
3
+ */
4
+ import { execSync } from 'child_process';
5
+ import { BrowserMode, BinaryNotFoundError } from './types';
6
+ /**
7
+ * Find the b4n1web binary in common locations
8
+ */
9
+ function getB4n1webBinary() {
10
+ const possiblePaths = [
11
+ '/usr/local/bin/b4n1web',
12
+ '/usr/bin/b4n1web',
13
+ process.env.HOME + '/.local/bin/b4n1web',
14
+ process.env.HOME + '/.b4n1web/bin/b4n1web',
15
+ ];
16
+ for (const path of possiblePaths) {
17
+ try {
18
+ const fs = require('fs');
19
+ if (fs.existsSync(path) && fs.accessSync(path, fs.constants.X_OK)) {
20
+ return path;
21
+ }
22
+ }
23
+ catch {
24
+ // Path doesn't exist or not executable
25
+ }
26
+ }
27
+ return null;
28
+ }
29
+ /**
30
+ * Get B4n1Web binary version
31
+ */
32
+ export function getB4n1webVersion() {
33
+ const binaryPath = getB4n1webBinary();
34
+ if (!binaryPath) {
35
+ return 'unknown';
36
+ }
37
+ try {
38
+ const version = execSync(`${binaryPath} --version`, { timeout: 5000 }).toString().trim();
39
+ return version || 'unknown';
40
+ }
41
+ catch {
42
+ return 'unknown';
43
+ }
44
+ }
45
+ /**
46
+ * Page data returned by B4n1Web
47
+ */
48
+ export class Page {
49
+ constructor(data) {
50
+ this.url = data.url;
51
+ this.markdown = data.markdown;
52
+ this.links = data.links;
53
+ this.screenshot = data.screenshot;
54
+ }
55
+ /**
56
+ * Extract main content from markdown, skipping headers
57
+ */
58
+ getMainContent() {
59
+ const lines = this.markdown.split('\n');
60
+ const contentLines = lines.length > 2 ? lines.slice(2) : lines;
61
+ return contentLines.join('\n').trim();
62
+ }
63
+ /**
64
+ * Find links containing specific text
65
+ */
66
+ findLinksByText(text) {
67
+ const lowerText = text.toLowerCase();
68
+ return this.links.filter(link => link.toLowerCase().includes(lowerText));
69
+ }
70
+ }
71
+ /**
72
+ * B4n1Web Agent Browser
73
+ *
74
+ * A browser instance optimized for AI agent workflows.
75
+ * Requires B4n1Web binary to be installed.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { AgentBrowser, BrowserMode } from 'b4n1-web';
80
+ *
81
+ * const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
82
+ * const page = await browser.goto('https://example.com');
83
+ * console.log(page.markdown);
84
+ * browser.close();
85
+ * ```
86
+ */
87
+ export class AgentBrowser {
88
+ constructor(options = {}) {
89
+ this.mode = options.mode ?? BrowserMode.LIGHT;
90
+ this.timeout = options.timeout ?? 30;
91
+ this.userAgent = options.userAgent ?? 'B4n1Web-Agent/1.0';
92
+ const binary = getB4n1webBinary();
93
+ if (!binary) {
94
+ throw new BinaryNotFoundError('b4n1web binary not found. Run: curl -sL https://web.b4n1.com/install | bash');
95
+ }
96
+ this.binaryPath = binary;
97
+ }
98
+ /**
99
+ * Navigate to a URL and extract structured content
100
+ */
101
+ async goto(url) {
102
+ return new Promise((resolve, reject) => {
103
+ try {
104
+ const output = execSync(`${this.binaryPath} goto ${url} --mode ${this.mode}`, { timeout: this.timeout * 1000 }).toString();
105
+ const page = this.parseOutput(url, output);
106
+ resolve(page);
107
+ }
108
+ catch (error) {
109
+ if (error.message?.includes('timed out')) {
110
+ reject(new Error(`Binary timed out after ${this.timeout}s`));
111
+ }
112
+ else {
113
+ reject(new Error(`Binary error: ${error.message}`));
114
+ }
115
+ }
116
+ });
117
+ }
118
+ /**
119
+ * Parse text output from the binary
120
+ */
121
+ parseOutput(url, output) {
122
+ let markdown = '';
123
+ let links = [];
124
+ for (const line of output.split('\n')) {
125
+ if (line.startsWith('URL:')) {
126
+ continue;
127
+ }
128
+ else if (line.startsWith('Markdown:')) {
129
+ continue;
130
+ }
131
+ else if (line.startsWith('Links:')) {
132
+ try {
133
+ links = eval(line.slice(6).trim()); // Safe: we control the output format
134
+ }
135
+ catch {
136
+ links = [];
137
+ }
138
+ }
139
+ else {
140
+ markdown += line + '\n';
141
+ }
142
+ }
143
+ return new Page({
144
+ url,
145
+ markdown: markdown.trim(),
146
+ links,
147
+ });
148
+ }
149
+ /**
150
+ * Close the browser session
151
+ */
152
+ close() {
153
+ // No persistent session to close in current implementation
154
+ }
155
+ /**
156
+ * Use as async context manager
157
+ */
158
+ async [Symbol.asyncDispose]() {
159
+ this.close();
160
+ }
161
+ }
162
+ /**
163
+ * Create a browser and navigate in one go
164
+ */
165
+ export async function createBrowserAndGoto(url, options = {}) {
166
+ const browser = new AgentBrowser(options);
167
+ try {
168
+ return await browser.goto(url);
169
+ }
170
+ finally {
171
+ browser.close();
172
+ }
173
+ }
174
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAsC,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE/F;;GAEG;AACH,SAAS,gBAAgB;IACvB,MAAM,aAAa,GAAG;QACpB,wBAAwB;QACxB,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,qBAAqB;QACxC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,uBAAuB;KAC3C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,UAAU,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACzF,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,IAAI;IAMf,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;IACpC,CAAC;IAED;;OAEG;IACH,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;;OAEG;IACH,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;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,YAAY;IAMvB,YAAY,UAA0B,EAAE;QACtC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,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;QAE1D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,mBAAmB,CAAC,6EAA6E,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CACrB,GAAG,IAAI,CAAC,UAAU,SAAS,GAAG,WAAW,IAAI,CAAC,IAAI,EAAE,EACpD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CACjC,CAAC,QAAQ,EAAE,CAAC;gBAEb,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;IAED;;OAEG;IACK,WAAW,CAAC,GAAW,EAAE,MAAc;QAC7C,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAa,EAAE,CAAC;QAEzB,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,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,qCAAqC;gBAC3E,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;YACd,GAAG;YACH,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;YACzB,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACH,2DAA2D;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * B4n1Web Errors
3
+ */
4
+ /**
5
+ * Error thrown when B4n1Web binary is not found
6
+ */
7
+ export declare class BinaryNotFoundError extends Error {
8
+ constructor(message?: string);
9
+ }
10
+ /**
11
+ * Error thrown when navigation fails
12
+ */
13
+ export declare class NavigationError extends Error {
14
+ readonly url: string;
15
+ constructor(message: string, url: string);
16
+ }
17
+ /**
18
+ * Error thrown when binary execution fails
19
+ */
20
+ export declare class BinaryError extends Error {
21
+ readonly stderr: string;
22
+ constructor(message: string, stderr: string);
23
+ }
24
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,SAAuG;CAK3H;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aACK,GAAG,EAAE,MAAM;gBAA5C,OAAO,EAAE,MAAM,EAAkB,GAAG,EAAE,MAAM;CAKzD;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aACS,MAAM,EAAE,MAAM;gBAA/C,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM;CAK5D"}
package/dist/errors.js ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * B4n1Web Errors
3
+ */
4
+ /**
5
+ * Error thrown when B4n1Web binary is not found
6
+ */
7
+ export class BinaryNotFoundError extends Error {
8
+ constructor(message = 'B4n1Web binary not found. Please install it first:\n curl -sL https://web.b4n1.com/install | bash') {
9
+ super(message);
10
+ this.name = 'BinaryNotFoundError';
11
+ Error.captureStackTrace(this, BinaryNotFoundError);
12
+ }
13
+ }
14
+ /**
15
+ * Error thrown when navigation fails
16
+ */
17
+ export class NavigationError extends Error {
18
+ constructor(message, url) {
19
+ super(message);
20
+ this.url = url;
21
+ this.name = 'NavigationError';
22
+ Error.captureStackTrace(this, NavigationError);
23
+ }
24
+ }
25
+ /**
26
+ * Error thrown when binary execution fails
27
+ */
28
+ export class BinaryError extends Error {
29
+ constructor(message, stderr) {
30
+ super(message);
31
+ this.stderr = stderr;
32
+ this.name = 'BinaryError';
33
+ Error.captureStackTrace(this, BinaryError);
34
+ }
35
+ }
36
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,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;AAED;;GAEG;AACH,MAAM,OAAO,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;AAED;;GAEG;AACH,MAAM,OAAO,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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * B4n1Web SDK for JavaScript/TypeScript
3
+ * Zero-overhead, high-speed web execution for sovereign AI agents.
4
+ *
5
+ * @module b4n1web
6
+ */
7
+ export { AgentBrowser, Page } from './browser';
8
+ export { BrowserMode } from './types';
9
+ export { BinaryNotFoundError } from './errors';
10
+ export { SecurityShield, navigate } from './security';
11
+ export type { BrowserOptions, PageData, NavigateResult, SecurityShieldOptions } from './types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * B4n1Web SDK for JavaScript/TypeScript
3
+ * Zero-overhead, high-speed web execution for sovereign AI agents.
4
+ *
5
+ * @module b4n1web
6
+ */
7
+ export { AgentBrowser, Page } from './browser';
8
+ export { BrowserMode } from './types';
9
+ export { BinaryNotFoundError } from './errors';
10
+ export { SecurityShield, navigate } from './security';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * B4n1Web SecurityShield - URL Security Validation
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
10
+ *
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
+ * ```
22
+ */
23
+ export declare class SecurityShield {
24
+ private dbPath;
25
+ private cacheDays;
26
+ private cache;
27
+ constructor(options?: SecurityShieldOptions);
28
+ /**
29
+ * Extract domain from URL
30
+ */
31
+ private extractDomain;
32
+ /**
33
+ * Check if URL is safe to navigate
34
+ */
35
+ isUrlSafe(url: string): SecurityCheckResult;
36
+ /**
37
+ * Mark a domain as safe or unsafe
38
+ */
39
+ markDomain(domain: string, isSafe: boolean): void;
40
+ /**
41
+ * Clear all cached domains
42
+ */
43
+ clearCache(): void;
44
+ }
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
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * B4n1Web SecurityShield - URL Security Validation
3
+ *
4
+ * Provides URL security validation with caching.
5
+ * Fall-safe: returns safe=true if any error occurs.
6
+ */
7
+ import { AgentBrowser } from './browser';
8
+ import { BrowserMode } from './types';
9
+ /**
10
+ * SecurityShield - Domain safety validation with caching
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { SecurityShield, navigate } from 'b4n1-web';
15
+ *
16
+ * // Simple usage
17
+ * const result = await navigate('https://example.com');
18
+ *
19
+ * // With custom shield
20
+ * const shield = new SecurityShield({ cacheDays: 30 });
21
+ * const { isSafe, needsApiCheck } = shield.isUrlSafe('https://example.com');
22
+ * ```
23
+ */
24
+ export class SecurityShield {
25
+ constructor(options = {}) {
26
+ this.dbPath = options.dbPath ?? `${process.env.HOME}/.b4n1web/security.db`;
27
+ this.cacheDays = options.cacheDays ?? 7;
28
+ this.cache = new Map();
29
+ }
30
+ /**
31
+ * Extract domain from URL
32
+ */
33
+ extractDomain(url) {
34
+ try {
35
+ const parsed = new URL(url);
36
+ return parsed.hostname.toLowerCase();
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Check if URL is safe to navigate
44
+ */
45
+ isUrlSafe(url) {
46
+ const domain = this.extractDomain(url);
47
+ if (!domain) {
48
+ return { isSafe: true, needsApiCheck: false };
49
+ }
50
+ const cached = this.cache.get(domain);
51
+ if (cached) {
52
+ if (Date.now() > cached.expires) {
53
+ this.cache.delete(domain);
54
+ return { isSafe: true, needsApiCheck: true };
55
+ }
56
+ return { isSafe: cached.isSafe, needsApiCheck: false };
57
+ }
58
+ return { isSafe: true, needsApiCheck: true };
59
+ }
60
+ /**
61
+ * Mark a domain as safe or unsafe
62
+ */
63
+ markDomain(domain, isSafe) {
64
+ const normalizedDomain = domain.toLowerCase();
65
+ const expires = Date.now() + this.cacheDays * 24 * 60 * 60 * 1000;
66
+ this.cache.set(normalizedDomain, { isSafe, expires });
67
+ }
68
+ /**
69
+ * Clear all cached domains
70
+ */
71
+ clearCache() {
72
+ this.cache.clear();
73
+ }
74
+ }
75
+ /**
76
+ * Navigate to URL with optional security check
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * import { navigate } from 'b4n1-web';
81
+ *
82
+ * const result = await navigate('https://example.com');
83
+ * if (result.success) {
84
+ * console.log(result.markdown);
85
+ * }
86
+ * ```
87
+ */
88
+ export async function navigate(url, ignoreSecurity = false, securityShield) {
89
+ if (!securityShield) {
90
+ securityShield = new SecurityShield();
91
+ }
92
+ if (!ignoreSecurity) {
93
+ const { isSafe } = securityShield.isUrlSafe(url);
94
+ if (!isSafe) {
95
+ return {
96
+ url,
97
+ success: false,
98
+ error: 'URL flagged as unsafe by security check',
99
+ };
100
+ }
101
+ }
102
+ try {
103
+ const browser = new AgentBrowser({ mode: BrowserMode.LIGHT });
104
+ const page = await browser.goto(url);
105
+ browser.close();
106
+ return {
107
+ url: page.url,
108
+ success: true,
109
+ markdown: page.markdown,
110
+ links: page.links,
111
+ };
112
+ }
113
+ catch (error) {
114
+ return {
115
+ url,
116
+ success: false,
117
+ error: error.message,
118
+ };
119
+ }
120
+ }
121
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * B4n1Web TypeScript Types
3
+ */
4
+ export declare enum BrowserMode {
5
+ LIGHT = "light",
6
+ JS = "js",
7
+ RENDER = "render"
8
+ }
9
+ export interface BrowserOptions {
10
+ mode?: BrowserMode;
11
+ timeout?: number;
12
+ userAgent?: string;
13
+ }
14
+ export interface PageData {
15
+ url: string;
16
+ markdown: string;
17
+ links: string[];
18
+ screenshot?: string;
19
+ }
20
+ export interface NavigateResult {
21
+ url: string;
22
+ success: boolean;
23
+ markdown?: string;
24
+ links?: string[];
25
+ error?: string;
26
+ }
27
+ export interface SecurityShieldOptions {
28
+ dbPath?: string;
29
+ cacheDays?: number;
30
+ }
31
+ export interface SecurityCheckResult {
32
+ isSafe: boolean;
33
+ needsApiCheck: boolean;
34
+ }
35
+ export declare class BinaryNotFoundError extends Error {
36
+ constructor(message?: string);
37
+ }
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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;CACrB;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"}
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * B4n1Web TypeScript Types
3
+ */
4
+ export var BrowserMode;
5
+ (function (BrowserMode) {
6
+ BrowserMode["LIGHT"] = "light";
7
+ BrowserMode["JS"] = "js";
8
+ BrowserMode["RENDER"] = "render";
9
+ })(BrowserMode || (BrowserMode = {}));
10
+ export class BinaryNotFoundError extends Error {
11
+ constructor(message = 'B4n1Web binary not found. Please install it first:\n curl -sL https://web.b4n1.com/install | bash') {
12
+ super(message);
13
+ this.name = 'BinaryNotFoundError';
14
+ }
15
+ }
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,wBAAS,CAAA;IACT,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAiCD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,oGAAoG;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "b4n1-web",
3
+ "version": "0.3.0",
4
+ "description": "B4n1Web SDK for JavaScript/TypeScript - Agentic Browser Engine",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "keywords": [
26
+ "browser",
27
+ "agent",
28
+ "automation",
29
+ "web-scraping",
30
+ "headless"
31
+ ],
32
+ "author": "Bani Montoya <banimontoya@gmail.com>",
33
+ "license": "MIT",
34
+ "homepage": "https://web.b4n1.com",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/B4N1-com/b4n1-web.git"
38
+ },
39
+ "dependencies": {
40
+ "undici": "^6.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^20.0.0",
44
+ "jest": "^29.7.0",
45
+ "typescript": "^5.0.0",
46
+ "vitest": "^4.1.2"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }