@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,377 @@
|
|
|
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 fs from "fs";
|
|
12
|
+
import frameworkDetect from "./techDetect/index.js";
|
|
13
|
+
import CONFIG from "../globalConfig.js";
|
|
14
|
+
import _traverse from "@babel/traverse";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
import { URL } from "url";
|
|
17
|
+
// Next.js
|
|
18
|
+
import NextJsCrawler from "./next_js/NextJsCrawler.js";
|
|
19
|
+
import { next_buildId_RSC } from "./next_js/next_buildId.js";
|
|
20
|
+
// Nuxt.js
|
|
21
|
+
import nuxt_getFromPageSource from "./nuxt_js/nuxt_getFromPageSource.js";
|
|
22
|
+
import nuxt_stringAnalysisJSFiles from "./nuxt_js/nuxt_stringAnalysisJSFiles.js";
|
|
23
|
+
import nuxt_astParse from "./nuxt_js/nuxt_astParse.js";
|
|
24
|
+
// Svelte
|
|
25
|
+
import svelte_getFromPageSource from "./svelte/svelte_getFromPageSource.js";
|
|
26
|
+
import svelte_stringAnalysisJSFiles from "./svelte/svelte_stringAnalysisJSFiles.js";
|
|
27
|
+
import svelte_recursivePageCrawl from "./svelte/svelte_recursivePageCrawl.js";
|
|
28
|
+
import svelte_discoverPagesFromJs from "./svelte/svelte_discoverPagesFromJs.js";
|
|
29
|
+
// Angular
|
|
30
|
+
import angular_getFromPageSource from "./angular/angular_getFromPageSource.js";
|
|
31
|
+
import angular_getFromMainJs from "./angular/angular_getFromMainJs.js";
|
|
32
|
+
// Vue
|
|
33
|
+
import vue_discoverJsFiles from "./vue/vue_discoverJsFiles.js";
|
|
34
|
+
import vue_recursiveClientSidePathDownload from "./vue/vue_recursiveClientSidePathDownload.js";
|
|
35
|
+
// React
|
|
36
|
+
import react_getScriptTags from "./react/react_getScriptTags.js";
|
|
37
|
+
import react_webpackChunkPaths from "./react/react_webpackChunkPaths.js";
|
|
38
|
+
import react_sourcemapUrls from "./react/react_sourcemapUrls.js";
|
|
39
|
+
import react_followImports from "./react/react_followImports.js";
|
|
40
|
+
import downloadLoadedJs from "./downloadLoadedJsUtil.js";
|
|
41
|
+
import { DownloadQueue } from "./downloadQueue.js";
|
|
42
|
+
// for rebuilding source maps
|
|
43
|
+
import { readdirSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
44
|
+
import path from "path";
|
|
45
|
+
import { join, dirname } from "path";
|
|
46
|
+
import { extractSources } from "./sourcemap.js";
|
|
47
|
+
// import global vars
|
|
48
|
+
import * as lazyLoadGlobals from "./globals.js";
|
|
49
|
+
import * as globals from "../utility/globals.js";
|
|
50
|
+
const getMapFilesRecursively = (dir) => {
|
|
51
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
52
|
+
const mapFiles = [];
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const fullPath = join(dir, entry.name);
|
|
55
|
+
if (entry.isDirectory()) {
|
|
56
|
+
mapFiles.push(...getMapFilesRecursively(fullPath));
|
|
57
|
+
}
|
|
58
|
+
else if (entry.isFile() && entry.name.endsWith(".js.map")) {
|
|
59
|
+
mapFiles.push(fullPath);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return mapFiles;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Extracts the source maps from a given directory and writes the original source files to an output directory.
|
|
66
|
+
* @param {string} assetsDir The directory containing the source maps (.js.map files)
|
|
67
|
+
* @param {string} outputDir The directory to write the extracted source files
|
|
68
|
+
* @returns {Promise<void>}
|
|
69
|
+
*/
|
|
70
|
+
const extractSourceMaps = (assetsDir, outputDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
+
const mapFiles = getMapFilesRecursively(assetsDir);
|
|
72
|
+
let counter = 0;
|
|
73
|
+
for (const mapFile of mapFiles) {
|
|
74
|
+
const raw = readFileSync(mapFile, "utf-8");
|
|
75
|
+
// Older runs prepended a `// File Source: ...` banner to .js.map files;
|
|
76
|
+
// current runs write pure JSON. Strip the leading banner if present.
|
|
77
|
+
const mapContent = raw.startsWith("//") ? raw.split("\n").slice(1).join("\n") : raw;
|
|
78
|
+
const { files } = extractSources(mapContent);
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
if (file.path === "." || file.path === "")
|
|
81
|
+
continue;
|
|
82
|
+
const outPath = join(outputDir, file.path);
|
|
83
|
+
mkdirSync(dirname(outPath), { recursive: true });
|
|
84
|
+
writeFileSync(outPath, file.content);
|
|
85
|
+
counter++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (counter !== 0) {
|
|
89
|
+
console.log(chalk.green(`[✓] Found ${counter} files from source maps - written to ${outputDir}`));
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* Downloads the required JavaScript files for a given URL
|
|
94
|
+
* @param {string} url The URL to download the JS files from
|
|
95
|
+
* @param {string} output The output directory to store the downloaded JS files
|
|
96
|
+
* @param {boolean} strictScope If true, then only download the JS files from the input URL domain
|
|
97
|
+
* @param {string[]} inputScope The list of domains to download the JS files from
|
|
98
|
+
* @param {number} threads The number of threads to use for downloading the JS files
|
|
99
|
+
* @param {boolean} subsequentRequestsFlag If true, then also download the JS files from subsequent requests
|
|
100
|
+
* @param {string} urlsFile The file containing the list of URLs to download the JS files from
|
|
101
|
+
* @param {boolean} insecure If true, then disable SSL certificate verification
|
|
102
|
+
* @returns {Promise<void>} A Promise that resolves when the download is complete
|
|
103
|
+
*/
|
|
104
|
+
const lazyLoad = (url_1, output_1, strictScope_1, inputScope_1, threads_1, subsequentRequestsFlag_1, urlsFile_1, insecure_1, buildId_1, sourcemapDir_1, research_1, researchOutput_1, maxIterations_1, ...args_1) => __awaiter(void 0, [url_1, output_1, strictScope_1, inputScope_1, threads_1, subsequentRequestsFlag_1, urlsFile_1, insecure_1, buildId_1, sourcemapDir_1, research_1, researchOutput_1, maxIterations_1, ...args_1], void 0, function* (url, output, strictScope, inputScope, threads, subsequentRequestsFlag, urlsFile, insecure, buildId, sourcemapDir, research, researchOutput, maxIterations, maxJsSizeMb = 2, hardTimeoutMs = 30 * 60 * 1000) {
|
|
105
|
+
// Hoisted so the timeout handler can stop discovery and drain downloads.
|
|
106
|
+
let activeCrawler = null;
|
|
107
|
+
let activeQueue = null;
|
|
108
|
+
const work = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
+
console.log(chalk.cyan("[i] Loading 'Lazy Load' module"));
|
|
110
|
+
if (globals.getDisableSandbox()) {
|
|
111
|
+
console.error(chalk.yellow("[!] Browser sandbox disabled"));
|
|
112
|
+
}
|
|
113
|
+
if (insecure) {
|
|
114
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
115
|
+
console.error(chalk.yellow("[!] Running in insecure mode. SSL certificate verification disabled"));
|
|
116
|
+
}
|
|
117
|
+
// if cache enabled, check if the cache file exists or not. If no, then create a new one
|
|
118
|
+
if (!globals.getDisableCache()) {
|
|
119
|
+
if (!fs.existsSync(globals.getRespCacheFile())) {
|
|
120
|
+
fs.writeFileSync(globals.getRespCacheFile(), "{}");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
let urls;
|
|
124
|
+
// check if the url is file or a URL
|
|
125
|
+
if (fs.existsSync(url)) {
|
|
126
|
+
urls = fs.readFileSync(url, "utf8").split("\n");
|
|
127
|
+
// remove the empty lines
|
|
128
|
+
urls = urls.filter((url) => url.trim() !== "");
|
|
129
|
+
}
|
|
130
|
+
else if (url.match(/https?:\/\/[a-zA-Z0-9\-_\.:]+/)) {
|
|
131
|
+
urls = [url];
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.error(chalk.red("[!] Invalid URL or file path"));
|
|
135
|
+
process.exit(3);
|
|
136
|
+
}
|
|
137
|
+
for (const url of urls) {
|
|
138
|
+
console.log(chalk.cyan(`[i] Processing ${url}`));
|
|
139
|
+
if (strictScope) {
|
|
140
|
+
lazyLoadGlobals.pushToScope(new URL(url).host);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
lazyLoadGlobals.setScope(inputScope);
|
|
144
|
+
}
|
|
145
|
+
lazyLoadGlobals.setMaxReqQueue(threads);
|
|
146
|
+
const tech = yield frameworkDetect(url);
|
|
147
|
+
globals.setTech(tech ? tech.name : "");
|
|
148
|
+
if (tech) {
|
|
149
|
+
if (tech.name === "next") {
|
|
150
|
+
console.log(chalk.green("[✓] Next.js detected"));
|
|
151
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
152
|
+
activeQueue = new DownloadQueue(output, threads);
|
|
153
|
+
const crawler = new NextJsCrawler({
|
|
154
|
+
url,
|
|
155
|
+
output,
|
|
156
|
+
subsequentRequestsFlag,
|
|
157
|
+
urlsFile,
|
|
158
|
+
threads,
|
|
159
|
+
research,
|
|
160
|
+
maxIterations,
|
|
161
|
+
onUrlsDiscovered: (urls) => activeQueue.push(urls),
|
|
162
|
+
});
|
|
163
|
+
activeCrawler = crawler;
|
|
164
|
+
yield crawler.crawl();
|
|
165
|
+
activeCrawler = null; // done — prevent timeout handler from calling stop()
|
|
166
|
+
yield activeQueue.drain();
|
|
167
|
+
activeQueue.printSummary();
|
|
168
|
+
activeQueue = null;
|
|
169
|
+
if (buildId) {
|
|
170
|
+
// get the buildId
|
|
171
|
+
// the directory is the output <output>/<host.replace(":", "_")>/___subsequent_requests
|
|
172
|
+
const buildId = yield next_buildId_RSC(output + "/" + new URL(url).host.replace(":", "_") + "/___subsequent_requests");
|
|
173
|
+
if (buildId) {
|
|
174
|
+
console.log(chalk.cyan("[+] Found buildId: " + buildId));
|
|
175
|
+
// now, write it to a file
|
|
176
|
+
fs.writeFileSync(path.join(output, new URL(url).host.replace(":", "_") + "/BUILD_ID"), buildId);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// if the research mode is enabled, then write the technique efficiency to a file
|
|
180
|
+
if (research) {
|
|
181
|
+
// prettify the JSON and write
|
|
182
|
+
fs.writeFileSync(researchOutput, JSON.stringify(crawler.techniqueEfficiencyMapping, null, 4));
|
|
183
|
+
console.log(chalk.green("[✓] Research mode enabled. Technique efficiency written to " + researchOutput));
|
|
184
|
+
}
|
|
185
|
+
// extract the source maps
|
|
186
|
+
yield extractSourceMaps(output, join(output, sourcemapDir));
|
|
187
|
+
}
|
|
188
|
+
else if (tech.name === "vue") {
|
|
189
|
+
console.log(chalk.green("[✓] Vue.js detected"));
|
|
190
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
191
|
+
activeQueue = new DownloadQueue(output, threads);
|
|
192
|
+
const queue = activeQueue;
|
|
193
|
+
const onFilesDiscovered = (files) => queue.push(files);
|
|
194
|
+
// run the full discovery pipeline against the entry URL
|
|
195
|
+
const { clientSidePaths } = yield vue_discoverJsFiles(url, maxJsSizeMb, onFilesDiscovered);
|
|
196
|
+
// recurse the same pipeline through every client-side path we found
|
|
197
|
+
yield vue_recursiveClientSidePathDownload(clientSidePaths, threads, maxJsSizeMb, onFilesDiscovered);
|
|
198
|
+
yield queue.drain();
|
|
199
|
+
queue.printSummary();
|
|
200
|
+
// extract the source maps
|
|
201
|
+
yield extractSourceMaps(output, join(output, sourcemapDir));
|
|
202
|
+
}
|
|
203
|
+
else if (tech.name === "nuxt") {
|
|
204
|
+
console.log(chalk.green("[✓] Nuxt.js detected"));
|
|
205
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
206
|
+
const queue = new DownloadQueue(output, threads);
|
|
207
|
+
activeQueue = queue;
|
|
208
|
+
// find the files from the page source
|
|
209
|
+
const jsFilesFromPageSource = yield nuxt_getFromPageSource(url);
|
|
210
|
+
queue.push(jsFilesFromPageSource);
|
|
211
|
+
const jsFilesFromStringAnalysis = yield nuxt_stringAnalysisJSFiles(url);
|
|
212
|
+
queue.push(jsFilesFromStringAnalysis);
|
|
213
|
+
const firstBatch = [...new Set([...jsFilesFromPageSource, ...jsFilesFromStringAnalysis])];
|
|
214
|
+
let jsFilesFromAST = [];
|
|
215
|
+
console.log(chalk.cyan("[i] Analyzing functions in the files found"));
|
|
216
|
+
for (const jsFile of firstBatch) {
|
|
217
|
+
jsFilesFromAST.push(...(yield nuxt_astParse(jsFile)));
|
|
218
|
+
}
|
|
219
|
+
queue.push(jsFilesFromAST);
|
|
220
|
+
queue.push(lazyLoadGlobals.getJsUrls());
|
|
221
|
+
yield queue.drain();
|
|
222
|
+
queue.printSummary();
|
|
223
|
+
}
|
|
224
|
+
else if (tech.name === "svelte") {
|
|
225
|
+
console.log(chalk.green("[✓] Svelte detected"));
|
|
226
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
227
|
+
const queue = new DownloadQueue(output, threads);
|
|
228
|
+
activeQueue = queue;
|
|
229
|
+
// find the files from the page source
|
|
230
|
+
const jsFilesFromPageSource = yield svelte_getFromPageSource(url);
|
|
231
|
+
queue.push(jsFilesFromPageSource);
|
|
232
|
+
// analyze the strings now
|
|
233
|
+
const { jsFiles: jsFilesFromStringAnalysis, mapFiles: mapFilesFromStringAnalysis } = yield svelte_stringAnalysisJSFiles(url);
|
|
234
|
+
queue.push(jsFilesFromStringAnalysis);
|
|
235
|
+
if (mapFilesFromStringAnalysis.length > 0) {
|
|
236
|
+
queue.push(mapFilesFromStringAnalysis);
|
|
237
|
+
}
|
|
238
|
+
// recursively follow ESM static imports (import ... from "./chunk.js")
|
|
239
|
+
const visited = new Set();
|
|
240
|
+
let toFollow = [...new Set([...jsFilesFromPageSource, ...jsFilesFromStringAnalysis])];
|
|
241
|
+
while (toFollow.length > 0) {
|
|
242
|
+
const newFiles = yield react_followImports(toFollow, maxJsSizeMb, url, visited);
|
|
243
|
+
if (newFiles.length === 0)
|
|
244
|
+
break;
|
|
245
|
+
console.log(chalk.green(`[✓] Discovered ${newFiles.length} more JS file(s) via imports`));
|
|
246
|
+
queue.push(newFiles);
|
|
247
|
+
toFollow = newFiles;
|
|
248
|
+
}
|
|
249
|
+
// crawl same-origin HTML pages found via <a href> and <link href>,
|
|
250
|
+
// running the full JS-discovery pipeline on each
|
|
251
|
+
const jsFilesFromPageCrawl = yield svelte_recursivePageCrawl(url, maxJsSizeMb, (files) => queue.push(files));
|
|
252
|
+
// Svelte/Astro apps use client-side routing — the home page rarely has
|
|
253
|
+
// <a href> links in its server-rendered HTML. Scan downloaded JS for
|
|
254
|
+
// embedded page path strings (e.g. "/admin", "/debug") and visit each
|
|
255
|
+
// page to discover the Astro island component-url values for those routes.
|
|
256
|
+
// Iterates until no new paths or JS files are discovered.
|
|
257
|
+
const jsFilesFromPathScan = yield svelte_discoverPagesFromJs(url);
|
|
258
|
+
if (jsFilesFromPathScan.length > 0) {
|
|
259
|
+
queue.push(jsFilesFromPathScan);
|
|
260
|
+
}
|
|
261
|
+
// run string analysis once more to catch JS files discovered during page crawl
|
|
262
|
+
if (jsFilesFromPageCrawl.length > 0 || jsFilesFromPathScan.length > 0) {
|
|
263
|
+
const { jsFiles: jsFilesFromStringAnalysis2, mapFiles: mapFilesFromStringAnalysis2 } = yield svelte_stringAnalysisJSFiles(url);
|
|
264
|
+
queue.push(jsFilesFromStringAnalysis2);
|
|
265
|
+
if (mapFilesFromStringAnalysis2.length > 0) {
|
|
266
|
+
queue.push(mapFilesFromStringAnalysis2);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
yield queue.drain();
|
|
270
|
+
queue.printSummary();
|
|
271
|
+
yield extractSourceMaps(output, join(output, sourcemapDir));
|
|
272
|
+
}
|
|
273
|
+
else if (tech.name === "angular") {
|
|
274
|
+
console.log(chalk.green("[✓] Angular detected"));
|
|
275
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
276
|
+
const queue = new DownloadQueue(output, threads);
|
|
277
|
+
activeQueue = queue;
|
|
278
|
+
// find the files from the page source
|
|
279
|
+
const jsFilesFromPageSource = yield angular_getFromPageSource(url);
|
|
280
|
+
queue.push(jsFilesFromPageSource);
|
|
281
|
+
// files using the main.js
|
|
282
|
+
let mainJsUrl;
|
|
283
|
+
for (const jsFile of jsFilesFromPageSource) {
|
|
284
|
+
if (jsFile.match(/main[a-zA-Z0-9\-]*\.js/)) {
|
|
285
|
+
mainJsUrl = jsFile;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (mainJsUrl) {
|
|
290
|
+
const jsFilesFromMainJs = yield angular_getFromMainJs(mainJsUrl);
|
|
291
|
+
queue.push(jsFilesFromMainJs);
|
|
292
|
+
}
|
|
293
|
+
yield queue.drain();
|
|
294
|
+
queue.printSummary();
|
|
295
|
+
}
|
|
296
|
+
else if (tech.name === "react") {
|
|
297
|
+
console.log(chalk.green("[✓] React detected"));
|
|
298
|
+
console.log(chalk.yellow(`Evidence: ${tech.evidence}`));
|
|
299
|
+
const queue = new DownloadQueue(output, threads);
|
|
300
|
+
activeQueue = queue;
|
|
301
|
+
// Seed: <script src> tags + <link rel="modulepreload"> (Vite vendor chunks)
|
|
302
|
+
const jsFilesFromPageSource = yield react_getScriptTags(url, maxJsSizeMb, output);
|
|
303
|
+
queue.push(jsFilesFromPageSource);
|
|
304
|
+
// webpack-style chunk path builders (CRA / custom webpack configs)
|
|
305
|
+
const webpackChunkPaths = yield react_webpackChunkPaths(url, maxJsSizeMb, jsFilesFromPageSource);
|
|
306
|
+
queue.push(webpackChunkPaths);
|
|
307
|
+
// Recursively follow ESM imports and Vite __vite_mapDeps references.
|
|
308
|
+
// visited starts empty so the seed files are fetched and parsed in the first round.
|
|
309
|
+
const visited = new Set();
|
|
310
|
+
let toFollow = [...new Set([...jsFilesFromPageSource, ...webpackChunkPaths])];
|
|
311
|
+
while (toFollow.length > 0) {
|
|
312
|
+
const newFiles = yield react_followImports(toFollow, maxJsSizeMb, url, visited);
|
|
313
|
+
if (newFiles.length === 0)
|
|
314
|
+
break;
|
|
315
|
+
console.log(chalk.green(`[✓] Discovered ${newFiles.length} more JS file(s) via imports`));
|
|
316
|
+
queue.push(newFiles);
|
|
317
|
+
toFollow = newFiles;
|
|
318
|
+
}
|
|
319
|
+
// Sourcemaps for everything discovered
|
|
320
|
+
const sourcemapUrls = yield react_sourcemapUrls([...visited]);
|
|
321
|
+
queue.push(sourcemapUrls);
|
|
322
|
+
yield queue.drain();
|
|
323
|
+
queue.printSummary();
|
|
324
|
+
extractSourceMaps(output, join(output, sourcemapDir));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
console.error(chalk.red("[!] Framework not detected :("));
|
|
329
|
+
console.log(chalk.magenta(CONFIG.notFoundMessage));
|
|
330
|
+
console.log(chalk.yellow("[i] Trying to download loaded JS files"));
|
|
331
|
+
const js_urls = yield downloadLoadedJs(url);
|
|
332
|
+
if (js_urls && js_urls.length > 0) {
|
|
333
|
+
console.log(chalk.green(`[✓] Found ${js_urls.length} JS chunks`));
|
|
334
|
+
const queue = new DownloadQueue(output, threads);
|
|
335
|
+
queue.push(js_urls);
|
|
336
|
+
yield queue.drain();
|
|
337
|
+
queue.printSummary();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
if (hardTimeoutMs === 0) {
|
|
343
|
+
yield work();
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
let timeoutHandle;
|
|
347
|
+
yield Promise.race([
|
|
348
|
+
work().finally(() => {
|
|
349
|
+
// work() finished before the timeout — cancel the timer so it never
|
|
350
|
+
// fires orphaned and doesn't hold the event loop open.
|
|
351
|
+
if (timeoutHandle !== undefined)
|
|
352
|
+
clearTimeout(timeoutHandle);
|
|
353
|
+
}),
|
|
354
|
+
new Promise((resolve) => {
|
|
355
|
+
timeoutHandle = setTimeout(() => {
|
|
356
|
+
console.error(chalk.yellow(`[!] Lazyload hard timeout reached (${hardTimeoutMs / 60000} min). Draining discovered files before moving on...`));
|
|
357
|
+
// Signal the crawler to stop at its next iteration boundary.
|
|
358
|
+
activeCrawler === null || activeCrawler === void 0 ? void 0 : activeCrawler.stop();
|
|
359
|
+
const q = activeQueue;
|
|
360
|
+
if (q) {
|
|
361
|
+
// Wait for already-queued downloads to finish, then move on.
|
|
362
|
+
q.drain()
|
|
363
|
+
.then(() => {
|
|
364
|
+
q.printSummary();
|
|
365
|
+
resolve();
|
|
366
|
+
})
|
|
367
|
+
.catch(() => resolve());
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
resolve();
|
|
371
|
+
}
|
|
372
|
+
}, hardTimeoutMs);
|
|
373
|
+
}),
|
|
374
|
+
]);
|
|
375
|
+
});
|
|
376
|
+
export default lazyLoad;
|
|
377
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lazyLoad/index.ts"],"names":[],"mappings":"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"}
|