@js-recon/js-recon 1.4.4 → 2.0.1-alpha.2
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/.claude-sync/sync.sh +1 -1
- package/.github/dependabot.yml +50 -0
- package/.github/workflows/build-and-prettify.yaml +49 -19
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/exploit-smoke-test.yaml +160 -0
- package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
- package/.github/workflows/plumber.yml +20 -0
- package/.github/workflows/promote-js-recon.yml +5 -3
- package/.github/workflows/publish-js-recon.yml +31 -2
- package/.github/workflows/rules-smoke-test.yaml +13 -5
- package/.nvmrc +1 -0
- package/.plumber.yaml +151 -0
- package/CHANGELOG.md +55 -0
- package/CONTRIBUTING.md +32 -0
- package/Dockerfile +1 -0
- package/README.md +3 -2
- package/SECURITY.md +1 -1
- package/build/analyze/engine/astEngine.js +10 -9
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/csMastSEngine.js +6 -6
- package/build/analyze/engine/csMastSEngine.js.map +1 -1
- package/build/analyze/engine/index.js +1 -1
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/engine/requestEngine.js +6 -6
- package/build/analyze/engine/requestEngine.js.map +1 -1
- package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
- package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -9
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/outputHelper.js +3 -3
- package/build/analyze/helpers/outputHelper.js.map +1 -1
- package/build/analyze/helpers/schemas.js +1 -0
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +9 -5
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +26 -16
- package/build/analyze/index.js.map +1 -1
- package/build/cliProgram.js +733 -0
- package/build/cliProgram.js.map +1 -0
- package/build/completion/index.js +247 -382
- package/build/completion/index.js.map +1 -1
- package/build/completion/introspect.js +17 -0
- package/build/completion/introspect.js.map +1 -0
- package/build/config/applicationConfig.js +3 -2
- package/build/config/applicationConfig.js.map +1 -1
- package/build/cs_mast/index.js +18 -17
- package/build/cs_mast/index.js.map +1 -1
- package/build/endpoints/gen_report/gen_json.js +2 -2
- package/build/endpoints/gen_report/gen_json.js.map +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
- package/build/endpoints/index.js +12 -12
- package/build/endpoints/index.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +4 -4
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/exploit/angular/cve-2026-68945.js +61 -0
- package/build/exploit/angular/cve-2026-68945.js.map +1 -0
- package/build/exploit/index.js +60 -0
- package/build/exploit/index.js.map +1 -0
- package/build/exploit/next/cve-2025-29927.js +65 -0
- package/build/exploit/next/cve-2025-29927.js.map +1 -0
- package/build/exploit/next/cve-2026-64645.js +51 -0
- package/build/exploit/next/cve-2026-64645.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71315.js +47 -0
- package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71320.js +114 -0
- package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
- package/build/exploit/react/cve-2025-55182.js +116 -0
- package/build/exploit/react/cve-2025-55182.js.map +1 -0
- package/build/exploit/registry/cveRegistry.js +115 -0
- package/build/exploit/registry/cveRegistry.js.map +1 -0
- package/build/exploit/types.js +2 -0
- package/build/exploit/types.js.map +1 -0
- package/build/exploit/utility/compareResponses.js +29 -0
- package/build/exploit/utility/compareResponses.js.map +1 -0
- package/build/exploit/utility/outputHelper.js +22 -0
- package/build/exploit/utility/outputHelper.js.map +1 -0
- package/build/exploit/utility/rawRequest.js +56 -0
- package/build/exploit/utility/rawRequest.js.map +1 -0
- package/build/exploit/utility/sandboxRce.js +49 -0
- package/build/exploit/utility/sandboxRce.js.map +1 -0
- package/build/exploit/utility/toEngineOutput.js +28 -0
- package/build/exploit/utility/toEngineOutput.js.map +1 -0
- package/build/exploit/utility/wsClient.js +78 -0
- package/build/exploit/utility/wsClient.js.map +1 -0
- package/build/exploit/vite/cve-2025-30208.js +44 -0
- package/build/exploit/vite/cve-2025-30208.js.map +1 -0
- package/build/exploit/vite/cve-2026-39363.js +60 -0
- package/build/exploit/vite/cve-2026-39363.js.map +1 -0
- package/build/fingerprint/index.js +3 -2
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +5 -596
- package/build/index.js.map +1 -1
- package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +14 -11
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +9 -1
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +1 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -1
- package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
- package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
- package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
- package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_resolveScope.js +66 -0
- package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/globals.js +31 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +172 -75
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +9 -1
- package/build/lazyLoad/methodFilter.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +98 -14
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +17 -11
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +7 -6
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
- package/build/lazyLoad/next_js/next_buildId.js +2 -2
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/next_js/next_routerStateForge.js +407 -0
- package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
- package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +29 -5
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/react/react_sourcemapUrls.js +7 -28
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +10 -202
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/researchUtils.js +15 -0
- package/build/lazyLoad/researchUtils.js.map +1 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
- package/build/lazyLoad/sourcemap.js +120 -0
- package/build/lazyLoad/sourcemap.js.map +1 -1
- package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +15 -6
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +17 -1
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -2
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +13 -11
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +12 -3
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +3 -3
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/load/index.js +28 -38
- package/build/load/index.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +6 -6
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +6 -6
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/index.js +17 -17
- package/build/map/index.js.map +1 -1
- package/build/map/interactive-mode/commandHandler.js +278 -0
- package/build/map/interactive-mode/commandHandler.js.map +1 -0
- package/build/map/interactive-mode/commandHelpers.js +189 -0
- package/build/map/interactive-mode/commandHelpers.js.map +1 -0
- package/build/map/interactive-mode/esqueryGen.js.map +1 -0
- package/build/map/interactive-mode/helpMenu.js +11 -0
- package/build/map/interactive-mode/helpMenu.js.map +1 -0
- package/build/map/interactive-mode/inputPatch.js.map +1 -0
- package/build/map/interactive-mode/interactive.js +71 -0
- package/build/map/interactive-mode/interactive.js.map +1 -0
- package/build/map/interactive-mode/keybindings.js.map +1 -0
- package/build/map/interactive-mode/printer.js.map +1 -0
- package/build/map/interactive-mode/ui.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +5 -5
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getExports.js +4 -4
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +10 -10
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +8 -8
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +27 -16
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive.js +3 -65
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +6 -6
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +23 -23
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +10 -10
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +4 -4
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +8 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +21 -14
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/svelte_js/interactive.js +3 -54
- package/build/map/svelte_js/interactive.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +23 -16
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +3 -63
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +1 -1
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +12 -12
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +11 -11
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/mcp/chatOneShot.js +7 -7
- package/build/mcp/chatOneShot.js.map +1 -1
- package/build/mcp/claudeCodeCreds.js +5 -5
- package/build/mcp/claudeCodeCreds.js.map +1 -1
- package/build/mcp/cli.js +36 -35
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/config.js +4 -4
- package/build/mcp/config.js.map +1 -1
- package/build/mcp/index.js +7 -7
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/mcpServer.js +4 -3
- package/build/mcp/mcpServer.js.map +1 -1
- package/build/mcp/skills.js +1 -0
- package/build/mcp/skills.js.map +1 -1
- package/build/mcp/tools.js +6 -5
- package/build/mcp/tools.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +2 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -1
- package/build/proxy/index.js +3 -3
- package/build/proxy/index.js.map +1 -1
- package/build/refactor/index.js +83 -79
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/index.js +69 -26
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +11 -4
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/next/validator.js +7 -7
- package/build/refactor/next/validator.js.map +1 -1
- package/build/refactor/react/index.js +13 -13
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/validator.js +7 -7
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +3 -3
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/remote/hf-client.js +1 -0
- package/build/refactor/remote/hf-client.js.map +1 -1
- package/build/refactor/remote/version-detect.js +12 -12
- package/build/refactor/remote/version-detect.js.map +1 -1
- package/build/refactor/vue/index.js +6 -6
- package/build/refactor/vue/index.js.map +1 -1
- package/build/refactor/vue/vite.js +6 -6
- package/build/refactor/vue/vite.js.map +1 -1
- package/build/report/index.js +30 -8
- package/build/report/index.js.map +1 -1
- package/build/report/swaggerJacker.js +63 -0
- package/build/report/swaggerJacker.js.map +1 -0
- package/build/report/utility/dataTables/genDataTablesPage.js +2 -1
- package/build/report/utility/dataTables/genDataTablesPage.js.map +1 -1
- package/build/report/utility/genHtml.js +316 -25
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/report/utility/markdownGen/addAnalyze.js +2 -1
- package/build/report/utility/markdownGen/addAnalyze.js.map +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/report/utility/populateDb/populateEndpoints.js +3 -3
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedJson.js +2 -2
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
- package/build/report/utility/severityColors.js +35 -0
- package/build/report/utility/severityColors.js.map +1 -0
- package/build/run/bundler-detect.js +45 -9
- package/build/run/bundler-detect.js.map +1 -1
- package/build/run/dashboard/dashboardHtml.js +150 -0
- package/build/run/dashboard/dashboardHtml.js.map +1 -0
- package/build/run/dashboard/fsBrowser.js +43 -0
- package/build/run/dashboard/fsBrowser.js.map +1 -0
- package/build/run/dashboard/server.js +123 -0
- package/build/run/dashboard/server.js.map +1 -0
- package/build/run/dashboard/state.js +97 -0
- package/build/run/dashboard/state.js.map +1 -0
- package/build/run/index.js +177 -110
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +18 -0
- package/build/run/interruptHandler.js.map +1 -1
- package/build/sourcemaps/index.js +7 -6
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +27 -24
- package/build/strings/index.js.map +1 -1
- package/build/strings/openapi.js +4 -4
- package/build/strings/openapi.js.map +1 -1
- package/build/strings/permutate.js +4 -4
- package/build/strings/permutate.js.map +1 -1
- package/build/strings/secrets.js +1 -0
- package/build/strings/secrets.js.map +1 -1
- package/build/strings/trufflehog.js +66 -19
- package/build/strings/trufflehog.js.map +1 -1
- package/build/strings/trufflehogConfig.js +36 -0
- package/build/strings/trufflehogConfig.js.map +1 -0
- package/build/strings/trufflehogDownload.js +115 -0
- package/build/strings/trufflehogDownload.js.map +1 -0
- package/build/utility/ai.js +33 -4
- package/build/utility/ai.js.map +1 -1
- package/build/utility/banner.js +4 -3
- package/build/utility/banner.js.map +1 -1
- package/build/utility/cacheDb.js +78 -0
- package/build/utility/cacheDb.js.map +1 -0
- package/build/utility/configureSandbox.js +2 -2
- package/build/utility/configureSandbox.js.map +1 -1
- package/build/utility/customHeaders.js +30 -0
- package/build/utility/customHeaders.js.map +1 -0
- package/build/utility/globals.js +37 -12
- package/build/utility/globals.js.map +1 -1
- package/build/utility/heap.js +2 -1
- package/build/utility/heap.js.map +1 -1
- package/build/utility/makeReq.js +38 -87
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +2 -2
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/printMsg.js +53 -0
- package/build/utility/printMsg.js.map +1 -0
- package/build/utility/progressLog.js +4 -3
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/resolvePath.js +2 -1
- package/build/utility/resolvePath.js.map +1 -1
- package/build/utility/ruleVersionMap.js +73 -0
- package/build/utility/ruleVersionMap.js.map +1 -0
- package/config.dist.yaml +3 -3
- package/contributing/testing.md +106 -0
- package/eslint.config.js +24 -0
- package/package.json +22 -6
- package/scripts/exploit-smoke-test.js +82 -0
- package/scripts/framework-detect-smoke-test.js +64 -0
- package/scripts/postinstall-completion.mjs +40 -0
- package/scripts/smoke-test.js +12 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
- package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
- package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
|
@@ -1,30 +1,77 @@
|
|
|
1
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
2
10
|
import { execSync, spawn } from "child_process";
|
|
3
|
-
|
|
11
|
+
import inquirer from "inquirer";
|
|
12
|
+
import { printMsg, MSG } from "../utility/printMsg.js";
|
|
13
|
+
import { downloadTrufflehog } from "./trufflehogDownload.js";
|
|
14
|
+
import { isConsentGiven, giveConsent } from "./trufflehogConfig.js";
|
|
15
|
+
const isTrufflehogInstalled = (bin) => {
|
|
4
16
|
try {
|
|
5
|
-
execSync(
|
|
17
|
+
execSync(`which ${bin}`, { stdio: "pipe" });
|
|
6
18
|
return true;
|
|
7
19
|
}
|
|
8
20
|
catch (_a) {
|
|
9
21
|
return false;
|
|
10
22
|
}
|
|
11
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Resolves the trufflehog binary to invoke: an explicit `--trufflehog-bin`/PATH binary if
|
|
26
|
+
* present, otherwise auto-downloads from TruffleHog's official GitHub releases after
|
|
27
|
+
* obtaining one-time consent (interactive prompt, or `--trufflehog-accept-terms` for CI).
|
|
28
|
+
*/
|
|
29
|
+
const resolveTrufflehogBin = (trufflehogBin, acceptTerms) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
if (isTrufflehogInstalled(trufflehogBin)) {
|
|
31
|
+
return trufflehogBin;
|
|
32
|
+
}
|
|
33
|
+
if (!isConsentGiven()) {
|
|
34
|
+
if (acceptTerms) {
|
|
35
|
+
giveConsent();
|
|
36
|
+
}
|
|
37
|
+
else if (process.stdin.isTTY) {
|
|
38
|
+
printMsg(MSG.Header, "[i] --trufflehog was set but the trufflehog binary was not found.");
|
|
39
|
+
printMsg(MSG.Warn, " JS Recon can download it directly from trufflesecurity/trufflehog's official GitHub releases");
|
|
40
|
+
printMsg(MSG.Warn, " and run it as a separate process. TruffleHog is licensed under AGPL-3.0.");
|
|
41
|
+
const { confirmed } = yield inquirer.prompt([
|
|
42
|
+
{
|
|
43
|
+
type: "confirm",
|
|
44
|
+
name: "confirmed",
|
|
45
|
+
message: "Download and run TruffleHog?",
|
|
46
|
+
default: true,
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
if (!confirmed) {
|
|
50
|
+
printMsg(MSG.Err, "[!] TruffleHog download declined.");
|
|
51
|
+
printMsg(MSG.Warn, " Re-run with --trufflehog-accept-terms, or point --trufflehog-bin at an existing install.");
|
|
52
|
+
process.exit(32);
|
|
53
|
+
}
|
|
54
|
+
giveConsent();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
printMsg(MSG.Err, "[!] trufflehog not found and terms not accepted.");
|
|
58
|
+
printMsg(MSG.Warn, " Re-run with --trufflehog-accept-terms to allow auto-download in non-interactive contexts,");
|
|
59
|
+
printMsg(MSG.Warn, " or point --trufflehog-bin at an existing install.");
|
|
60
|
+
process.exit(32);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return downloadTrufflehog(process.env.HOME || "~");
|
|
64
|
+
});
|
|
12
65
|
const maskSecret = (value) => {
|
|
13
66
|
if (!value || value.length <= 4)
|
|
14
67
|
return "****";
|
|
15
68
|
return value.slice(0, 4) + "****";
|
|
16
69
|
};
|
|
17
|
-
export const runTrufflehog = (
|
|
70
|
+
export const runTrufflehog = (directory_1, ...args_1) => __awaiter(void 0, [directory_1, ...args_1], void 0, function* (directory, trufflehogBin = "trufflehog", acceptTerms = false) {
|
|
71
|
+
const resolvedBin = yield resolveTrufflehogBin(trufflehogBin, acceptTerms);
|
|
18
72
|
return new Promise((resolve) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
console.error(chalk.yellow(" Install: curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh"));
|
|
22
|
-
console.error(chalk.yellow(" Or: brew install trufflehog"));
|
|
23
|
-
console.error(chalk.yellow(" Then re-run with --trufflehog."));
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
console.log(chalk.cyan("[i] Running TruffleHog on output directory"));
|
|
27
|
-
const proc = spawn("trufflehog", ["filesystem", directory, "--json", "--no-update"], {
|
|
73
|
+
printMsg(MSG.Header, "[i] Running TruffleHog on output directory");
|
|
74
|
+
const proc = spawn(resolvedBin, ["filesystem", directory, "--json", "--no-update"], {
|
|
28
75
|
stdio: ["ignore", "pipe", "pipe"],
|
|
29
76
|
});
|
|
30
77
|
let totalFindings = 0;
|
|
@@ -42,8 +89,8 @@ export const runTrufflehog = (directory) => {
|
|
|
42
89
|
const detector = (_c = (_b = finding.DetectorName) !== null && _b !== void 0 ? _b : finding.detectorName) !== null && _c !== void 0 ? _c : "Unknown";
|
|
43
90
|
const raw = (_e = (_d = finding.Raw) !== null && _d !== void 0 ? _d : finding.raw) !== null && _e !== void 0 ? _e : "";
|
|
44
91
|
const file = (_o = (_j = (_h = (_g = (_f = finding.SourceMetadata) === null || _f === void 0 ? void 0 : _f.Data) === null || _g === void 0 ? void 0 : _g.Filesystem) === null || _h === void 0 ? void 0 : _h.file) !== null && _j !== void 0 ? _j : (_m = (_l = (_k = finding.sourceMetadata) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.filesystem) === null || _m === void 0 ? void 0 : _m.file) !== null && _o !== void 0 ? _o : "unknown file";
|
|
45
|
-
|
|
46
|
-
|
|
92
|
+
printMsg(MSG.Run, `[✓] [trufflehog] ${detector} found in ${file}`);
|
|
93
|
+
printMsg(MSG.Run, ` → ${maskSecret(raw)}`);
|
|
47
94
|
totalFindings++;
|
|
48
95
|
}
|
|
49
96
|
catch (_p) {
|
|
@@ -54,18 +101,18 @@ export const runTrufflehog = (directory) => {
|
|
|
54
101
|
proc.stderr.on("data", (chunk) => {
|
|
55
102
|
const msg = chunk.toString().trim();
|
|
56
103
|
if (msg) {
|
|
57
|
-
|
|
104
|
+
printMsg(MSG.Warn, `[trufflehog] ${msg}`);
|
|
58
105
|
}
|
|
59
106
|
});
|
|
60
107
|
proc.on("close", () => {
|
|
61
108
|
if (totalFindings === 0) {
|
|
62
|
-
|
|
109
|
+
printMsg(MSG.Warn, "[!] TruffleHog found no secrets");
|
|
63
110
|
}
|
|
64
111
|
else {
|
|
65
|
-
|
|
112
|
+
printMsg(MSG.Run, `[✓] TruffleHog found ${totalFindings} secrets`);
|
|
66
113
|
}
|
|
67
114
|
resolve();
|
|
68
115
|
});
|
|
69
116
|
});
|
|
70
|
-
};
|
|
117
|
+
});
|
|
71
118
|
//# sourceMappingURL=trufflehog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trufflehog.js","sourceRoot":"","sources":["../../src/strings/trufflehog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"trufflehog.js","sourceRoot":"","sources":["../../src/strings/trufflehog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
terms_accepted: false,
|
|
6
|
+
};
|
|
7
|
+
const CONFIG_DIR = path.join(process.env.HOME || "~", ".js-recon");
|
|
8
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "trufflehog.yaml");
|
|
9
|
+
const ensureConfigDir = () => {
|
|
10
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
11
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const loadConfig = () => {
|
|
15
|
+
ensureConfigDir();
|
|
16
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
17
|
+
return Object.assign({}, DEFAULT_CONFIG);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(CONFIG_FILE, "utf-8");
|
|
21
|
+
const parsed = YAML.parse(raw);
|
|
22
|
+
return Object.assign(Object.assign({}, DEFAULT_CONFIG), parsed);
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
25
|
+
return Object.assign({}, DEFAULT_CONFIG);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const saveConfig = (config) => {
|
|
29
|
+
ensureConfigDir();
|
|
30
|
+
fs.writeFileSync(CONFIG_FILE, YAML.stringify(config), "utf-8");
|
|
31
|
+
};
|
|
32
|
+
export const isConsentGiven = () => loadConfig().terms_accepted;
|
|
33
|
+
export const giveConsent = () => {
|
|
34
|
+
saveConfig(Object.assign(Object.assign({}, loadConfig()), { terms_accepted: true }));
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=trufflehogConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehogConfig.js","sourceRoot":"","sources":["../../src/strings/trufflehogConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AAMxB,MAAM,cAAc,GAAqB;IACrC,cAAc,EAAE,KAAK;CACxB,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,WAAW,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE7D,MAAM,eAAe,GAAG,GAAS,EAAE;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,GAAqB,EAAE;IACtC,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,yBAAY,cAAc,EAAG;IACjC,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QAC5D,uCAAY,cAAc,GAAK,MAAM,EAAG;IAC5C,CAAC;IAAC,WAAM,CAAC;QACL,yBAAY,cAAc,EAAG;IACjC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAQ,EAAE;IAClD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAS,EAAE;IAClC,UAAU,iCAAM,UAAU,EAAE,KAAE,cAAc,EAAE,IAAI,IAAG,CAAC;AAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import fs from "fs";
|
|
11
|
+
import path from "path";
|
|
12
|
+
import * as tar from "tar";
|
|
13
|
+
import { withActiveProxyDispatcher } from "../utility/makeReq.js";
|
|
14
|
+
import { printMsg, MSG } from "../utility/printMsg.js";
|
|
15
|
+
const TRUFFLEHOG_RELEASE_URL = "https://api.github.com/repos/trufflesecurity/trufflehog/releases/latest";
|
|
16
|
+
/**
|
|
17
|
+
* Maps Node's platform/arch identifiers to TruffleHog's GitHub release asset naming
|
|
18
|
+
* (e.g. `trufflehog_3.96.0_darwin_amd64.tar.gz`).
|
|
19
|
+
*
|
|
20
|
+
* @param platform - `process.platform` value
|
|
21
|
+
* @param arch - `process.arch` value
|
|
22
|
+
* @returns The `<os>_<arch>` fragment used in TruffleHog's release asset names
|
|
23
|
+
*/
|
|
24
|
+
export const resolveAssetName = (platform, arch) => {
|
|
25
|
+
const osMap = {
|
|
26
|
+
darwin: "darwin",
|
|
27
|
+
linux: "linux",
|
|
28
|
+
win32: "windows",
|
|
29
|
+
};
|
|
30
|
+
const archMap = {
|
|
31
|
+
x64: "amd64",
|
|
32
|
+
arm64: "arm64",
|
|
33
|
+
};
|
|
34
|
+
const os = osMap[platform];
|
|
35
|
+
const mappedArch = archMap[arch];
|
|
36
|
+
if (!os || !mappedArch) {
|
|
37
|
+
throw new Error(`Unsupported platform/arch for TruffleHog auto-download: ${platform}/${arch}`);
|
|
38
|
+
}
|
|
39
|
+
return `${os}_${mappedArch}`;
|
|
40
|
+
};
|
|
41
|
+
const fetchLatestTrufflehogRelease = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const response = yield fetch(TRUFFLEHOG_RELEASE_URL, options);
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`TruffleHog release lookup failed with HTTP ${response.status}`);
|
|
45
|
+
}
|
|
46
|
+
const release = (yield response.json());
|
|
47
|
+
if (typeof release !== "object" || release === null) {
|
|
48
|
+
throw new Error("TruffleHog release response was not an object");
|
|
49
|
+
}
|
|
50
|
+
const { tag_name: tagName, assets } = release;
|
|
51
|
+
if (typeof tagName !== "string" || !Array.isArray(assets)) {
|
|
52
|
+
throw new Error("TruffleHog release response is missing tag_name or assets");
|
|
53
|
+
}
|
|
54
|
+
const assetSuffix = resolveAssetName(process.platform, process.arch);
|
|
55
|
+
const asset = assets.find((a) => typeof a === "object" &&
|
|
56
|
+
a !== null &&
|
|
57
|
+
typeof a.name === "string" &&
|
|
58
|
+
a.name.includes(assetSuffix) &&
|
|
59
|
+
a.name.endsWith(".tar.gz"));
|
|
60
|
+
if (!asset || typeof asset.browser_download_url !== "string") {
|
|
61
|
+
throw new Error(`No TruffleHog release asset found for platform/arch "${assetSuffix}"`);
|
|
62
|
+
}
|
|
63
|
+
const parsedUrl = new URL(asset.browser_download_url);
|
|
64
|
+
if (parsedUrl.protocol !== "https:" ||
|
|
65
|
+
!["github.com", "objects.githubusercontent.com"].includes(parsedUrl.hostname)) {
|
|
66
|
+
throw new Error("TruffleHog release response contains an unexpected download URL");
|
|
67
|
+
}
|
|
68
|
+
return Object.freeze({ tagName, downloadUrl: parsedUrl.toString() });
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Downloads and caches the TruffleHog binary from its official GitHub releases.
|
|
72
|
+
*
|
|
73
|
+
* Fetches the latest release directly from `trufflesecurity/trufflehog` and extracts the
|
|
74
|
+
* platform-matching binary under `~/.js-recon/trufflehog/<version>/`. JS Recon never mirrors
|
|
75
|
+
* or hosts its own copy of the binary — every download resolves the asset URL from GitHub's
|
|
76
|
+
* release API at request time.
|
|
77
|
+
*
|
|
78
|
+
* @param homeDir - The user's home directory path
|
|
79
|
+
* @returns Absolute path to the cached (or freshly downloaded) trufflehog binary
|
|
80
|
+
*/
|
|
81
|
+
export const downloadTrufflehog = (homeDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
+
const trufflehogRoot = path.join(homeDir, ".js-recon", "trufflehog");
|
|
83
|
+
const binName = process.platform === "win32" ? "trufflehog.exe" : "trufflehog";
|
|
84
|
+
if (fs.existsSync(trufflehogRoot)) {
|
|
85
|
+
const cachedVersionDirs = fs.readdirSync(trufflehogRoot);
|
|
86
|
+
for (const versionDir of cachedVersionDirs) {
|
|
87
|
+
const cachedBin = path.join(trufflehogRoot, versionDir, binName);
|
|
88
|
+
if (fs.existsSync(cachedBin)) {
|
|
89
|
+
return cachedBin;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
printMsg(MSG.Header, "[i] TruffleHog not found. Downloading from GitHub...");
|
|
94
|
+
const buffer = yield withActiveProxyDispatcher((options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
+
const release = yield fetchLatestTrufflehogRelease(options);
|
|
96
|
+
const downloadResponse = yield fetch(release.downloadUrl, options);
|
|
97
|
+
if (!downloadResponse.ok) {
|
|
98
|
+
throw new Error(`Failed to download TruffleHog: ${downloadResponse.statusText}`);
|
|
99
|
+
}
|
|
100
|
+
return { buffer: Buffer.from(yield downloadResponse.arrayBuffer()), tagName: release.tagName };
|
|
101
|
+
}));
|
|
102
|
+
const version = buffer.tagName.replace(/^v/, "");
|
|
103
|
+
const extractPath = path.join(trufflehogRoot, version);
|
|
104
|
+
fs.mkdirSync(extractPath, { recursive: true });
|
|
105
|
+
const tarPath = path.join(extractPath, "trufflehog.tar.gz");
|
|
106
|
+
fs.writeFileSync(tarPath, buffer.buffer);
|
|
107
|
+
printMsg(MSG.Header, "[i] Extracting TruffleHog...");
|
|
108
|
+
yield tar.x({ file: tarPath, cwd: extractPath });
|
|
109
|
+
fs.unlinkSync(tarPath);
|
|
110
|
+
const binPath = path.join(extractPath, binName);
|
|
111
|
+
fs.chmodSync(binPath, 0o755);
|
|
112
|
+
printMsg(MSG.Run, "[✓] TruffleHog downloaded successfully.");
|
|
113
|
+
return binPath;
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=trufflehogDownload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehogDownload.js","sourceRoot":"","sources":["../../src/strings/trufflehogDownload.ts"],"names":[],"mappings":"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"}
|
package/build/utility/ai.js
CHANGED
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import OpenAI from "openai";
|
|
11
11
|
import { Ollama } from "ollama";
|
|
12
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
12
13
|
import * as globals from "./globals.js";
|
|
13
14
|
/**
|
|
14
15
|
* OpenAI client instance.
|
|
@@ -16,11 +17,11 @@ import * as globals from "./globals.js";
|
|
|
16
17
|
* @remarks
|
|
17
18
|
* This client is used to communicate with the OpenAI API.
|
|
18
19
|
* The base URL and API key are configurable via the
|
|
19
|
-
* `setAiEndpoint` and `
|
|
20
|
+
* `setAiEndpoint` and `setAiApiKey` functions.
|
|
20
21
|
*/
|
|
21
22
|
const openai_client = new OpenAI({
|
|
22
23
|
baseURL: globals.getAiEndpoint() || "https://api.openai.com/v1",
|
|
23
|
-
apiKey: globals.
|
|
24
|
+
apiKey: globals.getAiApiKey(),
|
|
24
25
|
});
|
|
25
26
|
/**
|
|
26
27
|
* Ollama client instance.
|
|
@@ -32,6 +33,16 @@ const openai_client = new OpenAI({
|
|
|
32
33
|
const ollama_client = new Ollama({
|
|
33
34
|
host: globals.getAiEndpoint() || "http://127.0.0.1:11434",
|
|
34
35
|
});
|
|
36
|
+
/**
|
|
37
|
+
* Anthropic client instance.
|
|
38
|
+
*
|
|
39
|
+
* @remarks
|
|
40
|
+
* This client is used to communicate with the Anthropic Messages API.
|
|
41
|
+
* The API key is configurable via the `setAiApiKey` function.
|
|
42
|
+
*/
|
|
43
|
+
const anthropic_client = new Anthropic({
|
|
44
|
+
apiKey: globals.getAiApiKey(),
|
|
45
|
+
});
|
|
35
46
|
/**
|
|
36
47
|
* Returns an AI client instance based on the configured provider.
|
|
37
48
|
*
|
|
@@ -46,6 +57,9 @@ const ai = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
46
57
|
if (provider === "ollama") {
|
|
47
58
|
return { client: ollama_client, model };
|
|
48
59
|
}
|
|
60
|
+
if (provider === "anthropic") {
|
|
61
|
+
return { client: anthropic_client, model };
|
|
62
|
+
}
|
|
49
63
|
throw new Error(`AI service provider "${provider}" is not supported or configured.`);
|
|
50
64
|
});
|
|
51
65
|
/**
|
|
@@ -64,7 +78,7 @@ function getCompletion(prompt_1) {
|
|
|
64
78
|
throw new Error(`AI service provider "${provider}" is not supported or configured.`);
|
|
65
79
|
}
|
|
66
80
|
if (provider === "openai") {
|
|
67
|
-
// @ts-
|
|
81
|
+
// @ts-expect-error -- openai SDK types don't yet cover the Responses API shape used here
|
|
68
82
|
const completion = yield client.responses.create({
|
|
69
83
|
input: [
|
|
70
84
|
{ role: "system", content: systemPrompt },
|
|
@@ -91,7 +105,22 @@ function getCompletion(prompt_1) {
|
|
|
91
105
|
});
|
|
92
106
|
return response.message.content || "none";
|
|
93
107
|
}
|
|
108
|
+
if (provider === "anthropic") {
|
|
109
|
+
// @ts-expect-error -- openai SDK types don't yet cover the Responses API shape used here
|
|
110
|
+
const response = yield client.messages.create({
|
|
111
|
+
model: model || "claude-haiku-4-5-20251001",
|
|
112
|
+
max_tokens: 4096,
|
|
113
|
+
system: systemPrompt,
|
|
114
|
+
messages: [{ role: "user", content: prompt }],
|
|
115
|
+
temperature: 0.1,
|
|
116
|
+
});
|
|
117
|
+
const text = response.content
|
|
118
|
+
.filter((block) => block.type === "text")
|
|
119
|
+
.map((block) => block.text)
|
|
120
|
+
.join("");
|
|
121
|
+
return text || "none";
|
|
122
|
+
}
|
|
94
123
|
});
|
|
95
124
|
}
|
|
96
|
-
export { ai, openai_client, ollama_client, getCompletion };
|
|
125
|
+
export { ai, openai_client, ollama_client, anthropic_client, getCompletion };
|
|
97
126
|
//# sourceMappingURL=ai.js.map
|
package/build/utility/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/utility/ai.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,2BAA2B;IAC/D,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/utility/ai.ts"],"names":[],"mappings":"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"}
|
package/build/utility/banner.js
CHANGED
|
@@ -14,6 +14,7 @@ import path from "path";
|
|
|
14
14
|
import https from "https";
|
|
15
15
|
import os from "os";
|
|
16
16
|
import CONFIG from "../globalConfig.js";
|
|
17
|
+
import { printMsg, MSG } from "./printMsg.js";
|
|
17
18
|
const LOGO_URL = "https://js-recon.io/img/js-recon-logo.png";
|
|
18
19
|
const CACHE_DIR = path.join(os.homedir(), ".js-recon");
|
|
19
20
|
const LOGO_CACHE = path.join(CACHE_DIR, "logo.png");
|
|
@@ -60,9 +61,9 @@ export function printBanner() {
|
|
|
60
61
|
const name = chalk.bold.hex("#00d4ff")("JS Recon");
|
|
61
62
|
const version = chalk.dim(`v${CONFIG.version}`);
|
|
62
63
|
const tagline = chalk.hex("#888888")(CONFIG.toolDesc);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
printMsg(MSG.Plain, ` ${name} ${version}`);
|
|
65
|
+
printMsg(MSG.Plain, ` ${tagline}`);
|
|
66
|
+
printMsg(MSG.Plain, "");
|
|
66
67
|
});
|
|
67
68
|
}
|
|
68
69
|
//# sourceMappingURL=banner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utility/banner.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utility/banner.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,QAAQ,GAAG,2CAA2C,CAAC;AAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAEpD,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK;aACA,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpB,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtE,OAAO;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACjB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAgB,WAAW;;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACD,MAAM,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC;YAAC,WAAM,CAAC;gBACL,uCAAuC;YAC3C,CAAC;QACL,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7C,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import * as globals from "./globals.js";
|
|
3
|
+
const createCacheTable = (db) => {
|
|
4
|
+
db.prepare(`
|
|
5
|
+
CREATE TABLE IF NOT EXISTS cache_entries (
|
|
6
|
+
identity_digest TEXT PRIMARY KEY,
|
|
7
|
+
url TEXT NOT NULL,
|
|
8
|
+
status INTEGER NOT NULL,
|
|
9
|
+
status_text TEXT NOT NULL,
|
|
10
|
+
body_base64 TEXT NOT NULL,
|
|
11
|
+
response_headers TEXT NOT NULL,
|
|
12
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
13
|
+
)
|
|
14
|
+
`).run();
|
|
15
|
+
db.prepare(`CREATE INDEX IF NOT EXISTS idx_cache_entries_url ON cache_entries(url)`).run();
|
|
16
|
+
};
|
|
17
|
+
let db = null;
|
|
18
|
+
let dbPath = null;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the singleton cache DB connection, lazily opening (and creating the
|
|
21
|
+
* schema for) `globals.getRespCacheFile()`. Reopens automatically if the
|
|
22
|
+
* configured cache file path has changed since the last call (the CLI sets
|
|
23
|
+
* the path via `setRespCacheFile()` after module import, and tests repoint
|
|
24
|
+
* it per-test).
|
|
25
|
+
*/
|
|
26
|
+
export const getCacheDb = () => {
|
|
27
|
+
const path = globals.getRespCacheFile();
|
|
28
|
+
if (db && dbPath === path)
|
|
29
|
+
return db;
|
|
30
|
+
if (db) {
|
|
31
|
+
db.close();
|
|
32
|
+
db = null;
|
|
33
|
+
}
|
|
34
|
+
const opened = new Database(path);
|
|
35
|
+
opened.pragma("journal_mode = WAL");
|
|
36
|
+
createCacheTable(opened);
|
|
37
|
+
db = opened;
|
|
38
|
+
dbPath = path;
|
|
39
|
+
return db;
|
|
40
|
+
};
|
|
41
|
+
/** Closes the singleton cache DB connection, if open. Safe to call when already closed. */
|
|
42
|
+
export const closeCacheDb = () => {
|
|
43
|
+
if (db) {
|
|
44
|
+
db.close();
|
|
45
|
+
db = null;
|
|
46
|
+
dbPath = null;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const rowToCacheRow = (row) => ({
|
|
50
|
+
identityDigest: row.identity_digest,
|
|
51
|
+
url: row.url,
|
|
52
|
+
status: row.status,
|
|
53
|
+
statusText: row.status_text,
|
|
54
|
+
bodyBase64: row.body_base64,
|
|
55
|
+
responseHeaders: JSON.parse(row.response_headers),
|
|
56
|
+
});
|
|
57
|
+
/** Looks up a cache entry by its identity digest. Returns null on miss. */
|
|
58
|
+
export const readCacheEntry = (identityDigest) => {
|
|
59
|
+
const row = getCacheDb()
|
|
60
|
+
.prepare(`SELECT identity_digest, url, status, status_text, body_base64, response_headers FROM cache_entries WHERE identity_digest = ?`)
|
|
61
|
+
.get(identityDigest);
|
|
62
|
+
return row ? rowToCacheRow(row) : null;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Inserts a cache entry, first-write-wins for a duplicate identity digest
|
|
66
|
+
* (mirrors the previous sidecar format's "don't clobber an existing entry"
|
|
67
|
+
* behavior, done atomically here instead of via a separate existence check).
|
|
68
|
+
*/
|
|
69
|
+
export const writeCacheEntryUnsafe = (entry) => {
|
|
70
|
+
getCacheDb()
|
|
71
|
+
.prepare(`INSERT OR IGNORE INTO cache_entries (identity_digest, url, status, status_text, body_base64, response_headers) VALUES (?, ?, ?, ?, ?, ?)`)
|
|
72
|
+
.run(entry.identityDigest, entry.url, entry.status, entry.statusText, entry.bodyBase64, JSON.stringify(entry.responseHeaders));
|
|
73
|
+
};
|
|
74
|
+
/** Deletes a cache entry by identity digest, e.g. to force a refetch of a blocked response. */
|
|
75
|
+
export const deleteCacheEntry = (identityDigest) => {
|
|
76
|
+
getCacheDb().prepare(`DELETE FROM cache_entries WHERE identity_digest = ?`).run(identityDigest);
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=cacheDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheDb.js","sourceRoot":"","sources":["../../src/utility/cacheDb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AA+BxC,MAAM,gBAAgB,GAAG,CAAC,EAAqB,EAAQ,EAAE;IACrD,EAAE,CAAC,OAAO,CACN;;;;;;;;;;KAUH,CACA,CAAC,GAAG,EAAE,CAAC;IACR,EAAE,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,EAAE,CAAC;AAC/F,CAAC,CAAC;AAEF,IAAI,EAAE,GAA6B,IAAI,CAAC;AACxC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAsB,EAAE;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACxC,IAAI,EAAE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,EAAE,EAAE,CAAC;QACL,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,EAAE,GAAG,MAAM,CAAC;IACZ,MAAM,GAAG,IAAI,CAAC;IACd,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,GAAS,EAAE;IACnC,IAAI,EAAE,EAAE,CAAC;QACL,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;QACV,MAAM,GAAG,IAAI,CAAC;IAClB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAuB,EAAY,EAAE,CAAC,CAAC;IAC1D,cAAc,EAAE,GAAG,CAAC,eAAe;IACnC,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,UAAU,EAAE,GAAG,CAAC,WAAW;IAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;IAC3B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;CACpD,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAmB,EAAE;IACtE,MAAM,GAAG,GAAG,UAAU,EAAE;SACnB,OAAO,CACJ,8HAA8H,CACjI;SACA,GAAG,CAAC,cAAc,CAAmC,CAAC;IAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAe,EAAQ,EAAE;IAC3D,UAAU,EAAE;SACP,OAAO,CACJ,0IAA0I,CAC7I;SACA,GAAG,CACA,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAChB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CACxC,CAAC;AACV,CAAC,CAAC;AAEF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAsB,EAAQ,EAAE;IAC7D,UAAU,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpG,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
1
|
import * as globalsUtil from "./globals.js";
|
|
2
|
+
import { printMsg, MSG } from "./printMsg.js";
|
|
3
3
|
/**
|
|
4
4
|
* Configures the browser sandbox based on command-line flags and environment variables.
|
|
5
5
|
* @param cmd - The commander command object.
|
|
@@ -7,7 +7,7 @@ import * as globalsUtil from "./globals.js";
|
|
|
7
7
|
const configureSandbox = (cmd) => {
|
|
8
8
|
if (process.env.IS_DOCKER === "true" || cmd.sandbox === false) {
|
|
9
9
|
globalsUtil.setDisableSandbox(true);
|
|
10
|
-
|
|
10
|
+
printMsg(MSG.Warn, `[!] Disabling browser sandbox`);
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
13
|
export default configureSandbox;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureSandbox.js","sourceRoot":"","sources":["../../src/utility/configureSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"configureSandbox.js","sourceRoot":"","sources":["../../src/utility/configureSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,EAAE;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC5D,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;IACxD,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Folds an array of custom header name/value pairs into a plain Record, suitable for merging
|
|
3
|
+
* into a `HeadersInit`/`Record<string,string>`. Later entries win when names repeat.
|
|
4
|
+
* @param pairs - Array of name/value header pairs
|
|
5
|
+
* @returns Record mapping header name to header value
|
|
6
|
+
*/
|
|
7
|
+
export const customHeadersToRecord = (pairs) => {
|
|
8
|
+
const record = {};
|
|
9
|
+
for (const { name, value } of pairs) {
|
|
10
|
+
record[name] = value;
|
|
11
|
+
}
|
|
12
|
+
return record;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Parses a single `-H/--header` CLI flag value into a name/value pair. Expects the
|
|
16
|
+
* `"Name: Value"` shape (colon-separated, whitespace around each side trimmed).
|
|
17
|
+
* @param raw - Raw flag value as passed on the command line
|
|
18
|
+
* @returns The parsed pair, or `null` if `raw` has no colon separator
|
|
19
|
+
*/
|
|
20
|
+
export const parseHeaderFlagValue = (raw) => {
|
|
21
|
+
const idx = raw.indexOf(":");
|
|
22
|
+
if (idx === -1)
|
|
23
|
+
return null;
|
|
24
|
+
const name = raw.slice(0, idx).trim();
|
|
25
|
+
const value = raw.slice(idx + 1).trim();
|
|
26
|
+
if (!name)
|
|
27
|
+
return null;
|
|
28
|
+
return { name, value };
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=customHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customHeaders.js","sourceRoot":"","sources":["../../src/utility/customHeaders.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAkC,EAA0B,EAAE;IAChG,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAA2B,EAAE;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|