@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
package/build/index.js
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
import { program } from "commander";
|
|
12
|
+
import lazyLoad from "./lazyLoad/index.js";
|
|
13
|
+
import endpoints from "./endpoints/index.js";
|
|
14
|
+
import CONFIG from "./globalConfig.js";
|
|
15
|
+
import strings from "./strings/index.js";
|
|
16
|
+
import apiGateway from "./api_gateway/index.js";
|
|
17
|
+
import map from "./map/index.js";
|
|
18
|
+
import * as globalsUtil from "./utility/globals.js";
|
|
19
|
+
import refactor from "./refactor/index.js";
|
|
20
|
+
import run from "./run/index.js";
|
|
21
|
+
import chalk from "chalk";
|
|
22
|
+
import analyze from "./analyze/index.js";
|
|
23
|
+
import report from "./report/index.js";
|
|
24
|
+
import configureSandbox from "./utility/configureSandbox.js";
|
|
25
|
+
import mcp from "./mcp/index.js";
|
|
26
|
+
import load from "./load/index.js";
|
|
27
|
+
import fingerprint from "./fingerprint/index.js";
|
|
28
|
+
/**
|
|
29
|
+
* Main CLI application entry point for js-recon tool.
|
|
30
|
+
* Sets up command-line interface with various modules for JavaScript reconnaissance.
|
|
31
|
+
*/
|
|
32
|
+
program.version(CONFIG.version).description(CONFIG.toolDesc);
|
|
33
|
+
/** Valid AI options for analysis modules */
|
|
34
|
+
const validAiOptions = ["description"];
|
|
35
|
+
/**
|
|
36
|
+
* Validates a timeout string and updates the global request timeout.
|
|
37
|
+
* @param timeoutValue Timeout value provided via CLI.
|
|
38
|
+
*/
|
|
39
|
+
function validateAndSetTimeout(timeoutValue) {
|
|
40
|
+
const parsedTimeout = parseInt(timeoutValue, 10);
|
|
41
|
+
if (Number.isNaN(parsedTimeout) || parsedTimeout < 1) {
|
|
42
|
+
console.error(chalk.yellow(`[!] Invalid timeout value: "${timeoutValue}". Using default of 30000ms.`));
|
|
43
|
+
globalsUtil.setRequestTimeout(30000);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
globalsUtil.setRequestTimeout(parsedTimeout);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
program
|
|
50
|
+
.command("lazyload")
|
|
51
|
+
.description("Run lazy load module")
|
|
52
|
+
.requiredOption("-u, --url <url/file>", "Target URL or a file containing a list of URLs (one per line)")
|
|
53
|
+
.option("-o, --output <directory>", "Output directory", "output")
|
|
54
|
+
.option("--strict-scope", "Download JS files from only the input URL domain", false)
|
|
55
|
+
.option("-s, --scope <scope>", "Download JS files from specific domains (comma-separated)", "*")
|
|
56
|
+
.option("-t, --threads <threads>", "Number of threads to use", "1")
|
|
57
|
+
.option("--subsequent-requests", "Download JS files from subsequent requests (Next.JS only)", false)
|
|
58
|
+
.option("--urls-file <file>", "Input JSON file containing URLs", "extracted_urls.json")
|
|
59
|
+
.option("--api-gateway", "Generate requests using API Gateway", false)
|
|
60
|
+
.option("--api-gateway-config <file>", "API Gateway config file", ".api_gateway_config.json")
|
|
61
|
+
.option("--cache-file <file>", "File to store response cache", ".resp_cache.json")
|
|
62
|
+
.option("--disable-cache", "Disable response caching", false)
|
|
63
|
+
.option("--cache-only", "Only use the response cache; never make network requests", false)
|
|
64
|
+
.option("-y, --yes", "Auto-approve executing JS code from the target", false)
|
|
65
|
+
.option("--timeout <timeout>", "Request timeout in ms", "30000")
|
|
66
|
+
.option("-k, --insecure", "Disable SSL certificate verification", false)
|
|
67
|
+
.option("--no-sandbox", "Disable browser sandbox")
|
|
68
|
+
.option("--build-id", "Get the buildId from the Next.js app", false)
|
|
69
|
+
.option("--sourcemap-dir <directory>", "Directory to write source maps", "extracted")
|
|
70
|
+
.option("--research", "Enable research mode", false)
|
|
71
|
+
.option("--research-output <file>", "Output file for research mode", "research.json")
|
|
72
|
+
.option("--max-iterations <iterations>", "Maximum number of recursive crawl iterations", "10")
|
|
73
|
+
.option("--max-js-size <mb>", "Maximum JS file size in MB to parse (Vue only)", "2")
|
|
74
|
+
.option("--lazyload-timeout <minutes>", "Hard timeout for the lazyload module in minutes (0 = no timeout)", "30")
|
|
75
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
globalsUtil.setApiGatewayConfigFile(cmd.apiGatewayConfig);
|
|
77
|
+
globalsUtil.setUseApiGateway(cmd.apiGateway);
|
|
78
|
+
globalsUtil.setDisableCache(cmd.disableCache);
|
|
79
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
80
|
+
globalsUtil.setCacheOnly(cmd.cacheOnly);
|
|
81
|
+
globalsUtil.setYes(cmd.yes);
|
|
82
|
+
validateAndSetTimeout(cmd.timeout);
|
|
83
|
+
configureSandbox(cmd);
|
|
84
|
+
yield lazyLoad(cmd.url, cmd.output, cmd.strictScope, cmd.scope.split(","), Number(cmd.threads), cmd.subsequentRequests, cmd.urlsFile, cmd.insecure, cmd.buildId, cmd.sourcemapDir, cmd.research, cmd.researchOutput, Number(cmd.maxIterations), Number(cmd.maxJsSize), Number(cmd.lazyloadTimeout) * 60 * 1000);
|
|
85
|
+
}));
|
|
86
|
+
program
|
|
87
|
+
.command("endpoints")
|
|
88
|
+
.description("Extract client-side endpoints")
|
|
89
|
+
.option("-u, --url <url>", "Target Base URL (will be used to resolve relative paths)")
|
|
90
|
+
.option("-d, --directory <directory>", "Directory containing JS files")
|
|
91
|
+
.option("-o, --output <filename>", "Output filename (without file extension)", "endpoints")
|
|
92
|
+
.option("--output-format <format>", "Output format for the results comma-separated (available: json)", "json")
|
|
93
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
94
|
+
.option("-l, --list", "List available technologies", false)
|
|
95
|
+
.option("--mapped-json <file>", "Mapped JSON file (for Next.JS)")
|
|
96
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
yield endpoints(cmd.url, cmd.directory, cmd.output, cmd.outputFormat.split(","), cmd.tech, cmd.list, cmd.mappedJson);
|
|
98
|
+
}));
|
|
99
|
+
program
|
|
100
|
+
.command("strings")
|
|
101
|
+
.description("Extract strings from JS files")
|
|
102
|
+
.requiredOption("-d, --directory <directory>", "Directory containing JS files")
|
|
103
|
+
.option("-o, --output <file>", "JSON file to save the strings", "strings.json")
|
|
104
|
+
.option("-e, --extract-urls", "Extract URLs from strings", false)
|
|
105
|
+
.option("--extracted-url-path <file>", "Output file for extracted URLs and paths (without extension)", "extracted_urls")
|
|
106
|
+
.option("-p, --permutate", "Permutate URLs and paths found", false)
|
|
107
|
+
.option("--openapi", "Generate OpenAPI specification from the paths found", false)
|
|
108
|
+
.option("-s, --scan-secrets", "Scan for secrets", false)
|
|
109
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
yield strings(cmd.directory, cmd.output, cmd.extractUrls, cmd.extractedUrlPath, cmd.scanSecrets, cmd.permutate, cmd.openapi);
|
|
111
|
+
}));
|
|
112
|
+
program
|
|
113
|
+
.command("api-gateway")
|
|
114
|
+
.description("Configure AWS API Gateway to rotate IP addresses")
|
|
115
|
+
.option("-i, --init", "Initialize the config file (create API)", false)
|
|
116
|
+
.option("-d, --destroy <id>", "Destroy API with the given ID")
|
|
117
|
+
.option("--destroy-all", "Destroy all the API created by this tool in all regions", false)
|
|
118
|
+
.option("-r, --region <region>", "AWS region (default: random region)")
|
|
119
|
+
.option("-a, --access-key <access-key>", "AWS access key (if not provided, AWS_ACCESS_KEY_ID environment variable will be used)")
|
|
120
|
+
.option("-s, --secret-key <secret-key>", "AWS secret key (if not provided, AWS_SECRET_ACCESS_KEY environment variable will be used)")
|
|
121
|
+
.option("-c, --config <config>", "Name of the config file", ".api_gateway_config.json")
|
|
122
|
+
.option("-l, --list", "List all the API created by this tool", false)
|
|
123
|
+
.option("--feasibility", "Check feasibility of API Gateway", false)
|
|
124
|
+
.option("--feasibility-url <url>", "URL to check feasibility of")
|
|
125
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
|
+
globalsUtil.setApiGatewayConfigFile(cmd.config);
|
|
127
|
+
globalsUtil.setUseApiGateway(true);
|
|
128
|
+
yield apiGateway(cmd.init, cmd.destroy, cmd.destroyAll, cmd.list, cmd.region, cmd.accessKey, cmd.secretKey, cmd.config, cmd.feasibility, cmd.feasibilityUrl);
|
|
129
|
+
}));
|
|
130
|
+
program
|
|
131
|
+
.command("map")
|
|
132
|
+
.description("Map all the functions")
|
|
133
|
+
.option("-d, --directory <directory>", "Directory containing JS files")
|
|
134
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
135
|
+
.option("-l, --list", "List available technologies", false)
|
|
136
|
+
.option("-o, --output <file>", "Output file name (without extension)", "mapped")
|
|
137
|
+
.option("-f, --format <format>", "Output format for the results comma-separated (available: JSON)", "json")
|
|
138
|
+
.option("-i, --interactive", "Interactive mode", false)
|
|
139
|
+
.option("-c, --command <command>", "Run an interactive-mode command non-interactively. Can be passed multiple times, or chain several with `&&` inside a single value (e.g. -c 'list fetch && go to 1234'), to run several commands in sequence.", (val, prev) => [...prev, ...val.split(/\s*&&\s*/).filter((c) => c.length > 0)], [])
|
|
140
|
+
.option("--ai <options>", "Use AI to analyze the code (comma-separated; available: description)")
|
|
141
|
+
.option("--ai-threads <threads>", "Number of threads to use for AI", "5")
|
|
142
|
+
.option("--ai-provider <provider>", "Service provider to use for AI (available: openai, ollama)", "openai")
|
|
143
|
+
.option("--ai-endpoint <endpoint>", "Endpoint to use for AI service (for Ollama, etc)")
|
|
144
|
+
.option("--openai-api-key <key>", "OpenAI API key")
|
|
145
|
+
.option("--model <model>", "AI model to use", "gpt-4o-mini")
|
|
146
|
+
.option("--openapi", "Generate OpenAPI spec from the code", false)
|
|
147
|
+
.option("--openapi-output <file>", "Output file for OpenAPI spec", "mapped-openapi.json")
|
|
148
|
+
.option("--openapi-chunk-tag", "Add chunk ID tag to OpenAPI spec for each request found", false)
|
|
149
|
+
.option("--no-graphql", "Disable GraphQL operation extraction during OpenAPI generation")
|
|
150
|
+
.option("--ngql", "Alias for --no-graphql")
|
|
151
|
+
.option("--max-recursion-depth <n>", "Max recursion depth for HTTP-client URL fan-out and cross-file resolution (default 3)", "3")
|
|
152
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
153
|
+
var _a, _b;
|
|
154
|
+
globalsUtil.setAi(((_a = cmd.ai) === null || _a === void 0 ? void 0 : _a.split(",")) || []);
|
|
155
|
+
globalsUtil.setAiServiceProvider(cmd.aiProvider);
|
|
156
|
+
globalsUtil.setOpenapiChunkTag(cmd.openapiChunkTag);
|
|
157
|
+
globalsUtil.setOpenaiApiKey(cmd.openaiApiKey);
|
|
158
|
+
globalsUtil.setAiModel(cmd.model);
|
|
159
|
+
if (cmd.aiEndpoint)
|
|
160
|
+
globalsUtil.setAiEndpoint(cmd.aiEndpoint);
|
|
161
|
+
globalsUtil.setAiThreads(cmd.aiThreads);
|
|
162
|
+
globalsUtil.setOpenapi(cmd.openapi);
|
|
163
|
+
globalsUtil.setOpenapiOutputFile(cmd.openapiOutput);
|
|
164
|
+
// Commander's --no-graphql flips cmd.graphql to false; --ngql is an alias.
|
|
165
|
+
globalsUtil.setGraphqlEnabled(cmd.graphql !== false && !cmd.ngql);
|
|
166
|
+
// validate AI options
|
|
167
|
+
if (globalsUtil.getAi().length !== 0) {
|
|
168
|
+
for (const aiType of globalsUtil.getAi()) {
|
|
169
|
+
if (aiType !== "" && !validAiOptions.includes(aiType)) {
|
|
170
|
+
console.error(chalk.red(`[!] Invalid AI option: ${aiType}`));
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const maxRecursionDepth = parseInt((_b = cmd.maxRecursionDepth) !== null && _b !== void 0 ? _b : "3", 10);
|
|
176
|
+
if (!Number.isFinite(maxRecursionDepth) || maxRecursionDepth < 0) {
|
|
177
|
+
console.error(chalk.red(`[!] Invalid --max-recursion-depth: ${cmd.maxRecursionDepth}`));
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
globalsUtil.setMaxRecursionDepth(maxRecursionDepth);
|
|
181
|
+
yield map(cmd.directory, cmd.output, cmd.format.split(","), cmd.tech, cmd.list, cmd.interactive, cmd.command || []);
|
|
182
|
+
}));
|
|
183
|
+
program
|
|
184
|
+
.command("refactor")
|
|
185
|
+
.description("Refactor the code")
|
|
186
|
+
.option("-m, --mapped-json <file>", "Mapped JSON file", "mapped.json")
|
|
187
|
+
.option("-o, --output <directory>", "Output directory", "output_refactored")
|
|
188
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
189
|
+
.option("-l, --list", "List available technologies", false)
|
|
190
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
191
|
+
yield refactor(cmd.mappedJson, cmd.output, cmd.tech, cmd.list);
|
|
192
|
+
}));
|
|
193
|
+
program
|
|
194
|
+
.command("analyze")
|
|
195
|
+
.description("Analyze the code")
|
|
196
|
+
.option("-r, --rules <file/dir>", "Rules file or directory")
|
|
197
|
+
.option("-m, --mapped-json <file>", "Mapped JSON file", "mapped.json")
|
|
198
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
199
|
+
.option("--openapi <file>", "Path to OpenAPI spec file")
|
|
200
|
+
.option("-l, --list", "List available technologies", false)
|
|
201
|
+
.option("--validate", "Validate the rules", false)
|
|
202
|
+
.option("-o, --output <file>", "Output JSON file name", "analyze.json")
|
|
203
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
204
|
+
yield analyze(cmd.rules, cmd.mappedJson, cmd.tech, cmd.list, cmd.openapi, cmd.validate, cmd.output);
|
|
205
|
+
}));
|
|
206
|
+
program
|
|
207
|
+
.command("report")
|
|
208
|
+
.description("Generate a report")
|
|
209
|
+
.option("-s, --sqlite-db <file>", "SQLite database file", "js-recon.db")
|
|
210
|
+
.option("-m, --mapped-json <file>", "Mapped JSON file")
|
|
211
|
+
.option("-a, --analyze-json <file>", "Analyze JSON file")
|
|
212
|
+
.option("-e, --endpoints-json <file>", "Endpoints JSON file")
|
|
213
|
+
.option("--map-openapi, --mapped-openapi-json <file>", "Mapped OpenAPI JSON file")
|
|
214
|
+
.option("-o, --output <file>", "Output file name (without the extension)", "report")
|
|
215
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
216
|
+
yield report(cmd.sqliteDb, cmd.mappedJson, cmd.analyzeJson, cmd.endpointsJson, cmd.mappedOpenapiJson, cmd.output);
|
|
217
|
+
}));
|
|
218
|
+
program
|
|
219
|
+
.command("run")
|
|
220
|
+
.description("Run all modules")
|
|
221
|
+
.requiredOption("-u, --url <url/file>", "Target URL or a file containing a list of URLs (one per line)")
|
|
222
|
+
.option("-r, --rules <file/dir>", "Rules file or directory (passed to analyze module)")
|
|
223
|
+
.option("-c, --command <command>", "Run an interactive-mode command on the mapped chunks non-interactively (forwarded to the map step). Can be passed multiple times, or chain several with `&&` inside a single value (e.g. -c 'list fetch && go to 1234').", (val, prev) => [...prev, ...val.split(/\s*&&\s*/).filter((c) => c.length > 0)], [])
|
|
224
|
+
.option("-o, --output <directory>", "Output directory", "output")
|
|
225
|
+
.option("--strict-scope", "Download JS files from only the input URL domain", false)
|
|
226
|
+
.option("-s, --scope <scope>", "Download JS files from specific domains (comma-separated)", "*")
|
|
227
|
+
.option("-t, --threads <threads>", "Number of threads to use", "1")
|
|
228
|
+
.option("--api-gateway", "Generate requests using API Gateway", false)
|
|
229
|
+
.option("--api-gateway-config <file>", "API Gateway config file", ".api_gateway_config.json")
|
|
230
|
+
.option("--cache-file <file>", "File to store response cache", ".resp_cache.json")
|
|
231
|
+
.option("--disable-cache", "Disable response caching", false)
|
|
232
|
+
.option("--cache-only", "Only use the response cache; never make network requests", false)
|
|
233
|
+
.option("-y, --yes", "Auto-approve executing JS code from the target", false)
|
|
234
|
+
.option("--secrets", "Scan for secrets", false)
|
|
235
|
+
.option("--ai <options>", "Use AI to analyze the code (comma-separated; available: description)")
|
|
236
|
+
.option("--ai-threads <threads>", "Number of threads to use for AI", "5")
|
|
237
|
+
.option("--ai-provider <provider>", "Service provider to use for AI (available: openai, ollama)", "openai")
|
|
238
|
+
.option("--ai-endpoint <endpoint>", "Endpoint to use for AI service (for Ollama, etc)")
|
|
239
|
+
.option("--openai-api-key <key>", "OpenAI API key")
|
|
240
|
+
.option("--model <model>", "AI model to use", "gpt-4o-mini")
|
|
241
|
+
.option("--map-openapi-chunk-tag", "Add chunk ID tag to OpenAPI spec for each request found (map module)", false)
|
|
242
|
+
.option("--no-graphql", "Disable GraphQL operation extraction during OpenAPI generation")
|
|
243
|
+
.option("--ngql", "Alias for --no-graphql")
|
|
244
|
+
.option("--timeout <timeout>", "Request timeout in ms", "30000")
|
|
245
|
+
.option("-k, --insecure", "Disable SSL certificate verification", false)
|
|
246
|
+
.option("--no-sandbox", "Disable browser sandbox")
|
|
247
|
+
.option("--sourcemap-dir <directory>", "Directory to write source maps", "extracted")
|
|
248
|
+
.option("--research", "Enable research mode", false)
|
|
249
|
+
.option("--research-output <file>", "Output file for research mode", "research.json")
|
|
250
|
+
.option("--max-iterations <iterations>", "Maximum number of recursive crawl iterations", "10")
|
|
251
|
+
.option("--max-js-size <mb>", "Maximum JS file size in MB to parse (Vue only)", "2")
|
|
252
|
+
.option("--lazyload-timeout <minutes>", "Hard timeout for each lazyload step in minutes (0 = no timeout)", "30")
|
|
253
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
254
|
+
var _a;
|
|
255
|
+
validateAndSetTimeout(cmd.timeout);
|
|
256
|
+
globalsUtil.setAi(((_a = cmd.ai) === null || _a === void 0 ? void 0 : _a.split(",")) || []);
|
|
257
|
+
globalsUtil.setOpenaiApiKey(cmd.openaiApiKey);
|
|
258
|
+
globalsUtil.setAiModel(cmd.model);
|
|
259
|
+
globalsUtil.setAiServiceProvider(cmd.aiProvider);
|
|
260
|
+
globalsUtil.setAiThreads(cmd.aiThreads);
|
|
261
|
+
if (cmd.aiEndpoint)
|
|
262
|
+
globalsUtil.setAiEndpoint(cmd.aiEndpoint);
|
|
263
|
+
globalsUtil.setOpenapiChunkTag(cmd.mapOpenapiChunkTag);
|
|
264
|
+
globalsUtil.setGraphqlEnabled(cmd.graphql !== false && !cmd.ngql);
|
|
265
|
+
globalsUtil.setDisableCache(cmd.disableCache);
|
|
266
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
267
|
+
globalsUtil.setCacheOnly(cmd.cacheOnly);
|
|
268
|
+
configureSandbox(cmd);
|
|
269
|
+
// validate AI options
|
|
270
|
+
if (globalsUtil.getAi().length !== 0) {
|
|
271
|
+
for (const aiType of globalsUtil.getAi()) {
|
|
272
|
+
if (aiType !== "" && !validAiOptions.includes(aiType)) {
|
|
273
|
+
console.error(chalk.red(`[!] Invalid AI option: ${aiType}`));
|
|
274
|
+
process.exit(2);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
yield run(cmd);
|
|
279
|
+
}));
|
|
280
|
+
program
|
|
281
|
+
.command("load")
|
|
282
|
+
.description("Populate response cache from a Caido/Burp request history export")
|
|
283
|
+
.requiredOption("-c, --caido <file>", "Caido JSON export file")
|
|
284
|
+
.requiredOption("-u, --url <url>", "Target URL — only entries matching this host/port/scheme are loaded")
|
|
285
|
+
.option("--cache-file <file>", "Response cache file to write", ".resp_cache.json")
|
|
286
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
287
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
288
|
+
yield load(cmd.caido, cmd.url);
|
|
289
|
+
}));
|
|
290
|
+
program
|
|
291
|
+
.command("fingerprint")
|
|
292
|
+
.description("Detect front-end frameworks across one or more URLs")
|
|
293
|
+
.requiredOption("-u, --url <url/file>", "Target URL or a file containing a list of URLs (one per line)")
|
|
294
|
+
.option("-o, --output <file>", "Output file to write results")
|
|
295
|
+
.option("-f, --format <formats>", "Output format(s): text, csv, json, jsonl (comma-separated)", "text")
|
|
296
|
+
.option("--timeout <timeout>", "Request timeout in ms", "30000")
|
|
297
|
+
.option("-k, --insecure", "Disable SSL certificate verification", false)
|
|
298
|
+
.option("--no-sandbox", "Disable browser sandbox")
|
|
299
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
300
|
+
validateAndSetTimeout(cmd.timeout);
|
|
301
|
+
globalsUtil.setDisableCache(true);
|
|
302
|
+
globalsUtil.setYes(true);
|
|
303
|
+
configureSandbox(cmd);
|
|
304
|
+
yield fingerprint(cmd.url, cmd.output, cmd.format);
|
|
305
|
+
}));
|
|
306
|
+
program
|
|
307
|
+
.command("mcp")
|
|
308
|
+
.description("AI-powered CLI / one-shot chat / Model Context Protocol server for js-recon")
|
|
309
|
+
.option("--cli", "Start interactive CLI mode", false)
|
|
310
|
+
.option("--server", "Start a Model Context Protocol server over stdio", false)
|
|
311
|
+
.option("-c, --chat <prompt>", "Send a one-shot prompt to the AI agent non-interactively (can be passed multiple times)", (val, prev) => [...prev, val], [])
|
|
312
|
+
.option("--config <file>", "Path to MCP config file", undefined)
|
|
313
|
+
.option("--api-key <key>", "API key for the LLM provider")
|
|
314
|
+
.option("--model <model>", "AI model to use (e.g. gpt-4o-mini, claude-sonnet-4-20250514)")
|
|
315
|
+
.option("--provider <provider>", "LLM provider to use (openai, anthropic)")
|
|
316
|
+
.option("--no-refresh-claude-creds", "Do not auto-refresh Claude Code OAuth tokens; fail if expired")
|
|
317
|
+
.option("--claude-client-id <id>", "OAuth client ID used when refreshing Claude Code credentials")
|
|
318
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
319
|
+
yield mcp({
|
|
320
|
+
cli: cmd.cli,
|
|
321
|
+
server: cmd.server,
|
|
322
|
+
chat: cmd.chat,
|
|
323
|
+
configFile: cmd.config,
|
|
324
|
+
apiKey: cmd.apiKey,
|
|
325
|
+
model: cmd.model,
|
|
326
|
+
provider: cmd.provider,
|
|
327
|
+
refreshClaudeCreds: cmd.refreshClaudeCreds,
|
|
328
|
+
claudeClientId: cmd.claudeClientId,
|
|
329
|
+
});
|
|
330
|
+
}));
|
|
331
|
+
program.parse(process.argv);
|
|
332
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
import _traverse from "@babel/traverse";
|
|
12
|
+
import * as parser from "@babel/parser";
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
/**
|
|
17
|
+
* Parses the main.js file of an Angular application to extract lazy-loaded module paths.
|
|
18
|
+
* It traverses the AST to find dynamic import() expressions and extracts the chunk paths.
|
|
19
|
+
*
|
|
20
|
+
* @param mainJsUrl The full URL to the main.js file.
|
|
21
|
+
* @returns A promise that resolves to an array of strings, where each string is a path to a lazy-loaded chunk.
|
|
22
|
+
*/
|
|
23
|
+
const angular_getFromMainJs = (mainJsUrl) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
console.log(chalk.cyan("[i] Analyzing main.js from", mainJsUrl));
|
|
25
|
+
let foundUrls = [];
|
|
26
|
+
const mainJsRes = yield makeRequest(mainJsUrl, {});
|
|
27
|
+
const mainJsBody = yield mainJsRes.text();
|
|
28
|
+
// Parse the main.js file content into an AST
|
|
29
|
+
const ast = parser.parse(mainJsBody, {
|
|
30
|
+
sourceType: "unambiguous",
|
|
31
|
+
plugins: ["jsx", "typescript"],
|
|
32
|
+
errorRecovery: true,
|
|
33
|
+
});
|
|
34
|
+
let importDeclarationPaths = [];
|
|
35
|
+
// Traverse the AST to find dynamic import expressions
|
|
36
|
+
traverse(ast, {
|
|
37
|
+
CallExpression(path) {
|
|
38
|
+
// Check if the callee is an import()
|
|
39
|
+
if (path.node.callee.type === "Import") {
|
|
40
|
+
const importArg = path.node.arguments[0];
|
|
41
|
+
// Ensure the first argument is a string literal and extract its value
|
|
42
|
+
if (importArg && importArg.type === "StringLiteral") {
|
|
43
|
+
importDeclarationPaths.push(importArg.value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
// now, resolve the paths
|
|
49
|
+
for (const importDeclarationPath of importDeclarationPaths) {
|
|
50
|
+
foundUrls.push(resolvePath(mainJsUrl, importDeclarationPath));
|
|
51
|
+
}
|
|
52
|
+
return foundUrls;
|
|
53
|
+
});
|
|
54
|
+
export default angular_getFromMainJs;
|
|
55
|
+
//# sourceMappingURL=angular_getFromMainJs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular_getFromMainJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/angular/angular_getFromMainJs.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,8BAA8B,CAAC;AAEvD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,CAAO,SAAiB,EAAqB,EAAE;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjE,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IAE1C,6CAA6C;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE;QACjC,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;QAC9B,aAAa,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,IAAI,sBAAsB,GAAa,EAAE,CAAC;IAE1C,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE;QACV,cAAc,CAAC,IAAI;YACf,qCAAqC;YACrC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzC,sEAAsE;gBACtE,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAClD,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjD,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,yBAAyB;IACzB,KAAK,MAAM,qBAAqB,IAAI,sBAAsB,EAAE,CAAC;QACzD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import * as cheerio from "cheerio";
|
|
13
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
14
|
+
const angular_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
console.log(chalk.cyan("[i] Analyzing page source"));
|
|
16
|
+
let foundUrls = [];
|
|
17
|
+
const pageSource = yield makeRequest(url, {});
|
|
18
|
+
const body = yield pageSource.text();
|
|
19
|
+
// cheerio to parse the page source
|
|
20
|
+
const $ = cheerio.load(body);
|
|
21
|
+
// find all the script tags
|
|
22
|
+
const scriptTags = $("script");
|
|
23
|
+
for (const scriptTag of scriptTags) {
|
|
24
|
+
const srcAttr = $(scriptTag).attr("src");
|
|
25
|
+
if (srcAttr) {
|
|
26
|
+
// if it starts with http, then push it directly. if no, then resolve it
|
|
27
|
+
if (srcAttr.startsWith("http")) {
|
|
28
|
+
foundUrls.push(srcAttr);
|
|
29
|
+
}
|
|
30
|
+
else if (srcAttr.startsWith("//")) {
|
|
31
|
+
// get the url protocol and use that
|
|
32
|
+
const protocol = url.split(":")[0];
|
|
33
|
+
foundUrls.push(protocol + srcAttr);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
foundUrls.push(yield resolvePath(url, srcAttr));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return foundUrls;
|
|
41
|
+
});
|
|
42
|
+
export default angular_getFromPageSource;
|
|
43
|
+
//# sourceMappingURL=angular_getFromPageSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/angular/angular_getFromPageSource.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,8BAA8B,CAAC;AAEvD,MAAM,yBAAyB,GAAG,CAAO,GAAW,EAAE,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAErC,mCAAmC;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,2BAA2B;IAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACV,wEAAwE;YACxE,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,oCAAoC;gBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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 path from "path";
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import prettier from "prettier";
|
|
14
|
+
import makeRequest from "../utility/makeReq.js";
|
|
15
|
+
import { getURLDirectory } from "../utility/urlUtils.js";
|
|
16
|
+
import { getScope, getMaxReqQueue } from "./globals.js"; // Import scope and max_req_queue functions
|
|
17
|
+
/**
|
|
18
|
+
* Downloads the provided JavaScript or JSON URLs and stores them in the given output directory.
|
|
19
|
+
*
|
|
20
|
+
* Each URL is fetched while respecting the configured request queue limits. Files that fall
|
|
21
|
+
* outside the allowed scope are skipped, and downloaded files are formatted before being
|
|
22
|
+
* written to disk.
|
|
23
|
+
*
|
|
24
|
+
* @param {string[]} urls - The list of URLs to download.
|
|
25
|
+
* @param {string} output - The directory where the downloaded JS chunks should be written.
|
|
26
|
+
* @returns {Promise<void>} - Resolves once all eligible files have been downloaded and saved.
|
|
27
|
+
*/
|
|
28
|
+
// Files larger than this skip Prettier — minified bundles gain nothing from formatting
|
|
29
|
+
// and Prettier's internal AST for a 2 MB file can consume hundreds of MB.
|
|
30
|
+
const PRETTIER_SIZE_LIMIT = 500 * 1024; // 500 KB
|
|
31
|
+
const downloadFiles = (urls, output) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
console.log(chalk.cyan(`[i] Attempting to download ${urls.length} JS chunks`));
|
|
33
|
+
fs.mkdirSync(output, { recursive: true });
|
|
34
|
+
const ignoredJSFiles = [];
|
|
35
|
+
const ignoredJSDomains = [];
|
|
36
|
+
let download_count = 0;
|
|
37
|
+
let cursor = 0;
|
|
38
|
+
const concurrency = Math.max(1, getMaxReqQueue());
|
|
39
|
+
const processOne = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
try {
|
|
42
|
+
if (!url.match(/(\.js|\.json|\.js\.map|\.vue)/) || url.match(/lang\.(css|scss|sass|less|styl)/)) {
|
|
43
|
+
console.log(chalk.yellow(`[i] Ignored ${url}`));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const { host, directory } = getURLDirectory(url);
|
|
47
|
+
if (!getScope().includes("*") && !getScope().includes(host)) {
|
|
48
|
+
ignoredJSFiles.push(url);
|
|
49
|
+
if (!ignoredJSDomains.includes(host)) {
|
|
50
|
+
ignoredJSDomains.push(host);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const childDir = path.join(output, host, directory);
|
|
55
|
+
fs.mkdirSync(childDir, { recursive: true });
|
|
56
|
+
let res;
|
|
57
|
+
try {
|
|
58
|
+
res = yield makeRequest(url, {});
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error(chalk.red(`[!] Failed to download: ${url}`));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!res) {
|
|
65
|
+
console.error(chalk.red(`[!] Failed to download: ${url}`));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const rawText = yield res.text();
|
|
69
|
+
const file = url.match(/\.json/) ? rawText : `// File Source: ${url}\n${rawText}`;
|
|
70
|
+
let filename;
|
|
71
|
+
try {
|
|
72
|
+
filename = (_b = (_a = url
|
|
73
|
+
.split("/")
|
|
74
|
+
.pop()) === null || _a === void 0 ? void 0 : _a.match(/[a-zA-Z0-9\.\-_]+\.(js(on)?(\.map)?|vue)/)) === null || _b === void 0 ? void 0 : _b[0];
|
|
75
|
+
}
|
|
76
|
+
catch (_c) {
|
|
77
|
+
for (const chunk of url.split("/")) {
|
|
78
|
+
if (chunk.match(/\.(js(on)?|vue)$/)) {
|
|
79
|
+
filename = chunk;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!filename) {
|
|
85
|
+
console.warn(chalk.yellow(`[!] Could not determine filename for URL: ${url}. Skipping.`));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const filePath = path.join(childDir, filename);
|
|
89
|
+
try {
|
|
90
|
+
if (url.match(/\.json/) || url.match(/\.js\.map/)) {
|
|
91
|
+
const formatted = file.length <= PRETTIER_SIZE_LIMIT ? yield prettier.format(file, { parser: "json" }) : file;
|
|
92
|
+
fs.writeFileSync(filePath, formatted);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const formatted = file.length <= PRETTIER_SIZE_LIMIT ? yield prettier.format(file, { parser: "babel" }) : file;
|
|
96
|
+
fs.writeFileSync(filePath, formatted);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (_d) {
|
|
100
|
+
console.error(chalk.red(`[!] Failed to write file: ${filePath}`));
|
|
101
|
+
}
|
|
102
|
+
download_count++;
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.error(chalk.red(`[!] Failed to download: ${url} : ${err}`));
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
// Worker pool: each worker processes one file end-to-end before taking the next.
|
|
109
|
+
// This bounds peak memory to (concurrency × largest_file) rather than all files at once.
|
|
110
|
+
const worker = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
while (true) {
|
|
112
|
+
const idx = cursor++;
|
|
113
|
+
if (idx >= urls.length)
|
|
114
|
+
break;
|
|
115
|
+
yield processOne(urls[idx]);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
yield Promise.all(Array.from({ length: concurrency }, () => worker()));
|
|
119
|
+
if (ignoredJSFiles.length > 0) {
|
|
120
|
+
console.log(chalk.yellow(`[i] Ignored ${ignoredJSFiles.length} JS files across ${ignoredJSDomains.length} domain(s) - ${ignoredJSDomains.join(", ")}`));
|
|
121
|
+
}
|
|
122
|
+
if (download_count > 0) {
|
|
123
|
+
console.log(chalk.green(`[✓] Downloaded ${download_count} JS chunks to ${output} directory`));
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
export default downloadFiles;
|
|
127
|
+
//# sourceMappingURL=downloadFilesUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadFilesUtil.js","sourceRoot":"","sources":["../../src/lazyLoad/downloadFilesUtil.ts"],"names":[],"mappings":"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"}
|