@js-recon/js-recon 1.4.4 → 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.
Files changed (424) hide show
  1. package/.claude-sync/sync.sh +1 -1
  2. package/.github/workflows/build-and-prettify.yaml +49 -19
  3. package/.github/workflows/codeql.yml +33 -0
  4. package/.github/workflows/exploit-smoke-test.yaml +160 -0
  5. package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
  6. package/.github/workflows/plumber.yml +20 -0
  7. package/.github/workflows/promote-js-recon.yml +5 -3
  8. package/.github/workflows/publish-js-recon.yml +6 -1
  9. package/.github/workflows/rules-smoke-test.yaml +13 -5
  10. package/.nvmrc +1 -0
  11. package/.plumber.yaml +151 -0
  12. package/CHANGELOG.md +35 -0
  13. package/CONTRIBUTING.md +32 -0
  14. package/Dockerfile +1 -0
  15. package/README.md +3 -2
  16. package/SECURITY.md +1 -1
  17. package/build/analyze/engine/astEngine.js +10 -9
  18. package/build/analyze/engine/astEngine.js.map +1 -1
  19. package/build/analyze/engine/csMastSEngine.js +6 -6
  20. package/build/analyze/engine/csMastSEngine.js.map +1 -1
  21. package/build/analyze/engine/index.js +1 -1
  22. package/build/analyze/engine/index.js.map +1 -1
  23. package/build/analyze/engine/requestEngine.js +6 -6
  24. package/build/analyze/engine/requestEngine.js.map +1 -1
  25. package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
  26. package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
  27. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
  28. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  29. package/build/analyze/helpers/initRules.js +9 -9
  30. package/build/analyze/helpers/initRules.js.map +1 -1
  31. package/build/analyze/helpers/outputHelper.js +3 -3
  32. package/build/analyze/helpers/outputHelper.js.map +1 -1
  33. package/build/analyze/helpers/schemas.js +1 -0
  34. package/build/analyze/helpers/schemas.js.map +1 -1
  35. package/build/analyze/helpers/validate.js +9 -5
  36. package/build/analyze/helpers/validate.js.map +1 -1
  37. package/build/analyze/index.js +26 -16
  38. package/build/analyze/index.js.map +1 -1
  39. package/build/cliProgram.js +710 -0
  40. package/build/cliProgram.js.map +1 -0
  41. package/build/completion/index.js +247 -382
  42. package/build/completion/index.js.map +1 -1
  43. package/build/completion/introspect.js +17 -0
  44. package/build/completion/introspect.js.map +1 -0
  45. package/build/config/applicationConfig.js +3 -2
  46. package/build/config/applicationConfig.js.map +1 -1
  47. package/build/cs_mast/index.js +18 -17
  48. package/build/cs_mast/index.js.map +1 -1
  49. package/build/endpoints/gen_report/gen_json.js +2 -2
  50. package/build/endpoints/gen_report/gen_json.js.map +1 -1
  51. package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
  52. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
  53. package/build/endpoints/index.js +12 -12
  54. package/build/endpoints/index.js.map +1 -1
  55. package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
  56. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  57. package/build/endpoints/next_js/client_jsonParse.js +4 -4
  58. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  59. package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
  60. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  61. package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
  62. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  63. package/build/exploit/angular/cve-2026-68945.js +61 -0
  64. package/build/exploit/angular/cve-2026-68945.js.map +1 -0
  65. package/build/exploit/index.js +60 -0
  66. package/build/exploit/index.js.map +1 -0
  67. package/build/exploit/next/cve-2025-29927.js +65 -0
  68. package/build/exploit/next/cve-2025-29927.js.map +1 -0
  69. package/build/exploit/next/cve-2026-64645.js +51 -0
  70. package/build/exploit/next/cve-2026-64645.js.map +1 -0
  71. package/build/exploit/nuxt/cve-2026-71315.js +47 -0
  72. package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
  73. package/build/exploit/nuxt/cve-2026-71320.js +114 -0
  74. package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
  75. package/build/exploit/react/cve-2025-55182.js +116 -0
  76. package/build/exploit/react/cve-2025-55182.js.map +1 -0
  77. package/build/exploit/registry/cveRegistry.js +115 -0
  78. package/build/exploit/registry/cveRegistry.js.map +1 -0
  79. package/build/exploit/types.js +2 -0
  80. package/build/exploit/types.js.map +1 -0
  81. package/build/exploit/utility/compareResponses.js +29 -0
  82. package/build/exploit/utility/compareResponses.js.map +1 -0
  83. package/build/exploit/utility/outputHelper.js +22 -0
  84. package/build/exploit/utility/outputHelper.js.map +1 -0
  85. package/build/exploit/utility/rawRequest.js +54 -0
  86. package/build/exploit/utility/rawRequest.js.map +1 -0
  87. package/build/exploit/utility/sandboxRce.js +49 -0
  88. package/build/exploit/utility/sandboxRce.js.map +1 -0
  89. package/build/exploit/utility/toEngineOutput.js +28 -0
  90. package/build/exploit/utility/toEngineOutput.js.map +1 -0
  91. package/build/exploit/utility/wsClient.js +78 -0
  92. package/build/exploit/utility/wsClient.js.map +1 -0
  93. package/build/exploit/vite/cve-2025-30208.js +44 -0
  94. package/build/exploit/vite/cve-2025-30208.js.map +1 -0
  95. package/build/exploit/vite/cve-2026-39363.js +60 -0
  96. package/build/exploit/vite/cve-2026-39363.js.map +1 -0
  97. package/build/fingerprint/index.js +3 -2
  98. package/build/fingerprint/index.js.map +1 -1
  99. package/build/globalConfig.js +2 -2
  100. package/build/globalConfig.js.map +1 -1
  101. package/build/index.js +5 -596
  102. package/build/index.js.map +1 -1
  103. package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
  104. package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
  105. package/build/lazyLoad/downloadFilesUtil.js +14 -11
  106. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  107. package/build/lazyLoad/downloadQueue.js +5 -1
  108. package/build/lazyLoad/downloadQueue.js.map +1 -1
  109. package/build/lazyLoad/downloadResponse.js +1 -0
  110. package/build/lazyLoad/downloadResponse.js.map +1 -1
  111. package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
  112. package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
  113. package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
  114. package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
  115. package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
  116. package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
  117. package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
  118. package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
  119. package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
  120. package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
  121. package/build/lazyLoad/generic/generic_resolveScope.js +61 -0
  122. package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
  123. package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
  124. package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
  125. package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
  126. package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
  127. package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
  128. package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
  129. package/build/lazyLoad/globals.js +31 -0
  130. package/build/lazyLoad/globals.js.map +1 -1
  131. package/build/lazyLoad/index.js +129 -66
  132. package/build/lazyLoad/index.js.map +1 -1
  133. package/build/lazyLoad/methodFilter.js +2 -0
  134. package/build/lazyLoad/methodFilter.js.map +1 -1
  135. package/build/lazyLoad/next_js/NextJsCrawler.js +38 -14
  136. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  137. package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
  138. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
  139. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
  140. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  141. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +13 -11
  142. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  143. package/build/lazyLoad/next_js/next_SubsequentRequests.js +7 -6
  144. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  145. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
  146. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
  147. package/build/lazyLoad/next_js/next_buildId.js +2 -2
  148. package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
  149. package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
  150. package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
  151. package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
  152. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  153. package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
  154. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  155. package/build/lazyLoad/next_js/next_routerStateForge.js +341 -0
  156. package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
  157. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
  158. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
  159. package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
  160. package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
  161. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
  162. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  163. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
  164. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
  165. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
  166. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
  167. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +2 -2
  168. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  169. package/build/lazyLoad/react/react_webpackChunkPaths.js +10 -202
  170. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  171. package/build/lazyLoad/researchUtils.js +15 -0
  172. package/build/lazyLoad/researchUtils.js.map +1 -0
  173. package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
  174. package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
  175. package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
  176. package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
  177. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
  178. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
  179. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
  180. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
  181. package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
  182. package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
  183. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
  184. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
  185. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -2
  186. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  187. package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
  188. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
  189. package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
  190. package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
  191. package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
  192. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
  193. package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
  194. package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
  195. package/build/lazyLoad/techDetect/index.js +13 -1
  196. package/build/lazyLoad/techDetect/index.js.map +1 -1
  197. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -2
  198. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  199. package/build/lazyLoad/vue/vue_discoverJsFiles.js +12 -10
  200. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  201. package/build/lazyLoad/vue/vue_getClientSidePaths.js +1 -1
  202. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  203. package/build/lazyLoad/vue/vue_pageSrc.js +1 -1
  204. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
  205. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +2 -2
  206. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
  207. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
  208. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  209. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +3 -3
  210. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
  211. package/build/load/index.js +8 -7
  212. package/build/load/index.js.map +1 -1
  213. package/build/map/angular_js/getAngularConnections.js +6 -6
  214. package/build/map/angular_js/getAngularConnections.js.map +1 -1
  215. package/build/map/graphql/resolveGraphql.js +6 -6
  216. package/build/map/graphql/resolveGraphql.js.map +1 -1
  217. package/build/map/index.js +17 -17
  218. package/build/map/index.js.map +1 -1
  219. package/build/map/interactive-mode/commandHandler.js +278 -0
  220. package/build/map/interactive-mode/commandHandler.js.map +1 -0
  221. package/build/map/interactive-mode/commandHelpers.js +189 -0
  222. package/build/map/interactive-mode/commandHelpers.js.map +1 -0
  223. package/build/map/interactive-mode/esqueryGen.js.map +1 -0
  224. package/build/map/interactive-mode/helpMenu.js +11 -0
  225. package/build/map/interactive-mode/helpMenu.js.map +1 -0
  226. package/build/map/interactive-mode/inputPatch.js.map +1 -0
  227. package/build/map/interactive-mode/interactive.js +71 -0
  228. package/build/map/interactive-mode/interactive.js.map +1 -0
  229. package/build/map/interactive-mode/keybindings.js.map +1 -0
  230. package/build/map/interactive-mode/printer.js.map +1 -0
  231. package/build/map/interactive-mode/ui.js.map +1 -0
  232. package/build/map/next_js/getAxiosInstances.js +5 -5
  233. package/build/map/next_js/getAxiosInstances.js.map +1 -1
  234. package/build/map/next_js/getExports.js +4 -4
  235. package/build/map/next_js/getExports.js.map +1 -1
  236. package/build/map/next_js/getFetchInstances.js +10 -10
  237. package/build/map/next_js/getFetchInstances.js.map +1 -1
  238. package/build/map/next_js/getTurbopackConnections.js +8 -8
  239. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  240. package/build/map/next_js/getWebpackConnections.js +27 -16
  241. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  242. package/build/map/next_js/interactive.js +3 -65
  243. package/build/map/next_js/interactive.js.map +1 -1
  244. package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
  245. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
  246. package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
  247. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
  248. package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
  249. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
  250. package/build/map/next_js/resolveAxios.js +6 -6
  251. package/build/map/next_js/resolveAxios.js.map +1 -1
  252. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
  253. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
  254. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
  255. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  256. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
  257. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  258. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
  259. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  260. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
  261. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  262. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
  263. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
  264. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
  265. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
  266. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
  267. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  268. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
  269. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  270. package/build/map/next_js/resolveFetch.js +23 -23
  271. package/build/map/next_js/resolveFetch.js.map +1 -1
  272. package/build/map/next_js/resolveNewRequest.js +10 -10
  273. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  274. package/build/map/next_js/resolveServerActions.js +4 -4
  275. package/build/map/next_js/resolveServerActions.js.map +1 -1
  276. package/build/map/next_js/utils.js +8 -2
  277. package/build/map/next_js/utils.js.map +1 -1
  278. package/build/map/react_js/getReactConnections.js +21 -14
  279. package/build/map/react_js/getReactConnections.js.map +1 -1
  280. package/build/map/svelte_js/interactive.js +3 -54
  281. package/build/map/svelte_js/interactive.js.map +1 -1
  282. package/build/map/vue_js/getViteConnections.js +23 -16
  283. package/build/map/vue_js/getViteConnections.js.map +1 -1
  284. package/build/map/vue_js/interactive.js +3 -63
  285. package/build/map/vue_js/interactive.js.map +1 -1
  286. package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
  287. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
  288. package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
  289. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
  290. package/build/map/vue_js/taint_utils.js +1 -1
  291. package/build/map/vue_js/taint_utils.js.map +1 -1
  292. package/build/map/vue_js/vue_resolveFetch.js +12 -12
  293. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  294. package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
  295. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  296. package/build/map/vue_js/vue_resolveXhr.js +11 -11
  297. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  298. package/build/mcp/chatOneShot.js +7 -7
  299. package/build/mcp/chatOneShot.js.map +1 -1
  300. package/build/mcp/claudeCodeCreds.js +5 -5
  301. package/build/mcp/claudeCodeCreds.js.map +1 -1
  302. package/build/mcp/cli.js +36 -35
  303. package/build/mcp/cli.js.map +1 -1
  304. package/build/mcp/config.js +4 -4
  305. package/build/mcp/config.js.map +1 -1
  306. package/build/mcp/index.js +7 -7
  307. package/build/mcp/index.js.map +1 -1
  308. package/build/mcp/mcpServer.js +3 -2
  309. package/build/mcp/mcpServer.js.map +1 -1
  310. package/build/mcp/skills.js +1 -0
  311. package/build/mcp/skills.js.map +1 -1
  312. package/build/mcp/tools.js +5 -4
  313. package/build/mcp/tools.js.map +1 -1
  314. package/build/proxy/detectBlockedResponse.js +2 -0
  315. package/build/proxy/detectBlockedResponse.js.map +1 -1
  316. package/build/proxy/index.js +3 -3
  317. package/build/proxy/index.js.map +1 -1
  318. package/build/refactor/index.js +83 -79
  319. package/build/refactor/index.js.map +1 -1
  320. package/build/refactor/next/index.js +69 -26
  321. package/build/refactor/next/index.js.map +1 -1
  322. package/build/refactor/next/transform.js +11 -4
  323. package/build/refactor/next/transform.js.map +1 -1
  324. package/build/refactor/next/validator.js +7 -7
  325. package/build/refactor/next/validator.js.map +1 -1
  326. package/build/refactor/react/index.js +13 -13
  327. package/build/refactor/react/index.js.map +1 -1
  328. package/build/refactor/react/validator.js +7 -7
  329. package/build/refactor/react/validator.js.map +1 -1
  330. package/build/refactor/react-vite/index.js +3 -3
  331. package/build/refactor/react-vite/index.js.map +1 -1
  332. package/build/refactor/remote/hf-client.js +1 -0
  333. package/build/refactor/remote/hf-client.js.map +1 -1
  334. package/build/refactor/remote/version-detect.js +12 -12
  335. package/build/refactor/remote/version-detect.js.map +1 -1
  336. package/build/refactor/vue/index.js +6 -6
  337. package/build/refactor/vue/index.js.map +1 -1
  338. package/build/refactor/vue/vite.js +6 -6
  339. package/build/refactor/vue/vite.js.map +1 -1
  340. package/build/report/index.js +30 -8
  341. package/build/report/index.js.map +1 -1
  342. package/build/report/swaggerJacker.js +63 -0
  343. package/build/report/swaggerJacker.js.map +1 -0
  344. package/build/report/utility/genHtml.js +7 -7
  345. package/build/report/utility/genHtml.js.map +1 -1
  346. package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
  347. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
  348. package/build/report/utility/populateDb/populateEndpoints.js +3 -3
  349. package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
  350. package/build/report/utility/populateDb/populateMappedJson.js +2 -2
  351. package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
  352. package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
  353. package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
  354. package/build/run/bundler-detect.js +45 -9
  355. package/build/run/bundler-detect.js.map +1 -1
  356. package/build/run/dashboard/dashboardHtml.js +150 -0
  357. package/build/run/dashboard/dashboardHtml.js.map +1 -0
  358. package/build/run/dashboard/fsBrowser.js +43 -0
  359. package/build/run/dashboard/fsBrowser.js.map +1 -0
  360. package/build/run/dashboard/server.js +123 -0
  361. package/build/run/dashboard/server.js.map +1 -0
  362. package/build/run/dashboard/state.js +97 -0
  363. package/build/run/dashboard/state.js.map +1 -0
  364. package/build/run/index.js +177 -110
  365. package/build/run/index.js.map +1 -1
  366. package/build/run/interruptHandler.js +18 -0
  367. package/build/run/interruptHandler.js.map +1 -1
  368. package/build/sourcemaps/index.js +7 -6
  369. package/build/sourcemaps/index.js.map +1 -1
  370. package/build/strings/index.js +27 -24
  371. package/build/strings/index.js.map +1 -1
  372. package/build/strings/openapi.js +4 -4
  373. package/build/strings/openapi.js.map +1 -1
  374. package/build/strings/permutate.js +4 -4
  375. package/build/strings/permutate.js.map +1 -1
  376. package/build/strings/secrets.js +1 -0
  377. package/build/strings/secrets.js.map +1 -1
  378. package/build/strings/trufflehog.js +66 -19
  379. package/build/strings/trufflehog.js.map +1 -1
  380. package/build/strings/trufflehogConfig.js +36 -0
  381. package/build/strings/trufflehogConfig.js.map +1 -0
  382. package/build/strings/trufflehogDownload.js +115 -0
  383. package/build/strings/trufflehogDownload.js.map +1 -0
  384. package/build/utility/ai.js +33 -4
  385. package/build/utility/ai.js.map +1 -1
  386. package/build/utility/banner.js +4 -3
  387. package/build/utility/banner.js.map +1 -1
  388. package/build/utility/configureSandbox.js +2 -2
  389. package/build/utility/configureSandbox.js.map +1 -1
  390. package/build/utility/globals.js +19 -11
  391. package/build/utility/globals.js.map +1 -1
  392. package/build/utility/heap.js +2 -1
  393. package/build/utility/heap.js.map +1 -1
  394. package/build/utility/makeReq.js +1 -1
  395. package/build/utility/makeReq.js.map +1 -1
  396. package/build/utility/openapiGenerator.js +2 -2
  397. package/build/utility/openapiGenerator.js.map +1 -1
  398. package/build/utility/printMsg.js +53 -0
  399. package/build/utility/printMsg.js.map +1 -0
  400. package/build/utility/progressLog.js +4 -3
  401. package/build/utility/progressLog.js.map +1 -1
  402. package/build/utility/resolvePath.js +2 -1
  403. package/build/utility/resolvePath.js.map +1 -1
  404. package/build/utility/ruleVersionMap.js +73 -0
  405. package/build/utility/ruleVersionMap.js.map +1 -0
  406. package/contributing/testing.md +106 -0
  407. package/eslint.config.js +24 -0
  408. package/package.json +22 -5
  409. package/scripts/exploit-smoke-test.js +82 -0
  410. package/scripts/framework-detect-smoke-test.js +64 -0
  411. package/scripts/postinstall-completion.mjs +40 -0
  412. package/scripts/smoke-test.js +12 -0
  413. package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
  414. package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
  415. package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
  416. package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
  417. package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
  418. package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
  419. package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
  420. /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
  421. /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
  422. /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
  423. /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
  424. /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
