@jshookmcp/jshook 0.2.3 → 0.2.5
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 +14 -5
- package/README.zh.md +18 -3
- package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
- package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
- package/dist/packages/extension-sdk/src/plugin.js +119 -33
- package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
- package/dist/packages/extension-sdk/src/workflow.js +236 -0
- package/dist/src/config/search-defaults.js +161 -0
- package/dist/src/constants.d.ts +3 -0
- package/dist/src/constants.js +4 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +13 -17
- package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
- package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
- package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
- package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
- package/dist/src/modules/analyzer/PatternDetector.js +3 -3
- package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
- package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
- package/dist/src/modules/browser/BrowserModeManager.js +11 -10
- package/dist/src/modules/browser/TabRegistry.js +2 -2
- package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
- package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
- package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
- package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
- package/dist/src/modules/collector/CodeCollector.js +4 -5
- package/dist/src/modules/collector/DOMInspector.js +48 -58
- package/dist/src/modules/collector/PageController.d.ts +17 -4
- package/dist/src/modules/collector/PageController.js +2 -5
- package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
- package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
- package/dist/src/modules/crypto/CryptoDetector.js +2 -42
- package/dist/src/modules/crypto/CryptoRules.js +1 -1
- package/dist/src/modules/debugger/BlackboxManager.js +1 -1
- package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
- package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
- package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
- package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
- package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
- package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
- package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
- package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
- package/dist/src/modules/deobfuscator/webcrack.js +15 -2
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
- package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
- package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
- package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
- package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
- package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
- package/dist/src/modules/external/ExternalToolRunner.js +25 -22
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
- package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
- package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
- package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
- package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
- package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
- package/dist/src/modules/process/LinuxProcessManager.js +2 -0
- package/dist/src/modules/process/MacProcessManager.js +25 -25
- package/dist/src/modules/process/MemoryManager.d.ts +1 -1
- package/dist/src/modules/process/MemoryManager.js +2 -2
- package/dist/src/modules/process/memory/AuditTrail.js +1 -1
- package/dist/src/modules/process/memory/availability.js +49 -49
- package/dist/src/modules/process/memory/injector.js +185 -185
- package/dist/src/modules/process/memory/reader.js +85 -53
- package/dist/src/modules/process/memory/regions.dump.js +51 -51
- package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
- package/dist/src/modules/process/memory/regions.modules.js +80 -80
- package/dist/src/modules/process/memory/regions.protection.js +148 -115
- package/dist/src/modules/process/memory/scanner.d.ts +5 -1
- package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
- package/dist/src/modules/process/memory/scanner.js +88 -4
- package/dist/src/modules/process/memory/scanner.windows.js +124 -124
- package/dist/src/modules/process/memory/writer.js +98 -58
- package/dist/src/modules/security/ExecutionSandbox.js +51 -52
- package/dist/src/modules/stealth/FingerprintManager.js +1 -1
- package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
- package/dist/src/modules/stealth/StealthScripts.js +18 -13
- package/dist/src/modules/stealth/StealthVerifier.js +1 -3
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
- package/dist/src/modules/trace/TraceDB.js +75 -69
- package/dist/src/modules/trace/TraceRecorder.js +1 -5
- package/dist/src/native/AntiCheatDetector.js +67 -16
- package/dist/src/native/CodeInjector.js +3 -3
- package/dist/src/native/HardwareBreakpoint.js +24 -15
- package/dist/src/native/HeapAnalyzer.js +2 -2
- package/dist/src/native/MemoryController.js +1 -1
- package/dist/src/native/MemoryScanSession.js +2 -2
- package/dist/src/native/MemoryScanner.js +4 -8
- package/dist/src/native/NativeMemoryManager.impl.js +2 -2
- package/dist/src/native/PEAnalyzer.js +14 -15
- package/dist/src/native/PointerChainEngine.js +2 -4
- package/dist/src/native/ScriptLoader.js +4 -9
- package/dist/src/native/Speedhack.js +1 -1
- package/dist/src/native/StructureAnalyzer.js +52 -33
- package/dist/src/native/Win32API.d.ts +1 -0
- package/dist/src/native/Win32API.js +13 -0
- package/dist/src/native/Win32Debug.js +19 -19
- package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
- package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
- package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
- package/dist/src/server/MCPServer.context.d.ts +2 -1
- package/dist/src/server/MCPServer.d.ts +2 -1
- package/dist/src/server/MCPServer.domain.d.ts +1 -1
- package/dist/src/server/MCPServer.domain.js +81 -16
- package/dist/src/server/MCPServer.js +41 -14
- package/dist/src/server/MCPServer.resources.d.ts +2 -0
- package/dist/src/server/MCPServer.resources.js +91 -0
- package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
- package/dist/src/server/MCPServer.search.helpers.js +1 -1
- package/dist/src/server/MCPServer.transport.js +12 -0
- package/dist/src/server/ToolCallContextGuard.js +8 -0
- package/dist/src/server/ToolRouter.d.ts +25 -9
- package/dist/src/server/ToolRouter.intent.d.ts +26 -0
- package/dist/src/server/ToolRouter.intent.js +77 -0
- package/dist/src/server/ToolRouter.js +103 -284
- package/dist/src/server/ToolRouter.policy.d.ts +22 -0
- package/dist/src/server/ToolRouter.policy.js +163 -0
- package/dist/src/server/ToolRouter.probe.d.ts +17 -0
- package/dist/src/server/ToolRouter.probe.js +103 -0
- package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
- package/dist/src/server/ToolRouter.renderer.js +52 -0
- package/dist/src/server/activation/ActivationController.js +15 -12
- package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
- package/dist/src/server/activation/PredictiveBooster.js +1 -3
- package/dist/src/server/domains/analysis/definitions.js +155 -655
- package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
- package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
- package/dist/src/server/domains/analysis/manifest.js +6 -4
- package/dist/src/server/domains/antidebug/definitions.js +25 -111
- package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
- package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
- package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
- package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
- package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
- package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
- package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
- package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
- package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
- package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
- package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
- package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
- package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
- package/dist/src/server/domains/browser/handlers.impl.js +2 -3
- package/dist/src/server/domains/browser/manifest.js +37 -13
- package/dist/src/server/domains/coordination/definitions.js +50 -216
- package/dist/src/server/domains/coordination/index.d.ts +2 -1
- package/dist/src/server/domains/coordination/index.js +1 -0
- package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
- package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
- package/dist/src/server/domains/debugger/manifest.js +9 -2
- package/dist/src/server/domains/encoding/definitions.js +43 -153
- package/dist/src/server/domains/encoding/handlers.base.js +2 -2
- package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
- package/dist/src/server/domains/evidence/definitions.js +42 -0
- package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
- package/dist/src/server/domains/evidence/handlers.js +60 -0
- package/dist/src/server/domains/evidence/index.d.ts +2 -0
- package/dist/src/server/domains/evidence/index.js +2 -0
- package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
- package/dist/src/server/domains/evidence/manifest.js +78 -0
- package/dist/src/server/domains/graphql/definitions.js +53 -141
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
- package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
- package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
- package/dist/src/server/domains/hooks/definitions.js +69 -335
- package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
- package/dist/src/server/domains/hooks/manifest.js +1 -2
- package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/definitions.js +99 -0
- package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
- package/dist/src/server/domains/instrumentation/handlers.js +206 -0
- package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/index.js +2 -0
- package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
- package/dist/src/server/domains/instrumentation/manifest.js +114 -0
- package/dist/src/server/domains/macro/definitions.js +16 -43
- package/dist/src/server/domains/maintenance/definitions.js +60 -219
- package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
- package/dist/src/server/domains/memory/definitions.js +387 -559
- package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
- package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
- package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
- package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
- package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
- package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
- package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
- package/dist/src/server/domains/memory/handlers/scan.js +97 -0
- package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
- package/dist/src/server/domains/memory/handlers/session.js +49 -0
- package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/structure.js +74 -0
- package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
- package/dist/src/server/domains/memory/handlers.impl.js +63 -494
- package/dist/src/server/domains/memory/manifest.js +236 -64
- package/dist/src/server/domains/native-bridge/definitions.js +54 -192
- package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
- package/dist/src/server/domains/native-bridge/index.js +2 -1
- package/dist/src/server/domains/network/auth-extractor.js +1 -1
- package/dist/src/server/domains/network/definitions.js +175 -578
- package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
- package/dist/src/server/domains/network/handlers.base.core.js +623 -0
- package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
- package/dist/src/server/domains/network/handlers.base.js +3 -878
- package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
- package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
- package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
- package/dist/src/server/domains/network/handlers.base.types.js +89 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
- package/dist/src/server/domains/network/manifest.js +15 -0
- package/dist/src/server/domains/network/replay.js +1 -4
- package/dist/src/server/domains/platform/definitions.js +121 -112
- package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
- package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
- package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
- package/dist/src/server/domains/platform/handlers.d.ts +48 -0
- package/dist/src/server/domains/platform/handlers.js +29 -0
- package/dist/src/server/domains/platform/manifest.js +38 -0
- package/dist/src/server/domains/process/definitions.js +163 -647
- package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
- package/dist/src/server/domains/process/handlers.base.js +7 -462
- package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
- package/dist/src/server/domains/process/handlers.base.process.js +417 -0
- package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
- package/dist/src/server/domains/process/handlers.base.types.js +50 -0
- package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
- package/dist/src/server/domains/process/manifest.js +6 -1
- package/dist/src/server/domains/sandbox/definitions.js +11 -33
- package/dist/src/server/domains/sandbox/handlers.js +8 -3
- package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
- package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
- package/dist/src/server/domains/shared/modules.d.ts +0 -2
- package/dist/src/server/domains/shared/modules.js +0 -1
- package/dist/src/server/domains/sourcemap/definitions.js +27 -111
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
- package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
- package/dist/src/server/domains/sourcemap/manifest.js +1 -1
- package/dist/src/server/domains/streaming/definitions.js +36 -148
- package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
- package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
- package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
- package/dist/src/server/domains/trace/definitions.tools.js +51 -206
- package/dist/src/server/domains/trace/handlers.js +10 -12
- package/dist/src/server/domains/trace/index.d.ts +2 -1
- package/dist/src/server/domains/trace/index.js +2 -1
- package/dist/src/server/domains/trace/manifest.js +15 -3
- package/dist/src/server/domains/transform/definitions.js +50 -210
- package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
- package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
- package/dist/src/server/domains/transform/manifest.d.ts +1 -1
- package/dist/src/server/domains/transform/manifest.js +1 -1
- package/dist/src/server/domains/wasm/definitions.js +55 -232
- package/dist/src/server/domains/wasm/handlers.js +1 -1
- package/dist/src/server/domains/workflow/definitions.js +144 -414
- package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
- package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
- package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
- package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
- package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
- package/dist/src/server/evidence/index.d.ts +2 -0
- package/dist/src/server/evidence/index.js +1 -0
- package/dist/src/server/evidence/types.d.ts +22 -0
- package/dist/src/server/evidence/types.js +1 -0
- package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
- package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
- package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
- package/dist/src/server/extensions/ExtensionManager.js +193 -40
- package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
- package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
- package/dist/src/server/extensions/plugin-config.js +1 -1
- package/dist/src/server/extensions/plugin-env.d.ts +1 -1
- package/dist/src/server/extensions/plugin-env.js +10 -4
- package/dist/src/server/extensions/types.d.ts +17 -0
- package/dist/src/server/extensions/types.js +1 -1
- package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
- package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
- package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
- package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
- package/dist/src/server/instrumentation/index.d.ts +2 -0
- package/dist/src/server/instrumentation/index.js +2 -0
- package/dist/src/server/instrumentation/types.d.ts +62 -0
- package/dist/src/server/instrumentation/types.js +7 -0
- package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
- package/dist/src/server/macros/MacroConfigLoader.js +61 -59
- package/dist/src/server/macros/MacroRunner.js +6 -2
- package/dist/src/server/macros/builtins/index.d.ts +2 -3
- package/dist/src/server/macros/builtins/index.js +51 -7
- package/dist/src/server/plugins/PluginContract.d.ts +1 -1
- package/dist/src/server/registry/contracts.d.ts +1 -1
- package/dist/src/server/registry/discovery.js +5 -4
- package/dist/src/server/registry/ensure-browser-core.js +0 -3
- package/dist/src/server/registry/index.js +4 -4
- package/dist/src/server/registry/tool-builder.d.ts +46 -0
- package/dist/src/server/registry/tool-builder.js +105 -0
- package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
- package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
- package/dist/src/server/search/EmbeddingWorker.js +5 -3
- package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
- package/dist/src/server/search/FeedbackTracker.js +26 -0
- package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
- package/dist/src/server/search/QueryNormalizer.js +94 -0
- package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
- package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
- package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
- package/dist/src/server/workflows/WorkflowContract.js +12 -0
- package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
- package/dist/src/server/workflows/WorkflowEngine.js +136 -3
- package/dist/src/types/config.d.ts +0 -14
- package/dist/src/types/deobfuscator.d.ts +0 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/utils/DetailedDataManager.js +2 -0
- package/dist/src/utils/RingBuffer.js +5 -5
- package/dist/src/utils/TokenBudgetManager.js +1 -1
- package/dist/src/utils/UnifiedCacheManager.js +1 -1
- package/dist/src/utils/artifactRetention.js +2 -2
- package/dist/src/utils/betterSqlite3.d.ts +11 -0
- package/dist/src/utils/betterSqlite3.js +88 -0
- package/dist/src/utils/browserExecutable.js +2 -2
- package/dist/src/utils/cliFastPath.js +5 -8
- package/dist/src/utils/config.js +4 -26
- package/dist/src/utils/environmentDoctor.js +138 -11
- package/dist/src/utils/outputPaths.js +16 -9
- package/dist/src/utils/parallel.js +1 -3
- package/package.json +74 -72
- package/workflows/.gitkeep +0 -0
- package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
- package/dist/src/modules/analyzer/AISummarizer.js +0 -122
- package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
- package/dist/src/modules/hook/AIHookGenerator.js +0 -360
- package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
- package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
- package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
- package/dist/src/services/LLMService.d.ts +0 -37
- package/dist/src/services/LLMService.js +0 -233
- package/dist/src/services/prompts/analysis.d.ts +0 -9
- package/dist/src/services/prompts/analysis.js +0 -158
- package/dist/src/services/prompts/crypto.d.ts +0 -2
- package/dist/src/services/prompts/crypto.js +0 -108
- package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
- package/dist/src/services/prompts/deobfuscation.js +0 -300
- package/dist/src/services/prompts/environment.d.ts +0 -16
- package/dist/src/services/prompts/environment.js +0 -372
- package/dist/src/services/prompts/intelligence.d.ts +0 -4
- package/dist/src/services/prompts/intelligence.js +0 -250
- package/dist/src/services/prompts/taint.d.ts +0 -2
- package/dist/src/services/prompts/taint.js +0 -54
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as parser from '@babel/parser';
|
|
2
2
|
import traverse from '@babel/traverse';
|
|
3
3
|
import * as t from '@babel/types';
|
|
4
|
-
import { generateTaintAnalysisPrompt } from '../../services/prompts/taint.js';
|
|
5
4
|
import { logger } from '../../utils/logger.js';
|
|
6
5
|
import { checkSanitizer } from '../analyzer/SecurityCodeAnalyzer.js';
|
|
7
|
-
export async function analyzeDataFlowWithTaint(code
|
|
6
|
+
export async function analyzeDataFlowWithTaint(code) {
|
|
8
7
|
const graph = { nodes: [], edges: [] };
|
|
9
8
|
const sources = [];
|
|
10
9
|
const sinks = [];
|
|
@@ -331,14 +330,6 @@ export async function analyzeDataFlowWithTaint(code, llm) {
|
|
|
331
330
|
catch (error) {
|
|
332
331
|
logger.warn('Data flow analysis failed', error);
|
|
333
332
|
}
|
|
334
|
-
if (taintPaths.length > 0 && llm) {
|
|
335
|
-
try {
|
|
336
|
-
await enhanceTaintAnalysisWithLLM(llm, code, sources, sinks, taintPaths);
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
logger.warn('LLM-enhanced taint analysis failed', error);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
333
|
return {
|
|
343
334
|
graph,
|
|
344
335
|
sources,
|
|
@@ -346,41 +337,6 @@ export async function analyzeDataFlowWithTaint(code, llm) {
|
|
|
346
337
|
taintPaths,
|
|
347
338
|
};
|
|
348
339
|
}
|
|
349
|
-
async function enhanceTaintAnalysisWithLLM(llm, code, sources, sinks, taintPaths) {
|
|
350
|
-
if (taintPaths.length === 0)
|
|
351
|
-
return;
|
|
352
|
-
try {
|
|
353
|
-
const sourcesList = sources.map((s) => `${s.type} at line ${s.location.line}`);
|
|
354
|
-
const sinksList = sinks.map((s) => `${s.type} at line ${s.location.line}`);
|
|
355
|
-
const messages = generateTaintAnalysisPrompt(code.length > 4000 ? code.substring(0, 4000) : code, sourcesList, sinksList);
|
|
356
|
-
const response = await llm.chat(messages, {
|
|
357
|
-
temperature: 0.2,
|
|
358
|
-
maxTokens: 2000,
|
|
359
|
-
});
|
|
360
|
-
const jsonMatch = response.content.match(/\{[\s\S]*\}/);
|
|
361
|
-
if (jsonMatch) {
|
|
362
|
-
const llmResult = JSON.parse(jsonMatch[0]);
|
|
363
|
-
if (Array.isArray(llmResult.taintPaths)) {
|
|
364
|
-
logger.info(`LLM identified ${llmResult.taintPaths.length} additional taint paths`);
|
|
365
|
-
llmResult.taintPaths.forEach((rawPath) => {
|
|
366
|
-
const path = rawPath;
|
|
367
|
-
const exists = taintPaths.some((p) => p.source.location.line === path.source?.location?.line &&
|
|
368
|
-
p.sink.location.line === path.sink?.location?.line);
|
|
369
|
-
if (!exists && path.source && path.sink) {
|
|
370
|
-
taintPaths.push({
|
|
371
|
-
source: path.source,
|
|
372
|
-
sink: path.sink,
|
|
373
|
-
path: path.path || [],
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
catch (error) {
|
|
381
|
-
logger.debug('LLM taint analysis enhancement failed', error);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
340
|
function checkTaintedArguments(args, taintMap, taintPaths, _funcName, line) {
|
|
385
341
|
args.forEach((arg) => {
|
|
386
342
|
if (t.isIdentifier(arg) && taintMap.has(arg.name)) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { NetworkRequest, NetworkResponse } from '../monitor/ConsoleMonitor.js';
|
|
2
2
|
import type { ConsoleMessage, ExceptionInfo } from '../monitor/ConsoleMonitor.js';
|
|
3
|
-
import type { LLMService } from '../../services/LLMService.js';
|
|
4
3
|
export interface AnalysisResult {
|
|
5
4
|
criticalRequests: NetworkRequest[];
|
|
6
5
|
criticalResponses: NetworkResponse[];
|
|
@@ -45,8 +44,7 @@ export interface AntiDebugPattern {
|
|
|
45
44
|
code: string;
|
|
46
45
|
}
|
|
47
46
|
export declare class IntelligentAnalyzer {
|
|
48
|
-
|
|
49
|
-
constructor(llmService?: LLMService);
|
|
47
|
+
constructor(legacyDependency?: unknown);
|
|
50
48
|
analyze(data: {
|
|
51
49
|
requests: NetworkRequest[];
|
|
52
50
|
responses: NetworkResponse[];
|
|
@@ -55,40 +53,6 @@ export declare class IntelligentAnalyzer {
|
|
|
55
53
|
}): AnalysisResult;
|
|
56
54
|
aggregateSimilarRequests(requests: NetworkRequest[]): Map<string, NetworkRequest[]>;
|
|
57
55
|
generateAIFriendlySummary(result: AnalysisResult): string;
|
|
58
|
-
analyzeCriticalRequestsWithLLM(requests: NetworkRequest[]): Promise<{
|
|
59
|
-
encryption: EncryptionPattern[];
|
|
60
|
-
signature: SignaturePattern[];
|
|
61
|
-
token: TokenPattern[];
|
|
62
|
-
customPatterns: Array<{
|
|
63
|
-
type: string;
|
|
64
|
-
description: string;
|
|
65
|
-
location: string;
|
|
66
|
-
confidence: number;
|
|
67
|
-
}>;
|
|
68
|
-
}>;
|
|
69
|
-
analyzeCriticalLogsWithLLM(logs: ConsoleMessage[]): Promise<{
|
|
70
|
-
keyFunctions: Array<{
|
|
71
|
-
name: string;
|
|
72
|
-
purpose: string;
|
|
73
|
-
confidence: number;
|
|
74
|
-
}>;
|
|
75
|
-
dataFlow: string;
|
|
76
|
-
suspiciousPatterns: Array<{
|
|
77
|
-
type: string;
|
|
78
|
-
description: string;
|
|
79
|
-
location: string;
|
|
80
|
-
}>;
|
|
81
|
-
}>;
|
|
82
|
-
expandKeywordsWithLLM(context: {
|
|
83
|
-
domain: string;
|
|
84
|
-
requests: NetworkRequest[];
|
|
85
|
-
logs: ConsoleMessage[];
|
|
86
|
-
}): Promise<{
|
|
87
|
-
apiKeywords: string[];
|
|
88
|
-
cryptoKeywords: string[];
|
|
89
|
-
frameworkKeywords: string[];
|
|
90
|
-
businessKeywords: string[];
|
|
91
|
-
}>;
|
|
92
56
|
analyzeWithLLM(data: {
|
|
93
57
|
requests: NetworkRequest[];
|
|
94
58
|
responses: NetworkResponse[];
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import { logger } from '../../utils/logger.js';
|
|
2
|
-
import { generateRequestAnalysisMessages, generateLogAnalysisMessages, generateKeywordExpansionMessages, } from '../../services/prompts/intelligence.js';
|
|
3
2
|
import { filterCriticalRequests, filterCriticalResponses, filterCriticalLogs, detectEncryptionPatterns, detectSignaturePatterns, detectTokenPatterns, detectAntiDebugPatterns, extractSuspiciousAPIs, extractKeyFunctions, } from '../analyzer/PatternDetector.js';
|
|
4
3
|
export class IntelligentAnalyzer {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.llmService = llmService;
|
|
8
|
-
if (llmService) {
|
|
9
|
-
logger.info('IntelligentAnalyzer initialized with LLM support');
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
logger.warn('IntelligentAnalyzer initialized without LLM (using rule-based analysis only)');
|
|
13
|
-
}
|
|
4
|
+
constructor(legacyDependency) {
|
|
5
|
+
void legacyDependency;
|
|
14
6
|
}
|
|
15
7
|
analyze(data) {
|
|
16
8
|
logger.info('Starting intelligent analysis...', {
|
|
@@ -89,7 +81,9 @@ export class IntelligentAnalyzer {
|
|
|
89
81
|
result.patterns.encryption.slice(0, 5).forEach((pattern) => {
|
|
90
82
|
const evidence = Array.isArray(pattern.evidence)
|
|
91
83
|
? pattern.evidence.join(', ')
|
|
92
|
-
:
|
|
84
|
+
: pattern.evidence
|
|
85
|
+
? String(pattern.evidence)
|
|
86
|
+
: '';
|
|
93
87
|
lines.push(` - ${pattern.type} (confidence: ${(pattern.confidence * 100).toFixed(0)}%)`);
|
|
94
88
|
lines.push(` location: ${pattern.location}`);
|
|
95
89
|
lines.push(` evidence: ${evidence}`);
|
|
@@ -101,7 +95,9 @@ export class IntelligentAnalyzer {
|
|
|
101
95
|
result.patterns.signature.slice(0, 5).forEach((pattern) => {
|
|
102
96
|
const parameters = Array.isArray(pattern.parameters)
|
|
103
97
|
? pattern.parameters.join(', ')
|
|
104
|
-
:
|
|
98
|
+
: pattern.parameters
|
|
99
|
+
? String(pattern.parameters)
|
|
100
|
+
: '';
|
|
105
101
|
lines.push(` - ${pattern.type}`);
|
|
106
102
|
lines.push(` parameters: ${parameters}`);
|
|
107
103
|
});
|
|
@@ -122,136 +118,7 @@ export class IntelligentAnalyzer {
|
|
|
122
118
|
lines.push('=== Analysis Summary ===');
|
|
123
119
|
return lines.join('\n');
|
|
124
120
|
}
|
|
125
|
-
async analyzeCriticalRequestsWithLLM(requests) {
|
|
126
|
-
if (!this.llmService) {
|
|
127
|
-
logger.warn('LLM service not available, skipping LLM analysis');
|
|
128
|
-
return { encryption: [], signature: [], token: [], customPatterns: [] };
|
|
129
|
-
}
|
|
130
|
-
logger.info('Starting LLM-enhanced request analysis...');
|
|
131
|
-
const requestSummary = requests.slice(0, 20).map((req) => {
|
|
132
|
-
const urlObj = new URL(req.url, 'http://localhost');
|
|
133
|
-
const params = Object.fromEntries(urlObj.searchParams.entries());
|
|
134
|
-
return {
|
|
135
|
-
url: req.url,
|
|
136
|
-
method: req.method,
|
|
137
|
-
urlParams: params,
|
|
138
|
-
headers: req.headers,
|
|
139
|
-
postData: req.postData?.substring(0, 500),
|
|
140
|
-
};
|
|
141
|
-
});
|
|
142
|
-
try {
|
|
143
|
-
const response = await this.llmService.chat(generateRequestAnalysisMessages(requestSummary), {
|
|
144
|
-
temperature: 0.2,
|
|
145
|
-
maxTokens: 3000,
|
|
146
|
-
});
|
|
147
|
-
const result = JSON.parse(response.content);
|
|
148
|
-
logger.success('LLM request analysis completed', {
|
|
149
|
-
encryption: result.encryption?.length || 0,
|
|
150
|
-
signature: result.signature?.length || 0,
|
|
151
|
-
token: result.token?.length || 0,
|
|
152
|
-
custom: result.customPatterns?.length || 0,
|
|
153
|
-
});
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
logger.error('LLM request analysis failed:', error);
|
|
158
|
-
return { encryption: [], signature: [], token: [], customPatterns: [] };
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
async analyzeCriticalLogsWithLLM(logs) {
|
|
162
|
-
if (!this.llmService) {
|
|
163
|
-
logger.warn('LLM service not available, skipping LLM log analysis');
|
|
164
|
-
return { keyFunctions: [], dataFlow: '', suspiciousPatterns: [] };
|
|
165
|
-
}
|
|
166
|
-
logger.info('Starting LLM-enhanced log analysis...');
|
|
167
|
-
const logSummary = logs.slice(0, 50).map((log, index) => ({
|
|
168
|
-
index,
|
|
169
|
-
type: log.type,
|
|
170
|
-
text: log.text.substring(0, 300),
|
|
171
|
-
url: log.url,
|
|
172
|
-
lineNumber: log.lineNumber,
|
|
173
|
-
stackTrace: log.stackTrace?.slice(0, 3),
|
|
174
|
-
}));
|
|
175
|
-
try {
|
|
176
|
-
const response = await this.llmService.chat(generateLogAnalysisMessages(logSummary), {
|
|
177
|
-
temperature: 0.2,
|
|
178
|
-
maxTokens: 2500,
|
|
179
|
-
});
|
|
180
|
-
const result = JSON.parse(response.content);
|
|
181
|
-
logger.success('LLM log analysis completed', {
|
|
182
|
-
keyFunctions: result.keyFunctions?.length || 0,
|
|
183
|
-
suspiciousPatterns: result.suspiciousPatterns?.length || 0,
|
|
184
|
-
});
|
|
185
|
-
return result;
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
logger.error('LLM log analysis failed:', error);
|
|
189
|
-
return { keyFunctions: [], dataFlow: '', suspiciousPatterns: [] };
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async expandKeywordsWithLLM(context) {
|
|
193
|
-
if (!this.llmService) {
|
|
194
|
-
return { apiKeywords: [], cryptoKeywords: [], frameworkKeywords: [], businessKeywords: [] };
|
|
195
|
-
}
|
|
196
|
-
logger.info('Expanding keywords with LLM...');
|
|
197
|
-
const urlPatterns = context.requests.slice(0, 15).map((r) => {
|
|
198
|
-
try {
|
|
199
|
-
const url = new URL(r.url);
|
|
200
|
-
return {
|
|
201
|
-
path: url.pathname,
|
|
202
|
-
params: Array.from(url.searchParams.keys()),
|
|
203
|
-
method: r.method,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
return { path: r.url, params: [], method: r.method };
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
const logKeywords = context.logs.slice(0, 20).map((l) => l.text.substring(0, 150));
|
|
211
|
-
try {
|
|
212
|
-
const response = await this.llmService.chat(generateKeywordExpansionMessages(context.domain, urlPatterns, logKeywords), { temperature: 0.4, maxTokens: 800 });
|
|
213
|
-
const result = JSON.parse(response.content);
|
|
214
|
-
logger.success('Keywords expanded', {
|
|
215
|
-
api: result.apiKeywords?.length || 0,
|
|
216
|
-
crypto: result.cryptoKeywords?.length || 0,
|
|
217
|
-
framework: result.frameworkKeywords?.length || 0,
|
|
218
|
-
});
|
|
219
|
-
return result;
|
|
220
|
-
}
|
|
221
|
-
catch (error) {
|
|
222
|
-
logger.error('Keyword expansion failed:', error);
|
|
223
|
-
return { apiKeywords: [], cryptoKeywords: [], frameworkKeywords: [], businessKeywords: [] };
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
121
|
async analyzeWithLLM(data) {
|
|
227
|
-
|
|
228
|
-
const ruleBasedResult = this.analyze(data);
|
|
229
|
-
if (this.llmService) {
|
|
230
|
-
try {
|
|
231
|
-
const llmRequestAnalysis = await this.analyzeCriticalRequestsWithLLM(ruleBasedResult.criticalRequests);
|
|
232
|
-
const llmLogAnalysis = await this.analyzeCriticalLogsWithLLM(ruleBasedResult.criticalLogs);
|
|
233
|
-
ruleBasedResult.patterns.encryption = [
|
|
234
|
-
...(ruleBasedResult.patterns.encryption || []),
|
|
235
|
-
...llmRequestAnalysis.encryption,
|
|
236
|
-
];
|
|
237
|
-
ruleBasedResult.patterns.signature = [
|
|
238
|
-
...(ruleBasedResult.patterns.signature || []),
|
|
239
|
-
...llmRequestAnalysis.signature,
|
|
240
|
-
];
|
|
241
|
-
ruleBasedResult.patterns.token = [
|
|
242
|
-
...(ruleBasedResult.patterns.token || []),
|
|
243
|
-
...llmRequestAnalysis.token,
|
|
244
|
-
];
|
|
245
|
-
ruleBasedResult.summary.keyFunctions = [
|
|
246
|
-
...ruleBasedResult.summary.keyFunctions,
|
|
247
|
-
...llmLogAnalysis.keyFunctions.map((f) => f.name),
|
|
248
|
-
];
|
|
249
|
-
logger.success('Hybrid analysis completed with LLM enhancement');
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
logger.error('LLM enhancement failed, using rule-based results only:', error);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
return ruleBasedResult;
|
|
122
|
+
return this.analyze(data);
|
|
256
123
|
}
|
|
257
124
|
}
|
|
@@ -76,7 +76,7 @@ export function filterCriticalRequests(requests) {
|
|
|
76
76
|
return true;
|
|
77
77
|
return false;
|
|
78
78
|
})
|
|
79
|
-
.
|
|
79
|
+
.toSorted((a, b) => {
|
|
80
80
|
const scoreA = calculateRequestPriority(a);
|
|
81
81
|
const scoreB = calculateRequestPriority(b);
|
|
82
82
|
return scoreB - scoreA;
|
|
@@ -97,7 +97,7 @@ export function filterCriticalResponses(responses) {
|
|
|
97
97
|
return true;
|
|
98
98
|
return false;
|
|
99
99
|
})
|
|
100
|
-
.
|
|
100
|
+
.toSorted((a, b) => b.timestamp - a.timestamp);
|
|
101
101
|
}
|
|
102
102
|
export function calculateLogPriority(log) {
|
|
103
103
|
let score = 0;
|
|
@@ -124,7 +124,7 @@ export function filterCriticalLogs(logs) {
|
|
|
124
124
|
return true;
|
|
125
125
|
return false;
|
|
126
126
|
})
|
|
127
|
-
.
|
|
127
|
+
.toSorted((a, b) => {
|
|
128
128
|
const scoreA = calculateLogPriority(a);
|
|
129
129
|
const scoreB = calculateLogPriority(b);
|
|
130
130
|
return scoreB - scoreA;
|
|
@@ -155,7 +155,7 @@ export function detectTokenPatternsInternal(requests) {
|
|
|
155
155
|
confidence: 0.9,
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
|
-
else if (headerValue.length > 20 && /^[A-Za-z0-9_
|
|
158
|
+
else if (headerValue.length > 20 && /^[A-Za-z0-9_\-+=/]+$/.test(headerValue)) {
|
|
159
159
|
patterns.push({
|
|
160
160
|
type: 'Custom',
|
|
161
161
|
location: `${req.url} (header: ${headerName})`,
|
|
@@ -233,7 +233,7 @@ export class BrowserDiscovery {
|
|
|
233
233
|
}
|
|
234
234
|
return null;
|
|
235
235
|
}
|
|
236
|
-
catch
|
|
236
|
+
catch {
|
|
237
237
|
return null;
|
|
238
238
|
}
|
|
239
239
|
}
|
|
@@ -259,7 +259,7 @@ export class BrowserDiscovery {
|
|
|
259
259
|
}
|
|
260
260
|
return false;
|
|
261
261
|
}
|
|
262
|
-
catch
|
|
262
|
+
catch {
|
|
263
263
|
return false;
|
|
264
264
|
}
|
|
265
265
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
|
-
import
|
|
2
|
+
import { launch } from 'rebrowser-puppeteer-core';
|
|
3
3
|
import { logger } from '../../utils/logger.js';
|
|
4
4
|
import { findBrowserExecutable } from '../../utils/browserExecutable.js';
|
|
5
5
|
import { CaptchaDetector } from '../captcha/CaptchaDetector.js';
|
|
@@ -69,7 +69,7 @@ export class BrowserModeManager {
|
|
|
69
69
|
if (executablePath) {
|
|
70
70
|
options.executablePath = executablePath;
|
|
71
71
|
}
|
|
72
|
-
const browser = await
|
|
72
|
+
const browser = await launch(options);
|
|
73
73
|
const pid = browser.process()?.pid ?? null;
|
|
74
74
|
if (this.isClosing) {
|
|
75
75
|
await browser.close().catch((error) => {
|
|
@@ -278,15 +278,16 @@ export class BrowserModeManager {
|
|
|
278
278
|
}
|
|
279
279
|
if (this.sessionData.localStorage || this.sessionData.sessionStorage) {
|
|
280
280
|
await page.evaluate((data) => {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
storage.setItem(key, value);
|
|
285
|
-
}
|
|
281
|
+
if (data.local) {
|
|
282
|
+
for (const [key, value] of Object.entries(data.local)) {
|
|
283
|
+
localStorage.setItem(key, value);
|
|
286
284
|
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
|
|
285
|
+
}
|
|
286
|
+
if (data.session) {
|
|
287
|
+
for (const [key, value] of Object.entries(data.session)) {
|
|
288
|
+
sessionStorage.setItem(key, value);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
290
291
|
}, {
|
|
291
292
|
local: this.sessionData.localStorage,
|
|
292
293
|
session: this.sessionData.sessionStorage,
|
|
@@ -187,7 +187,7 @@ export class TabRegistry {
|
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
return result.
|
|
190
|
+
return result.toSorted((a, b) => a.index - b.index);
|
|
191
191
|
}
|
|
192
192
|
listAllTabs() {
|
|
193
193
|
const result = [];
|
|
@@ -203,7 +203,7 @@ export class TabRegistry {
|
|
|
203
203
|
stale: entry.stale,
|
|
204
204
|
});
|
|
205
205
|
}
|
|
206
|
-
return result.
|
|
206
|
+
return result.toSorted((a, b) => a.index - b.index);
|
|
207
207
|
}
|
|
208
208
|
setSharedContext(key, value) {
|
|
209
209
|
this.sharedContext.set(key, value);
|
|
@@ -49,6 +49,7 @@ export declare class UnifiedBrowserManager implements IBrowserManager {
|
|
|
49
49
|
private chromeLaunchPromise?;
|
|
50
50
|
private camoufoxLaunchPromise?;
|
|
51
51
|
private isClosing;
|
|
52
|
+
private _chromeIsAttached;
|
|
52
53
|
constructor(config?: UnifiedBrowserConfig);
|
|
53
54
|
launch(): Promise<PuppeteerBrowser | CamoufoxBrowserLike>;
|
|
54
55
|
private launchChrome;
|
|
@@ -12,6 +12,7 @@ export class UnifiedBrowserManager {
|
|
|
12
12
|
chromeLaunchPromise;
|
|
13
13
|
camoufoxLaunchPromise;
|
|
14
14
|
isClosing = false;
|
|
15
|
+
_chromeIsAttached = false;
|
|
15
16
|
constructor(config = {}) {
|
|
16
17
|
this.config = config;
|
|
17
18
|
this.driver = config.driver ?? 'chrome';
|
|
@@ -117,9 +118,11 @@ export class UnifiedBrowserManager {
|
|
|
117
118
|
const puppeteer = await import('rebrowser-puppeteer-core');
|
|
118
119
|
const browser = await puppeteer.connect({
|
|
119
120
|
browserWSEndpoint: wsEndpoint,
|
|
121
|
+
defaultViewport: null,
|
|
120
122
|
});
|
|
121
123
|
this.chromeManager = new BrowserModeManager({}, {});
|
|
122
124
|
Reflect.set(this.chromeManager, 'browser', browser);
|
|
125
|
+
this._chromeIsAttached = true;
|
|
123
126
|
logger.info('Connected to Chrome browser successfully');
|
|
124
127
|
return browser;
|
|
125
128
|
}
|
|
@@ -167,6 +170,8 @@ export class UnifiedBrowserManager {
|
|
|
167
170
|
this.chromeLaunchPromise = undefined;
|
|
168
171
|
this.camoufoxLaunchPromise = undefined;
|
|
169
172
|
this.activePage = null;
|
|
173
|
+
const chromeWasAttached = this._chromeIsAttached;
|
|
174
|
+
this._chromeIsAttached = false;
|
|
170
175
|
const closeTasks = [];
|
|
171
176
|
if (camoufoxManager) {
|
|
172
177
|
closeTasks.push(camoufoxManager.close().then(() => {
|
|
@@ -174,9 +179,19 @@ export class UnifiedBrowserManager {
|
|
|
174
179
|
}));
|
|
175
180
|
}
|
|
176
181
|
if (chromeManager) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
182
|
+
if (chromeWasAttached) {
|
|
183
|
+
const browser = chromeManager.getBrowser();
|
|
184
|
+
if (browser) {
|
|
185
|
+
closeTasks.push(browser.disconnect().then(() => {
|
|
186
|
+
logger.info('Detached from Chrome browser (not killed)');
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
closeTasks.push(chromeManager.close().then(() => {
|
|
192
|
+
logger.info('Chrome browser closed');
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
180
195
|
}
|
|
181
196
|
await Promise.all(closeTasks);
|
|
182
197
|
}
|
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
import { type Page } from 'rebrowser-puppeteer-core';
|
|
2
|
-
import { type LLMService } from '../../services/LLMService.js';
|
|
3
2
|
import type { AICaptchaDetectionResult, CaptchaProviderHint, CaptchaType, CaptchaPageInfo } from '../captcha/types.js';
|
|
4
3
|
export type { AICaptchaDetectionResult } from '../captcha/types.js';
|
|
5
4
|
export declare class AICaptchaDetector {
|
|
6
|
-
protected llm: LLMService;
|
|
7
5
|
protected screenshotDir: string;
|
|
8
|
-
|
|
9
|
-
constructor(llm: LLMService, screenshotDir?: string);
|
|
6
|
+
constructor(screenshotDir?: string);
|
|
10
7
|
protected saveScreenshot(screenshotBase64: string): Promise<string>;
|
|
11
8
|
detect(page: Page): Promise<AICaptchaDetectionResult>;
|
|
12
9
|
protected getPageInfo(page: Page): Promise<CaptchaPageInfo>;
|
|
13
|
-
protected analyzeWithAI(screenshot: string, pageInfo: CaptchaPageInfo): Promise<AICaptchaDetectionResult>;
|
|
14
|
-
protected buildAnalysisPrompt(pageInfo: CaptchaPageInfo): string;
|
|
15
|
-
protected parseAIResponse(response: string, screenshotPath: string): AICaptchaDetectionResult;
|
|
16
|
-
protected fallbackTextAnalysis(pageInfo: CaptchaPageInfo): AICaptchaDetectionResult;
|
|
17
|
-
protected sanitizePageInfoForPrompt(pageInfo: CaptchaPageInfo): CaptchaPageInfo;
|
|
18
|
-
protected sanitizeUntrustedText(value: string, maxLength: number): string;
|
|
19
10
|
protected normalizeCaptchaType(type: unknown, detected: boolean): CaptchaType;
|
|
20
11
|
protected normalizeProviderHint(providerHint: unknown, detected: boolean): CaptchaProviderHint | undefined;
|
|
21
12
|
protected normalizeDetected(value: unknown): boolean;
|