@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 @@
|
|
|
1
|
+
{"version":3,"file":"next_globals.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_globals.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAI,OAAO,GAAkB,IAAI,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAQ,EAAE;IAC3C,OAAO,GAAG,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAkB,EAAE;IAC1C,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
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 parser from "@babel/parser";
|
|
12
|
+
import _traverse from "@babel/traverse";
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
import next_getJSScript from "./next_GetJSScript.js";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
const next_parseLayoutJs = (baseUrl, urls) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
console.log(chalk.cyan("[i] Parsing layout.js files"));
|
|
18
|
+
let toReturn = [];
|
|
19
|
+
// iterate through all the URLs and find the layout.*.js files
|
|
20
|
+
for (const url of urls) {
|
|
21
|
+
if (url.includes("layout-")) {
|
|
22
|
+
// request the content, and parse it
|
|
23
|
+
const req = yield makeRequest(url);
|
|
24
|
+
const jsContent = yield req.text();
|
|
25
|
+
let ast;
|
|
26
|
+
try {
|
|
27
|
+
ast = parser.parse(jsContent, {
|
|
28
|
+
sourceType: "unambiguous",
|
|
29
|
+
plugins: ["jsx", "typescript"],
|
|
30
|
+
errorRecovery: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (_a) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
let hrefFinds = [];
|
|
37
|
+
const resolveString = (node) => {
|
|
38
|
+
if (!node)
|
|
39
|
+
return "";
|
|
40
|
+
if (node.type === "StringLiteral") {
|
|
41
|
+
return node.value;
|
|
42
|
+
}
|
|
43
|
+
if (node.type === "TemplateLiteral") {
|
|
44
|
+
let str = "";
|
|
45
|
+
node.quasis.forEach((q, i) => {
|
|
46
|
+
str += q.value.raw;
|
|
47
|
+
if (i < node.expressions.length) {
|
|
48
|
+
str += resolveString(node.expressions[i]);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return str;
|
|
52
|
+
}
|
|
53
|
+
if (node.type === "BinaryExpression" && node.operator === "+") {
|
|
54
|
+
return resolveString(node.left) + resolveString(node.right);
|
|
55
|
+
}
|
|
56
|
+
if (node.type === "CallExpression") {
|
|
57
|
+
if (node.callee.type === "MemberExpression" && node.callee.property.name === "concat") {
|
|
58
|
+
let base = resolveString(node.callee.object);
|
|
59
|
+
node.arguments.forEach((arg) => {
|
|
60
|
+
base += resolveString(arg);
|
|
61
|
+
});
|
|
62
|
+
return base;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// If it's an identifier or unknown, we return a placeholder to represent dynamic content
|
|
66
|
+
return Math.random()
|
|
67
|
+
.toString(36)
|
|
68
|
+
.substring(2, 2 + 64);
|
|
69
|
+
};
|
|
70
|
+
// traverse through the AST, and find all the hrefs
|
|
71
|
+
traverse(ast, {
|
|
72
|
+
ObjectProperty(path) {
|
|
73
|
+
const { key, value } = path.node;
|
|
74
|
+
// Check if key is 'href' (identifier) or "href" (literal)
|
|
75
|
+
if (key.name === "href") {
|
|
76
|
+
const resolved = resolveString(value);
|
|
77
|
+
if (resolved) {
|
|
78
|
+
hrefFinds.push(resolved);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
// iterate through each href, and try to send the server a request
|
|
84
|
+
// if the response code is 200, run all the methods again on that
|
|
85
|
+
for (const href of hrefFinds) {
|
|
86
|
+
const newUrl = new URL(href, new URL(url).origin).href;
|
|
87
|
+
if (newUrl.startsWith("mailto:"))
|
|
88
|
+
continue;
|
|
89
|
+
// also, check if the origin is same or not
|
|
90
|
+
if (new URL(baseUrl).origin !== new URL(newUrl).origin)
|
|
91
|
+
continue;
|
|
92
|
+
let req;
|
|
93
|
+
try {
|
|
94
|
+
req = yield makeRequest(newUrl);
|
|
95
|
+
}
|
|
96
|
+
catch (_b) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (req.status === 200) {
|
|
100
|
+
console.log(chalk.green("[✓] Found new client side URL: ", newUrl));
|
|
101
|
+
// parse the HTML for script tags
|
|
102
|
+
const jsFiles = yield next_getJSScript(newUrl);
|
|
103
|
+
toReturn.push(...jsFiles);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// dedupe
|
|
109
|
+
toReturn = [...new Set(toReturn)];
|
|
110
|
+
if (toReturn.length !== 0) {
|
|
111
|
+
console.log(chalk.green(`[✓] Found ${toReturn.length} JS files from the layout.js files`));
|
|
112
|
+
}
|
|
113
|
+
return toReturn;
|
|
114
|
+
});
|
|
115
|
+
export default next_parseLayoutJs;
|
|
116
|
+
//# sourceMappingURL=next_parseLayoutJs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next_parseLayoutJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_parseLayoutJs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
12
|
+
import parser from "@babel/parser";
|
|
13
|
+
import _traverse from "@babel/traverse";
|
|
14
|
+
import { addCrawledUrl } from "../globals.js";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
const next_promiseResolveWorker = (url, jsDirBase) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
let toReturn = [];
|
|
18
|
+
// get the contents of the file
|
|
19
|
+
const req = yield makeRequest(url);
|
|
20
|
+
if (!req || !req.ok)
|
|
21
|
+
return toReturn;
|
|
22
|
+
const data = yield req.text();
|
|
23
|
+
try {
|
|
24
|
+
const ast = parser.parse(data, {
|
|
25
|
+
sourceType: "unambiguous",
|
|
26
|
+
plugins: ["jsx", "typescript"],
|
|
27
|
+
errorRecovery: true,
|
|
28
|
+
});
|
|
29
|
+
let matches = [];
|
|
30
|
+
traverse(ast, {
|
|
31
|
+
CallExpression(path) {
|
|
32
|
+
const { node } = path;
|
|
33
|
+
// Check for Promise.all([...].map(...)) pattern
|
|
34
|
+
if (node.callee.type === "MemberExpression" &&
|
|
35
|
+
node.callee.object.type === "Identifier" &&
|
|
36
|
+
node.callee.object.name === "Promise" &&
|
|
37
|
+
node.callee.property.type === "Identifier" &&
|
|
38
|
+
node.callee.property.name === "all") {
|
|
39
|
+
const arg = node.arguments[0];
|
|
40
|
+
if (arg &&
|
|
41
|
+
arg.type === "CallExpression" &&
|
|
42
|
+
arg.callee.type === "MemberExpression" &&
|
|
43
|
+
arg.callee.property.type === "Identifier" &&
|
|
44
|
+
arg.callee.property.name === "map" &&
|
|
45
|
+
arg.callee.object.type === "ArrayExpression") {
|
|
46
|
+
arg.callee.object.elements.forEach((element) => {
|
|
47
|
+
if (element && element.type === "StringLiteral") {
|
|
48
|
+
matches.push(element.value);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
// now that we got the match, we can use it to build the final URL
|
|
56
|
+
for (const match of matches) {
|
|
57
|
+
const jsFileName = match.replace("static/chunks/", "/");
|
|
58
|
+
const jsFileUrl = jsDirBase + jsFileName;
|
|
59
|
+
toReturn.push(jsFileUrl);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) { }
|
|
63
|
+
return toReturn;
|
|
64
|
+
});
|
|
65
|
+
const next_promiseResolve = (urls) => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
+
console.log(chalk.cyan("[i] Check for Promise.all pattern"));
|
|
67
|
+
let toReturn = [];
|
|
68
|
+
// go through all the URLs, and find which which one has `static/chunks/` in it
|
|
69
|
+
let jsDirBase = null;
|
|
70
|
+
for (const url of urls) {
|
|
71
|
+
if (url.includes("static/chunks/")) {
|
|
72
|
+
jsDirBase = url.split("/").slice(0, -1).join("/");
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const url of urls) {
|
|
77
|
+
const result = yield next_promiseResolveWorker(url, jsDirBase);
|
|
78
|
+
toReturn.push(...result);
|
|
79
|
+
// add the URL to the crawled URL
|
|
80
|
+
addCrawledUrl(url);
|
|
81
|
+
}
|
|
82
|
+
return toReturn;
|
|
83
|
+
});
|
|
84
|
+
export default next_promiseResolve;
|
|
85
|
+
//# sourceMappingURL=next_promiseResolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next_promiseResolve.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_promiseResolve.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAEnC,MAAM,yBAAyB,GAAG,CAAO,GAAW,EAAE,SAAiB,EAAqB,EAAE;IAC1F,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;YAC3B,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;YAC9B,aAAa,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,EAAE;YACV,cAAc,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAEtB,gDAAgD;gBAChD,IACI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;oBACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;oBACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EACrC,CAAC;oBACC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,IACI,GAAG;wBACH,GAAG,CAAC,IAAI,KAAK,gBAAgB;wBAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;wBACtC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;wBACzC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK;wBAClC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAC9C,CAAC;wBACC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;4BAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gCAC9C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BAChC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;QAEH,kEAAkE;QAClE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;YAEzC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IAEd,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAO,IAAc,EAAE,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAE7D,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,+EAA+E;IAC/E,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM;QACV,CAAC;IACL,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE,SAAU,CAAC,CAAC;QAChE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzB,iCAAiC;QACjC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 next_getJSScript from "./next_GetJSScript.js";
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
const next_scriptTagsSubsequentRequests = (url, endpointsFile) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
console.log(chalk.cyan("[i] Getting JS files from subsequent requests (script tags)"));
|
|
15
|
+
let endpoints = JSON.parse(fs.readFileSync(endpointsFile, "utf8")).paths;
|
|
16
|
+
endpoints.push("/");
|
|
17
|
+
// Content-entropy dedup: fetch each endpoint, compute a fingerprint from its
|
|
18
|
+
// script tags, and skip variants whose fingerprint has already been seen.
|
|
19
|
+
// This handles same-path URLs with different query params — if they load the
|
|
20
|
+
// same scripts they are treated as identical; if they load different scripts
|
|
21
|
+
// they are both included.
|
|
22
|
+
const seenFingerprints = new Set();
|
|
23
|
+
let jsUrls = [];
|
|
24
|
+
for (const endpoint of endpoints) {
|
|
25
|
+
// skip anything that isn't a valid relative path or absolute URL
|
|
26
|
+
if (!/^(\/|https?:\/\/)/.test(endpoint))
|
|
27
|
+
continue;
|
|
28
|
+
let reqUrl;
|
|
29
|
+
try {
|
|
30
|
+
reqUrl = new URL(endpoint, url).href;
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const scripts = yield next_getJSScript(reqUrl);
|
|
36
|
+
const fp = [...new Set(scripts)].sort().join(",");
|
|
37
|
+
if (fp && seenFingerprints.has(fp))
|
|
38
|
+
continue;
|
|
39
|
+
if (fp)
|
|
40
|
+
seenFingerprints.add(fp);
|
|
41
|
+
jsUrls.push(...scripts);
|
|
42
|
+
}
|
|
43
|
+
// dedupe
|
|
44
|
+
jsUrls = [...new Set(jsUrls)];
|
|
45
|
+
if (jsUrls.length !== 0) {
|
|
46
|
+
console.log(chalk.green(`[✓] Found ${jsUrls.length} JS files from subsequent requests (script tags)`));
|
|
47
|
+
}
|
|
48
|
+
return jsUrls;
|
|
49
|
+
});
|
|
50
|
+
export default next_scriptTagsSubsequentRequests;
|
|
51
|
+
//# sourceMappingURL=next_scriptTagsSubsequentRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next_scriptTagsSubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_scriptTagsSubsequentRequests.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,iCAAiC,GAAG,CAAO,GAAW,EAAE,aAAqB,EAAE,EAAE;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAEvF,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpB,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,iEAAiE;QACjE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QAElD,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;QAAC,WAAM,CAAC;YACL,SAAS;QACb,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC7C,IAAI,EAAE;YAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS;IACT,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,kDAAkD,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,eAAe,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
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 parser from "@babel/parser";
|
|
11
|
+
import _traverse from "@babel/traverse";
|
|
12
|
+
const traverse = _traverse.default;
|
|
13
|
+
import execFunc from "../../utility/runSandboxed.js";
|
|
14
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
15
|
+
import chalk from "chalk";
|
|
16
|
+
import inquirer from "inquirer";
|
|
17
|
+
import t from "@babel/types";
|
|
18
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
19
|
+
import * as globals from "../../utility/globals.js";
|
|
20
|
+
/**
|
|
21
|
+
* Finds all the lazy loaded JS files from a given URL using a Nuxt.js specific approach.
|
|
22
|
+
* It works by first parsing the HTML of the page and then extracting all the JS files from it.
|
|
23
|
+
* Then it parses the contents of each JS file and extracts all the functions from it.
|
|
24
|
+
* Then it iterates through the functions, and finds out the one that ends with ".js"
|
|
25
|
+
* and then asks the user to verify if this is the correct function.
|
|
26
|
+
* If the user verifies, it proceeds to execute the function with all possible numbers
|
|
27
|
+
* and then resolves the output to absolute URLs pointing to JavaScript files found in the page.
|
|
28
|
+
* @param {string} url - The URL of the webpage to fetch and parse.
|
|
29
|
+
* @returns {Promise<string[] | any>} - A promise that resolves to an array of absolute URLs pointing to
|
|
30
|
+
* JavaScript files found in the page, or undefined for invalid URL.
|
|
31
|
+
*/
|
|
32
|
+
const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
let filesFound = [];
|
|
34
|
+
const resp = yield makeRequest(url, {});
|
|
35
|
+
const body = yield resp.text();
|
|
36
|
+
let ast;
|
|
37
|
+
try {
|
|
38
|
+
ast = parser.parse(body, {
|
|
39
|
+
sourceType: "module",
|
|
40
|
+
plugins: ["jsx", "typescript"],
|
|
41
|
+
errorRecovery: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error(chalk.red("[!] Error parsing JS file: ", url));
|
|
46
|
+
return filesFound;
|
|
47
|
+
}
|
|
48
|
+
let functions = [];
|
|
49
|
+
traverse(ast, {
|
|
50
|
+
FunctionDeclaration(path) {
|
|
51
|
+
var _a;
|
|
52
|
+
functions.push({
|
|
53
|
+
name: ((_a = path.node.id) === null || _a === void 0 ? void 0 : _a.name) || "(anonymous)",
|
|
54
|
+
type: "FunctionDeclaration",
|
|
55
|
+
source: body.slice(path.node.start, path.node.end),
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
FunctionExpression(path) {
|
|
59
|
+
var _a;
|
|
60
|
+
functions.push({
|
|
61
|
+
name: ((_a = path.parent.id) === null || _a === void 0 ? void 0 : _a.name) || "(anonymous)",
|
|
62
|
+
type: "FunctionExpression",
|
|
63
|
+
source: body.slice(path.node.start, path.node.end),
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
ArrowFunctionExpression(path) {
|
|
67
|
+
var _a;
|
|
68
|
+
functions.push({
|
|
69
|
+
name: ((_a = path.parent.id) === null || _a === void 0 ? void 0 : _a.name) || "(anonymous)",
|
|
70
|
+
type: "ArrowFunctionExpression",
|
|
71
|
+
source: body.slice(path.node.start, path.node.end),
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
ObjectMethod(path) {
|
|
75
|
+
functions.push({
|
|
76
|
+
name: path.node.key.name,
|
|
77
|
+
type: "ObjectMethod",
|
|
78
|
+
source: body.slice(path.node.start, path.node.end),
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
ClassMethod(path) {
|
|
82
|
+
functions.push({
|
|
83
|
+
name: path.node.key.name,
|
|
84
|
+
type: "ClassMethod",
|
|
85
|
+
source: body.slice(path.node.start, path.node.end),
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
// iterate through the functions, and find out the one that ends with ".js"
|
|
90
|
+
for (const func of functions) {
|
|
91
|
+
if (func.source.match(/"\.js".{0,15}$/)) {
|
|
92
|
+
console.log(chalk.green(`[✓] Found JS chunk having the following source:`));
|
|
93
|
+
console.log(chalk.yellow(func.source));
|
|
94
|
+
let user_verified;
|
|
95
|
+
if (!globals.getYes()) {
|
|
96
|
+
const askCorrectFuncConfirmation = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
const { value } = yield inquirer.prompt([
|
|
98
|
+
{
|
|
99
|
+
type: "confirm",
|
|
100
|
+
name: "value",
|
|
101
|
+
message: "Is this the correct function?",
|
|
102
|
+
default: true,
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
return value;
|
|
106
|
+
});
|
|
107
|
+
user_verified = yield askCorrectFuncConfirmation();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
user_verified = true;
|
|
111
|
+
}
|
|
112
|
+
if (user_verified === true) {
|
|
113
|
+
console.log(chalk.cyan("[i] Proceeding with the selected function to fetch files"));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.error(chalk.red("[!] Not executing function."));
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// get the value of the unknown vars
|
|
120
|
+
// first, get the name of the unknown function
|
|
121
|
+
const unknownVarAst = parser.parse(`(${func.source})`, {
|
|
122
|
+
sourceType: "script",
|
|
123
|
+
plugins: ["jsx", "typescript"],
|
|
124
|
+
errorRecovery: true,
|
|
125
|
+
});
|
|
126
|
+
let memberExpressions = [];
|
|
127
|
+
traverse(unknownVarAst, {
|
|
128
|
+
MemberExpression(path) {
|
|
129
|
+
// Only collect identifiers like f.p (not obj["x"])
|
|
130
|
+
if (t.isIdentifier(path.node.object) &&
|
|
131
|
+
t.isIdentifier(path.node.property) &&
|
|
132
|
+
!path.node.computed // ignore obj["x"]
|
|
133
|
+
) {
|
|
134
|
+
const objName = path.node.object.name;
|
|
135
|
+
const propName = path.node.property.name;
|
|
136
|
+
memberExpressions.push(`${objName}.${propName}`);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const unknownVar = memberExpressions[0].split(".");
|
|
141
|
+
// now, resolve the value of this unknown var
|
|
142
|
+
let unknownVarValue;
|
|
143
|
+
traverse(ast, {
|
|
144
|
+
AssignmentExpression(path) {
|
|
145
|
+
const { left, right } = path.node;
|
|
146
|
+
if (t.isMemberExpression(left) &&
|
|
147
|
+
t.isIdentifier(left.object, { name: unknownVar[0] }) &&
|
|
148
|
+
t.isIdentifier(left.property, {
|
|
149
|
+
name: unknownVar[1],
|
|
150
|
+
}) &&
|
|
151
|
+
!left.computed) {
|
|
152
|
+
if (t.isStringLiteral(right)) {
|
|
153
|
+
unknownVarValue = right.value;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// fallback to source snippet
|
|
157
|
+
unknownVarValue = func.source.slice(right.start, right.end);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
// replace the unknown var with the value
|
|
163
|
+
const funcSource = func.source.replace(new RegExp(`${unknownVar[0]}.${unknownVar[1]}`), `"${unknownVarValue}"`);
|
|
164
|
+
// continue to executing the function with all possible numbers
|
|
165
|
+
const urlBuilderFunc = `(() => (${funcSource}))()`;
|
|
166
|
+
let js_paths = [];
|
|
167
|
+
try {
|
|
168
|
+
// rather than fuzzing, grep the integers from the func code
|
|
169
|
+
const integers = funcSource.match(/\d+/g);
|
|
170
|
+
if (integers) {
|
|
171
|
+
// Check if integers were found
|
|
172
|
+
// iterate through all integers, and get the output
|
|
173
|
+
for (const i of integers) {
|
|
174
|
+
const output = execFunc(urlBuilderFunc, parseInt(i));
|
|
175
|
+
if (output.includes("undefined")) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
js_paths.push(output);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
console.error(chalk.red("[!] Error executing function: ", error));
|
|
186
|
+
}
|
|
187
|
+
if (js_paths.length > 0) {
|
|
188
|
+
// iterate through the files, and resolve them
|
|
189
|
+
for (const js_path of js_paths) {
|
|
190
|
+
const resolvedPath = yield resolvePath(url, js_path);
|
|
191
|
+
filesFound.push(resolvedPath);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (filesFound.length > 0) {
|
|
197
|
+
console.log(chalk.green(`[✓] Found ${filesFound.length} JS chunks`));
|
|
198
|
+
}
|
|
199
|
+
return filesFound;
|
|
200
|
+
});
|
|
201
|
+
export default nuxt_astParse;
|
|
202
|
+
//# sourceMappingURL=nuxt_astParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt_astParse.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_astParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
12
|
+
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
13
|
+
import * as cheerio from "cheerio";
|
|
14
|
+
/**
|
|
15
|
+
* Finds all the lazy loaded JavaScript files from a webpage by parsing the page source.
|
|
16
|
+
* It looks for all `<link>` tags with `as="script"` attribute and `<script>` tags with `src` attribute.
|
|
17
|
+
* It then resolves the relative URLs to absolute URLs and returns an array of all the JS files found.
|
|
18
|
+
*
|
|
19
|
+
* @param {string} url - The URL of the webpage to fetch and parse.
|
|
20
|
+
* @returns {Promise<string[]>} - A promise that resolves to an array of absolute URLs pointing to JavaScript files found in the page.
|
|
21
|
+
*/
|
|
22
|
+
const nuxt_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
console.log(chalk.cyan("[i] Analyzing page source"));
|
|
24
|
+
// get the page source
|
|
25
|
+
const res = yield makeRequest(url, {});
|
|
26
|
+
const pageSource = yield res.text();
|
|
27
|
+
// cheerio to parse the page source
|
|
28
|
+
const $ = cheerio.load(pageSource);
|
|
29
|
+
// find all link tags
|
|
30
|
+
const linkTags = $("link");
|
|
31
|
+
// go through them, and find the ones which have `as=script` attr
|
|
32
|
+
for (const linkTag of linkTags) {
|
|
33
|
+
const asAttr = $(linkTag).attr("as");
|
|
34
|
+
if (asAttr === "script") {
|
|
35
|
+
const hrefAttr = $(linkTag).attr("href");
|
|
36
|
+
if (hrefAttr) {
|
|
37
|
+
// see if it starts with /_nuxt
|
|
38
|
+
if (hrefAttr.startsWith("/_nuxt")) {
|
|
39
|
+
// get the URL root, and append the hrefAttr to it
|
|
40
|
+
const urlRoot = new URL(url).origin;
|
|
41
|
+
pushToJsUrls(urlRoot + hrefAttr);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// now, search all the script tags
|
|
47
|
+
const scriptTags = $("script");
|
|
48
|
+
for (const scriptTag of scriptTags) {
|
|
49
|
+
const src = $(scriptTag).attr("src");
|
|
50
|
+
if (src !== undefined && src.match(/(https:\/\/[a-zA-Z0-9_\_\.]+\/.+\.js\??.*|\/.+\.js\??.*)/)) {
|
|
51
|
+
if (src.startsWith("http")) {
|
|
52
|
+
if (!getJsUrls().includes(src)) {
|
|
53
|
+
pushToJsUrls(src);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// if the src starts with /, like `/static/js/a.js` find the absolute URL
|
|
57
|
+
else if (src.startsWith("/")) {
|
|
58
|
+
const absoluteUrl = new URL(url).origin + src;
|
|
59
|
+
if (!getJsUrls().includes(absoluteUrl)) {
|
|
60
|
+
pushToJsUrls(absoluteUrl);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (src.match(/^[^/]/)) {
|
|
64
|
+
// if the src is a relative URL, like `static/js/a.js` find the absolute URL
|
|
65
|
+
// Get directory URL (origin + path without filename)
|
|
66
|
+
const pathParts = new URL(url).pathname.split("/");
|
|
67
|
+
pathParts.pop(); // remove the filename from the path
|
|
68
|
+
const directory = new URL(url).origin + pathParts.join("/") + "/";
|
|
69
|
+
if (!getJsUrls().includes(directory + src)) {
|
|
70
|
+
pushToJsUrls(directory + src);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
console.log(chalk.green(`[✓] Found ${getJsUrls().length} JS files from the page source`));
|
|
79
|
+
return getJsUrls();
|
|
80
|
+
});
|
|
81
|
+
export default nuxt_getFromPageSource;
|
|
82
|
+
//# sourceMappingURL=nuxt_getFromPageSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_getFromPageSource.ts"],"names":[],"mappings":"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"}
|