package/.plumber.yaml ADDED
@@ -0,0 +1,151 @@
1
+ # Plumber configuration (https://github.com/getplumber/plumber)
2
+ # See js-recon-internal-docs/docs/dev-workflow/plumber-security-scanning.md for details.
3
+
4
+ version: "2.0"
5
+ github:
6
+ controls:
7
+ containerImageMustNotUseForbiddenTags:
8
+ enabled: true
9
+ tags:
10
+ - latest
11
+ - dev
12
+ - development
13
+ - staging
14
+ - main
15
+ - master
16
+ containerImagesMustBePinnedByDigest: true
17
+ branchMustBeProtected:
18
+ enabled: false # disabled: enabling real GitHub branch protection is a separate follow-up (would need to allow-list bot/PAT push automation first)
19
+ namePatterns:
20
+ - main
21
+ - dev
22
+ defaultMustBeProtected: true
23
+ allowForcePush: false
24
+ codeOwnerApprovalRequired: false
25
+ externalRefsMustNotCollide:
26
+ enabled: true
27
+ pipelineMustNotEnableDebugTrace:
28
+ enabled: true
29
+ forbiddenVariables:
30
+ - ACTIONS_STEP_DEBUG
31
+ - ACTIONS_RUNNER_DEBUG
32
+ securityJobsMustNotBeWeakened:
33
+ enabled: true
34
+ securityJobPatterns:
35
+ - "*codeql*"
36
+ - "*dependency-review*"
37
+ - "*trufflehog*"
38
+ - "*gitleaks*"
39
+ - "*osv-scanner*"
40
+ - "*-sast"
41
+ - "*-sast-*"
42
+ - "*-scan"
43
+ - "*scan*"
44
+ - "*-security"
45
+ - "*-security-*"
46
+ - "*-audit"
47
+ - "*-audit-*"
48
+ allowFailureMustBeFalse:
49
+ enabled: false
50
+ rulesMustNotBeRedefined:
51
+ enabled: false
52
+ whenMustNotBeManual:
53
+ enabled: false
54
+ pipelineMustNotUseDockerInDocker:
55
+ enabled: true
56
+ detectInsecureDaemon: true
57
+ actionsMustBePinnedByCommitSha:
58
+ enabled: true
59
+ trustedOwners:
60
+ - actions
61
+ - github
62
+ githubActionMustComeFromAuthorizedSources:
63
+ enabled: true
64
+ trustGithubOfficialActions: true
65
+ trustSameOrgActions: true
66
+ trustedGithubActions:
67
+ - shriyanss/verified-commit-action
68
+ - docker/login-action
69
+ - getplumber/plumber
70
+ workflowMustNotInjectUserInputInScripts:
71
+ enabled: true
72
+ workflowMustNotWriteUntrustedContentToGitHubEnv:
73
+ enabled: true
74
+ workflowMustNotUseDangerousTriggers:
75
+ enabled: true
76
+ pullRequestTargetMustNotCheckoutHead:
77
+ enabled: true
78
+ workflowsMustDeclarePermissions:
79
+ enabled: true
80
+ reusableWorkflowsMustNotInheritSecrets:
81
+ enabled: true
82
+ workflowMustNotExportEntireSecretsContext:
83
+ enabled: true
84
+ workflowMustNotGrantPermissionsWriteAll:
85
+ enabled: true
86
+ actionsMustNotBeArchived:
87
+ enabled: true
88
+ actionRefsMustExistUpstream:
89
+ enabled: true
90
+ actionsMustNotCarryKnownCVEs:
91
+ enabled: true
92
+ actionsMustNotExecuteMutableRemoteCode:
93
+ enabled: true
94
+ releaseWorkflowsMustNotRestoreUntrustedCache:
95
+ enabled: true
96
+ publishActions:
97
+ - pypa/gh-action-pypi-publish
98
+ - JS-DevTools/npm-publish
99
+ - gradle/publish-plugin
100
+ - softprops/action-gh-release
101
+ - ncipollo/release-action
102
+ - goreleaser/goreleaser-action
103
+ - crazy-max/ghaction-docker-buildx
104
+ - changesets/action
105
+ cacheActions:
106
+ - action: actions/cache
107
+ mode: always
108
+ - action: actions/cache/restore
109
+ mode: always
110
+ - action: Swatinem/rust-cache
111
+ mode: always
112
+ - action: actions/setup-go
113
+ mode: default
114
+ disableInput: cache
115
+ disableValue: false
116
+ - action: gradle/actions/setup-gradle
117
+ mode: default
118
+ disableInput: cache-disabled
119
+ disableValue: true
120
+ - action: actions/setup-node
121
+ mode: opt-in
122
+ enableInput: cache
123
+ - action: actions/setup-python
124
+ mode: opt-in
125
+ enableInput: cache
126
+ - action: actions/setup-java
127
+ mode: opt-in
128
+ enableInput: cache
129
+ - action: pnpm/action-setup
130
+ mode: opt-in
131
+ enableInput: cache
132
+ - action: docker/build-push-action
133
+ mode: opt-in
134
+ enableInput: cache-from
135
+ enableContains: type=gha
136
+ publishScriptPatterns:
137
+ - (?i)(npm|pnpm|yarn|bun)\s+publish
138
+ - (?i)cargo\s+publish
139
+ - (?i)twine\s+upload
140
+ - (?i)poetry\s+publish
141
+ - (?i)gh\s+release\s+create
142
+ - (?i)goreleaser\s+release
143
+ - (?i)semantic-release
144
+ - (?i)gradlew?\b[^\n]*\bpublish
145
+ - (?i)\bmvnw?\b[^\n]*\bdeploy\b
146
+ - (?i)dotnet\s+nuget\s+push
147
+ - (?i)gem\s+push
148
+ - (?i)docker\s+push
149
+ publishScriptExcludePatterns:
150
+ - (?i)--dry-run
151
+ - (?i)publishToMavenLocal
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # Change Log
2
2
 
