@js-recon/js-recon 1.4.3 → 2.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-sync/sync.sh +1 -1
- package/.github/workflows/build-and-prettify.yaml +55 -25
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/exploit-smoke-test.yaml +160 -0
- package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
- package/.github/workflows/plumber.yml +20 -0
- package/.github/workflows/promote-js-recon.yml +5 -3
- package/.github/workflows/publish-js-recon.yml +6 -1
- package/.github/workflows/rules-smoke-test.yaml +15 -7
- package/.nvmrc +1 -0
- package/.plumber.yaml +151 -0
- package/CHANGELOG.md +54 -0
- package/CONTRIBUTING.md +32 -0
- package/Dockerfile +1 -0
- package/README.md +55 -2
- package/SECURITY.md +1 -1
- package/build/analyze/engine/astEngine.js +10 -9
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/csMastSEngine.js +6 -6
- package/build/analyze/engine/csMastSEngine.js.map +1 -1
- package/build/analyze/engine/index.js +1 -1
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/engine/requestEngine.js +6 -6
- package/build/analyze/engine/requestEngine.js.map +1 -1
- package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
- package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/initRules.js +42 -24
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/outputHelper.js +3 -3
- package/build/analyze/helpers/outputHelper.js.map +1 -1
- package/build/analyze/helpers/schemas.js +1 -0
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +9 -5
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +26 -16
- package/build/analyze/index.js.map +1 -1
- package/build/cliProgram.js +710 -0
- package/build/cliProgram.js.map +1 -0
- package/build/completion/index.js +245 -339
- package/build/completion/index.js.map +1 -1
- package/build/completion/introspect.js +17 -0
- package/build/completion/introspect.js.map +1 -0
- package/build/config/applicationConfig.js +494 -0
- package/build/config/applicationConfig.js.map +1 -0
- package/build/cs_mast/index.js +18 -17
- package/build/cs_mast/index.js.map +1 -1
- package/build/endpoints/gen_report/gen_json.js +2 -2
- package/build/endpoints/gen_report/gen_json.js.map +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
- package/build/endpoints/index.js +12 -12
- package/build/endpoints/index.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +4 -4
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/exploit/angular/cve-2026-68945.js +61 -0
- package/build/exploit/angular/cve-2026-68945.js.map +1 -0
- package/build/exploit/index.js +60 -0
- package/build/exploit/index.js.map +1 -0
- package/build/exploit/next/cve-2025-29927.js +65 -0
- package/build/exploit/next/cve-2025-29927.js.map +1 -0
- package/build/exploit/next/cve-2026-64645.js +51 -0
- package/build/exploit/next/cve-2026-64645.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71315.js +47 -0
- package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71320.js +114 -0
- package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
- package/build/exploit/react/cve-2025-55182.js +116 -0
- package/build/exploit/react/cve-2025-55182.js.map +1 -0
- package/build/exploit/registry/cveRegistry.js +115 -0
- package/build/exploit/registry/cveRegistry.js.map +1 -0
- package/build/exploit/types.js +2 -0
- package/build/exploit/types.js.map +1 -0
- package/build/exploit/utility/compareResponses.js +29 -0
- package/build/exploit/utility/compareResponses.js.map +1 -0
- package/build/exploit/utility/outputHelper.js +22 -0
- package/build/exploit/utility/outputHelper.js.map +1 -0
- package/build/exploit/utility/rawRequest.js +54 -0
- package/build/exploit/utility/rawRequest.js.map +1 -0
- package/build/exploit/utility/sandboxRce.js +49 -0
- package/build/exploit/utility/sandboxRce.js.map +1 -0
- package/build/exploit/utility/toEngineOutput.js +28 -0
- package/build/exploit/utility/toEngineOutput.js.map +1 -0
- package/build/exploit/utility/wsClient.js +78 -0
- package/build/exploit/utility/wsClient.js.map +1 -0
- package/build/exploit/vite/cve-2025-30208.js +44 -0
- package/build/exploit/vite/cve-2025-30208.js.map +1 -0
- package/build/exploit/vite/cve-2026-39363.js +60 -0
- package/build/exploit/vite/cve-2026-39363.js.map +1 -0
- package/build/fingerprint/index.js +11 -21
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +16 -555
- package/build/index.js.map +1 -1
- package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +51 -40
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +154 -50
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +113 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -0
- package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
- package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
- package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
- package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_resolveScope.js +61 -0
- package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/globals.js +35 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +311 -175
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +2 -0
- package/build/lazyLoad/methodFilter.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +39 -14
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +21 -20
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +100 -99
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
- package/build/lazyLoad/next_js/next_buildId.js +2 -2
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/next_js/next_routerStateForge.js +341 -0
- package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
- package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/outputPath.js +92 -0
- package/build/lazyLoad/outputPath.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +15 -5
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_getScriptTags.js +11 -6
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +12 -203
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/researchUtils.js +15 -0
- package/build/lazyLoad/researchUtils.js.map +1 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +106 -60
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +10 -5
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +20 -17
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +70 -46
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +3 -2
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +3 -2
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +6 -5
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +10 -21
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +5 -4
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
- package/build/load/index.js +8 -7
- package/build/load/index.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +6 -6
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +6 -6
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/index.js +17 -17
- package/build/map/index.js.map +1 -1
- package/build/map/interactive-mode/commandHandler.js +278 -0
- package/build/map/interactive-mode/commandHandler.js.map +1 -0
- package/build/map/interactive-mode/commandHelpers.js +189 -0
- package/build/map/interactive-mode/commandHelpers.js.map +1 -0
- package/build/map/interactive-mode/esqueryGen.js.map +1 -0
- package/build/map/interactive-mode/helpMenu.js +11 -0
- package/build/map/interactive-mode/helpMenu.js.map +1 -0
- package/build/map/interactive-mode/inputPatch.js.map +1 -0
- package/build/map/interactive-mode/interactive.js +71 -0
- package/build/map/interactive-mode/interactive.js.map +1 -0
- package/build/map/interactive-mode/keybindings.js.map +1 -0
- package/build/map/interactive-mode/printer.js.map +1 -0
- package/build/map/interactive-mode/ui.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +5 -5
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getExports.js +4 -4
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +10 -10
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +8 -8
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +27 -16
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive.js +3 -65
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +6 -6
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +23 -23
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +10 -10
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +4 -4
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +8 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +21 -14
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/svelte_js/interactive.js +3 -54
- package/build/map/svelte_js/interactive.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +23 -16
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +3 -63
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +1 -1
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +12 -12
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +11 -11
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/mcp/chatOneShot.js +7 -7
- package/build/mcp/chatOneShot.js.map +1 -1
- package/build/mcp/claudeCodeCreds.js +5 -5
- package/build/mcp/claudeCodeCreds.js.map +1 -1
- package/build/mcp/cli.js +36 -35
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/config.js +4 -4
- package/build/mcp/config.js.map +1 -1
- package/build/mcp/index.js +7 -7
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/mcpServer.js +3 -2
- package/build/mcp/mcpServer.js.map +1 -1
- package/build/mcp/skills.js +1 -0
- package/build/mcp/skills.js.map +1 -1
- package/build/mcp/tools.js +5 -4
- package/build/mcp/tools.js.map +1 -1
- package/build/proxy/checkFeasibility.js +8 -4
- package/build/proxy/checkFeasibility.js.map +1 -1
- package/build/proxy/checkFireWallBlocking.js +23 -13
- package/build/proxy/checkFireWallBlocking.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +205 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -0
- package/build/proxy/genReq.js +434 -127
- package/build/proxy/genReq.js.map +1 -1
- package/build/proxy/index.js +3 -3
- package/build/proxy/index.js.map +1 -1
- package/build/proxy/oxylabsFallback.js +110 -0
- package/build/proxy/oxylabsFallback.js.map +1 -0
- package/build/proxy/proxyFeasibilityRequest.js +11 -9
- package/build/proxy/proxyFeasibilityRequest.js.map +1 -1
- package/build/refactor/index.js +83 -79
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/index.js +69 -26
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +11 -4
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/next/validator.js +7 -7
- package/build/refactor/next/validator.js.map +1 -1
- package/build/refactor/react/index.js +13 -13
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/validator.js +7 -7
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +3 -3
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/remote/hf-client.js +1 -0
- package/build/refactor/remote/hf-client.js.map +1 -1
- package/build/refactor/remote/version-detect.js +12 -12
- package/build/refactor/remote/version-detect.js.map +1 -1
- package/build/refactor/vue/index.js +6 -6
- package/build/refactor/vue/index.js.map +1 -1
- package/build/refactor/vue/vite.js +6 -6
- package/build/refactor/vue/vite.js.map +1 -1
- package/build/report/index.js +30 -8
- package/build/report/index.js.map +1 -1
- package/build/report/swaggerJacker.js +63 -0
- package/build/report/swaggerJacker.js.map +1 -0
- package/build/report/utility/genHtml.js +7 -7
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/report/utility/populateDb/populateEndpoints.js +3 -3
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedJson.js +2 -2
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
- package/build/run/bundler-detect.js +45 -9
- package/build/run/bundler-detect.js.map +1 -1
- package/build/run/cancellableStep.js +27 -0
- package/build/run/cancellableStep.js.map +1 -0
- package/build/run/dashboard/dashboardHtml.js +150 -0
- package/build/run/dashboard/dashboardHtml.js.map +1 -0
- package/build/run/dashboard/fsBrowser.js +43 -0
- package/build/run/dashboard/fsBrowser.js.map +1 -0
- package/build/run/dashboard/server.js +123 -0
- package/build/run/dashboard/server.js.map +1 -0
- package/build/run/dashboard/state.js +97 -0
- package/build/run/dashboard/state.js.map +1 -0
- package/build/run/index.js +239 -204
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +18 -0
- package/build/run/interruptHandler.js.map +1 -1
- package/build/run/outputDirectory.js +377 -0
- package/build/run/outputDirectory.js.map +1 -0
- package/build/sourcemaps/index.js +116 -29
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +38 -28
- package/build/strings/index.js.map +1 -1
- package/build/strings/openapi.js +4 -4
- package/build/strings/openapi.js.map +1 -1
- package/build/strings/permutate.js +4 -4
- package/build/strings/permutate.js.map +1 -1
- package/build/strings/secrets.js +1 -0
- package/build/strings/secrets.js.map +1 -1
- package/build/strings/trufflehog.js +66 -19
- package/build/strings/trufflehog.js.map +1 -1
- package/build/strings/trufflehogConfig.js +36 -0
- package/build/strings/trufflehogConfig.js.map +1 -0
- package/build/strings/trufflehogDownload.js +115 -0
- package/build/strings/trufflehogDownload.js.map +1 -0
- package/build/utility/ai.js +33 -4
- package/build/utility/ai.js.map +1 -1
- package/build/utility/banner.js +4 -3
- package/build/utility/banner.js.map +1 -1
- package/build/utility/configureSandbox.js +2 -2
- package/build/utility/configureSandbox.js.map +1 -1
- package/build/utility/downloadProgress.js +99 -0
- package/build/utility/downloadProgress.js.map +1 -0
- package/build/utility/globals.js +19 -11
- package/build/utility/globals.js.map +1 -1
- package/build/utility/heap.js +2 -1
- package/build/utility/heap.js.map +1 -1
- package/build/utility/makeReq.js +490 -257
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +2 -2
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/printMsg.js +53 -0
- package/build/utility/printMsg.js.map +1 -0
- package/build/utility/progressLog.js +68 -7
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/resolvePath.js +2 -1
- package/build/utility/resolvePath.js.map +1 -1
- package/build/utility/ruleVersionMap.js +73 -0
- package/build/utility/ruleVersionMap.js.map +1 -0
- package/build/utility/targetInputs.js +177 -0
- package/build/utility/targetInputs.js.map +1 -0
- package/build/utility/urlUtils.js +37 -1
- package/build/utility/urlUtils.js.map +1 -1
- package/config.dist.yaml +251 -0
- package/contributing/testing.md +106 -0
- package/eslint.config.js +24 -0
- package/package.json +22 -5
- package/scripts/exploit-smoke-test.js +82 -0
- package/scripts/framework-detect-smoke-test.js +64 -0
- package/scripts/postinstall-completion.mjs +40 -0
- package/scripts/smoke-test.js +12 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
- package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
- package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
|
@@ -1,30 +1,77 @@
|
|
|
1
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
2
10
|
import { execSync, spawn } from "child_process";
|
|
3
|
-
|
|
11
|
+
import inquirer from "inquirer";
|
|
12
|
+
import { printMsg, MSG } from "../utility/printMsg.js";
|
|
13
|
+
import { downloadTrufflehog } from "./trufflehogDownload.js";
|
|
14
|
+
import { isConsentGiven, giveConsent } from "./trufflehogConfig.js";
|
|
15
|
+
const isTrufflehogInstalled = (bin) => {
|
|
4
16
|
try {
|
|
5
|
-
execSync(
|
|
17
|
+
execSync(`which ${bin}`, { stdio: "pipe" });
|
|
6
18
|
return true;
|
|
7
19
|
}
|
|
8
20
|
catch (_a) {
|
|
9
21
|
return false;
|
|
10
22
|
}
|
|
11
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Resolves the trufflehog binary to invoke: an explicit `--trufflehog-bin`/PATH binary if
|
|
26
|
+
* present, otherwise auto-downloads from TruffleHog's official GitHub releases after
|
|
27
|
+
* obtaining one-time consent (interactive prompt, or `--trufflehog-accept-terms` for CI).
|
|
28
|
+
*/
|
|
29
|
+
const resolveTrufflehogBin = (trufflehogBin, acceptTerms) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
if (isTrufflehogInstalled(trufflehogBin)) {
|
|
31
|
+
return trufflehogBin;
|
|
32
|
+
}
|
|
33
|
+
if (!isConsentGiven()) {
|
|
34
|
+
if (acceptTerms) {
|
|
35
|
+
giveConsent();
|
|
36
|
+
}
|
|
37
|
+
else if (process.stdin.isTTY) {
|
|
38
|
+
printMsg(MSG.Header, "[i] --trufflehog was set but the trufflehog binary was not found.");
|
|
39
|
+
printMsg(MSG.Warn, " JS Recon can download it directly from trufflesecurity/trufflehog's official GitHub releases");
|
|
40
|
+
printMsg(MSG.Warn, " and run it as a separate process. TruffleHog is licensed under AGPL-3.0.");
|
|
41
|
+
const { confirmed } = yield inquirer.prompt([
|
|
42
|
+
{
|
|
43
|
+
type: "confirm",
|
|
44
|
+
name: "confirmed",
|
|
45
|
+
message: "Download and run TruffleHog?",
|
|
46
|
+
default: true,
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
if (!confirmed) {
|
|
50
|
+
printMsg(MSG.Err, "[!] TruffleHog download declined.");
|
|
51
|
+
printMsg(MSG.Warn, " Re-run with --trufflehog-accept-terms, or point --trufflehog-bin at an existing install.");
|
|
52
|
+
process.exit(32);
|
|
53
|
+
}
|
|
54
|
+
giveConsent();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
printMsg(MSG.Err, "[!] trufflehog not found and terms not accepted.");
|
|
58
|
+
printMsg(MSG.Warn, " Re-run with --trufflehog-accept-terms to allow auto-download in non-interactive contexts,");
|
|
59
|
+
printMsg(MSG.Warn, " or point --trufflehog-bin at an existing install.");
|
|
60
|
+
process.exit(32);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return downloadTrufflehog(process.env.HOME || "~");
|
|
64
|
+
});
|
|
12
65
|
const maskSecret = (value) => {
|
|
13
66
|
if (!value || value.length <= 4)
|
|
14
67
|
return "****";
|
|
15
68
|
return value.slice(0, 4) + "****";
|
|
16
69
|
};
|
|
17
|
-
export const runTrufflehog = (
|
|
70
|
+
export const runTrufflehog = (directory_1, ...args_1) => __awaiter(void 0, [directory_1, ...args_1], void 0, function* (directory, trufflehogBin = "trufflehog", acceptTerms = false) {
|
|
71
|
+
const resolvedBin = yield resolveTrufflehogBin(trufflehogBin, acceptTerms);
|
|
18
72
|
return new Promise((resolve) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
console.error(chalk.yellow(" Install: curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh"));
|
|
22
|
-
console.error(chalk.yellow(" Or: brew install trufflehog"));
|
|
23
|
-
console.error(chalk.yellow(" Then re-run with --trufflehog."));
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
console.log(chalk.cyan("[i] Running TruffleHog on output directory"));
|
|
27
|
-
const proc = spawn("trufflehog", ["filesystem", directory, "--json", "--no-update"], {
|
|
73
|
+
printMsg(MSG.Header, "[i] Running TruffleHog on output directory");
|
|
74
|
+
const proc = spawn(resolvedBin, ["filesystem", directory, "--json", "--no-update"], {
|
|
28
75
|
stdio: ["ignore", "pipe", "pipe"],
|
|
29
76
|
});
|
|
30
77
|
let totalFindings = 0;
|
|
@@ -42,8 +89,8 @@ export const runTrufflehog = (directory) => {
|
|
|
42
89
|
const detector = (_c = (_b = finding.DetectorName) !== null && _b !== void 0 ? _b : finding.detectorName) !== null && _c !== void 0 ? _c : "Unknown";
|
|
43
90
|
const raw = (_e = (_d = finding.Raw) !== null && _d !== void 0 ? _d : finding.raw) !== null && _e !== void 0 ? _e : "";
|
|
44
91
|
const file = (_o = (_j = (_h = (_g = (_f = finding.SourceMetadata) === null || _f === void 0 ? void 0 : _f.Data) === null || _g === void 0 ? void 0 : _g.Filesystem) === null || _h === void 0 ? void 0 : _h.file) !== null && _j !== void 0 ? _j : (_m = (_l = (_k = finding.sourceMetadata) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.filesystem) === null || _m === void 0 ? void 0 : _m.file) !== null && _o !== void 0 ? _o : "unknown file";
|
|
45
|
-
|
|
46
|
-
|
|
92
|
+
printMsg(MSG.Run, `[✓] [trufflehog] ${detector} found in ${file}`);
|
|
93
|
+
printMsg(MSG.Run, ` → ${maskSecret(raw)}`);
|
|
47
94
|
totalFindings++;
|
|
48
95
|
}
|
|
49
96
|
catch (_p) {
|
|
@@ -54,18 +101,18 @@ export const runTrufflehog = (directory) => {
|
|
|
54
101
|
proc.stderr.on("data", (chunk) => {
|
|
55
102
|
const msg = chunk.toString().trim();
|
|
56
103
|
if (msg) {
|
|
57
|
-
|
|
104
|
+
printMsg(MSG.Warn, `[trufflehog] ${msg}`);
|
|
58
105
|
}
|
|
59
106
|
});
|
|
60
107
|
proc.on("close", () => {
|
|
61
108
|
if (totalFindings === 0) {
|
|
62
|
-
|
|
109
|
+
printMsg(MSG.Warn, "[!] TruffleHog found no secrets");
|
|
63
110
|
}
|
|
64
111
|
else {
|
|
65
|
-
|
|
112
|
+
printMsg(MSG.Run, `[✓] TruffleHog found ${totalFindings} secrets`);
|
|
66
113
|
}
|
|
67
114
|
resolve();
|
|
68
115
|
});
|
|
69
116
|
});
|
|
70
|
-
};
|
|
117
|
+
});
|
|
71
118
|
//# sourceMappingURL=trufflehog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trufflehog.js","sourceRoot":"","sources":["../../src/strings/trufflehog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"trufflehog.js","sourceRoot":"","sources":["../../src/strings/trufflehog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
terms_accepted: false,
|
|
6
|
+
};
|
|
7
|
+
const CONFIG_DIR = path.join(process.env.HOME || "~", ".js-recon");
|
|
8
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "trufflehog.yaml");
|
|
9
|
+
const ensureConfigDir = () => {
|
|
10
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
11
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const loadConfig = () => {
|
|
15
|
+
ensureConfigDir();
|
|
16
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
17
|
+
return Object.assign({}, DEFAULT_CONFIG);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(CONFIG_FILE, "utf-8");
|
|
21
|
+
const parsed = YAML.parse(raw);
|
|
22
|
+
return Object.assign(Object.assign({}, DEFAULT_CONFIG), parsed);
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
25
|
+
return Object.assign({}, DEFAULT_CONFIG);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const saveConfig = (config) => {
|
|
29
|
+
ensureConfigDir();
|
|
30
|
+
fs.writeFileSync(CONFIG_FILE, YAML.stringify(config), "utf-8");
|
|
31
|
+
};
|
|
32
|
+
export const isConsentGiven = () => loadConfig().terms_accepted;
|
|
33
|
+
export const giveConsent = () => {
|
|
34
|
+
saveConfig(Object.assign(Object.assign({}, loadConfig()), { terms_accepted: true }));
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=trufflehogConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehogConfig.js","sourceRoot":"","sources":["../../src/strings/trufflehogConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AAMxB,MAAM,cAAc,GAAqB;IACrC,cAAc,EAAE,KAAK;CACxB,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,WAAW,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE7D,MAAM,eAAe,GAAG,GAAS,EAAE;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,GAAqB,EAAE;IACtC,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,yBAAY,cAAc,EAAG;IACjC,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QAC5D,uCAAY,cAAc,GAAK,MAAM,EAAG;IAC5C,CAAC;IAAC,WAAM,CAAC;QACL,yBAAY,cAAc,EAAG;IACjC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAQ,EAAE;IAClD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAS,EAAE;IAClC,UAAU,iCAAM,UAAU,EAAE,KAAE,cAAc,EAAE,IAAI,IAAG,CAAC;AAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import fs from "fs";
|
|
11
|
+
import path from "path";
|
|
12
|
+
import * as tar from "tar";
|
|
13
|
+
import { withActiveProxyDispatcher } from "../utility/makeReq.js";
|
|
14
|
+
import { printMsg, MSG } from "../utility/printMsg.js";
|
|
15
|
+
const TRUFFLEHOG_RELEASE_URL = "https://api.github.com/repos/trufflesecurity/trufflehog/releases/latest";
|
|
16
|
+
/**
|
|
17
|
+
* Maps Node's platform/arch identifiers to TruffleHog's GitHub release asset naming
|
|
18
|
+
* (e.g. `trufflehog_3.96.0_darwin_amd64.tar.gz`).
|
|
19
|
+
*
|
|
20
|
+
* @param platform - `process.platform` value
|
|
21
|
+
* @param arch - `process.arch` value
|
|
22
|
+
* @returns The `<os>_<arch>` fragment used in TruffleHog's release asset names
|
|
23
|
+
*/
|
|
24
|
+
export const resolveAssetName = (platform, arch) => {
|
|
25
|
+
const osMap = {
|
|
26
|
+
darwin: "darwin",
|
|
27
|
+
linux: "linux",
|
|
28
|
+
win32: "windows",
|
|
29
|
+
};
|
|
30
|
+
const archMap = {
|
|
31
|
+
x64: "amd64",
|
|
32
|
+
arm64: "arm64",
|
|
33
|
+
};
|
|
34
|
+
const os = osMap[platform];
|
|
35
|
+
const mappedArch = archMap[arch];
|
|
36
|
+
if (!os || !mappedArch) {
|
|
37
|
+
throw new Error(`Unsupported platform/arch for TruffleHog auto-download: ${platform}/${arch}`);
|
|
38
|
+
}
|
|
39
|
+
return `${os}_${mappedArch}`;
|
|
40
|
+
};
|
|
41
|
+
const fetchLatestTrufflehogRelease = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const response = yield fetch(TRUFFLEHOG_RELEASE_URL, options);
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`TruffleHog release lookup failed with HTTP ${response.status}`);
|
|
45
|
+
}
|
|
46
|
+
const release = (yield response.json());
|
|
47
|
+
if (typeof release !== "object" || release === null) {
|
|
48
|
+
throw new Error("TruffleHog release response was not an object");
|
|
49
|
+
}
|
|
50
|
+
const { tag_name: tagName, assets } = release;
|
|
51
|
+
if (typeof tagName !== "string" || !Array.isArray(assets)) {
|
|
52
|
+
throw new Error("TruffleHog release response is missing tag_name or assets");
|
|
53
|
+
}
|
|
54
|
+
const assetSuffix = resolveAssetName(process.platform, process.arch);
|
|
55
|
+
const asset = assets.find((a) => typeof a === "object" &&
|
|
56
|
+
a !== null &&
|
|
57
|
+
typeof a.name === "string" &&
|
|
58
|
+
a.name.includes(assetSuffix) &&
|
|
59
|
+
a.name.endsWith(".tar.gz"));
|
|
60
|
+
if (!asset || typeof asset.browser_download_url !== "string") {
|
|
61
|
+
throw new Error(`No TruffleHog release asset found for platform/arch "${assetSuffix}"`);
|
|
62
|
+
}
|
|
63
|
+
const parsedUrl = new URL(asset.browser_download_url);
|
|
64
|
+
if (parsedUrl.protocol !== "https:" ||
|
|
65
|
+
!["github.com", "objects.githubusercontent.com"].includes(parsedUrl.hostname)) {
|
|
66
|
+
throw new Error("TruffleHog release response contains an unexpected download URL");
|
|
67
|
+
}
|
|
68
|
+
return Object.freeze({ tagName, downloadUrl: parsedUrl.toString() });
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Downloads and caches the TruffleHog binary from its official GitHub releases.
|
|
72
|
+
*
|
|
73
|
+
* Fetches the latest release directly from `trufflesecurity/trufflehog` and extracts the
|
|
74
|
+
* platform-matching binary under `~/.js-recon/trufflehog/<version>/`. JS Recon never mirrors
|
|
75
|
+
* or hosts its own copy of the binary — every download resolves the asset URL from GitHub's
|
|
76
|
+
* release API at request time.
|
|
77
|
+
*
|
|
78
|
+
* @param homeDir - The user's home directory path
|
|
79
|
+
* @returns Absolute path to the cached (or freshly downloaded) trufflehog binary
|
|
80
|
+
*/
|
|
81
|
+
export const downloadTrufflehog = (homeDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
+
const trufflehogRoot = path.join(homeDir, ".js-recon", "trufflehog");
|
|
83
|
+
const binName = process.platform === "win32" ? "trufflehog.exe" : "trufflehog";
|
|
84
|
+
if (fs.existsSync(trufflehogRoot)) {
|
|
85
|
+
const cachedVersionDirs = fs.readdirSync(trufflehogRoot);
|
|
86
|
+
for (const versionDir of cachedVersionDirs) {
|
|
87
|
+
const cachedBin = path.join(trufflehogRoot, versionDir, binName);
|
|
88
|
+
if (fs.existsSync(cachedBin)) {
|
|
89
|
+
return cachedBin;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
printMsg(MSG.Header, "[i] TruffleHog not found. Downloading from GitHub...");
|
|
94
|
+
const buffer = yield withActiveProxyDispatcher((options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
+
const release = yield fetchLatestTrufflehogRelease(options);
|
|
96
|
+
const downloadResponse = yield fetch(release.downloadUrl, options);
|
|
97
|
+
if (!downloadResponse.ok) {
|
|
98
|
+
throw new Error(`Failed to download TruffleHog: ${downloadResponse.statusText}`);
|
|
99
|
+
}
|
|
100
|
+
return { buffer: Buffer.from(yield downloadResponse.arrayBuffer()), tagName: release.tagName };
|
|
101
|
+
}));
|
|
102
|
+
const version = buffer.tagName.replace(/^v/, "");
|
|
103
|
+
const extractPath = path.join(trufflehogRoot, version);
|
|
104
|
+
fs.mkdirSync(extractPath, { recursive: true });
|
|
105
|
+
const tarPath = path.join(extractPath, "trufflehog.tar.gz");
|
|
106
|
+
fs.writeFileSync(tarPath, buffer.buffer);
|
|
107
|
+
printMsg(MSG.Header, "[i] Extracting TruffleHog...");
|
|
108
|
+
yield tar.x({ file: tarPath, cwd: extractPath });
|
|
109
|
+
fs.unlinkSync(tarPath);
|
|
110
|
+
const binPath = path.join(extractPath, binName);
|
|
111
|
+
fs.chmodSync(binPath, 0o755);
|
|
112
|
+
printMsg(MSG.Run, "[✓] TruffleHog downloaded successfully.");
|
|
113
|
+
return binPath;
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=trufflehogDownload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehogDownload.js","sourceRoot":"","sources":["../../src/strings/trufflehogDownload.ts"],"names":[],"mappings":"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"}
|
package/build/utility/ai.js
CHANGED
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import OpenAI from "openai";
|
|
11
11
|
import { Ollama } from "ollama";
|
|
12
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
12
13
|
import * as globals from "./globals.js";
|
|
13
14
|
/**
|
|
14
15
|
* OpenAI client instance.
|
|
@@ -16,11 +17,11 @@ import * as globals from "./globals.js";
|
|
|
16
17
|
* @remarks
|
|
17
18
|
* This client is used to communicate with the OpenAI API.
|
|
18
19
|
* The base URL and API key are configurable via the
|
|
19
|
-
* `setAiEndpoint` and `
|
|
20
|
+
* `setAiEndpoint` and `setAiApiKey` functions.
|
|
20
21
|
*/
|
|
21
22
|
const openai_client = new OpenAI({
|
|
22
23
|
baseURL: globals.getAiEndpoint() || "https://api.openai.com/v1",
|
|
23
|
-
apiKey: globals.
|
|
24
|
+
apiKey: globals.getAiApiKey(),
|
|
24
25
|
});
|
|
25
26
|
/**
|
|
26
27
|
* Ollama client instance.
|
|
@@ -32,6 +33,16 @@ const openai_client = new OpenAI({
|
|
|
32
33
|
const ollama_client = new Ollama({
|
|
33
34
|
host: globals.getAiEndpoint() || "http://127.0.0.1:11434",
|
|
34
35
|
});
|
|
36
|
+
/**
|
|
37
|
+
* Anthropic client instance.
|
|
38
|
+
*
|
|
39
|
+
* @remarks
|
|
40
|
+
* This client is used to communicate with the Anthropic Messages API.
|
|
41
|
+
* The API key is configurable via the `setAiApiKey` function.
|
|
42
|
+
*/
|
|
43
|
+
const anthropic_client = new Anthropic({
|
|
44
|
+
apiKey: globals.getAiApiKey(),
|
|
45
|
+
});
|
|
35
46
|
/**
|
|
36
47
|
* Returns an AI client instance based on the configured provider.
|
|
37
48
|
*
|
|
@@ -46,6 +57,9 @@ const ai = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
46
57
|
if (provider === "ollama") {
|
|
47
58
|
return { client: ollama_client, model };
|
|
48
59
|
}
|
|
60
|
+
if (provider === "anthropic") {
|
|
61
|
+
return { client: anthropic_client, model };
|
|
62
|
+
}
|
|
49
63
|
throw new Error(`AI service provider "${provider}" is not supported or configured.`);
|
|
50
64
|
});
|
|
51
65
|
/**
|
|
@@ -64,7 +78,7 @@ function getCompletion(prompt_1) {
|
|
|
64
78
|
throw new Error(`AI service provider "${provider}" is not supported or configured.`);
|
|
65
79
|
}
|
|
66
80
|
if (provider === "openai") {
|
|
67
|
-
// @ts-
|
|
81
|
+
// @ts-expect-error -- openai SDK types don't yet cover the Responses API shape used here
|
|
68
82
|
const completion = yield client.responses.create({
|
|
69
83
|
input: [
|
|
70
84
|
{ role: "system", content: systemPrompt },
|
|
@@ -91,7 +105,22 @@ function getCompletion(prompt_1) {
|
|
|
91
105
|
});
|
|
92
106
|
return response.message.content || "none";
|
|
93
107
|
}
|
|
108
|
+
if (provider === "anthropic") {
|
|
109
|
+
// @ts-expect-error -- openai SDK types don't yet cover the Responses API shape used here
|
|
110
|
+
const response = yield client.messages.create({
|
|
111
|
+
model: model || "claude-haiku-4-5-20251001",
|
|
112
|
+
max_tokens: 4096,
|
|
113
|
+
system: systemPrompt,
|
|
114
|
+
messages: [{ role: "user", content: prompt }],
|
|
115
|
+
temperature: 0.1,
|
|
116
|
+
});
|
|
117
|
+
const text = response.content
|
|
118
|
+
.filter((block) => block.type === "text")
|
|
119
|
+
.map((block) => block.text)
|
|
120
|
+
.join("");
|
|
121
|
+
return text || "none";
|
|
122
|
+
}
|
|
94
123
|
});
|
|
95
124
|
}
|
|
96
|
-
export { ai, openai_client, ollama_client, getCompletion };
|
|
125
|
+
export { ai, openai_client, ollama_client, anthropic_client, getCompletion };
|
|
97
126
|
//# sourceMappingURL=ai.js.map
|
package/build/utility/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/utility/ai.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,2BAA2B;IAC/D,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/utility/ai.ts"],"names":[],"mappings":"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"}
|
package/build/utility/banner.js
CHANGED
|
@@ -14,6 +14,7 @@ import path from "path";
|
|
|
14
14
|
import https from "https";
|
|
15
15
|
import os from "os";
|
|
16
16
|
import CONFIG from "../globalConfig.js";
|
|
17
|
+
import { printMsg, MSG } from "./printMsg.js";
|
|
17
18
|
const LOGO_URL = "https://js-recon.io/img/js-recon-logo.png";
|
|
18
19
|
const CACHE_DIR = path.join(os.homedir(), ".js-recon");
|
|
19
20
|
const LOGO_CACHE = path.join(CACHE_DIR, "logo.png");
|
|
@@ -60,9 +61,9 @@ export function printBanner() {
|
|
|
60
61
|
const name = chalk.bold.hex("#00d4ff")("JS Recon");
|
|
61
62
|
const version = chalk.dim(`v${CONFIG.version}`);
|
|
62
63
|
const tagline = chalk.hex("#888888")(CONFIG.toolDesc);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
printMsg(MSG.Plain, ` ${name} ${version}`);
|
|
65
|
+
printMsg(MSG.Plain, ` ${tagline}`);
|
|
66
|
+
printMsg(MSG.Plain, "");
|
|
66
67
|
});
|
|
67
68
|
}
|
|
68
69
|
//# sourceMappingURL=banner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utility/banner.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utility/banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
1
|
import * as globalsUtil from "./globals.js";
|
|
2
|
+
import { printMsg, MSG } from "./printMsg.js";
|
|
3
3
|
/**
|
|
4
4
|
* Configures the browser sandbox based on command-line flags and environment variables.
|
|
5
5
|
* @param cmd - The commander command object.
|
|
@@ -7,7 +7,7 @@ import * as globalsUtil from "./globals.js";
|
|
|
7
7
|
const configureSandbox = (cmd) => {
|
|
8
8
|
if (process.env.IS_DOCKER === "true" || cmd.sandbox === false) {
|
|
9
9
|
globalsUtil.setDisableSandbox(true);
|
|
10
|
-
|
|
10
|
+
printMsg(MSG.Warn, `[!] Disabling browser sandbox`);
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
13
|
export default configureSandbox;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureSandbox.js","sourceRoot":"","sources":["../../src/utility/configureSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"configureSandbox.js","sourceRoot":"","sources":["../../src/utility/configureSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,EAAE;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC5D,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;IACxD,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import cliProgress from "cli-progress";
|
|
3
|
+
import { activateBarLogger, cleanupProgressResources, computeBarSize, watchBarResize } from "./progressLog.js";
|
|
4
|
+
const FORMAT_OVERHEAD = 91;
|
|
5
|
+
const renderBar = (progress, size) => {
|
|
6
|
+
const completeSize = Math.round(progress * size);
|
|
7
|
+
return "█".repeat(completeSize) + "░".repeat(size - completeSize);
|
|
8
|
+
};
|
|
9
|
+
export const formatDownloadProgress = (_options, params, payload) => {
|
|
10
|
+
const maxWidth = Math.max(1, params.maxWidth || 80);
|
|
11
|
+
// Avoid the terminal's final column: writing into it can trigger an
|
|
12
|
+
// automatic wrap and leave a stray blank line below the progress bar.
|
|
13
|
+
const renderWidth = Math.max(1, maxWidth - 1);
|
|
14
|
+
const percentage = Math.floor(params.progress * 100);
|
|
15
|
+
const label = "[i] Downloading chunks ";
|
|
16
|
+
const details = `${percentage}% | ${params.value}/${params.total} | ${payload.downloaded} saved | ${payload.failed} failed | ${payload.ignored} skipped`;
|
|
17
|
+
const barSize = renderWidth - label.length - details.length - 3;
|
|
18
|
+
if (barSize >= 8) {
|
|
19
|
+
return `${chalk.cyan(label)}[${renderBar(params.progress, barSize)}] ${details}`;
|
|
20
|
+
}
|
|
21
|
+
const compactLabel = "[i] Chunks ";
|
|
22
|
+
const compactDetails = `${params.value}/${params.total} | +${payload.downloaded} !${payload.failed} -${payload.ignored}`;
|
|
23
|
+
const compact = `${chalk.cyan(compactLabel)}${compactDetails}`;
|
|
24
|
+
if (compactLabel.length + compactDetails.length <= renderWidth)
|
|
25
|
+
return compact;
|
|
26
|
+
const minimal = `${params.value}/${params.total} +${payload.downloaded} !${payload.failed}`;
|
|
27
|
+
return minimal.slice(0, renderWidth);
|
|
28
|
+
};
|
|
29
|
+
const payloadFor = (progress) => ({
|
|
30
|
+
downloaded: progress.downloaded,
|
|
31
|
+
failed: progress.failed,
|
|
32
|
+
ignored: progress.ignored,
|
|
33
|
+
});
|
|
34
|
+
export const createDownloadProgressOptions = () => ({
|
|
35
|
+
format: formatDownloadProgress,
|
|
36
|
+
barsize: computeBarSize(FORMAT_OVERHEAD),
|
|
37
|
+
hideCursor: false,
|
|
38
|
+
clearOnComplete: true,
|
|
39
|
+
stopOnComplete: false,
|
|
40
|
+
forceRedraw: true,
|
|
41
|
+
// The formatter already budgets visible width. cli-progress's linewrap
|
|
42
|
+
// mode truncates raw strings and therefore mistakes ANSI bytes for columns.
|
|
43
|
+
linewrap: false,
|
|
44
|
+
stream: process.stdout,
|
|
45
|
+
});
|
|
46
|
+
const createDefaultMultiBar = () => new cliProgress.MultiBar(createDownloadProgressOptions(), cliProgress.Presets.shades_classic);
|
|
47
|
+
/** TTY-only renderer for the aggregate state emitted by DownloadQueue. */
|
|
48
|
+
export class DownloadProgress {
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
var _a, _b, _c;
|
|
51
|
+
this.multiBar = null;
|
|
52
|
+
this.bar = null;
|
|
53
|
+
this.stopResize = null;
|
|
54
|
+
this.releaseLogger = null;
|
|
55
|
+
this.total = 0;
|
|
56
|
+
this.disabled = false;
|
|
57
|
+
this.isTTY = (_a = options.isTTY) !== null && _a !== void 0 ? _a : Boolean(process.stdout.isTTY);
|
|
58
|
+
this.createMultiBar = (_b = options.createMultiBar) !== null && _b !== void 0 ? _b : createDefaultMultiBar;
|
|
59
|
+
this.resizeWatcher = (_c = options.watchResize) !== null && _c !== void 0 ? _c : watchBarResize;
|
|
60
|
+
}
|
|
61
|
+
update(progress) {
|
|
62
|
+
if (!this.isTTY || this.disabled || progress.total === 0)
|
|
63
|
+
return;
|
|
64
|
+
try {
|
|
65
|
+
if (!this.bar) {
|
|
66
|
+
this.multiBar = this.createMultiBar();
|
|
67
|
+
this.bar = this.multiBar.create(progress.total, progress.processed, payloadFor(progress));
|
|
68
|
+
this.total = progress.total;
|
|
69
|
+
this.stopResize = this.resizeWatcher(this.bar, FORMAT_OVERHEAD);
|
|
70
|
+
this.releaseLogger = activateBarLogger(this.multiBar);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (progress.total !== this.total) {
|
|
74
|
+
this.bar.setTotal(progress.total);
|
|
75
|
+
this.total = progress.total;
|
|
76
|
+
}
|
|
77
|
+
this.bar.update(progress.processed, payloadFor(progress));
|
|
78
|
+
}
|
|
79
|
+
catch (_a) {
|
|
80
|
+
// Rendering is observational and must never interrupt downloads.
|
|
81
|
+
this.disabled = true;
|
|
82
|
+
this.stop();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
stop() {
|
|
86
|
+
const multiBar = this.multiBar;
|
|
87
|
+
if (!multiBar)
|
|
88
|
+
return;
|
|
89
|
+
const stopResize = this.stopResize;
|
|
90
|
+
const releaseLogger = this.releaseLogger;
|
|
91
|
+
this.multiBar = null;
|
|
92
|
+
this.bar = null;
|
|
93
|
+
this.stopResize = null;
|
|
94
|
+
this.releaseLogger = null;
|
|
95
|
+
cleanupProgressResources(() => stopResize === null || stopResize === void 0 ? void 0 : stopResize(), () => { var _a; return (_a = multiBar.update) === null || _a === void 0 ? void 0 : _a.call(multiBar); }, () => multiBar.stop(), () => releaseLogger === null || releaseLogger === void 0 ? void 0 : releaseLogger());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export default DownloadProgress;
|
|
99
|
+
//# sourceMappingURL=downloadProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadProgress.js","sourceRoot":"","sources":["../../src/utility/downloadProgress.ts"],"names":[],"mappings":"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"}
|
package/build/utility/globals.js
CHANGED
|
@@ -208,11 +208,11 @@ export const getRequestTimeout = () => {
|
|
|
208
208
|
// AI Configuration
|
|
209
209
|
/** Array of AI analysis options */
|
|
210
210
|
export let ai = [];
|
|
211
|
-
/**
|
|
212
|
-
export let
|
|
211
|
+
/** API key for the configured AI provider */
|
|
212
|
+
export let aiApiKey = "";
|
|
213
213
|
/** AI model to use for analysis */
|
|
214
214
|
export let aiModel = "gpt-4o-mini";
|
|
215
|
-
/** AI service provider (openai, ollama, etc.) */
|
|
215
|
+
/** AI service provider (openai, ollama, anthropic, etc.) */
|
|
216
216
|
export let aiServiceProvider = "openai";
|
|
217
217
|
/** Number of AI analysis threads */
|
|
218
218
|
export let aiThreads = 5;
|
|
@@ -226,11 +226,11 @@ export const setAi = (value) => {
|
|
|
226
226
|
ai = value;
|
|
227
227
|
};
|
|
228
228
|
/**
|
|
229
|
-
* Sets the
|
|
230
|
-
* @param value -
|
|
229
|
+
* Sets the API key for the configured AI provider.
|
|
230
|
+
* @param value - AI provider API key
|
|
231
231
|
*/
|
|
232
|
-
export const
|
|
233
|
-
|
|
232
|
+
export const setAiApiKey = (value) => {
|
|
233
|
+
aiApiKey = value;
|
|
234
234
|
};
|
|
235
235
|
/**
|
|
236
236
|
* Gets the current AI analysis options.
|
|
@@ -240,11 +240,11 @@ export const getAi = () => {
|
|
|
240
240
|
return ai;
|
|
241
241
|
};
|
|
242
242
|
/**
|
|
243
|
-
* Gets the
|
|
244
|
-
* @returns
|
|
243
|
+
* Gets the API key for the configured AI provider.
|
|
244
|
+
* @returns AI provider API key
|
|
245
245
|
*/
|
|
246
|
-
export const
|
|
247
|
-
return
|
|
246
|
+
export const getAiApiKey = () => {
|
|
247
|
+
return aiApiKey;
|
|
248
248
|
};
|
|
249
249
|
/**
|
|
250
250
|
* Gets the current AI model.
|
|
@@ -310,6 +310,14 @@ export const setQuiet = (value) => {
|
|
|
310
310
|
export const getQuiet = () => {
|
|
311
311
|
return quiet;
|
|
312
312
|
};
|
|
313
|
+
// Verbose mode — shows detailed file write error messages
|
|
314
|
+
export let verbose = false;
|
|
315
|
+
export const setVerbose = (value) => {
|
|
316
|
+
verbose = value;
|
|
317
|
+
};
|
|
318
|
+
export const getVerbose = () => {
|
|
319
|
+
return verbose;
|
|
320
|
+
};
|
|
313
321
|
// Technology Detection
|
|
314
322
|
/** Detected technology stack */
|
|
315
323
|
export let tech = "";
|