onbuzz 3.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/LICENSE +267 -0
- package/README.md +425 -0
- package/bin/cli.js +556 -0
- package/bin/loxia-terminal-v2.js +162 -0
- package/bin/loxia-terminal.js +90 -0
- package/bin/start-with-terminal.js +200 -0
- package/node_modules/@isaacs/balanced-match/LICENSE.md +23 -0
- package/node_modules/@isaacs/balanced-match/README.md +60 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts +9 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js +59 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts +9 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.js +54 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/balanced-match/package.json +79 -0
- package/node_modules/@isaacs/brace-expansion/LICENSE +23 -0
- package/node_modules/@isaacs/brace-expansion/README.md +97 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts +6 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js +199 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts +6 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.js +195 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/brace-expansion/package.json +60 -0
- package/node_modules/glob/LICENSE.md +63 -0
- package/node_modules/glob/README.md +1177 -0
- package/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
- package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/glob.js +247 -0
- package/node_modules/glob/dist/commonjs/glob.js.map +1 -0
- package/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
- package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/has-magic.js +27 -0
- package/node_modules/glob/dist/commonjs/has-magic.js.map +1 -0
- package/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
- package/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/ignore.js +119 -0
- package/node_modules/glob/dist/commonjs/ignore.js.map +1 -0
- package/node_modules/glob/dist/commonjs/index.d.ts +97 -0
- package/node_modules/glob/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/index.js +68 -0
- package/node_modules/glob/dist/commonjs/index.js.map +1 -0
- package/node_modules/glob/dist/commonjs/index.min.js +4 -0
- package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/glob/dist/commonjs/package.json +3 -0
- package/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
- package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/pattern.js +219 -0
- package/node_modules/glob/dist/commonjs/pattern.js.map +1 -0
- package/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
- package/node_modules/glob/dist/commonjs/processor.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/processor.js +301 -0
- package/node_modules/glob/dist/commonjs/processor.js.map +1 -0
- package/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
- package/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/walker.js +387 -0
- package/node_modules/glob/dist/commonjs/walker.js.map +1 -0
- package/node_modules/glob/dist/esm/glob.d.ts +388 -0
- package/node_modules/glob/dist/esm/glob.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/glob.js +243 -0
- package/node_modules/glob/dist/esm/glob.js.map +1 -0
- package/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
- package/node_modules/glob/dist/esm/has-magic.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/has-magic.js +23 -0
- package/node_modules/glob/dist/esm/has-magic.js.map +1 -0
- package/node_modules/glob/dist/esm/ignore.d.ts +24 -0
- package/node_modules/glob/dist/esm/ignore.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/ignore.js +115 -0
- package/node_modules/glob/dist/esm/ignore.js.map +1 -0
- package/node_modules/glob/dist/esm/index.d.ts +97 -0
- package/node_modules/glob/dist/esm/index.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/index.js +55 -0
- package/node_modules/glob/dist/esm/index.js.map +1 -0
- package/node_modules/glob/dist/esm/index.min.js +4 -0
- package/node_modules/glob/dist/esm/index.min.js.map +7 -0
- package/node_modules/glob/dist/esm/package.json +3 -0
- package/node_modules/glob/dist/esm/pattern.d.ts +76 -0
- package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/pattern.js +215 -0
- package/node_modules/glob/dist/esm/pattern.js.map +1 -0
- package/node_modules/glob/dist/esm/processor.d.ts +59 -0
- package/node_modules/glob/dist/esm/processor.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/processor.js +294 -0
- package/node_modules/glob/dist/esm/processor.js.map +1 -0
- package/node_modules/glob/dist/esm/walker.d.ts +97 -0
- package/node_modules/glob/dist/esm/walker.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/walker.js +381 -0
- package/node_modules/glob/dist/esm/walker.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/LICENSE.md +55 -0
- package/node_modules/glob/node_modules/minimatch/README.md +453 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +591 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +15 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +30 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +1029 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/package.json +3 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +22 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +38 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +587 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +15 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +26 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +94 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +1016 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/package.json +3 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +22 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +34 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/package.json +67 -0
- package/node_modules/glob/package.json +101 -0
- package/node_modules/minipass/LICENSE +15 -0
- package/node_modules/minipass/README.md +825 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts +549 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/commonjs/index.js +1028 -0
- package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
- package/node_modules/minipass/dist/commonjs/package.json +3 -0
- package/node_modules/minipass/dist/esm/index.d.ts +549 -0
- package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/esm/index.js +1018 -0
- package/node_modules/minipass/dist/esm/index.js.map +1 -0
- package/node_modules/minipass/dist/esm/package.json +3 -0
- package/node_modules/minipass/package.json +82 -0
- package/node_modules/package-json-from-dist/LICENSE.md +63 -0
- package/node_modules/package-json-from-dist/README.md +110 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +89 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.js +134 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +1 -0
- package/node_modules/package-json-from-dist/dist/commonjs/package.json +3 -0
- package/node_modules/package-json-from-dist/dist/esm/index.d.ts +89 -0
- package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +1 -0
- package/node_modules/package-json-from-dist/dist/esm/index.js +129 -0
- package/node_modules/package-json-from-dist/dist/esm/index.js.map +1 -0
- package/node_modules/package-json-from-dist/dist/esm/package.json +3 -0
- package/node_modules/package-json-from-dist/package.json +68 -0
- package/node_modules/path-scurry/LICENSE.md +55 -0
- package/node_modules/path-scurry/README.md +636 -0
- package/node_modules/path-scurry/dist/commonjs/index.d.ts +1115 -0
- package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/path-scurry/dist/commonjs/index.js +2018 -0
- package/node_modules/path-scurry/dist/commonjs/index.js.map +1 -0
- package/node_modules/path-scurry/dist/commonjs/package.json +3 -0
- package/node_modules/path-scurry/dist/esm/index.d.ts +1115 -0
- package/node_modules/path-scurry/dist/esm/index.d.ts.map +1 -0
- package/node_modules/path-scurry/dist/esm/index.js +1983 -0
- package/node_modules/path-scurry/dist/esm/index.js.map +1 -0
- package/node_modules/path-scurry/dist/esm/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/LICENSE.md +55 -0
- package/node_modules/path-scurry/node_modules/lru-cache/README.md +383 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +1323 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +1589 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +1323 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +1585 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/package.json +101 -0
- package/node_modules/path-scurry/package.json +88 -0
- package/node_modules/rimraf/LICENSE.md +55 -0
- package/node_modules/rimraf/README.md +226 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.js +58 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/error.d.ts +6 -0
- package/node_modules/rimraf/dist/commonjs/error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/error.js +10 -0
- package/node_modules/rimraf/dist/commonjs/error.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.js +38 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fs.d.ts +15 -0
- package/node_modules/rimraf/dist/commonjs/fs.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fs.js +33 -0
- package/node_modules/rimraf/dist/commonjs/fs.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.js +24 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/index.d.ts +50 -0
- package/node_modules/rimraf/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/index.js +78 -0
- package/node_modules/rimraf/dist/commonjs/index.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts +34 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.js +53 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/package.json +3 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.js +48 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.js +19 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts +8 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.js +65 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.js +8 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js +138 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.js +24 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.js +103 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.js +159 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/use-native.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/use-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/use-native.js +18 -0
- package/node_modules/rimraf/dist/commonjs/use-native.js.map +1 -0
- package/node_modules/rimraf/dist/esm/bin.d.mts +3 -0
- package/node_modules/rimraf/dist/esm/bin.d.mts.map +1 -0
- package/node_modules/rimraf/dist/esm/bin.mjs +250 -0
- package/node_modules/rimraf/dist/esm/bin.mjs.map +1 -0
- package/node_modules/rimraf/dist/esm/default-tmp.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/default-tmp.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/default-tmp.js +55 -0
- package/node_modules/rimraf/dist/esm/default-tmp.js.map +1 -0
- package/node_modules/rimraf/dist/esm/error.d.ts +6 -0
- package/node_modules/rimraf/dist/esm/error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/error.js +5 -0
- package/node_modules/rimraf/dist/esm/error.js.map +1 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.js +33 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.js.map +1 -0
- package/node_modules/rimraf/dist/esm/fs.d.ts +15 -0
- package/node_modules/rimraf/dist/esm/fs.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/fs.js +18 -0
- package/node_modules/rimraf/dist/esm/fs.js.map +1 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.js +19 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.js.map +1 -0
- package/node_modules/rimraf/dist/esm/index.d.ts +50 -0
- package/node_modules/rimraf/dist/esm/index.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/index.js +70 -0
- package/node_modules/rimraf/dist/esm/index.js.map +1 -0
- package/node_modules/rimraf/dist/esm/opt-arg.d.ts +34 -0
- package/node_modules/rimraf/dist/esm/opt-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/opt-arg.js +46 -0
- package/node_modules/rimraf/dist/esm/opt-arg.js.map +1 -0
- package/node_modules/rimraf/dist/esm/package.json +3 -0
- package/node_modules/rimraf/dist/esm/path-arg.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/path-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/path-arg.js +46 -0
- package/node_modules/rimraf/dist/esm/path-arg.js.map +1 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.js +14 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.js.map +1 -0
- package/node_modules/rimraf/dist/esm/retry-busy.d.ts +8 -0
- package/node_modules/rimraf/dist/esm/retry-busy.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/retry-busy.js +60 -0
- package/node_modules/rimraf/dist/esm/retry-busy.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.js +5 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.js +133 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.js +19 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.js +98 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.js +154 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.js.map +1 -0
- package/node_modules/rimraf/dist/esm/use-native.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/use-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/use-native.js +15 -0
- package/node_modules/rimraf/dist/esm/use-native.js.map +1 -0
- package/node_modules/rimraf/package.json +92 -0
- package/package.json +152 -0
- package/scripts/install-scanners.js +258 -0
- package/scripts/watchdog.js +147 -0
- package/src/analyzers/CSSAnalyzer.js +297 -0
- package/src/analyzers/ConfigValidator.js +690 -0
- package/src/analyzers/ESLintAnalyzer.js +320 -0
- package/src/analyzers/JavaScriptAnalyzer.js +261 -0
- package/src/analyzers/PrettierFormatter.js +247 -0
- package/src/analyzers/PythonAnalyzer.js +283 -0
- package/src/analyzers/SecurityAnalyzer.js +729 -0
- package/src/analyzers/SparrowAnalyzer.js +341 -0
- package/src/analyzers/TypeScriptAnalyzer.js +247 -0
- package/src/analyzers/codeCloneDetector/analyzer.js +344 -0
- package/src/analyzers/codeCloneDetector/detector.js +250 -0
- package/src/analyzers/codeCloneDetector/index.js +192 -0
- package/src/analyzers/codeCloneDetector/parser.js +199 -0
- package/src/analyzers/codeCloneDetector/reporter.js +148 -0
- package/src/analyzers/codeCloneDetector/scanner.js +88 -0
- package/src/core/agentPool.js +1957 -0
- package/src/core/agentScheduler.js +3212 -0
- package/src/core/contextManager.js +709 -0
- package/src/core/flowExecutor.js +928 -0
- package/src/core/messageProcessor.js +808 -0
- package/src/core/orchestrator.js +584 -0
- package/src/core/stateManager.js +1500 -0
- package/src/index.js +972 -0
- package/src/interfaces/cli.js +553 -0
- package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +208 -0
- package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +236 -0
- package/src/interfaces/terminal/__tests__/smoke/agents.test.js +138 -0
- package/src/interfaces/terminal/__tests__/smoke/components.test.js +137 -0
- package/src/interfaces/terminal/__tests__/smoke/connection.test.js +350 -0
- package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -0
- package/src/interfaces/terminal/__tests__/smoke/imports.test.js +332 -0
- package/src/interfaces/terminal/__tests__/smoke/messages.test.js +256 -0
- package/src/interfaces/terminal/__tests__/smoke/tools.test.js +388 -0
- package/src/interfaces/terminal/api/apiClient.js +299 -0
- package/src/interfaces/terminal/api/messageRouter.js +262 -0
- package/src/interfaces/terminal/api/session.js +266 -0
- package/src/interfaces/terminal/api/websocket.js +497 -0
- package/src/interfaces/terminal/components/AgentCreator.js +705 -0
- package/src/interfaces/terminal/components/AgentEditor.js +678 -0
- package/src/interfaces/terminal/components/AgentSwitcher.js +330 -0
- package/src/interfaces/terminal/components/ErrorBoundary.js +92 -0
- package/src/interfaces/terminal/components/ErrorPanel.js +264 -0
- package/src/interfaces/terminal/components/Header.js +28 -0
- package/src/interfaces/terminal/components/HelpPanel.js +231 -0
- package/src/interfaces/terminal/components/InputBox.js +118 -0
- package/src/interfaces/terminal/components/Layout.js +603 -0
- package/src/interfaces/terminal/components/LoadingSpinner.js +71 -0
- package/src/interfaces/terminal/components/MessageList.js +281 -0
- package/src/interfaces/terminal/components/MultilineTextInput.js +251 -0
- package/src/interfaces/terminal/components/SearchPanel.js +265 -0
- package/src/interfaces/terminal/components/SettingsPanel.js +415 -0
- package/src/interfaces/terminal/components/StatusBar.js +65 -0
- package/src/interfaces/terminal/components/TextInput.js +127 -0
- package/src/interfaces/terminal/config/agentEditorConstants.js +227 -0
- package/src/interfaces/terminal/config/constants.js +393 -0
- package/src/interfaces/terminal/index.js +168 -0
- package/src/interfaces/terminal/state/useAgentControl.js +496 -0
- package/src/interfaces/terminal/state/useAgents.js +537 -0
- package/src/interfaces/terminal/state/useConnection.js +444 -0
- package/src/interfaces/terminal/state/useMessages.js +630 -0
- package/src/interfaces/terminal/state/useTools.js +554 -0
- package/src/interfaces/terminal/utils/debugLogger.js +44 -0
- package/src/interfaces/terminal/utils/settingsStorage.js +232 -0
- package/src/interfaces/terminal/utils/theme.js +85 -0
- package/src/interfaces/webServer.js +5457 -0
- package/src/modules/fileExplorer/controller.js +413 -0
- package/src/modules/fileExplorer/index.js +37 -0
- package/src/modules/fileExplorer/middleware.js +92 -0
- package/src/modules/fileExplorer/routes.js +158 -0
- package/src/modules/fileExplorer/types.js +44 -0
- package/src/services/agentActivityService.js +399 -0
- package/src/services/aiService.js +2618 -0
- package/src/services/apiKeyManager.js +334 -0
- package/src/services/benchmarkService.js +196 -0
- package/src/services/budgetService.js +565 -0
- package/src/services/contextInjectionService.js +268 -0
- package/src/services/conversationCompactionService.js +1103 -0
- package/src/services/credentialVault.js +685 -0
- package/src/services/errorHandler.js +810 -0
- package/src/services/fileAttachmentService.js +547 -0
- package/src/services/flowContextService.js +189 -0
- package/src/services/memoryService.js +521 -0
- package/src/services/modelRouterService.js +365 -0
- package/src/services/modelsService.js +323 -0
- package/src/services/ollamaService.js +452 -0
- package/src/services/portRegistry.js +336 -0
- package/src/services/portTracker.js +223 -0
- package/src/services/projectDetector.js +404 -0
- package/src/services/promptService.js +372 -0
- package/src/services/qualityInspector.js +796 -0
- package/src/services/scheduleService.js +725 -0
- package/src/services/serviceRegistry.js +386 -0
- package/src/services/skillsService.js +486 -0
- package/src/services/telegramService.js +920 -0
- package/src/services/tokenCountingService.js +316 -0
- package/src/services/visualEditorBridge.js +1033 -0
- package/src/services/visualEditorServer.js +1727 -0
- package/src/services/whatsappService.js +663 -0
- package/src/tools/__tests__/webTool.e2e.test.js +569 -0
- package/src/tools/__tests__/webTool.unit.test.js +195 -0
- package/src/tools/agentCommunicationTool.js +1343 -0
- package/src/tools/agentDelayTool.js +498 -0
- package/src/tools/asyncToolManager.js +604 -0
- package/src/tools/baseTool.js +887 -0
- package/src/tools/browserTool.js +897 -0
- package/src/tools/cloneDetectionTool.js +581 -0
- package/src/tools/codeMapTool.js +857 -0
- package/src/tools/dependencyResolverTool.js +1212 -0
- package/src/tools/docxTool.js +623 -0
- package/src/tools/excelTool.js +636 -0
- package/src/tools/fileContentReplaceTool.js +840 -0
- package/src/tools/fileTreeTool.js +833 -0
- package/src/tools/filesystemTool.js +1217 -0
- package/src/tools/helpTool.js +198 -0
- package/src/tools/imageTool.js +1034 -0
- package/src/tools/importAnalyzerTool.js +1056 -0
- package/src/tools/jobDoneTool.js +388 -0
- package/src/tools/memoryTool.js +554 -0
- package/src/tools/pdfTool.js +627 -0
- package/src/tools/seekTool.js +883 -0
- package/src/tools/skillsTool.js +276 -0
- package/src/tools/staticAnalysisTool.js +2146 -0
- package/src/tools/taskManagerTool.js +2836 -0
- package/src/tools/terminalTool.js +2486 -0
- package/src/tools/userPromptTool.js +474 -0
- package/src/tools/videoTool.js +1139 -0
- package/src/tools/visionTool.js +507 -0
- package/src/tools/visualEditorTool.js +1175 -0
- package/src/tools/webTool.js +3114 -0
- package/src/tools/whatsappTool.js +457 -0
- package/src/types/agent.js +519 -0
- package/src/types/contextReference.js +972 -0
- package/src/types/conversation.js +730 -0
- package/src/types/toolCommand.js +747 -0
- package/src/utilities/attachmentValidator.js +288 -0
- package/src/utilities/browserStealth.js +630 -0
- package/src/utilities/configManager.js +618 -0
- package/src/utilities/constants.js +870 -0
- package/src/utilities/directoryAccessManager.js +566 -0
- package/src/utilities/fileProcessor.js +307 -0
- package/src/utilities/humanBehavior.js +453 -0
- package/src/utilities/jsonRepair.js +242 -0
- package/src/utilities/logger.js +436 -0
- package/src/utilities/platformUtils.js +255 -0
- package/src/utilities/platformUtils.test.js +98 -0
- package/src/utilities/stealthConstants.js +377 -0
- package/src/utilities/structuredFileValidator.js +699 -0
- package/src/utilities/tagParser.js +878 -0
- package/src/utilities/toolConstants.js +415 -0
- package/src/utilities/userDataDir.js +300 -0
- package/web-ui/build/brands/autopilot/favicon.svg +1 -0
- package/web-ui/build/brands/autopilot/logo.webp +0 -0
- package/web-ui/build/brands/onbuzz/favicon.svg +1 -0
- package/web-ui/build/brands/onbuzz/logo-text.webp +0 -0
- package/web-ui/build/brands/onbuzz/logo.webp +0 -0
- package/web-ui/build/index.html +15 -0
- package/web-ui/build/logo.png +0 -0
- package/web-ui/build/logo2.png +0 -0
- package/web-ui/build/static/index-SmQFfvBs.js +746 -0
- package/web-ui/build/static/index-V2ySwjHp.css +1 -0
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Stealth Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a stealthy Puppeteer browser instance with anti-detection measures.
|
|
5
|
+
* Uses puppeteer-extra with stealth plugin for fingerprint evasion.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import puppeteer from 'puppeteer-extra';
|
|
9
|
+
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
|
|
10
|
+
import {
|
|
11
|
+
BROWSER_CONFIG,
|
|
12
|
+
USER_AGENTS,
|
|
13
|
+
STEALTH_EVASIONS,
|
|
14
|
+
STEALTH_LEVELS,
|
|
15
|
+
DEFAULT_STEALTH_LEVEL
|
|
16
|
+
} from './stealthConstants.js';
|
|
17
|
+
import { getPlatform } from './platformUtils.js';
|
|
18
|
+
|
|
19
|
+
// Track if stealth plugin has been configured
|
|
20
|
+
let stealthPluginConfigured = false;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Configure and apply stealth plugin with all evasions enabled
|
|
24
|
+
* @param {Object} options - Configuration options
|
|
25
|
+
* @param {string[]} options.excludeEvasions - Evasions to exclude
|
|
26
|
+
* @returns {void}
|
|
27
|
+
*/
|
|
28
|
+
function configureStealthPlugin(options = {}) {
|
|
29
|
+
// Only configure once (puppeteer-extra plugins are singletons)
|
|
30
|
+
if (stealthPluginConfigured) return;
|
|
31
|
+
|
|
32
|
+
const { excludeEvasions = STEALTH_EVASIONS.EXCLUDE } = options;
|
|
33
|
+
|
|
34
|
+
const stealth = StealthPlugin();
|
|
35
|
+
|
|
36
|
+
// Ensure ALL evasions are enabled for maximum stealth
|
|
37
|
+
const allEvasions = new Set([
|
|
38
|
+
'chrome.app',
|
|
39
|
+
'chrome.csi',
|
|
40
|
+
'chrome.loadTimes',
|
|
41
|
+
'chrome.runtime',
|
|
42
|
+
'defaultArgs',
|
|
43
|
+
'iframe.contentWindow',
|
|
44
|
+
'media.codecs',
|
|
45
|
+
'navigator.hardwareConcurrency',
|
|
46
|
+
'navigator.languages',
|
|
47
|
+
'navigator.permissions',
|
|
48
|
+
'navigator.plugins',
|
|
49
|
+
'navigator.webdriver',
|
|
50
|
+
'sourceurl',
|
|
51
|
+
'user-agent-override',
|
|
52
|
+
'webgl.vendor',
|
|
53
|
+
'window.outerdimensions'
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
stealth.enabledEvasions = allEvasions;
|
|
57
|
+
|
|
58
|
+
// Remove any excluded evasions
|
|
59
|
+
if (excludeEvasions && excludeEvasions.length > 0) {
|
|
60
|
+
excludeEvasions.forEach(evasion => {
|
|
61
|
+
stealth.enabledEvasions.delete(evasion);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
puppeteer.use(stealth);
|
|
66
|
+
stealthPluginConfigured = true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Get a random user agent string based on current platform
|
|
71
|
+
* @param {string} [forcePlatform] - Force specific platform (windows, macos, linux)
|
|
72
|
+
* @returns {string} Random user agent string
|
|
73
|
+
*/
|
|
74
|
+
export function getRandomUserAgent(forcePlatform = null) {
|
|
75
|
+
const platform = forcePlatform || getPlatform();
|
|
76
|
+
|
|
77
|
+
let agents;
|
|
78
|
+
switch (platform) {
|
|
79
|
+
case 'darwin':
|
|
80
|
+
case 'macos':
|
|
81
|
+
agents = USER_AGENTS.MACOS;
|
|
82
|
+
break;
|
|
83
|
+
case 'linux':
|
|
84
|
+
agents = USER_AGENTS.LINUX;
|
|
85
|
+
break;
|
|
86
|
+
case 'win32':
|
|
87
|
+
case 'windows':
|
|
88
|
+
default:
|
|
89
|
+
agents = USER_AGENTS.WINDOWS;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return agents[Math.floor(Math.random() * agents.length)];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Get a random viewport configuration
|
|
98
|
+
* @returns {Object} Viewport configuration { width, height }
|
|
99
|
+
*/
|
|
100
|
+
export function getRandomViewport() {
|
|
101
|
+
const viewports = BROWSER_CONFIG.VIEWPORT_VARIANTS;
|
|
102
|
+
return viewports[Math.floor(Math.random() * viewports.length)];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Generate browser launch arguments for stealth mode
|
|
107
|
+
* @param {Object} options - Configuration options
|
|
108
|
+
* @param {string} options.userAgent - User agent to use (random if not specified)
|
|
109
|
+
* @param {boolean} options.headless - Whether to run headless
|
|
110
|
+
* @returns {string[]} Array of Chrome launch arguments
|
|
111
|
+
*/
|
|
112
|
+
export function getStealthLaunchArgs(options = {}) {
|
|
113
|
+
const { userAgent = getRandomUserAgent(), headless = true } = options;
|
|
114
|
+
|
|
115
|
+
const args = [
|
|
116
|
+
// Sandbox settings (required for some environments)
|
|
117
|
+
'--no-sandbox',
|
|
118
|
+
'--disable-setuid-sandbox',
|
|
119
|
+
|
|
120
|
+
// Performance optimizations
|
|
121
|
+
'--disable-dev-shm-usage',
|
|
122
|
+
|
|
123
|
+
// CRITICAL: Disable automation detection flags
|
|
124
|
+
'--disable-blink-features=AutomationControlled',
|
|
125
|
+
|
|
126
|
+
// Disable infobars ("Chrome is being controlled by automated software")
|
|
127
|
+
'--disable-infobars',
|
|
128
|
+
|
|
129
|
+
// Disable extensions (but not in a detectable way)
|
|
130
|
+
'--disable-extensions',
|
|
131
|
+
|
|
132
|
+
// Set user agent
|
|
133
|
+
`--user-agent=${userAgent}`,
|
|
134
|
+
|
|
135
|
+
// Disable automation extension
|
|
136
|
+
'--disable-component-extensions-with-background-pages',
|
|
137
|
+
|
|
138
|
+
// Window size (matches viewport for consistency)
|
|
139
|
+
'--window-size=1920,1080',
|
|
140
|
+
|
|
141
|
+
// Additional anti-detection
|
|
142
|
+
'--disable-background-networking',
|
|
143
|
+
'--disable-default-apps',
|
|
144
|
+
'--disable-sync',
|
|
145
|
+
'--disable-translate',
|
|
146
|
+
'--metrics-recording-only',
|
|
147
|
+
'--no-first-run',
|
|
148
|
+
|
|
149
|
+
// REMOVED: --use-gl=swiftshader (MAJOR DETECTION VECTOR - SwiftShader is bot indicator)
|
|
150
|
+
// REMOVED: --disable-accelerated-2d-canvas (suspicious flag)
|
|
151
|
+
// REMOVED: --disable-software-rasterizer (contradicts and is detectable)
|
|
152
|
+
|
|
153
|
+
// Enable hardware acceleration for realistic fingerprint
|
|
154
|
+
'--enable-webgl',
|
|
155
|
+
'--enable-accelerated-2d-canvas',
|
|
156
|
+
|
|
157
|
+
// Disable features that leak automation
|
|
158
|
+
'--disable-hang-monitor',
|
|
159
|
+
'--disable-ipc-flooding-protection',
|
|
160
|
+
'--disable-popup-blocking',
|
|
161
|
+
'--disable-prompt-on-repost',
|
|
162
|
+
'--disable-renderer-backgrounding',
|
|
163
|
+
'--disable-backgrounding-occluded-windows',
|
|
164
|
+
|
|
165
|
+
// Privacy-related (appear more like real user)
|
|
166
|
+
'--disable-client-side-phishing-detection',
|
|
167
|
+
|
|
168
|
+
// Prevent WebRTC IP leak
|
|
169
|
+
'--disable-webrtc-hw-encoding',
|
|
170
|
+
'--disable-webrtc-hw-decoding',
|
|
171
|
+
'--enforce-webrtc-ip-permission-check'
|
|
172
|
+
];
|
|
173
|
+
|
|
174
|
+
// Only disable GPU in headless mode (detection vector otherwise)
|
|
175
|
+
if (headless) {
|
|
176
|
+
args.push('--disable-gpu');
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return args;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Create a stealthy browser instance
|
|
184
|
+
* @param {Object} options - Browser options
|
|
185
|
+
* @param {string} options.stealthLevel - Stealth level: 'standard' or 'maximum' (default: 'standard')
|
|
186
|
+
* @param {boolean} options.headless - Override headless mode (uses stealthLevel if not specified)
|
|
187
|
+
* @param {string} options.userAgent - Specific user agent (random if not specified)
|
|
188
|
+
* @param {Object} options.viewport - Viewport dimensions (random if not specified)
|
|
189
|
+
* @param {string[]} options.excludeEvasions - Stealth evasions to exclude
|
|
190
|
+
* @param {Object} options.logger - Logger instance
|
|
191
|
+
* @returns {Promise<Browser>} Puppeteer browser instance
|
|
192
|
+
*/
|
|
193
|
+
export async function createStealthBrowser(options = {}) {
|
|
194
|
+
const {
|
|
195
|
+
stealthLevel = DEFAULT_STEALTH_LEVEL,
|
|
196
|
+
headless,
|
|
197
|
+
userAgent = getRandomUserAgent(),
|
|
198
|
+
viewport = getRandomViewport(),
|
|
199
|
+
excludeEvasions = []
|
|
200
|
+
} = options;
|
|
201
|
+
|
|
202
|
+
// Ensure logger is valid (null doesn't trigger default in destructuring)
|
|
203
|
+
const logger = options.logger || console;
|
|
204
|
+
|
|
205
|
+
// Resolve stealth level configuration
|
|
206
|
+
const levelConfig = STEALTH_LEVELS[stealthLevel.toUpperCase()] || STEALTH_LEVELS.STANDARD;
|
|
207
|
+
|
|
208
|
+
// headless parameter overrides stealthLevel if explicitly provided
|
|
209
|
+
const useHeadless = headless !== undefined ? headless : levelConfig.headless;
|
|
210
|
+
const isHeadless = useHeadless === true || useHeadless === 'new';
|
|
211
|
+
|
|
212
|
+
// Configure stealth plugin (only needs to be done once)
|
|
213
|
+
configureStealthPlugin({ excludeEvasions });
|
|
214
|
+
|
|
215
|
+
logger.info?.('[BrowserStealth] Creating stealth browser', {
|
|
216
|
+
stealthLevel,
|
|
217
|
+
headless: useHeadless,
|
|
218
|
+
viewport,
|
|
219
|
+
userAgentPrefix: userAgent.substring(0, 50) + '...'
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
const browser = await puppeteer.launch({
|
|
223
|
+
headless: useHeadless === true ? 'new' : useHeadless,
|
|
224
|
+
args: getStealthLaunchArgs({ userAgent, headless: isHeadless }),
|
|
225
|
+
ignoreDefaultArgs: ['--enable-automation'],
|
|
226
|
+
defaultViewport: {
|
|
227
|
+
width: viewport.width,
|
|
228
|
+
height: viewport.height
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Store configuration on browser instance for reference
|
|
233
|
+
browser._stealthConfig = {
|
|
234
|
+
stealthLevel,
|
|
235
|
+
headless: useHeadless,
|
|
236
|
+
userAgent,
|
|
237
|
+
viewport,
|
|
238
|
+
createdAt: Date.now()
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
logger.info?.('[BrowserStealth] Stealth browser created successfully', {
|
|
242
|
+
stealthLevel,
|
|
243
|
+
headless: useHeadless
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
return browser;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Create a new page with stealth enhancements
|
|
251
|
+
* @param {Browser} browser - Puppeteer browser instance
|
|
252
|
+
* @param {Object} options - Page options
|
|
253
|
+
* @param {string} options.userAgent - Override user agent for this page
|
|
254
|
+
* @param {Object} options.viewport - Override viewport for this page
|
|
255
|
+
* @param {Object} options.logger - Logger instance
|
|
256
|
+
* @returns {Promise<Page>} Puppeteer page instance
|
|
257
|
+
*/
|
|
258
|
+
export async function createStealthPage(browser, options = {}) {
|
|
259
|
+
const {
|
|
260
|
+
userAgent = browser._stealthConfig?.userAgent || getRandomUserAgent(),
|
|
261
|
+
viewport = browser._stealthConfig?.viewport || getRandomViewport(),
|
|
262
|
+
maxRetries = 3
|
|
263
|
+
} = options;
|
|
264
|
+
|
|
265
|
+
// Ensure logger is valid (null doesn't trigger default in destructuring)
|
|
266
|
+
const logger = options.logger || console;
|
|
267
|
+
|
|
268
|
+
let page;
|
|
269
|
+
let lastError;
|
|
270
|
+
|
|
271
|
+
// Retry page creation to handle race conditions with stealth plugin
|
|
272
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
273
|
+
try {
|
|
274
|
+
page = await browser.newPage();
|
|
275
|
+
|
|
276
|
+
// Give stealth plugin more time to apply evasions
|
|
277
|
+
// puppeteer-extra-plugin-stealth has timing issues with newer puppeteer versions
|
|
278
|
+
await new Promise(resolve => setTimeout(resolve, 300));
|
|
279
|
+
|
|
280
|
+
// Wait for page to be ready (handles "Requesting main frame too early" issue)
|
|
281
|
+
try {
|
|
282
|
+
await page.waitForFunction(() => true, { timeout: 2000 });
|
|
283
|
+
} catch (frameError) {
|
|
284
|
+
// Ignore frame timing errors - page may still work
|
|
285
|
+
logger.warn?.('[BrowserStealth] Frame wait warning (non-fatal):', frameError.message);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Verify page is still open
|
|
289
|
+
if (page.isClosed()) {
|
|
290
|
+
throw new Error('Page closed during stealth setup');
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
break; // Success
|
|
294
|
+
} catch (error) {
|
|
295
|
+
lastError = error;
|
|
296
|
+
const isRetryableError = error.message?.includes('Session closed') ||
|
|
297
|
+
error.message?.includes('Target closed') ||
|
|
298
|
+
error.message?.includes('Protocol error') ||
|
|
299
|
+
error.message?.includes('Requesting main frame too early') ||
|
|
300
|
+
error.message?.includes('Connection closed');
|
|
301
|
+
|
|
302
|
+
if (isRetryableError && attempt < maxRetries) {
|
|
303
|
+
logger.warn?.(`[BrowserStealth] Page creation failed (attempt ${attempt}/${maxRetries}), retrying...`);
|
|
304
|
+
await new Promise(resolve => setTimeout(resolve, 500 * attempt)); // Longer backoff
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (!page) {
|
|
313
|
+
throw lastError || new Error('Failed to create page after retries');
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Configure page with error handling for race conditions
|
|
317
|
+
try {
|
|
318
|
+
// Check if page is still valid before configuring
|
|
319
|
+
if (page.isClosed()) {
|
|
320
|
+
throw new Error('Page was closed before configuration could complete');
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Set user agent
|
|
324
|
+
await page.setUserAgent(userAgent);
|
|
325
|
+
|
|
326
|
+
// Set viewport
|
|
327
|
+
await page.setViewport({
|
|
328
|
+
width: viewport.width,
|
|
329
|
+
height: viewport.height,
|
|
330
|
+
deviceScaleFactor: 1,
|
|
331
|
+
hasTouch: false,
|
|
332
|
+
isLandscape: true,
|
|
333
|
+
isMobile: false
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
// Set additional headers to appear more human
|
|
337
|
+
// IMPORTANT: Only set headers that are safe for ALL request types (navigation + XHR/fetch)
|
|
338
|
+
// Headers like 'Upgrade-Insecure-Requests' and 'Sec-Fetch-*' are navigation-only
|
|
339
|
+
// and will break CORS preflight checks on API calls if included here!
|
|
340
|
+
await page.setExtraHTTPHeaders({
|
|
341
|
+
'Accept-Language': 'en-US,en;q=0.9'
|
|
342
|
+
// REMOVED: 'Upgrade-Insecure-Requests' - breaks CORS on API calls
|
|
343
|
+
// REMOVED: 'Sec-Fetch-*' headers - browser sets these automatically and correctly
|
|
344
|
+
// REMOVED: 'Accept-Encoding' - browser handles this
|
|
345
|
+
// REMOVED: 'Accept' - varies by request type, let browser handle it
|
|
346
|
+
});
|
|
347
|
+
} catch (configError) {
|
|
348
|
+
// Close page if it's still open after config error
|
|
349
|
+
try {
|
|
350
|
+
if (!page.isClosed()) await page.close();
|
|
351
|
+
} catch { /* ignore close error */ }
|
|
352
|
+
|
|
353
|
+
// Re-throw with context
|
|
354
|
+
const isTargetClosed = configError.message?.includes('Session closed') ||
|
|
355
|
+
configError.message?.includes('Target closed');
|
|
356
|
+
if (isTargetClosed) {
|
|
357
|
+
throw new Error('Page closed during stealth configuration. Browser may have crashed or been closed externally.');
|
|
358
|
+
}
|
|
359
|
+
throw configError;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Override navigator properties that stealth might miss
|
|
363
|
+
await page.evaluateOnNewDocument(() => {
|
|
364
|
+
// Override webdriver - multiple approaches for maximum coverage
|
|
365
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
366
|
+
get: () => false, // Return false instead of undefined (more realistic)
|
|
367
|
+
configurable: true
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
// Also delete it if it exists
|
|
371
|
+
try {
|
|
372
|
+
delete navigator.webdriver;
|
|
373
|
+
} catch (e) { /* ignore */ }
|
|
374
|
+
|
|
375
|
+
// Add missing navigator.connection (NetworkInformation API) - sites check this!
|
|
376
|
+
if (!navigator.connection) {
|
|
377
|
+
Object.defineProperty(navigator, 'connection', {
|
|
378
|
+
get: () => ({
|
|
379
|
+
effectiveType: '4g',
|
|
380
|
+
rtt: 50,
|
|
381
|
+
downlink: 10,
|
|
382
|
+
saveData: false,
|
|
383
|
+
type: 'wifi',
|
|
384
|
+
onchange: null,
|
|
385
|
+
addEventListener: () => {},
|
|
386
|
+
removeEventListener: () => {},
|
|
387
|
+
dispatchEvent: () => true
|
|
388
|
+
}),
|
|
389
|
+
configurable: true
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Add navigator.deviceMemory (sites check this for fingerprinting)
|
|
394
|
+
if (!navigator.deviceMemory) {
|
|
395
|
+
Object.defineProperty(navigator, 'deviceMemory', {
|
|
396
|
+
get: () => 8, // 8GB - common value
|
|
397
|
+
configurable: true
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// Add navigator.getBattery (some sites check this exists)
|
|
402
|
+
if (!navigator.getBattery) {
|
|
403
|
+
navigator.getBattery = () => Promise.resolve({
|
|
404
|
+
charging: true,
|
|
405
|
+
chargingTime: 0,
|
|
406
|
+
dischargingTime: Infinity,
|
|
407
|
+
level: 1,
|
|
408
|
+
addEventListener: () => {},
|
|
409
|
+
removeEventListener: () => {}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Override Notification.permission (sites check this)
|
|
414
|
+
try {
|
|
415
|
+
Object.defineProperty(Notification, 'permission', {
|
|
416
|
+
get: () => 'default',
|
|
417
|
+
configurable: true
|
|
418
|
+
});
|
|
419
|
+
} catch (e) { /* ignore */ }
|
|
420
|
+
|
|
421
|
+
// Override plugins with realistic plugin array
|
|
422
|
+
const mockPlugins = [
|
|
423
|
+
{
|
|
424
|
+
name: 'Chrome PDF Plugin',
|
|
425
|
+
filename: 'internal-pdf-viewer',
|
|
426
|
+
description: 'Portable Document Format',
|
|
427
|
+
length: 1,
|
|
428
|
+
item: () => null,
|
|
429
|
+
namedItem: () => null,
|
|
430
|
+
[Symbol.iterator]: function* () { yield this; }
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
name: 'Chrome PDF Viewer',
|
|
434
|
+
filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
|
|
435
|
+
description: '',
|
|
436
|
+
length: 1,
|
|
437
|
+
item: () => null,
|
|
438
|
+
namedItem: () => null,
|
|
439
|
+
[Symbol.iterator]: function* () { yield this; }
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
name: 'Native Client',
|
|
443
|
+
filename: 'internal-nacl-plugin',
|
|
444
|
+
description: '',
|
|
445
|
+
length: 2,
|
|
446
|
+
item: () => null,
|
|
447
|
+
namedItem: () => null,
|
|
448
|
+
[Symbol.iterator]: function* () { yield this; }
|
|
449
|
+
}
|
|
450
|
+
];
|
|
451
|
+
|
|
452
|
+
Object.defineProperty(navigator, 'plugins', {
|
|
453
|
+
get: () => {
|
|
454
|
+
const plugins = mockPlugins;
|
|
455
|
+
plugins.item = (i) => plugins[i] || null;
|
|
456
|
+
plugins.namedItem = (name) => plugins.find(p => p.name === name) || null;
|
|
457
|
+
plugins.refresh = () => {};
|
|
458
|
+
return plugins;
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
// Override mimeTypes
|
|
463
|
+
Object.defineProperty(navigator, 'mimeTypes', {
|
|
464
|
+
get: () => {
|
|
465
|
+
const mimeTypes = [
|
|
466
|
+
{ type: 'application/pdf', suffixes: 'pdf', description: 'Portable Document Format' },
|
|
467
|
+
{ type: 'application/x-google-chrome-pdf', suffixes: 'pdf', description: 'Portable Document Format' }
|
|
468
|
+
];
|
|
469
|
+
mimeTypes.item = (i) => mimeTypes[i] || null;
|
|
470
|
+
mimeTypes.namedItem = (name) => mimeTypes.find(m => m.type === name) || null;
|
|
471
|
+
return mimeTypes;
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// Override languages
|
|
476
|
+
Object.defineProperty(navigator, 'languages', {
|
|
477
|
+
get: () => ['en-US', 'en']
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
// Override permissions query
|
|
481
|
+
const originalQuery = window.navigator.permissions.query;
|
|
482
|
+
window.navigator.permissions.query = (parameters) => (
|
|
483
|
+
parameters.name === 'notifications' ?
|
|
484
|
+
Promise.resolve({ state: Notification.permission }) :
|
|
485
|
+
originalQuery(parameters)
|
|
486
|
+
);
|
|
487
|
+
|
|
488
|
+
// Enhanced WebGL vendor/renderer spoofing
|
|
489
|
+
const spoofWebGL = (target) => {
|
|
490
|
+
const getParameter = target.prototype.getParameter;
|
|
491
|
+
target.prototype.getParameter = function(parameter) {
|
|
492
|
+
// UNMASKED_VENDOR_WEBGL
|
|
493
|
+
if (parameter === 37445) {
|
|
494
|
+
return 'Intel Inc.';
|
|
495
|
+
}
|
|
496
|
+
// UNMASKED_RENDERER_WEBGL
|
|
497
|
+
if (parameter === 37446) {
|
|
498
|
+
return 'Intel Iris OpenGL Engine';
|
|
499
|
+
}
|
|
500
|
+
return getParameter.call(this, parameter);
|
|
501
|
+
};
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
// Apply to both WebGL contexts
|
|
505
|
+
if (typeof WebGLRenderingContext !== 'undefined') {
|
|
506
|
+
spoofWebGL(WebGLRenderingContext);
|
|
507
|
+
}
|
|
508
|
+
if (typeof WebGL2RenderingContext !== 'undefined') {
|
|
509
|
+
spoofWebGL(WebGL2RenderingContext);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// Hide automation-related properties (CDP detection)
|
|
513
|
+
const automationProps = [
|
|
514
|
+
'cdc_adoQpoasnfa76pfcZLmcfl_Array',
|
|
515
|
+
'cdc_adoQpoasnfa76pfcZLmcfl_Promise',
|
|
516
|
+
'cdc_adoQpoasnfa76pfcZLmcfl_Symbol',
|
|
517
|
+
'__webdriver_evaluate',
|
|
518
|
+
'__selenium_evaluate',
|
|
519
|
+
'__webdriver_script_function',
|
|
520
|
+
'__webdriver_script_func',
|
|
521
|
+
'__webdriver_script_fn',
|
|
522
|
+
'__fxdriver_evaluate',
|
|
523
|
+
'__driver_unwrapped',
|
|
524
|
+
'__webdriver_unwrapped',
|
|
525
|
+
'__driver_evaluate',
|
|
526
|
+
'__selenium_unwrapped',
|
|
527
|
+
'__fxdriver_unwrapped'
|
|
528
|
+
];
|
|
529
|
+
|
|
530
|
+
automationProps.forEach(prop => {
|
|
531
|
+
try {
|
|
532
|
+
delete window[prop];
|
|
533
|
+
} catch (e) { /* ignore */ }
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
// Override chrome runtime with more complete implementation
|
|
537
|
+
window.chrome = {
|
|
538
|
+
runtime: {
|
|
539
|
+
id: undefined,
|
|
540
|
+
onConnect: { addListener: () => {} },
|
|
541
|
+
onMessage: { addListener: () => {} },
|
|
542
|
+
sendMessage: () => {},
|
|
543
|
+
connect: () => ({ postMessage: () => {}, onMessage: { addListener: () => {} } })
|
|
544
|
+
},
|
|
545
|
+
loadTimes: function() {
|
|
546
|
+
return {
|
|
547
|
+
commitLoadTime: Date.now() / 1000,
|
|
548
|
+
connectionInfo: 'http/1.1',
|
|
549
|
+
finishDocumentLoadTime: Date.now() / 1000,
|
|
550
|
+
finishLoadTime: Date.now() / 1000,
|
|
551
|
+
firstPaintAfterLoadTime: 0,
|
|
552
|
+
firstPaintTime: Date.now() / 1000,
|
|
553
|
+
navigationType: 'Other',
|
|
554
|
+
npnNegotiatedProtocol: 'unknown',
|
|
555
|
+
requestTime: Date.now() / 1000,
|
|
556
|
+
startLoadTime: Date.now() / 1000,
|
|
557
|
+
wasAlternateProtocolAvailable: false,
|
|
558
|
+
wasFetchedViaSpdy: false,
|
|
559
|
+
wasNpnNegotiated: false
|
|
560
|
+
};
|
|
561
|
+
},
|
|
562
|
+
csi: function() {
|
|
563
|
+
return {
|
|
564
|
+
onloadT: Date.now(),
|
|
565
|
+
pageT: Date.now() - performance.timing.navigationStart,
|
|
566
|
+
startE: performance.timing.navigationStart,
|
|
567
|
+
tran: 15
|
|
568
|
+
};
|
|
569
|
+
},
|
|
570
|
+
app: {
|
|
571
|
+
isInstalled: false,
|
|
572
|
+
InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' },
|
|
573
|
+
RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' }
|
|
574
|
+
}
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
// Prevent iframe detection
|
|
578
|
+
try {
|
|
579
|
+
Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', {
|
|
580
|
+
get: function() {
|
|
581
|
+
return this._contentWindow || null;
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
} catch (e) { /* ignore */ }
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
// Store page configuration
|
|
588
|
+
page._stealthConfig = {
|
|
589
|
+
userAgent,
|
|
590
|
+
viewport,
|
|
591
|
+
createdAt: Date.now()
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
logger.info?.('[BrowserStealth] Stealth page created');
|
|
595
|
+
|
|
596
|
+
return page;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Check if a browser instance has stealth configuration
|
|
601
|
+
* @param {Browser} browser - Puppeteer browser instance
|
|
602
|
+
* @returns {boolean} True if stealth configured
|
|
603
|
+
*/
|
|
604
|
+
export function isStealthBrowser(browser) {
|
|
605
|
+
return !!browser._stealthConfig;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Get stealth configuration from browser or page
|
|
610
|
+
* @param {Browser|Page} instance - Browser or page instance
|
|
611
|
+
* @returns {Object|null} Stealth configuration or null
|
|
612
|
+
*/
|
|
613
|
+
export function getStealthConfig(instance) {
|
|
614
|
+
return instance._stealthConfig || null;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
// Re-export stealth levels for convenience
|
|
618
|
+
export { STEALTH_LEVELS, DEFAULT_STEALTH_LEVEL };
|
|
619
|
+
|
|
620
|
+
export default {
|
|
621
|
+
createStealthBrowser,
|
|
622
|
+
createStealthPage,
|
|
623
|
+
getRandomUserAgent,
|
|
624
|
+
getRandomViewport,
|
|
625
|
+
getStealthLaunchArgs,
|
|
626
|
+
isStealthBrowser,
|
|
627
|
+
getStealthConfig,
|
|
628
|
+
STEALTH_LEVELS,
|
|
629
|
+
DEFAULT_STEALTH_LEVEL
|
|
630
|
+
};
|