3
+ ## 2.0.1-alpha.1 - (unreleased)
4
+
5
+ ### Added
6
+
7
+ - New Next.js `lazyload` method `next_routerStateForge`: for every route the crawl finds redirecting an unauthenticated request (a session/auth gate), it retries the route as an RSC fetch with a forged `Next-Router-State-Tree` header claiming a known ancestor path segment is already client-rendered, plus the matching `_rsc` cache-busting key (SHA-256 of the four cache-busting inputs, truncated to 96 bits, base64url — not a secret, computable from headers the client itself sends). Some Next.js apps put their only auth check inside a layout component instead of middleware; Next.js skips re-executing that layout's component function when the client's router-state claims it's already mounted, which can return the protected child content — and any JS chunk references inside that Flight payload — for a request with no session at all. A response is only treated as a hit when it's `200`, has an RSC (`text/x-component`) content type, and does not contain a `NEXT_REDIRECT` record. Runs as the crawler's final phase, after brute-force `.map` discovery; opt out per-target via `--exclude-methods next_routerStateForge`. If no full-body ancestor claim succeeds for a candidate (e.g. a tenant-scoped layout the ancestor heuristic doesn't cleanly match), the method also tries marking the leaf segment `metadata-only` instead — this narrower claim can still leak dynamic `generateMetadata()` output even where the full-body claim doesn't apply, and is reported separately from full-body hits. Every forged request now tries the cheap legacy `_rsc` key (32-bit djb2 hash, base36, 5 characters — no SHA-256 needed) before falling back to the strong key; some Next.js builds accept the legacy key as a fallback when the strong-key check fails, so this can skip the crypto step entirely, and which key mode actually worked is reported as `next_routerStateForge_legacyKeyAccepted` in `--research-output` — a signal for which build line is running, since only builds with the legacy-key fallback path accept it at all. Ancestor claims also try common dynamic-route param-name guesses (`id`, `slug`, `org`, `tenant`, `username`) for the last ancestor segment: Next.js's `matchSegment` requires an exact `[paramName, value]` tuple for a dynamic route (e.g. `app/organizations/[org]/layout.js`) — a bare string never matches one — and a black-box crawl can only observe the URL's literal value, not the app's real param name. Chunk-path extraction from a bypassed Flight payload matches the actual wire format (`static/chunks/*.js`, no `_next/` prefix — the client resolves that against its own asset prefix at runtime) rather than assuming one. (`lazyload`)
8
+ - `next_routerStateForge`'s dynamic-route param-name guessing is expanded from 5 names (`id`, `slug`, `org`, `tenant`, `username`) to a larger fixed set (`orgId`, `organization`, `tenantId`, `userId`, `user`, `account`, `accountId`, `workspace`, `workspaceId`, `project`, `projectId`, `team`, `teamId`, `handle`, `name`, `key`) and gains a bounded fallback: when every fixed-list guess fails for a candidate ancestor segment, the Flight/RSC response bodies already fetched during those failed attempts are scanned (no extra requests — the bodies are already paid for) for the app's real param name via two anchored patterns — a value-anchored `"key":"value"` match against the ancestor's already-known literal value (Flight serializes plain-object Client Component props this way even though the payload isn't valid JSON/JS), and a dev-mode-only pattern that reads bracketed segment names straight out of embedded webpack module source paths (`.../[paramName]/...`). This fallback only runs after the fixed list fails, and only spends extra requests if harvesting actually finds a name not already tried — new `--rsc-param-bruteforce-limit <n>` (default `20`, `0` disables the fallback) caps how many harvested names get tried per candidate URL. (`lazyload`)
9
+ - New Next.js `lazyload` method `next_serverActionIdScan`: after every chunk is downloaded, scans each `.js` file for `createServerReference("<id>", ...)` call sites (matching the same ID-format validation `map`'s AST-based Server Action resolver already uses, `/^[0-9a-f]{40,}$/i`, but on raw chunk text — a lightweight signal available immediately at `lazyload` time, before `map` runs its full resolution) and writes any discovered IDs to `server_action_ids.json` in the target's output directory (`{ actionIdsByFile, allActionIds }`). This is endpoint enumeration only — no action is invoked; a Server Action ID shipped in a public chunk for a page the crawl couldn't reach unauthenticated is itself a disclosure signal (the same shape as the historical CVE-2026-64643 endpoint-ID disclosure). Opt out per-target via `--exclude-methods next_serverActionIdScan`. (`lazyload`)
10
+ - New `exploit` subcommand: `js-recon exploit -u <url> --cve <id>` attempts exploitation of known framework CVEs to surface hidden attack surface (e.g. bypassing Next.js middleware auth reveals admin-only JS chunks a normal crawl never sees), rather than just flagging vulnerabilities. `--list-cve` prints every supported CVE grouped by framework and sorted by ID. Covers CVE-2025-29927 and CVE-2026-64645 (Next.js), CVE-2025-30208 and CVE-2026-39363 (Vite), CVE-2026-71320 and CVE-2026-71315/CVE-2026-53721 (Nuxt), CVE-2026-68945 (Angular), and CVE-2025-55182 "React2Shell" (React RSC). Findings write both a rich `exploit.json` (with any newly discovered URLs) and an `EngineOutput`-compatible file consumable by `report`'s new `--exploit-json` flag, which renders exploit findings in the existing HTML/SQLite report alongside `analyze`'s findings. Two of the eight CVEs (`CVE-2026-71320`, `CVE-2025-55182`) are RCE-class — their proof executes a real command server-side via `--exec-cmd` (default `id`); this is intentional, active exploitation, not passive detection, and should only be run against targets you're authorized to test. (`exploit`, `report`)
11
+
12
+ - `--research`/`--research-output <file>` (`lazyload`, `run`) is now supported for every framework the tool detects, not just Next.js. Vue, Nuxt, Svelte, Angular, and React crawls now record a technique-name → discovered-URL-list mapping and write it to the research output file, mirroring the existing Next.js `NextJsCrawler.techniqueEfficiencyMapping` behavior. (`lazyload`)
13
+ - New `generic` fallback tech in `lazyload` for sites running no supported framework: previously an undetected framework triggered a separate Puppeteer pass just to watch loaded requests and retry framework detection, and if that still found nothing the target was otherwise left with only whatever the browser happened to load. `generic` now recursively crawls the site's own `<a href>`/`<iframe src>` links, plus absolute URLs embedded in any other attribute value such as an `onclick`-driven `window.open(...)` popup (breadth-first, capped by `--max-pages`, downloading JS incrementally per page) rather than stopping at the landing page, since the JS a site's homepage references is rarely all the JS the site has. Unless `-s`/`--strict-scope` is set, the crawl's default scope is now the host reached after following redirects from `-u` (new `--max-redirects` flag, default 20) instead of the unrestricted `*` default used elsewhere. On every page, `generic` extracts `<script src>`/inline scripts/`<link rel="modulepreload">` the same way the framework crawlers do (decoding `data:` URI script sources; skipping `<script type="...">` values that indicate non-JS content, e.g. `application/ld+json`/`speculationrules`), and additionally walks every HTML attribute value, resolving each with the `URL` constructor and — for any URL with a path segment ending in `.js` (catching cachebuster-suffixed paths like `.../beacon.min.js/v124/token` that don't end in `.js` themselves) — confirms it's actually JavaScript via its response `Content-Type` (accepting `text/javascript` per RFC 9239, plus RFC 4329's now-obsoleted `application/javascript`/`application/ecmascript` and other legacy variants) rather than trusting the extension alone. `generic` is also now seeded with every request tech detection's own Puppeteer session intercepted while live-rendering the page — this catches JS requested only because a runtime-injected script asked for it (e.g. a bot-mitigation script self-injecting its own next stage via `element.innerHTML`), which no static-fetch crawl could ever see. A new `--strings` flag chains the `strings` module into the crawl to catch JS referenced only as a string literal inside an already-downloaded file (e.g. a plugin config's `"pdfWorker": "https://.../pdf.worker.js"`), resolving each extracted string against the URL the file it was found in was itself downloaded from, and recursing (`--strings-max-iterations`, default 5) until a pass finds nothing new. `run` continues to only download JS for this tech, same as any other tech outside its supported list. (`lazyload`)
14
+ - `generic` tech now detects content stagnation on effectively unbounded sites (blogs, news feeds) that keep serving byte-identical JS under a different, cache-busted URL on every page — a pattern the existing URL-level dedup doesn't catch, which previously burned the full `--max-pages`/`--lazyload-timeout` budget on a site whose real JS surface was already fully mapped. New flags `--stagnation-timein <mins>` (default 30, `0` disables the feature), `--stagnation-percentage <percent>` (default 80), and `--stagnation-monitor <mins>` (default 1) control a debounced check: once one content hash accounts for `--stagnation-percentage`% of everything discovered so far, the crawl arms a pending state rather than stopping immediately — if a genuinely new content hash appears within the next `--stagnation-monitor` interval, monitoring resets; only if the same dominant hash persists with no new content does the crawl stop early. New exit code 30 if `--stagnation-timein` exceeds `--lazyload-timeout`, since stagnation monitoring could then never trigger before the whole crawl times out. (`lazyload`)
15
+ - New `--verbose` flag (`lazyload`, `run`) gates the file-write error message previously always printed when a downloaded JS chunk fails to write to disk (`[!] Failed to write file: <path>`). It is now silent by default and only shown with `--verbose`; no other error messages are affected. (`lazyload`)
16
+ - New `--determine-compatible-version`/`--apply-compatible-versions` flags (`analyze`) report or auto-correct the `js_recon_version`/`js_recon_max_version` a rule file actually requires, computed from a hand-maintained map (`src/utility/ruleVersionMap.ts`) of which tool version introduced each schema/engine feature (tech values, rule types, step sub-fields). Previously rule authors had to guess the compatibility string by hand, which could under- or over-restrict a rule relative to what it actually uses. Rules also now support an optional `js_recon_max_version` field for features that have since been retired; version-compatibility mismatches reported by `--determine-compatible-version` reuse exit code 20 ("invalid rules found"), same as schema errors. (`analyze`)
17
+ - `run`: added `--sj`/`--sj-bin`/`--sj-args` to integrate [swagger-jacker](https://github.com/AlexPistola/swagger-jacker) against the generated OpenAPI output after `report`; also available standalone on `report`. Exits with code 31 if the `sj` binary can't be found and `--sj-bin` wasn't given. (`run`, `report`)
18
+ - `run`: added `--web-stats-dashboard`/`--web-stats-port` — an optional local HTTP dashboard showing live per-target progress (current step, running/completed/skipped/errored) while a batch run is in flight. (`run`)
19
+ - `map`/`run`: `--ai-provider` now accepts `anthropic` in addition to `openai`; the option and its API key flag are renamed `--ai-api-key` (was `--openai-api-key`) to reflect the broader provider choice. (`map`, `run`)
20
+ - New CI workflow `.github/workflows/framework-detection-smoke-test.yaml` runs `fingerprint` against a matrix of lab apps (Next.js, Vue, Nuxt, SvelteKit, Angular, React/Vite, React/webpack) from `js-recon-labs/detection/*` and asserts each is correctly identified, verified by the new `scripts/framework-detect-smoke-test.js`. The existing `rules-smoke-test.yaml` only exercised the rule engine against a single Next.js app; this closes the gap for tech-detection regressions across every other supported framework/bundler. Runs on push/PR to `dev`/`main` and after a release is published. (`ci`)
21
+
22
+ ### Fixed
23
+
24
+ - `downloadFilesUtil.ts`/`DownloadQueue` (used by every framework crawler except `generic`) determined a downloaded file's on-disk name by checking only the URL's final `/`-separated path segment for a recognized extension, with a fallback loop that scanned every segment but was unreachable in practice — it lived in a `catch` block after a regex `.match()` call that returns `undefined` on no match rather than throwing. URLs where a token or cachebuster segment follows the actual filename (e.g. `.../beacon.min.js/v124/token`) were logged as `Could not determine filename for URL: ... Skipping.` and never downloaded, even though `generic`'s own downloader already handled this exact shape. Filename resolution is now handled by dev's `getSanitizedAssetFilename`/`resolveAssetOutputDirectory` helpers (`src/utility/outputPath.ts`), which already scan every path segment for the first one ending in a recognized extension. (`lazyload`)
25
+ - `run`'s Ctrl-C interrupt menu could show a stray leftover message from the step that was in flight when the interrupt fired: `Promise.race` doesn't cancel the loser, so the interrupted step's own promise kept running in the background and could still call `console.log`/`console.error` while the menu/prompt was on screen, interleaving its output with the prompt. All ad-hoc `console.log`/`console.error` calls across the CLI have been replaced with a new `printMsg(MSG.Level, message)` helper (`src/utility/printMsg.ts`) that funnels every message through one call site; `run/interruptHandler.ts` now calls `lockPrintMsg()` before showing the menu and `unlockPrintMsg()` after the choice is read, so any message from an orphaned in-flight step is silently discarded instead of printing over the prompt. (`run`)
26
+ - `checkAssignmentExist`/`findMemberExpressionAssignment` (used by rules like `detect_postMessage_innerHtml_sink` and `detect_postMessage_function_href`) crashed `analyze`/`run` entirely with `SES_UNHANDLED_REJECTION: Couldn't find a Program` when the resolved `postMessage` handler's sensitive assignment was nested inside an `if` block. The helper called `@babel/traverse`'s scope-aware form with a raw `File`/`Program` AST node passed in place of a real `Scope` instance, which broke Babel's internal scope-chain construction for some node shapes. Fixed by traversing with `noScope: true` instead, since the helper never reads `path.scope`. (`analyze`)
27
+ - The response cache (`makeReq.ts`) stored a live `Headers` object directly into data later passed to `JSON.stringify()`. `Headers` has no own enumerable properties, so this silently serialized to `{}` on every cache write, discarding all response headers (not just `Content-Type`) for any URL cached earlier in a run. Any header-dependent check that hit a cached URL a second time (e.g. `generic`'s Content-Type-based JS confirmation) could silently fail depending on whether something upstream had already cached that URL. Fixed by converting to a plain object (`Object.fromEntries(headers.entries())`) before serialization. (`utility`)
28
+ - `checkVueJS.ts`'s last-resort tech-detection fallback scanned every externally-referenced `<script src>`, including cross-origin third-party scripts, for the substring `__vue`. A third-party widget that internally bundles Vue for its own UI could cause a site with no Vue anywhere in its own code to be misclassified as Vue.js. The fallback now only scans same-origin scripts. (`lazyload`)
29
+ - `strings`: a single file that fails to parse as JS (e.g. non-JS content saved with a `.js` extension) no longer aborts extraction for every other file in the scan — the parse error is now caught, logged, and skipped per-file. (`strings`)
30
+ - `lazyload --strings` (generic tech): each recursive strings-discovery pass rescans the same (ever-growing) output directory, since the `strings` module has no incremental-scan mode. Every already-confirmed URL from a prior pass was being re-confirmed via a fresh live `GET` request on every subsequent pass, compounding badly on large multi-hundred-page crawls. Already-known URLs are now filtered out before the Content-Type confirmation step, not after. (`lazyload`)
31
+ - `DownloadQueue`'s write-error log interpolated the raw error object (`${writeErr}`). For a `prettier.format()` parse failure the thrown `SyntaxError`'s message has Babel's codeframe appended after the first line, and on minified JS (a single giant line) that codeframe is the entire file — dumping the whole source to the terminal instead of just the error. The logged message is now truncated to the first line (`String(writeErr).split("\n")[0]`), e.g. `SyntaxError: Missing semicolon. (2:4)`. (`lazyload`)
32
+ - `map`'s per-file size guard (`MAX_MAP_FILE_SIZE_BYTES`, present identically across `getReactConnections.ts`/`getViteConnections.ts`/`getAngularConnections.ts` and the shared fetch/XHR/HTTP-client resolvers) skipped any file over 1.5 MB with no fallback chunk, so a single large un-split app bundle vanished from `mapped.json` entirely — `refactor` then ran against whatever small chunks were left instead of the app, reporting near-zero recovery. Raised the cap to 8 MB; the guard's purpose is capping the many-large-files case (ad-heavy sites), not a single reasonably-large main bundle. Also hardens `run`'s CS-MAST-S bundler detection (react-webpack vs react-vite): adds a cheap literal bundler-runtime-marker pre-check that short-circuits the structural comparison when unambiguous, and raises the random sample size to cover the current signature bucket, since undersampling could previously flip which tech "won" between identical runs against the same bundle. (`map`, `run`)
33
+ - The startup banner logo rendered visibly distorted (stretched, overlapping the following text) in Kitty-protocol terminals (Kitty, Ghostty). Root cause was in `@shriyanss/cli-print-img`'s Kitty renderer, which specified both `c` (columns) and `r` (rows) in the same escape sequence — per the Kitty Graphics Protocol, giving both stretches the image to fill that exact cell box instead of preserving its aspect ratio, and it also suppressed cursor movement without advancing by the actual rendered height. Bumped `@shriyanss/cli-print-img` to `1.1.1`, which fixes both issues upstream. (`cli`, `banner`)
34
+ - `map`'s Next.js webpack chunk-code extraction (`getWebpackConnections.ts`) stripped a chunk's numeric-ID object-literal prefix (e.g. `0:function(e,t,n){...}` → `function webpack_0(e,t,n){...}`) via two regexes that both assumed the minifier inserts whitespace between the colon/`function` keyword and the following token. Real-world minified output commonly omits that whitespace, so the prefix was left in place — invalid syntax that failed to parse downstream in `refactor -t next-webpack`, silently dropping the module instead of processing it. Also affected `refactor`'s CS-MAST library classification, since a chunk that never parses can never be checked against the signature set either. Fixed by relaxing both regexes' whitespace assumption (`\s+` → `\s*`, plus a missing `\s` escape in the arrow-form regex). Verified against a real-world target: eliminated all parse failures on a previously 96%-failing chunk set and raised its library-classification rate from ~3% to 94%. Follow-up: the arrow-form regex still required a literal `(` immediately after the numeric-ID colon, missing JS's single-parameter arrow shorthand with no parens (`3562:e=>{...}`, common in lodash-style utility functions). Fixed by matching either `(` or a bare identifier followed by `=>` via lookahead, stripping only the `id:` prefix and leaving the arrow's own param syntax untouched. (`map`)
35
+
36
+ **Note:** `post-1.4.1`'s independent proxy rework (renaming `api-gateway` to `proxy`, subcommand-per-provider design) was superseded during the `post-1.4.1` → `dev` promotion merge by `dev`'s own concurrent proxy rework, which reached the same rename via a single `proxy` command with `--proxy-method <aws|socks|http|oxylabs>` plus CloudFront/Cloudflare firewall detection, crash-safe AWS Gateway cleanup, and full test coverage — see the `1.4.1-beta.2` entry below for the proxy rename actually shipped. (`proxy`)
37
+
3
38
  ## 1.4.4 - 2026-08-03
4
39
 
5
40
  ### Added
@@ -0,0 +1,32 @@
1
+ # Contributing to js-recon
2
+
3
+ For the full contributor guide — cloning, branch/PR workflow, codebase structure — see
4
+ [js-recon.io/contributing](https://js-recon.io/contributing). This file covers the policies that
5
+ apply once you're making a change here.
6
+
7
+ ## Testing is required for new functionality
8
+
9
+ New functionality must ship with unit and/or smoke tests. See
10
+ [`contributing/testing.md`](contributing/testing.md) for how to write unit tests (Vitest), fuzz
11
+ tests (fast-check, for anything that parses untrusted bundle input), and smoke tests (the
12
+ `rules-smoke-test` CI workflow).
13
+
14
+ ## Keep js-recon-docs in sync
15
+
16
+ Changes that affect user-facing behavior, CLI flags, exit codes, or install/usage instructions must
17
+ include a corresponding update to [`js-recon-docs`](https://github.com/js-recon/js-recon-docs) —
18
+ either in the same PR or a linked follow-up PR. Docs-only fixes don't need a corresponding js-recon
19
+ change.
20
+
21
+ ## Static analysis
22
+
23
+ CI runs [ESLint](https://eslint.org/) (with
24
+ [`eslint-plugin-security`](https://github.com/eslint-community/eslint-plugin-security)) and
25
+ [CodeQL](https://codeql.github.com/) on every push and pull request. Run `npm run lint` locally
26
+ before pushing.
27
+
28
+ ## Reporting vulnerabilities
29
+
30
+ Do not open a public issue for a security vulnerability — see [`SECURITY.md`](SECURITY.md) for the
31
+ reporting process and response SLAs. Bug reports and feature/tech-support requests use the GitHub
32
+ Issues templates linked from the [contributing page](https://js-recon.io/contributing).
package/Dockerfile CHANGED
@@ -12,6 +12,7 @@ COPY ./package-lock.json .
12
12
  COPY ./tsconfig.json .
13
13
  COPY ./patches ./patches
14
14
  COPY ./src ./src
15
+ COPY ./scripts ./scripts
15
16
 
16
17
  USER root
17
18
  ENV PUPPETEER_SKIP_DOWNLOAD=true
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # JS Recon
2
2
 
3
- ![NPM Licence](https://img.shields.io/npm/l/%40js-recon%2Fjs-recon) ![GitHub repo size](https://img.shields.io/github/repo-size/js-recon/js-recon) ![NPM Downloads](https://img.shields.io/npm/dm/%40js-recon%2Fjs-recon) ![GitHub commit activity (dev)](https://img.shields.io/github/commit-activity/w/js-recon/js-recon/dev) ![NPM Last Update](https://img.shields.io/npm/last-update/%40js-recon%2Fjs-recon) ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/js-recon/js-recon)
3
+ ![NPM Licence](https://img.shields.io/npm/l/%40js-recon%2Fjs-recon) ![GitHub repo size](https://img.shields.io/github/repo-size/js-recon/js-recon) ![NPM Downloads](https://img.shields.io/npm/dm/%40js-recon%2Fjs-recon) ![GitHub commit activity (dev)](https://img.shields.io/github/commit-activity/w/js-recon/js-recon/dev) ![NPM Last Update](https://img.shields.io/npm/last-update/%40js-recon%2Fjs-recon) ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/js-recon/js-recon) [![Plumber Score](https://score.getplumber.io/github.com/js-recon/js-recon.svg)](https://score.getplumber.io/github.com/js-recon/js-recon) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/13954/badge)](https://www.bestpractices.dev/projects/13954)
4
4
 
5
5
  <p align="center">
6
6
  <a href="https://js-recon.io">
@@ -139,6 +139,7 @@ js-recon --config ./operator.yaml run \
139
139
  | `proxy` | Routes requests through AWS API Gateway, SOCKS5/HTTP, or Oxylabs proxies. | [Read Docs](https://js-recon.io/docs/docs/modules/proxy) |
140
140
  | `run` | Runs all analysis modules automatically on a target. | [Read Docs](https://js-recon.io/docs/docs/modules/run) |
141
141
  | `analyze` | Analyzes the code. | [Read Docs](https://js-recon.io/docs/docs/modules/analyze) |
142
+ | `exploit` | Attempts exploitation of known framework CVEs to discover new attack surface. | [Read Docs](https://js-recon.io/docs/docs/modules/exploit) |
142
143
  | `report` | Generates a report from the analysis modules. | [Read Docs](https://js-recon.io/docs/docs/modules/report) |
143
144
  | `mcp` | AI-powered interactive CLI, one-shot chat, and MCP stdio server. | [Read Docs](https://js-recon.io/docs/docs/modules/mcp) |
144
145
  | `fingerprint` | Detects the JavaScript framework used by a target URL (JSON/JSONL output). | [Read Docs](https://js-recon.io/docs/docs/modules/fingerprint) |
@@ -157,7 +158,7 @@ js-recon --config ./operator.yaml run \
157
158
  - Map feature analyzes the JS files and outputs it to a JSON file. An interactive mode can be then used to analyze it
158
159
  - Reconstruct HTTP requests that the app makes to the server, and output them to the OpenAPI spec
159
160
  - Run analyze to find potential issues in JS code and the HTTP requests the app makes
160
- - Generate a report from the analyze module
161
+ - Generate a report from the analyze module (optional active endpoint probing via `sj`/swagger-jacker integration using `--sj`)
161
162
 
162
163
  ## Example Scenario
163
164
 
package/SECURITY.md CHANGED
@@ -17,7 +17,7 @@ Include in your report:
17
17
  - Affected version(s)
18
18
  - Any suggested mitigations, if known
19
19
 
20
- You can expect an acknowledgement within **72 hours**. If a vulnerability is confirmed, a fix will be prioritized based on severity.
20
+ You can expect an acknowledgement within **72 hours**, and no later than **14 days** from the initial report. If a vulnerability is confirmed, a fix will be prioritized based on severity, with a target of **60 days** to ship a patch for confirmed vulnerabilities affecting a publicly released version.
21
21
 
22
22
  ## Scope
23
23
 
@@ -7,7 +7,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import chalk from "chalk";
11
10
  import parser from "@babel/parser";
12
11
  import _traverse from "@babel/traverse";
13
12
  import _generator from "@babel/generator";
@@ -19,6 +18,7 @@ import { resolveFunctionIdentifier } from "../helpers/engineHelpers/resolveFunct
19
18
  import { findMemberExpressionAssignment } from "../helpers/engineHelpers/findMemberExpressionAssignment.js";
20
19
  import { findDirectAssignment } from "../helpers/engineHelpers/findDirectAssignment.js";
21
20
  import { computeTaint, sinkConsumesTaint } from "../helpers/engineHelpers/taintFlow.js";
21
+ import { printMsg, MSG } from "../../utility/printMsg.js";
22
22
  /**
23
23
  * ESQuery-based AST analysis engine for detecting code patterns using custom rules.
24
24
  *
@@ -32,7 +32,7 @@ import { computeTaint, sinkConsumesTaint } from "../helpers/engineHelpers/taintF
32
32
  */
33
33
  const esqueryEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0, function* () {
34
34
  var _a, _b;
35
- let findings = [];
35
+ const findings = [];
36
36
  for (const chunk of Object.values(mappedJsonData)) {
37
37
  // first of all, load the code in ast
38
38
  let ast;
@@ -46,7 +46,7 @@ const esqueryEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
46
46
  catch (_c) {
47
47
  continue;
48
48
  }
49
- let matchList = {};
49
+ const matchList = {};
50
50
  const completedSteps = new Set();
51
51
  // Cache taint info per "source step name" so we don't recompute when several
52
52
  // sink steps share the same source step.
@@ -138,6 +138,7 @@ const esqueryEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
138
138
  }
139
139
  else if (step.regexMatch) {
140
140
  // Scan all StringLiteral/TemplateLiteral nodes in the chunk for values matching the regex
141
+ // eslint-disable-next-line security/detect-non-literal-regexp -- pattern comes from a loaded rule YAML file — same trust model as the rest of the rule engine, not user/network input
141
142
  const pattern = new RegExp(step.regexMatch.pattern);
142
143
  const foundNodes = [];
143
144
  _traverseDefault(ast, {
@@ -165,7 +166,7 @@ const esqueryEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
165
166
  const toMatch = step.checkAssignmentExist.type;
166
167
  const memberExpression = step.checkAssignmentExist.memberExpression;
167
168
  if (selectedNode && memberExpression) {
168
- const assignmentNode = findMemberExpressionAssignment(selectedNode, toMatch, matchList[step.checkAssignmentExist.name].scope);
169
+ const assignmentNode = findMemberExpressionAssignment(selectedNode, toMatch);
169
170
  if (assignmentNode) {
170
171
  matchList[step.name] = { node: assignmentNode, scope: ast };
171
172
  completedSteps.add(step.name);
@@ -188,18 +189,18 @@ const esqueryEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
188
189
  for (const reportNode of nodesToReport) {
189
190
  const code = generator(reportNode).code;
190
191
  if (rule.severity === "info") {
191
- console.log(chalk.cyan(message));
192
+ printMsg(MSG.Header, message);
192
193
  }
193
194
  else if (rule.severity === "low") {
194
- console.log(chalk.yellow(message));
195
+ printMsg(MSG.Warn, message);
195
196
  }
196
197
  else if (rule.severity === "medium") {
197
- console.log(chalk.magenta(message));
198
+ printMsg(MSG.Info, message);
198
199
  }
199
200
  else if (rule.severity === "high") {
200
- console.error(chalk.red(message));
201
+ printMsg(MSG.Err, message);
201
202
  }
202
- console.log(highlight(code, {
203
+ printMsg(MSG.Plain, highlight(code, {
203
204
  language: "javascript",
204
205
  ignoreIllegals: true,
205
206
  theme: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"astEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/astEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/astEngine.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import chalk from "chalk";
11
10
  import { cs_mast_init, parseSignature, ParseError } from "@shriyanss/cs-mast";
11
+ import { printMsg, MSG } from "../../utility/printMsg.js";
12
12
  /**
13
13
  * Walk all AdapterNode descendants post-order and check if any node's
14
14
  * computedHash equals the target hex hash. The _signatureMap built by
@@ -60,7 +60,7 @@ const csMastSEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
60
60
  const { signature } = step.csMastS;
61
61
  const parsed = parseSignature(signature);
62
62
  if (!parsed) {
63
- console.log(chalk.yellow(`[!] cs-mast-s step "${step.name}" in rule "${rule.id}" has an invalid signature — skipping`));
63
+ printMsg(MSG.Warn, `[!] cs-mast-s step "${step.name}" in rule "${rule.id}" has an invalid signature — skipping`);
64
64
  continue;
65
65
  }
66
66
  const config = {
@@ -99,16 +99,16 @@ const csMastSEngine = (rule, mappedJsonData) => __awaiter(void 0, void 0, void 0
99
99
  const matchedSigs = rule.steps.filter((s) => s.csMastS).map((s) => s.csMastS.signature);
100
100
  const message = `[+] "${rule.name}" found in chunk ${chunk.id}`;
101
101
  if (rule.severity === "info") {
102
- console.log(chalk.cyan(message));
102
+ printMsg(MSG.Header, message);
103
103
  }
104
104
  else if (rule.severity === "low") {
105
- console.log(chalk.yellow(message));
105
+ printMsg(MSG.Warn, message);
106
106
  }
107
107
  else if (rule.severity === "medium") {
108
- console.log(chalk.magenta(message));
108
+ printMsg(MSG.Info, message);
109
109
  }
110
110
  else if (rule.severity === "high") {
111
- console.error(chalk.red(message));
111
+ printMsg(MSG.Err, message);
112
112
  }
113
113
  findings.push({
114
114
  ruleId: rule.id,
@@ -1 +1 @@
1
- {"version":3,"file":"csMastSEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/csMastSEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"csMastSEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/csMastSEngine.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import csMastSEngine from "./csMastSEngine.js";
25
25
  */
26
26
  export const engine = (rule, mappedJsonData, openapiData, tech) => __awaiter(void 0, void 0, void 0, function* () {
27
27
  // first of all check what is rule type, and then check if the data for that is available or is undefined
28
- let findings = [];
28
+ const findings = [];
29
29
  if (rule.type === "request") {
30
30
  if (!openapiData) {
31
31
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/engine/index.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAG/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,IAAU,EACV,cAAkC,EAClC,WAAoC,EACpC,IAA6D,EAC1B,EAAE;IACrC,yGAAyG;IAEzG,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/engine/index.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAG/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,IAAU,EACV,cAAkC,EAClC,WAAoC,EACpC,IAA6D,EAC1B,EAAE;IACrC,yGAAyG;IAEzG,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import chalk from "chalk";
10
+ import { printMsg, MSG } from "../../utility/printMsg.js";
11
11
  /**
12
12
  * Request-based analysis engine for analyzing OpenAPI specifications against rules.
13
13
  *
@@ -21,7 +21,7 @@ import chalk from "chalk";
21
21
  */
22
22
  const engine = (rule, openapiData) => __awaiter(void 0, void 0, void 0, function* () {
23
23
  var _a;
24
- let findings = [];
24
+ const findings = [];
25
25
  for (const path in openapiData.paths) {
26
26
  const methods = openapiData.paths[path];
27
27
  for (const method in methods) {
@@ -69,16 +69,16 @@ const engine = (rule, openapiData) => __awaiter(void 0, void 0, void 0, function
69
69
  // get the severity of the rule
70
70
  const message = `[+] "${rule.name}" found in ${path} [${method.toUpperCase()}]`;
71
71
  if (rule.severity === "info") {
72
- console.log(chalk.cyan(message));
72
+ printMsg(MSG.Header, message);
73
73
  }
74
74
  else if (rule.severity === "low") {
75
- console.log(chalk.yellow(message));
75
+ printMsg(MSG.Warn, message);
76
76
  }
77
77
  else if (rule.severity === "medium") {
78
- console.log(chalk.magenta(message));
78
+ printMsg(MSG.Info, message);
79
79
  }
80
80
  else if (rule.severity === "high") {
81
- console.error(chalk.red(message));
81
+ printMsg(MSG.Err, message);
82
82
  }
83
83
  findings.push({
84
84
  ruleId: rule.id,
@@ -1 +1 @@
1
- {"version":3,"file":"requestEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/requestEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requestEngine.js","sourceRoot":"","sources":["../../../src/analyze/engine/requestEngine.ts"],"names":[],"mappings":"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"}