@js-recon/js-recon 1.3.1-beta.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/.gitattributes +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
- package/.github/workflows/build-and-prettify.yaml +121 -0
- package/.github/workflows/pr_checker.yml +22 -0
- package/.github/workflows/publish-js-recon.yml +169 -0
- package/.prettierignore +2 -0
- package/.prettierrc +6 -0
- package/CHANGELOG.md +692 -0
- package/CLAUDE.md +290 -0
- package/Dockerfile +34 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/SECURITY.md +37 -0
- package/build/analyze/engine/astEngine.js +224 -0
- package/build/analyze/engine/astEngine.js.map +1 -0
- package/build/analyze/engine/index.js +59 -0
- package/build/analyze/engine/index.js.map +1 -0
- package/build/analyze/engine/requestEngine.js +100 -0
- package/build/analyze/engine/requestEngine.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +37 -0
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +29 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +38 -0
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js +250 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
- package/build/analyze/helpers/initRules.js +111 -0
- package/build/analyze/helpers/initRules.js.map +1 -0
- package/build/analyze/helpers/outputHelper.js +14 -0
- package/build/analyze/helpers/outputHelper.js.map +1 -0
- package/build/analyze/helpers/schemas.js +57 -0
- package/build/analyze/helpers/schemas.js.map +1 -0
- package/build/analyze/helpers/validate.js +89 -0
- package/build/analyze/helpers/validate.js.map +1 -0
- package/build/analyze/index.js +150 -0
- package/build/analyze/index.js.map +1 -0
- package/build/analyze/types/index.js +2 -0
- package/build/analyze/types/index.js.map +1 -0
- package/build/api_gateway/checkFeasibility.js +41 -0
- package/build/api_gateway/checkFeasibility.js.map +1 -0
- package/build/api_gateway/checkFireWallBlocking.js +33 -0
- package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
- package/build/api_gateway/genReq.js +205 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +291 -0
- package/build/api_gateway/index.js.map +1 -0
- package/build/endpoints/gen_report/gen_json.js +30 -0
- package/build/endpoints/gen_report/gen_json.js.map +1 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js +64 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
- package/build/endpoints/index.js +101 -0
- package/build/endpoints/index.js.map +1 -0
- package/build/endpoints/next_js/client_jsFilesHref.js +100 -0
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
- package/build/endpoints/next_js/client_jsonParse.js +89 -0
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
- package/build/endpoints/next_js/client_mappedJsonFile.js +103 -0
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -0
- package/build/endpoints/next_js/client_subsequentRequests.js +211 -0
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +16 -0
- package/build/globalConfig.js.map +1 -0
- package/build/index.js +332 -0
- package/build/index.js.map +1 -0
- package/build/lazyLoad/angular/angular_getFromMainJs.js +55 -0
- package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -0
- package/build/lazyLoad/angular/angular_getFromPageSource.js +43 -0
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/downloadFilesUtil.js +127 -0
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +44 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
- package/build/lazyLoad/downloadQueue.js +191 -0
- package/build/lazyLoad/downloadQueue.js.map +1 -0
- package/build/lazyLoad/globals.js +107 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +377 -0
- package/build/lazyLoad/index.js.map +1 -0
- package/build/lazyLoad/next_js/NextJsCrawler.js +332 -0
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js +126 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +83 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +222 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +208 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +37 -0
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
- package/build/lazyLoad/next_js/next_buildId.js +55 -0
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -0
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +83 -0
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -0
- package/build/lazyLoad/next_js/next_globals.js +8 -0
- package/build/lazyLoad/next_js/next_globals.js.map +1 -0
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +116 -0
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js +85 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +51 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +202 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +82 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +108 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +105 -0
- package/build/lazyLoad/react/react_followImports.js.map +1 -0
- package/build/lazyLoad/react/react_getScriptTags.js +52 -0
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -0
- package/build/lazyLoad/react/react_sourcemapUrls.js +44 -0
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -0
- package/build/lazyLoad/react/react_webpackChunkPaths.js +188 -0
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/sourcemap.js +188 -0
- package/build/lazyLoad/sourcemap.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +91 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +123 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/techDetect/checkAngularJS.js +70 -0
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkNextJS.js +45 -0
- package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkNuxtJS.js +39 -0
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkReact.js +86 -0
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -0
- package/build/lazyLoad/techDetect/checkSvelte.js +69 -0
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -0
- package/build/lazyLoad/techDetect/checkVueJS.js +118 -0
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -0
- package/build/lazyLoad/techDetect/index.js +161 -0
- package/build/lazyLoad/techDetect/index.js.map +1 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js +169 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +102 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +82 -0
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +155 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -0
- package/build/lazyLoad/vue/vue_jsImports.js +76 -0
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
- package/build/lazyLoad/vue/vue_pageSrc.js +60 -0
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +64 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +142 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -0
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +57 -0
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js +148 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
- package/build/lazyLoad/vue/vue_viteMapDeps.js +89 -0
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -0
- package/build/load/index.js +316 -0
- package/build/load/index.js.map +1 -0
- package/build/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +261 -0
- package/build/map/index.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +64 -0
- package/build/map/next_js/getAxiosInstances.js.map +1 -0
- package/build/map/next_js/getExports.js +101 -0
- package/build/map/next_js/getExports.js.map +1 -0
- package/build/map/next_js/getFetchInstances.js +139 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getTurbopackConnections.js +255 -0
- package/build/map/next_js/getTurbopackConnections.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +235 -0
- package/build/map/next_js/getWebpackConnections.js.map +1 -0
- package/build/map/next_js/interactive.js +69 -0
- package/build/map/next_js/interactive.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js +310 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js +245 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +12 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
- package/build/map/next_js/interactive_helpers/keybindings.js +90 -0
- package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
- package/build/map/next_js/interactive_helpers/printer.js +23 -0
- package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +88 -0
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
- package/build/map/next_js/resolveAxios.js +152 -0
- package/build/map/next_js/resolveAxios.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +64 -0
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +34 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +39 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +312 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +173 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +206 -0
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +168 -0
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +121 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +518 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js +913 -0
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +533 -0
- package/build/map/next_js/resolveFetch.js.map +1 -0
- package/build/map/next_js/resolveNewRequest.js +749 -0
- package/build/map/next_js/resolveNewRequest.js.map +1 -0
- package/build/map/next_js/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +1600 -0
- package/build/map/next_js/utils.js.map +1 -0
- package/build/map/react_js/getReactConnections.js +303 -0
- package/build/map/react_js/getReactConnections.js.map +1 -0
- package/build/map/react_js/interactive.js +4 -0
- package/build/map/react_js/interactive.js.map +1 -0
- package/build/map/react_js/react_resolveFetch.js +6 -0
- package/build/map/react_js/react_resolveFetch.js.map +1 -0
- package/build/map/svelte_js/interactive.js +58 -0
- package/build/map/svelte_js/interactive.js.map +1 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/bodyResolver.js +477 -0
- package/build/map/vue_js/bodyResolver.js.map +1 -0
- package/build/map/vue_js/crossFileResolver.js +438 -0
- package/build/map/vue_js/crossFileResolver.js.map +1 -0
- package/build/map/vue_js/getViteConnections.js +343 -0
- package/build/map/vue_js/getViteConnections.js.map +1 -0
- package/build/map/vue_js/interactive.js +67 -0
- package/build/map/vue_js/interactive.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js +307 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/commandHelpers.js +39 -0
- package/build/map/vue_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js +12 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/vue_js/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +416 -0
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
- package/build/map/vue_js/vue_resolveHttpClient.js +738 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +282 -0
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
- package/build/mcp/chatOneShot.js +101 -0
- package/build/mcp/chatOneShot.js.map +1 -0
- package/build/mcp/claudeCodeCreds.js +150 -0
- package/build/mcp/claudeCodeCreds.js.map +1 -0
- package/build/mcp/cli.js +372 -0
- package/build/mcp/cli.js.map +1 -0
- package/build/mcp/commands.js +227 -0
- package/build/mcp/commands.js.map +1 -0
- package/build/mcp/config.js +68 -0
- package/build/mcp/config.js.map +1 -0
- package/build/mcp/index.js +50 -0
- package/build/mcp/index.js.map +1 -0
- package/build/mcp/intent.js +204 -0
- package/build/mcp/intent.js.map +1 -0
- package/build/mcp/jobs.js +199 -0
- package/build/mcp/jobs.js.map +1 -0
- package/build/mcp/mcpServer.js +241 -0
- package/build/mcp/mcpServer.js.map +1 -0
- package/build/mcp/providers.js +170 -0
- package/build/mcp/providers.js.map +1 -0
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/mcp/tools.js +185 -0
- package/build/mcp/tools.js.map +1 -0
- package/build/refactor/index.js +85 -0
- package/build/refactor/index.js.map +1 -0
- package/build/refactor/next/index.js +109 -0
- package/build/refactor/next/index.js.map +1 -0
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.js.map +1 -0
- package/build/report/index.js +68 -0
- package/build/report/index.js.map +1 -0
- package/build/report/utility/dataTables/genDataTablesPage.js +158 -0
- package/build/report/utility/dataTables/genDataTablesPage.js.map +1 -0
- package/build/report/utility/genHtml.js +516 -0
- package/build/report/utility/genHtml.js.map +1 -0
- package/build/report/utility/initReportDb.js +96 -0
- package/build/report/utility/initReportDb.js.map +1 -0
- package/build/report/utility/markdownGen/addAnalyze.js +53 -0
- package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
- package/build/report/utility/markdownGen/addMappedJson.js +33 -0
- package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +31 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
- package/build/report/utility/populateDb/populateEndpoints.js +50 -0
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedJson.js +31 -0
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js +49 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
- package/build/run/index.js +446 -0
- package/build/run/index.js.map +1 -0
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/strings/index.js +239 -0
- package/build/strings/index.js.map +1 -0
- package/build/strings/openapi.js +63 -0
- package/build/strings/openapi.js.map +1 -0
- package/build/strings/permutate.js +62 -0
- package/build/strings/permutate.js.map +1 -0
- package/build/strings/secrets.js +102 -0
- package/build/strings/secrets.js.map +1 -0
- package/build/utility/ai.js +97 -0
- package/build/utility/ai.js.map +1 -0
- package/build/utility/configureSandbox.js +14 -0
- package/build/utility/configureSandbox.js.map +1 -0
- package/build/utility/globals.js +322 -0
- package/build/utility/globals.js.map +1 -0
- package/build/utility/interfaces.js +2 -0
- package/build/utility/interfaces.js.map +1 -0
- package/build/utility/makeReq.js +448 -0
- package/build/utility/makeReq.js.map +1 -0
- package/build/utility/openapiGenerator.js +254 -0
- package/build/utility/openapiGenerator.js.map +1 -0
- package/build/utility/postmanGenerator.js +216 -0
- package/build/utility/postmanGenerator.js.map +1 -0
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/build/utility/puppeteerInstance.js +5 -0
- package/build/utility/puppeteerInstance.js.map +1 -0
- package/build/utility/replaceUrlPlaceholders.js +48 -0
- package/build/utility/replaceUrlPlaceholders.js.map +1 -0
- package/build/utility/resolvePath.js +44 -0
- package/build/utility/resolvePath.js.map +1 -0
- package/build/utility/runSandboxed.js +42 -0
- package/build/utility/runSandboxed.js.map +1 -0
- package/build/utility/urlUtils.js +21 -0
- package/build/utility/urlUtils.js.map +1 -0
- package/contributing/nextjs.md +410 -0
- package/package.json +75 -0
|
@@ -0,0 +1,446 @@
|
|
|
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 endpoints from "../endpoints/index.js";
|
|
11
|
+
import strings from "../strings/index.js";
|
|
12
|
+
import map from "../map/index.js";
|
|
13
|
+
import * as globalsUtil from "../utility/globals.js";
|
|
14
|
+
import * as fs from "fs";
|
|
15
|
+
import lazyLoad from "../lazyLoad/index.js";
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import CONFIG from "../globalConfig.js";
|
|
18
|
+
import analyze from "../analyze/index.js";
|
|
19
|
+
import report from "../report/index.js";
|
|
20
|
+
import { clearJsUrls, clearJsonUrls, getJsUrls } from "../lazyLoad/globals.js";
|
|
21
|
+
import path from "path";
|
|
22
|
+
import { installSigintHandler, removeSigintHandler, getSkipStepPromise, resetSkipStep, shouldSkipTarget, resetSkipTarget, } from "./interruptHandler.js";
|
|
23
|
+
/**
|
|
24
|
+
* Determines the directory for a Content Delivery Network (CDN) if used by the target.
|
|
25
|
+
*
|
|
26
|
+
* Checks if any of the downloaded JavaScript files are from a different host, which
|
|
27
|
+
* indicates a CDN is in use. This is important for modules that rely on code analysis.
|
|
28
|
+
*
|
|
29
|
+
* @param host - The host of the target URL
|
|
30
|
+
* @param outputDir - The base output directory
|
|
31
|
+
* @returns Promise that resolves to the path of the CDN directory or undefined if no CDN is detected
|
|
32
|
+
*/
|
|
33
|
+
const getCdnDir = (host, outputDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
34
|
+
// get the JS URLs
|
|
35
|
+
let cdnDir;
|
|
36
|
+
for (const url of getJsUrls()) {
|
|
37
|
+
if (url.includes("_next/static/chunks")) {
|
|
38
|
+
// check if the host and url.host match
|
|
39
|
+
const urlHostDir = new URL(url).host.replace(":", "_"); // e.g. example.com_8443
|
|
40
|
+
const urlHost = new URL(url).host; // e.g. example.com:8443
|
|
41
|
+
const initialHost = new URL(host).host; // e.g. example.com:443
|
|
42
|
+
if (urlHost !== initialHost) {
|
|
43
|
+
cdnDir = path.join(outputDir, urlHostDir);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return cdnDir;
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Processes a single URL through the entire js-recon analysis pipeline.
|
|
52
|
+
*
|
|
53
|
+
* This function orchestrates the execution of all modules in sequence:
|
|
54
|
+
* 1. Lazyload - Downloads JavaScript files
|
|
55
|
+
* 2. Strings - Extracts endpoints and secrets
|
|
56
|
+
* 3. Map - Analyzes functions and generates mappings
|
|
57
|
+
* 4. Endpoints - Extracts client-side endpoints
|
|
58
|
+
* 5. Analyze - Runs security analysis rules
|
|
59
|
+
* 6. Report - Generates final analysis report
|
|
60
|
+
*
|
|
61
|
+
* @param url - The URL to analyze
|
|
62
|
+
* @param outputDir - The directory for downloaded content (e.g., JS files)
|
|
63
|
+
* @param workingDir - The directory for storing analysis results and reports
|
|
64
|
+
* @param cmd - The command-line options object
|
|
65
|
+
* @param isBatch - Whether this is part of a batch process, affecting file path resolution
|
|
66
|
+
* @returns Promise that resolves when the analysis for the URL is complete
|
|
67
|
+
*/
|
|
68
|
+
const processUrl = (url, outputDir, workingDir, cmd, isBatch) => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
const targetHost = new URL(url).host.replace(":", "_");
|
|
70
|
+
console.log(chalk.bgGreenBright(`[+] Starting analysis for ${url}...`));
|
|
71
|
+
if (isBatch) {
|
|
72
|
+
clearJsUrls();
|
|
73
|
+
clearJsonUrls();
|
|
74
|
+
}
|
|
75
|
+
console.log(chalk.bgCyan("[1/8] Running lazyload to download JavaScript files..."));
|
|
76
|
+
resetSkipStep();
|
|
77
|
+
yield Promise.race([
|
|
78
|
+
lazyLoad(url, outputDir, cmd.strictScope, cmd.scope.split(","), cmd.threads, false, "", cmd.insecure, false, cmd.sourcemapDir, cmd.research, cmd.researchOutput, Number(cmd.maxIterations), Number(cmd.maxJsSize), Number(cmd.lazyloadTimeout) * 60 * 1000),
|
|
79
|
+
getSkipStepPromise(),
|
|
80
|
+
]);
|
|
81
|
+
console.log(chalk.bgGreen("[+] Lazyload complete."));
|
|
82
|
+
if (shouldSkipTarget())
|
|
83
|
+
return;
|
|
84
|
+
if (globalsUtil.getTech() === "") {
|
|
85
|
+
console.error(chalk.bgRed(`[!] Technology not detected. ${isBatch ? "Skipping this target." : "Quitting."}`));
|
|
86
|
+
if (isBatch) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
process.exit(10);
|
|
90
|
+
}
|
|
91
|
+
if (!["next", "vue", "react", "svelte"].includes(globalsUtil.getTech())) {
|
|
92
|
+
console.log(chalk.bgYellow(`[!] The tool supports Next.JS, Vue.JS, React, and Svelte/Astro in the run module. For ${globalsUtil.getTech()}, only downloading JS files is supported`));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (globalsUtil.getTech() === "react") {
|
|
96
|
+
const mappedFileReact = isBatch ? `${workingDir}/mapped` : "mapped";
|
|
97
|
+
const mappedJsonFileReact = isBatch ? `${workingDir}/mapped.json` : "mapped.json";
|
|
98
|
+
const openapiFile = isBatch ? `${workingDir}/mapped-openapi.json` : "mapped-openapi.json";
|
|
99
|
+
const analyzeFile = isBatch ? `${workingDir}/analyze.json` : "analyze.json";
|
|
100
|
+
const reportDbFile = isBatch ? `${workingDir}/js-recon.db` : "js-recon.db";
|
|
101
|
+
const reportFile = isBatch ? `${workingDir}/report` : "report";
|
|
102
|
+
const endpointsFile = isBatch ? `${workingDir}/endpoints` : "endpoints";
|
|
103
|
+
const reactHostDir = `${outputDir}/${targetHost}`;
|
|
104
|
+
console.log(chalk.bgCyan("[2/4] Running map to find functions and API calls..."));
|
|
105
|
+
globalsUtil.setOpenapi(true);
|
|
106
|
+
if (isBatch) {
|
|
107
|
+
globalsUtil.setOpenapiOutputFile(openapiFile);
|
|
108
|
+
}
|
|
109
|
+
for (const ext of [".json", "-openapi.json", "-openapi.postman_collection.json"]) {
|
|
110
|
+
const p = `${mappedFileReact}${ext}`;
|
|
111
|
+
if (fs.existsSync(p))
|
|
112
|
+
fs.unlinkSync(p);
|
|
113
|
+
}
|
|
114
|
+
resetSkipStep();
|
|
115
|
+
yield Promise.race([
|
|
116
|
+
map(reactHostDir, mappedFileReact, ["json"], "react", false, false, cmd.command || []),
|
|
117
|
+
getSkipStepPromise(),
|
|
118
|
+
]);
|
|
119
|
+
console.log(chalk.bgGreen("[+] Map complete."));
|
|
120
|
+
if (shouldSkipTarget())
|
|
121
|
+
return;
|
|
122
|
+
console.log(chalk.bgCyan("[3/4] Running analyze..."));
|
|
123
|
+
resetSkipStep();
|
|
124
|
+
// @ts-ignore
|
|
125
|
+
yield Promise.race([
|
|
126
|
+
analyze(cmd.rules || "", mappedJsonFileReact, "react", false, openapiFile, false, analyzeFile),
|
|
127
|
+
getSkipStepPromise(),
|
|
128
|
+
]);
|
|
129
|
+
console.log(chalk.bgGreen("[+] Analyze complete."));
|
|
130
|
+
if (shouldSkipTarget())
|
|
131
|
+
return;
|
|
132
|
+
console.log(chalk.bgCyan("[4/4] Running report module..."));
|
|
133
|
+
const endpointsJson = `${endpointsFile}.json`;
|
|
134
|
+
if (!fs.existsSync(endpointsJson)) {
|
|
135
|
+
fs.writeFileSync(endpointsJson, "[]");
|
|
136
|
+
}
|
|
137
|
+
resetSkipStep();
|
|
138
|
+
yield Promise.race([
|
|
139
|
+
report(reportDbFile, mappedJsonFileReact, analyzeFile, endpointsJson, openapiFile, reportFile),
|
|
140
|
+
getSkipStepPromise(),
|
|
141
|
+
]);
|
|
142
|
+
console.log(chalk.bgGreen("[+] Report complete."));
|
|
143
|
+
console.log(chalk.bgGreenBright(`[+] Analysis complete for ${url}.`));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (globalsUtil.getTech() === "vue") {
|
|
147
|
+
// Vue.JS pipeline: lazyload (done) + map + analyze + report.
|
|
148
|
+
// Scan the whole download directory: Vue builds frequently spread chunks
|
|
149
|
+
// across multiple asset hosts, and relative imports resolve within each tree.
|
|
150
|
+
const mappedFileVue = isBatch ? `${workingDir}/mapped` : "mapped";
|
|
151
|
+
const mappedJsonFileVue = isBatch ? `${workingDir}/mapped.json` : "mapped.json";
|
|
152
|
+
const openapiFile = isBatch ? `${workingDir}/mapped-openapi.json` : "mapped-openapi.json";
|
|
153
|
+
const analyzeFile = isBatch ? `${workingDir}/analyze.json` : "analyze.json";
|
|
154
|
+
const reportDbFile = isBatch ? `${workingDir}/js-recon.db` : "js-recon.db";
|
|
155
|
+
const reportFile = isBatch ? `${workingDir}/report` : "report";
|
|
156
|
+
const endpointsFile = isBatch ? `${workingDir}/endpoints` : "endpoints";
|
|
157
|
+
console.log(chalk.bgCyan("[2/4] Running map to find functions and API calls..."));
|
|
158
|
+
globalsUtil.setOpenapi(true);
|
|
159
|
+
if (isBatch) {
|
|
160
|
+
globalsUtil.setOpenapiOutputFile(openapiFile);
|
|
161
|
+
}
|
|
162
|
+
for (const ext of [".json", "-openapi.json", "-openapi.postman_collection.json"]) {
|
|
163
|
+
const p = `${mappedFileVue}${ext}`;
|
|
164
|
+
if (fs.existsSync(p))
|
|
165
|
+
fs.unlinkSync(p);
|
|
166
|
+
}
|
|
167
|
+
resetSkipStep();
|
|
168
|
+
yield Promise.race([
|
|
169
|
+
map(outputDir, mappedFileVue, ["json"], "vue", false, false, cmd.command || []),
|
|
170
|
+
getSkipStepPromise(),
|
|
171
|
+
]);
|
|
172
|
+
console.log(chalk.bgGreen("[+] Map complete."));
|
|
173
|
+
if (shouldSkipTarget())
|
|
174
|
+
return;
|
|
175
|
+
console.log(chalk.bgCyan("[3/4] Running analyze..."));
|
|
176
|
+
resetSkipStep();
|
|
177
|
+
// @ts-ignore
|
|
178
|
+
yield Promise.race([
|
|
179
|
+
analyze(cmd.rules || "", mappedJsonFileVue, "vue", false, openapiFile, false, analyzeFile),
|
|
180
|
+
getSkipStepPromise(),
|
|
181
|
+
]);
|
|
182
|
+
console.log(chalk.bgGreen("[+] Analyze complete."));
|
|
183
|
+
if (shouldSkipTarget())
|
|
184
|
+
return;
|
|
185
|
+
console.log(chalk.bgCyan("[4/4] Running report module..."));
|
|
186
|
+
// Endpoints extraction isn't implemented for Vue yet; pass an empty file if absent.
|
|
187
|
+
const endpointsJson = `${endpointsFile}.json`;
|
|
188
|
+
if (!fs.existsSync(endpointsJson)) {
|
|
189
|
+
fs.writeFileSync(endpointsJson, "[]");
|
|
190
|
+
}
|
|
191
|
+
resetSkipStep();
|
|
192
|
+
yield Promise.race([
|
|
193
|
+
report(reportDbFile, mappedJsonFileVue, analyzeFile, endpointsJson, openapiFile, reportFile),
|
|
194
|
+
getSkipStepPromise(),
|
|
195
|
+
]);
|
|
196
|
+
console.log(chalk.bgGreen("[+] Report complete."));
|
|
197
|
+
console.log(chalk.bgGreenBright(`[+] Analysis complete for ${url}.`));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (globalsUtil.getTech() === "svelte") {
|
|
201
|
+
const mappedFileSvelte = isBatch ? `${workingDir}/mapped` : "mapped";
|
|
202
|
+
const mappedJsonFileSvelte = isBatch ? `${workingDir}/mapped.json` : "mapped.json";
|
|
203
|
+
const openapiFile = isBatch ? `${workingDir}/mapped-openapi.json` : "mapped-openapi.json";
|
|
204
|
+
const analyzeFile = isBatch ? `${workingDir}/analyze.json` : "analyze.json";
|
|
205
|
+
const reportDbFile = isBatch ? `${workingDir}/js-recon.db` : "js-recon.db";
|
|
206
|
+
const reportFile = isBatch ? `${workingDir}/report` : "report";
|
|
207
|
+
const endpointsFile = isBatch ? `${workingDir}/endpoints` : "endpoints";
|
|
208
|
+
console.log(chalk.bgCyan("[2/4] Running map to find functions and API calls..."));
|
|
209
|
+
globalsUtil.setOpenapi(true);
|
|
210
|
+
if (isBatch) {
|
|
211
|
+
globalsUtil.setOpenapiOutputFile(openapiFile);
|
|
212
|
+
}
|
|
213
|
+
for (const ext of [".json", "-openapi.json", "-openapi.postman_collection.json"]) {
|
|
214
|
+
const p = `${mappedFileSvelte}${ext}`;
|
|
215
|
+
if (fs.existsSync(p))
|
|
216
|
+
fs.unlinkSync(p);
|
|
217
|
+
}
|
|
218
|
+
resetSkipStep();
|
|
219
|
+
yield Promise.race([
|
|
220
|
+
map(outputDir, mappedFileSvelte, ["json"], "svelte", false, false, cmd.command || []),
|
|
221
|
+
getSkipStepPromise(),
|
|
222
|
+
]);
|
|
223
|
+
console.log(chalk.bgGreen("[+] Map complete."));
|
|
224
|
+
if (shouldSkipTarget())
|
|
225
|
+
return;
|
|
226
|
+
console.log(chalk.bgCyan("[3/4] Running analyze..."));
|
|
227
|
+
resetSkipStep();
|
|
228
|
+
// @ts-ignore
|
|
229
|
+
yield Promise.race([
|
|
230
|
+
analyze(cmd.rules || "", mappedJsonFileSvelte, "svelte", false, openapiFile, false, analyzeFile),
|
|
231
|
+
getSkipStepPromise(),
|
|
232
|
+
]);
|
|
233
|
+
console.log(chalk.bgGreen("[+] Analyze complete."));
|
|
234
|
+
if (shouldSkipTarget())
|
|
235
|
+
return;
|
|
236
|
+
console.log(chalk.bgCyan("[4/4] Running report module..."));
|
|
237
|
+
const endpointsJson = `${endpointsFile}.json`;
|
|
238
|
+
if (!fs.existsSync(endpointsJson)) {
|
|
239
|
+
fs.writeFileSync(endpointsJson, "[]");
|
|
240
|
+
}
|
|
241
|
+
resetSkipStep();
|
|
242
|
+
yield Promise.race([
|
|
243
|
+
report(reportDbFile, mappedJsonFileSvelte, analyzeFile, endpointsJson, openapiFile, reportFile),
|
|
244
|
+
getSkipStepPromise(),
|
|
245
|
+
]);
|
|
246
|
+
console.log(chalk.bgGreen("[+] Report complete."));
|
|
247
|
+
console.log(chalk.bgGreenBright(`[+] Analysis complete for ${url}.`));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const stringsFile = isBatch ? `${workingDir}/strings.json` : "strings.json";
|
|
251
|
+
const extractedUrlsFile = isBatch ? `${workingDir}/extracted_urls` : "extracted_urls";
|
|
252
|
+
const mappedFile = isBatch ? `${workingDir}/mapped` : "mapped";
|
|
253
|
+
const mappedJsonFile = isBatch ? `${workingDir}/mapped.json` : "mapped.json";
|
|
254
|
+
const endpointsFile = isBatch ? `${workingDir}/endpoints` : "endpoints";
|
|
255
|
+
const openapiFile = isBatch ? `${workingDir}/mapped-openapi.json` : "mapped-openapi.json";
|
|
256
|
+
const analyzeFile = isBatch ? `${workingDir}/analyze.json` : "analyze.json";
|
|
257
|
+
const reportDbFile = isBatch ? `${workingDir}/js-recon.db` : "js-recon.db";
|
|
258
|
+
const reportFile = isBatch ? `${workingDir}/report` : "report";
|
|
259
|
+
// if the target is using a CDN, then just passing the outputDir/host won't work, and would throw an error.
|
|
260
|
+
// So, if the target was found to be using a CDN, scan the CDN directory rather than the outputDir/host
|
|
261
|
+
// One IMPORTANT thing: this is only meant for modules that rely on just the code (map)
|
|
262
|
+
const cdnDir = yield getCdnDir(url, outputDir);
|
|
263
|
+
const cdnOutputDir = cdnDir ? cdnDir : outputDir + "/" + targetHost;
|
|
264
|
+
console.log(chalk.bgCyan("[2/8] Running strings to extract endpoints..."));
|
|
265
|
+
resetSkipStep();
|
|
266
|
+
yield Promise.race([
|
|
267
|
+
strings(outputDir, stringsFile, true, extractedUrlsFile, false, false, false),
|
|
268
|
+
getSkipStepPromise(),
|
|
269
|
+
]);
|
|
270
|
+
console.log(chalk.bgGreen("[+] Strings complete."));
|
|
271
|
+
if (shouldSkipTarget())
|
|
272
|
+
return;
|
|
273
|
+
console.log(chalk.bgCyan("[3/8] Running lazyload with subsequent requests to download JavaScript files..."));
|
|
274
|
+
resetSkipStep();
|
|
275
|
+
yield Promise.race([
|
|
276
|
+
lazyLoad(url, outputDir, cmd.strictScope, cmd.scope.split(","), cmd.threads, true, `${extractedUrlsFile}.json`, cmd.insecure, true, cmd.sourcemapDir, cmd.research, cmd.researchOutput, Number(cmd.maxIterations), Number(cmd.maxJsSize), Number(cmd.lazyloadTimeout) * 60 * 1000),
|
|
277
|
+
getSkipStepPromise(),
|
|
278
|
+
]);
|
|
279
|
+
console.log(chalk.bgGreen("[+] Lazyload with subsequent requests complete."));
|
|
280
|
+
if (shouldSkipTarget())
|
|
281
|
+
return;
|
|
282
|
+
console.log(chalk.bgCyan("[4/8] Running strings again to extract endpoints..."));
|
|
283
|
+
resetSkipStep();
|
|
284
|
+
yield Promise.race([
|
|
285
|
+
strings(outputDir, stringsFile, true, extractedUrlsFile, cmd.secrets, true, true),
|
|
286
|
+
getSkipStepPromise(),
|
|
287
|
+
]);
|
|
288
|
+
console.log(chalk.bgGreen("[+] Strings complete."));
|
|
289
|
+
if (shouldSkipTarget())
|
|
290
|
+
return;
|
|
291
|
+
// a second subsequent_requests pass: the first strings pass only sees initial chunks,
|
|
292
|
+
// so dynamic routes such as `/post/1` are only discovered after the first subsequent
|
|
293
|
+
// crawl + second strings extraction. Re-running subsequent_requests with the freshly
|
|
294
|
+
// updated paths picks up chunks for those dynamic routes (e.g. the post page).
|
|
295
|
+
console.log(chalk.bgCyan("[4.5/8] Re-running lazyload with subsequent requests for newly discovered paths..."));
|
|
296
|
+
resetSkipStep();
|
|
297
|
+
yield Promise.race([
|
|
298
|
+
lazyLoad(url, outputDir, cmd.strictScope, cmd.scope.split(","), cmd.threads, true, `${extractedUrlsFile}.json`, cmd.insecure, false, cmd.sourcemapDir, cmd.research, cmd.researchOutput, Number(cmd.maxIterations), Number(cmd.maxJsSize), Number(cmd.lazyloadTimeout) * 60 * 1000),
|
|
299
|
+
getSkipStepPromise(),
|
|
300
|
+
]);
|
|
301
|
+
console.log(chalk.bgGreen("[+] Lazyload re-pass complete."));
|
|
302
|
+
if (shouldSkipTarget())
|
|
303
|
+
return;
|
|
304
|
+
console.log(chalk.bgCyan("[4.6/8] Re-running strings for chunks from the re-pass..."));
|
|
305
|
+
resetSkipStep();
|
|
306
|
+
yield Promise.race([
|
|
307
|
+
strings(outputDir, stringsFile, true, extractedUrlsFile, cmd.secrets, true, true),
|
|
308
|
+
getSkipStepPromise(),
|
|
309
|
+
]);
|
|
310
|
+
console.log(chalk.bgGreen("[+] Strings re-pass complete."));
|
|
311
|
+
if (shouldSkipTarget())
|
|
312
|
+
return;
|
|
313
|
+
console.log(chalk.bgCyan("[5/8] Running map to find functions..."));
|
|
314
|
+
globalsUtil.setOpenapi(true);
|
|
315
|
+
if (isBatch) {
|
|
316
|
+
globalsUtil.setOpenapiOutputFile(openapiFile);
|
|
317
|
+
}
|
|
318
|
+
// Delete stale map artifacts so map always regenerates from the current target's output.
|
|
319
|
+
// Without this, a leftover mapped.json from a previous run would be reused, causing
|
|
320
|
+
// resolveFetch to look for files from the wrong target's directory.
|
|
321
|
+
for (const ext of [".json", "-openapi.json", "-openapi.postman_collection.json"]) {
|
|
322
|
+
const p = `${mappedFile}${ext}`;
|
|
323
|
+
if (fs.existsSync(p))
|
|
324
|
+
fs.unlinkSync(p);
|
|
325
|
+
}
|
|
326
|
+
resetSkipStep();
|
|
327
|
+
yield Promise.race([
|
|
328
|
+
map(cdnOutputDir, mappedFile, ["json"], globalsUtil.getTech(), false, false, cmd.command || []),
|
|
329
|
+
getSkipStepPromise(),
|
|
330
|
+
]);
|
|
331
|
+
console.log(chalk.bgGreen("[+] Map complete."));
|
|
332
|
+
if (shouldSkipTarget())
|
|
333
|
+
return;
|
|
334
|
+
console.log(chalk.bgCyan("[6/8] Running endpoints to extract endpoints..."));
|
|
335
|
+
resetSkipStep();
|
|
336
|
+
if (fs.existsSync(`${outputDir}/${targetHost}/___subsequent_requests`)) {
|
|
337
|
+
yield Promise.race([
|
|
338
|
+
endpoints(url, `${outputDir}/${targetHost}/`, endpointsFile, ["json"], "next", false, mappedJsonFile),
|
|
339
|
+
getSkipStepPromise(),
|
|
340
|
+
]);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
yield Promise.race([
|
|
344
|
+
endpoints(url, undefined, endpointsFile, ["json"], "next", false, mappedJsonFile),
|
|
345
|
+
getSkipStepPromise(),
|
|
346
|
+
]);
|
|
347
|
+
}
|
|
348
|
+
console.log(chalk.bgGreen("[+] Endpoints complete."));
|
|
349
|
+
if (shouldSkipTarget())
|
|
350
|
+
return;
|
|
351
|
+
console.log(chalk.bgCyan("[7/8] Running analyze to extract endpoints..."));
|
|
352
|
+
resetSkipStep();
|
|
353
|
+
yield Promise.race([
|
|
354
|
+
// @ts-ignore
|
|
355
|
+
analyze(cmd.rules || "", mappedJsonFile, globalsUtil.getTech(), false, openapiFile, false, analyzeFile),
|
|
356
|
+
getSkipStepPromise(),
|
|
357
|
+
]);
|
|
358
|
+
console.log(chalk.bgGreen("[+] Analyze complete."));
|
|
359
|
+
if (shouldSkipTarget())
|
|
360
|
+
return;
|
|
361
|
+
console.log(chalk.bgCyan("[8/8] Running report module..."));
|
|
362
|
+
resetSkipStep();
|
|
363
|
+
yield Promise.race([
|
|
364
|
+
report(reportDbFile, mappedJsonFile, analyzeFile, `${endpointsFile}.json`, openapiFile, reportFile),
|
|
365
|
+
getSkipStepPromise(),
|
|
366
|
+
]);
|
|
367
|
+
console.log(chalk.bgGreen("[+] Report complete."));
|
|
368
|
+
console.log(chalk.bgGreenBright(`[+] Analysis complete for ${url}.`));
|
|
369
|
+
});
|
|
370
|
+
/**
|
|
371
|
+
* Main handler for the 'run' command that executes the complete js-recon analysis pipeline.
|
|
372
|
+
*
|
|
373
|
+
* Sets up global configuration and determines whether to process a single URL or
|
|
374
|
+
* a file containing multiple URLs. For batch processing, creates organized directory
|
|
375
|
+
* structure and processes each URL sequentially.
|
|
376
|
+
*
|
|
377
|
+
* @param cmd - The command-line options object from commander.js
|
|
378
|
+
* @returns Promise that resolves when all URL processing is complete
|
|
379
|
+
*/
|
|
380
|
+
export default (cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
381
|
+
var _a;
|
|
382
|
+
globalsUtil.setApiGatewayConfigFile(cmd.apiGatewayConfig);
|
|
383
|
+
globalsUtil.setUseApiGateway(cmd.apiGateway);
|
|
384
|
+
globalsUtil.setDisableCache(cmd.disableCache);
|
|
385
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
386
|
+
globalsUtil.setYes(cmd.yes);
|
|
387
|
+
const isBatch = fs.existsSync(cmd.url);
|
|
388
|
+
installSigintHandler(isBatch);
|
|
389
|
+
try {
|
|
390
|
+
// check if the given URL is a file
|
|
391
|
+
if (!isBatch) {
|
|
392
|
+
// check if output directory exists. If so, ask the user to switch to other directory
|
|
393
|
+
// if not done, it might conflict this process
|
|
394
|
+
// for devs: run `npm run cleanup` to prepare this directory
|
|
395
|
+
if (fs.existsSync(cmd.output)) {
|
|
396
|
+
console.error(chalk.red(`[!] Output directory ${cmd.output} already exists. Please switch to other directory or it might conflict with this process.`));
|
|
397
|
+
console.log(chalk.yellow(`[i] For advanced users: use the individual modules separately. See docs at ${CONFIG.modulesDocs}`));
|
|
398
|
+
process.exit(11);
|
|
399
|
+
}
|
|
400
|
+
try {
|
|
401
|
+
new URL(cmd.url);
|
|
402
|
+
}
|
|
403
|
+
catch (e) {
|
|
404
|
+
console.error(chalk.red(`[!] Invalid URL: ${cmd.url}`));
|
|
405
|
+
process.exit(12);
|
|
406
|
+
}
|
|
407
|
+
yield processUrl(cmd.url, cmd.output, ".", cmd, false);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
// since this is a file, we need to first load the URLs in the memory remove empty strings
|
|
411
|
+
const urls = fs
|
|
412
|
+
.readFileSync(cmd.url, "utf-8")
|
|
413
|
+
.split("\n")
|
|
414
|
+
.filter((url) => url !== "");
|
|
415
|
+
if (!fs.existsSync(cmd.output)) {
|
|
416
|
+
fs.mkdirSync(cmd.output, { recursive: true });
|
|
417
|
+
}
|
|
418
|
+
for (const url of urls) {
|
|
419
|
+
resetSkipTarget();
|
|
420
|
+
// Validate URL only
|
|
421
|
+
let urlObj;
|
|
422
|
+
try {
|
|
423
|
+
urlObj = new URL(url);
|
|
424
|
+
}
|
|
425
|
+
catch (_b) {
|
|
426
|
+
console.error(chalk.bgRed(`[!] Invalid URL: ${url}`));
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
const hostDir = urlObj.host.replace(":", "_");
|
|
430
|
+
const thisTargetDir = `${cmd.output}/${hostDir}`;
|
|
431
|
+
if (fs.existsSync(thisTargetDir)) {
|
|
432
|
+
console.error(chalk.red(`[!] Output directory ${thisTargetDir} already exists. Skipping ${url}.`));
|
|
433
|
+
console.log(chalk.yellow(`[i] For advanced users: use the individual modules separately. See docs at ${CONFIG.modulesDocs}`));
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
fs.mkdirSync(thisTargetDir, { recursive: true });
|
|
437
|
+
yield processUrl(url, thisTargetDir, thisTargetDir, cmd, true);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
finally {
|
|
442
|
+
removeSigintHandler();
|
|
443
|
+
process.exit((_a = process.exitCode) !== null && _a !== void 0 ? _a : 0);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 chalk from "chalk";
|
|
11
|
+
import readline from "readline";
|
|
12
|
+
let isBatchMode = false;
|
|
13
|
+
let handling = false;
|
|
14
|
+
let skipStepResolver = null;
|
|
15
|
+
let skipTarget = false;
|
|
16
|
+
const showMenu = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
if (handling)
|
|
18
|
+
return;
|
|
19
|
+
handling = true;
|
|
20
|
+
// Temporarily remove so a second Ctrl-C falls through to default exit
|
|
21
|
+
process.removeListener("SIGINT", sigintHandler);
|
|
22
|
+
process.stdout.write("\n");
|
|
23
|
+
console.error(chalk.yellow("[!] Interrupted. What would you like to do?"));
|
|
24
|
+
console.log(chalk.white(" 1. Skip the current step"));
|
|
25
|
+
if (isBatchMode) {
|
|
26
|
+
console.log(chalk.white(" 2. Skip the current target and move to the next"));
|
|
27
|
+
console.log(chalk.white(" 3. Exit"));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.log(chalk.white(" 2. Exit"));
|
|
31
|
+
}
|
|
32
|
+
const validChoices = isBatchMode ? ["1", "2", "3"] : ["1", "2"];
|
|
33
|
+
const prompt = chalk.cyan(`Enter choice [${validChoices.join("/")}]: `);
|
|
34
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
35
|
+
yield new Promise((resolve) => {
|
|
36
|
+
rl.question(prompt, (answer) => {
|
|
37
|
+
rl.close();
|
|
38
|
+
const choice = answer.trim();
|
|
39
|
+
if (choice === "1") {
|
|
40
|
+
console.error(chalk.yellow("[!] Skipping current step..."));
|
|
41
|
+
if (skipStepResolver) {
|
|
42
|
+
skipStepResolver();
|
|
43
|
+
skipStepResolver = null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (isBatchMode && choice === "2") {
|
|
47
|
+
skipTarget = true;
|
|
48
|
+
console.error(chalk.yellow("[!] Skipping current target..."));
|
|
49
|
+
if (skipStepResolver) {
|
|
50
|
+
skipStepResolver();
|
|
51
|
+
skipStepResolver = null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (choice === (isBatchMode ? "3" : "2")) {
|
|
55
|
+
console.error(chalk.yellow("[!] Exiting..."));
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error(chalk.yellow("[!] Invalid choice. Continuing..."));
|
|
60
|
+
}
|
|
61
|
+
resolve();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// Reinstall for subsequent interrupts
|
|
65
|
+
process.on("SIGINT", sigintHandler);
|
|
66
|
+
handling = false;
|
|
67
|
+
});
|
|
68
|
+
const sigintHandler = () => {
|
|
69
|
+
showMenu().catch(() => { });
|
|
70
|
+
};
|
|
71
|
+
export const installSigintHandler = (isBatch) => {
|
|
72
|
+
isBatchMode = isBatch;
|
|
73
|
+
skipTarget = false;
|
|
74
|
+
skipStepResolver = null;
|
|
75
|
+
handling = false;
|
|
76
|
+
process.on("SIGINT", sigintHandler);
|
|
77
|
+
};
|
|
78
|
+
export const removeSigintHandler = () => {
|
|
79
|
+
process.removeListener("SIGINT", sigintHandler);
|
|
80
|
+
};
|
|
81
|
+
export const getSkipStepPromise = () => {
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
skipStepResolver = resolve;
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
export const resetSkipStep = () => {
|
|
87
|
+
skipStepResolver = null;
|
|
88
|
+
};
|
|
89
|
+
export const shouldSkipTarget = () => skipTarget;
|
|
90
|
+
export const resetSkipTarget = () => {
|
|
91
|
+
skipTarget = false;
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=interruptHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interruptHandler.js","sourceRoot":"","sources":["../../src/run/interruptHandler.ts"],"names":[],"mappings":"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"}
|