b4n1-web 0.7.0 → 0.9.3
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 +69 -107
- package/bin/b4n1web +0 -0
- package/bin/b4n1web-linux +0 -0
- package/dist/binary.d.ts +4 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +108 -0
- package/dist/binary.js.map +1 -0
- package/dist/browser.d.ts +20 -22
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +124 -174
- package/dist/browser.js.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/page.d.ts +12 -0
- package/dist/page.d.ts.map +1 -0
- package/dist/page.js +28 -0
- package/dist/page.js.map +1 -0
- package/dist/security.d.ts +46 -46
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +128 -94
- package/dist/security.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
package/dist/security.d.ts
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* B4n1Web SecurityShield
|
|
2
|
+
* B4n1Web SecurityShield — URL security validation with in-memory cache.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
21
|
+
constructor(opts?: SecurityShieldOptions);
|
|
32
22
|
/**
|
|
33
|
-
* Check
|
|
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(
|
|
38
|
+
isUrlSafe(rawURL: string): SecurityCheckResult;
|
|
36
39
|
/**
|
|
37
|
-
*
|
|
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
|
-
*
|
|
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
|
package/dist/security.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
3
|
+
* B4n1Web SecurityShield — URL security validation with in-memory cache.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
-
|
|
11
|
-
const
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
this.cacheDays = options.cacheDays ?? 7;
|
|
32
|
-
this.cache = new Map();
|
|
33
|
-
}
|
|
18
|
+
cacheDays;
|
|
19
|
+
cache;
|
|
34
20
|
/**
|
|
35
|
-
*
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
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(
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
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
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
69
|
-
const expires = Date.now() + this.cacheDays *
|
|
70
|
-
this.cache.set(
|
|
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
|
-
*
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
108
|
-
const
|
|
109
|
-
|
|
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
|
package/dist/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":";AAAA
|
|
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
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
3
|
+
"version": "0.9.3",
|
|
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://
|
|
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.6"
|
|
42
43
|
},
|
|
43
44
|
"engines": {
|
|
44
45
|
"node": ">=18.0.0"
|