@js-recon/js-recon 1.3.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
  5. package/.github/workflows/build-and-prettify.yaml +121 -0
  6. package/.github/workflows/pr_checker.yml +22 -0
  7. package/.github/workflows/publish-js-recon.yml +169 -0
  8. package/.prettierignore +2 -0
  9. package/.prettierrc +6 -0
  10. package/CHANGELOG.md +692 -0
  11. package/CLAUDE.md +290 -0
  12. package/Dockerfile +34 -0
  13. package/LICENSE +21 -0
  14. package/README.md +101 -0
  15. package/SECURITY.md +37 -0
  16. package/build/analyze/engine/astEngine.js +224 -0
  17. package/build/analyze/engine/astEngine.js.map +1 -0
  18. package/build/analyze/engine/index.js +59 -0
  19. package/build/analyze/engine/index.js.map +1 -0
  20. package/build/analyze/engine/requestEngine.js +100 -0
  21. package/build/analyze/engine/requestEngine.js.map +1 -0
  22. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +37 -0
  23. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -0
  24. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +29 -0
  25. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -0
  26. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +38 -0
  27. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -0
  28. package/build/analyze/helpers/engineHelpers/taintFlow.js +250 -0
  29. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
  30. package/build/analyze/helpers/initRules.js +111 -0
  31. package/build/analyze/helpers/initRules.js.map +1 -0
  32. package/build/analyze/helpers/outputHelper.js +14 -0
  33. package/build/analyze/helpers/outputHelper.js.map +1 -0
  34. package/build/analyze/helpers/schemas.js +57 -0
  35. package/build/analyze/helpers/schemas.js.map +1 -0
  36. package/build/analyze/helpers/validate.js +89 -0
  37. package/build/analyze/helpers/validate.js.map +1 -0
  38. package/build/analyze/index.js +150 -0
  39. package/build/analyze/index.js.map +1 -0
  40. package/build/analyze/types/index.js +2 -0
  41. package/build/analyze/types/index.js.map +1 -0
  42. package/build/api_gateway/checkFeasibility.js +41 -0
  43. package/build/api_gateway/checkFeasibility.js.map +1 -0
  44. package/build/api_gateway/checkFireWallBlocking.js +33 -0
  45. package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
  46. package/build/api_gateway/genReq.js +205 -0
  47. package/build/api_gateway/genReq.js.map +1 -0
  48. package/build/api_gateway/index.js +291 -0
  49. package/build/api_gateway/index.js.map +1 -0
  50. package/build/endpoints/gen_report/gen_json.js +30 -0
  51. package/build/endpoints/gen_report/gen_json.js.map +1 -0
  52. package/build/endpoints/gen_report/utility/iterate_n_store.js +64 -0
  53. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
  54. package/build/endpoints/index.js +101 -0
  55. package/build/endpoints/index.js.map +1 -0
  56. package/build/endpoints/next_js/client_jsFilesHref.js +100 -0
  57. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
  58. package/build/endpoints/next_js/client_jsonParse.js +89 -0
  59. package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
  60. package/build/endpoints/next_js/client_mappedJsonFile.js +103 -0
  61. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -0
  62. package/build/endpoints/next_js/client_subsequentRequests.js +211 -0
  63. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
  64. package/build/fingerprint/index.js +123 -0
  65. package/build/fingerprint/index.js.map +1 -0
  66. package/build/globalConfig.js +16 -0
  67. package/build/globalConfig.js.map +1 -0
  68. package/build/index.js +332 -0
  69. package/build/index.js.map +1 -0
  70. package/build/lazyLoad/angular/angular_getFromMainJs.js +55 -0
  71. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -0
  72. package/build/lazyLoad/angular/angular_getFromPageSource.js +43 -0
  73. package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -0
  74. package/build/lazyLoad/downloadFilesUtil.js +127 -0
  75. package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
  76. package/build/lazyLoad/downloadLoadedJsUtil.js +44 -0
  77. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
  78. package/build/lazyLoad/downloadQueue.js +191 -0
  79. package/build/lazyLoad/downloadQueue.js.map +1 -0
  80. package/build/lazyLoad/globals.js +107 -0
  81. package/build/lazyLoad/globals.js.map +1 -0
  82. package/build/lazyLoad/index.js +377 -0
  83. package/build/lazyLoad/index.js.map +1 -0
  84. package/build/lazyLoad/next_js/NextJsCrawler.js +332 -0
  85. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -0
  86. package/build/lazyLoad/next_js/next_GetJSScript.js +126 -0
  87. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
  88. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +83 -0
  89. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -0
  90. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +222 -0
  91. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -0
  92. package/build/lazyLoad/next_js/next_SubsequentRequests.js +208 -0
  93. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
  94. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +37 -0
  95. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
  96. package/build/lazyLoad/next_js/next_buildId.js +55 -0
  97. package/build/lazyLoad/next_js/next_buildId.js.map +1 -0
  98. package/build/lazyLoad/next_js/next_getClientSidePaths.js +83 -0
  99. package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -0
  100. package/build/lazyLoad/next_js/next_globals.js +8 -0
  101. package/build/lazyLoad/next_js/next_globals.js.map +1 -0
  102. package/build/lazyLoad/next_js/next_parseLayoutJs.js +116 -0
  103. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -0
  104. package/build/lazyLoad/next_js/next_promiseResolve.js +85 -0
  105. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
  106. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +51 -0
  107. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -0
  108. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +202 -0
  109. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
  110. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +82 -0
  111. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
  112. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +108 -0
  113. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
  114. package/build/lazyLoad/react/react_followImports.js +105 -0
  115. package/build/lazyLoad/react/react_followImports.js.map +1 -0
  116. package/build/lazyLoad/react/react_getScriptTags.js +52 -0
  117. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -0
  118. package/build/lazyLoad/react/react_sourcemapUrls.js +44 -0
  119. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -0
  120. package/build/lazyLoad/react/react_webpackChunkPaths.js +188 -0
  121. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -0
  122. package/build/lazyLoad/sourcemap.js +188 -0
  123. package/build/lazyLoad/sourcemap.js.map +1 -0
  124. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
  125. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
  126. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +91 -0
  127. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
  128. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
  129. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
  130. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +123 -0
  131. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
  132. package/build/lazyLoad/techDetect/checkAngularJS.js +70 -0
  133. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -0
  134. package/build/lazyLoad/techDetect/checkNextJS.js +45 -0
  135. package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -0
  136. package/build/lazyLoad/techDetect/checkNuxtJS.js +39 -0
  137. package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -0
  138. package/build/lazyLoad/techDetect/checkReact.js +86 -0
  139. package/build/lazyLoad/techDetect/checkReact.js.map +1 -0
  140. package/build/lazyLoad/techDetect/checkSvelte.js +69 -0
  141. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -0
  142. package/build/lazyLoad/techDetect/checkVueJS.js +118 -0
  143. package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -0
  144. package/build/lazyLoad/techDetect/index.js +161 -0
  145. package/build/lazyLoad/techDetect/index.js.map +1 -0
  146. package/build/lazyLoad/vue/vue_RuntimeJs.js +169 -0
  147. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
  148. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +102 -0
  149. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
  150. package/build/lazyLoad/vue/vue_discoverJsFiles.js +82 -0
  151. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -0
  152. package/build/lazyLoad/vue/vue_getClientSidePaths.js +155 -0
  153. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -0
  154. package/build/lazyLoad/vue/vue_jsImports.js +76 -0
  155. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
  156. package/build/lazyLoad/vue/vue_pageSrc.js +60 -0
  157. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -0
  158. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +64 -0
  159. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
  160. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +142 -0
  161. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -0
  162. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +57 -0
  163. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -0
  164. package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
  165. package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
  166. package/build/lazyLoad/vue/vue_stringJsFiles.js +148 -0
  167. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
  168. package/build/lazyLoad/vue/vue_viteMapDeps.js +89 -0
  169. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -0
  170. package/build/load/index.js +316 -0
  171. package/build/load/index.js.map +1 -0
  172. package/build/map/graphql/resolveGraphql.js +296 -0
  173. package/build/map/graphql/resolveGraphql.js.map +1 -0
  174. package/build/map/index.js +261 -0
  175. package/build/map/index.js.map +1 -0
  176. package/build/map/next_js/getAxiosInstances.js +64 -0
  177. package/build/map/next_js/getAxiosInstances.js.map +1 -0
  178. package/build/map/next_js/getExports.js +101 -0
  179. package/build/map/next_js/getExports.js.map +1 -0
  180. package/build/map/next_js/getFetchInstances.js +139 -0
  181. package/build/map/next_js/getFetchInstances.js.map +1 -0
  182. package/build/map/next_js/getTurbopackConnections.js +255 -0
  183. package/build/map/next_js/getTurbopackConnections.js.map +1 -0
  184. package/build/map/next_js/getWebpackConnections.js +235 -0
  185. package/build/map/next_js/getWebpackConnections.js.map +1 -0
  186. package/build/map/next_js/interactive.js +69 -0
  187. package/build/map/next_js/interactive.js.map +1 -0
  188. package/build/map/next_js/interactive_helpers/commandHandler.js +310 -0
  189. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
  190. package/build/map/next_js/interactive_helpers/commandHelpers.js +245 -0
  191. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
  192. package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
  193. package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
  194. package/build/map/next_js/interactive_helpers/helpMenu.js +12 -0
  195. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
  196. package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
  197. package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
  198. package/build/map/next_js/interactive_helpers/keybindings.js +90 -0
  199. package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
  200. package/build/map/next_js/interactive_helpers/printer.js +23 -0
  201. package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
  202. package/build/map/next_js/interactive_helpers/ui.js +88 -0
  203. package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
  204. package/build/map/next_js/resolveAxios.js +152 -0
  205. package/build/map/next_js/resolveAxios.js.map +1 -0
  206. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +64 -0
  207. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -0
  208. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
  209. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
  210. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +34 -0
  211. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -0
  212. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +39 -0
  213. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -0
  214. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +312 -0
  215. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
  216. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +173 -0
  217. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -0
  218. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
  219. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
  220. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +206 -0
  221. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -0
  222. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +168 -0
  223. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -0
  224. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +121 -0
  225. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
  226. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
  227. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
  228. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +518 -0
  229. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
  230. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +913 -0
  231. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -0
  232. package/build/map/next_js/resolveFetch.js +533 -0
  233. package/build/map/next_js/resolveFetch.js.map +1 -0
  234. package/build/map/next_js/resolveNewRequest.js +749 -0
  235. package/build/map/next_js/resolveNewRequest.js.map +1 -0
  236. package/build/map/next_js/resolveServerActions.js +449 -0
  237. package/build/map/next_js/resolveServerActions.js.map +1 -0
  238. package/build/map/next_js/utils.js +1600 -0
  239. package/build/map/next_js/utils.js.map +1 -0
  240. package/build/map/react_js/getReactConnections.js +303 -0
  241. package/build/map/react_js/getReactConnections.js.map +1 -0
  242. package/build/map/react_js/interactive.js +4 -0
  243. package/build/map/react_js/interactive.js.map +1 -0
  244. package/build/map/react_js/react_resolveFetch.js +6 -0
  245. package/build/map/react_js/react_resolveFetch.js.map +1 -0
  246. package/build/map/svelte_js/interactive.js +58 -0
  247. package/build/map/svelte_js/interactive.js.map +1 -0
  248. package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
  249. package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
  250. package/build/map/vue_js/bodyResolver.js +477 -0
  251. package/build/map/vue_js/bodyResolver.js.map +1 -0
  252. package/build/map/vue_js/crossFileResolver.js +438 -0
  253. package/build/map/vue_js/crossFileResolver.js.map +1 -0
  254. package/build/map/vue_js/getViteConnections.js +343 -0
  255. package/build/map/vue_js/getViteConnections.js.map +1 -0
  256. package/build/map/vue_js/interactive.js +67 -0
  257. package/build/map/vue_js/interactive.js.map +1 -0
  258. package/build/map/vue_js/interactive_helpers/commandHandler.js +307 -0
  259. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -0
  260. package/build/map/vue_js/interactive_helpers/commandHelpers.js +39 -0
  261. package/build/map/vue_js/interactive_helpers/commandHelpers.js.map +1 -0
  262. package/build/map/vue_js/interactive_helpers/helpMenu.js +12 -0
  263. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -0
  264. package/build/map/vue_js/taint_utils.js +621 -0
  265. package/build/map/vue_js/taint_utils.js.map +1 -0
  266. package/build/map/vue_js/vue_resolveFetch.js +416 -0
  267. package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
  268. package/build/map/vue_js/vue_resolveHttpClient.js +738 -0
  269. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
  270. package/build/map/vue_js/vue_resolveXhr.js +282 -0
  271. package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
  272. package/build/mcp/chatOneShot.js +101 -0
  273. package/build/mcp/chatOneShot.js.map +1 -0
  274. package/build/mcp/claudeCodeCreds.js +150 -0
  275. package/build/mcp/claudeCodeCreds.js.map +1 -0
  276. package/build/mcp/cli.js +372 -0
  277. package/build/mcp/cli.js.map +1 -0
  278. package/build/mcp/commands.js +227 -0
  279. package/build/mcp/commands.js.map +1 -0
  280. package/build/mcp/config.js +68 -0
  281. package/build/mcp/config.js.map +1 -0
  282. package/build/mcp/index.js +50 -0
  283. package/build/mcp/index.js.map +1 -0
  284. package/build/mcp/intent.js +204 -0
  285. package/build/mcp/intent.js.map +1 -0
  286. package/build/mcp/jobs.js +199 -0
  287. package/build/mcp/jobs.js.map +1 -0
  288. package/build/mcp/mcpServer.js +241 -0
  289. package/build/mcp/mcpServer.js.map +1 -0
  290. package/build/mcp/providers.js +170 -0
  291. package/build/mcp/providers.js.map +1 -0
  292. package/build/mcp/skills.js +115 -0
  293. package/build/mcp/skills.js.map +1 -0
  294. package/build/mcp/tools.js +185 -0
  295. package/build/mcp/tools.js.map +1 -0
  296. package/build/refactor/index.js +85 -0
  297. package/build/refactor/index.js.map +1 -0
  298. package/build/refactor/next/index.js +109 -0
  299. package/build/refactor/next/index.js.map +1 -0
  300. package/build/refactor/react/index.js +636 -0
  301. package/build/refactor/react/index.js.map +1 -0
  302. package/build/report/index.js +68 -0
  303. package/build/report/index.js.map +1 -0
  304. package/build/report/utility/dataTables/genDataTablesPage.js +158 -0
  305. package/build/report/utility/dataTables/genDataTablesPage.js.map +1 -0
  306. package/build/report/utility/genHtml.js +516 -0
  307. package/build/report/utility/genHtml.js.map +1 -0
  308. package/build/report/utility/initReportDb.js +96 -0
  309. package/build/report/utility/initReportDb.js.map +1 -0
  310. package/build/report/utility/markdownGen/addAnalyze.js +53 -0
  311. package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
  312. package/build/report/utility/markdownGen/addMappedJson.js +33 -0
  313. package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
  314. package/build/report/utility/populateDb/populateAnalysisFindings.js +31 -0
  315. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
  316. package/build/report/utility/populateDb/populateEndpoints.js +50 -0
  317. package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
  318. package/build/report/utility/populateDb/populateMappedJson.js +31 -0
  319. package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
  320. package/build/report/utility/populateDb/populateMappedOpenapi.js +49 -0
  321. package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
  322. package/build/run/index.js +446 -0
  323. package/build/run/index.js.map +1 -0
  324. package/build/run/interruptHandler.js +93 -0
  325. package/build/run/interruptHandler.js.map +1 -0
  326. package/build/strings/index.js +239 -0
  327. package/build/strings/index.js.map +1 -0
  328. package/build/strings/openapi.js +63 -0
  329. package/build/strings/openapi.js.map +1 -0
  330. package/build/strings/permutate.js +62 -0
  331. package/build/strings/permutate.js.map +1 -0
  332. package/build/strings/secrets.js +102 -0
  333. package/build/strings/secrets.js.map +1 -0
  334. package/build/utility/ai.js +97 -0
  335. package/build/utility/ai.js.map +1 -0
  336. package/build/utility/configureSandbox.js +14 -0
  337. package/build/utility/configureSandbox.js.map +1 -0
  338. package/build/utility/globals.js +322 -0
  339. package/build/utility/globals.js.map +1 -0
  340. package/build/utility/interfaces.js +2 -0
  341. package/build/utility/interfaces.js.map +1 -0
  342. package/build/utility/makeReq.js +448 -0
  343. package/build/utility/makeReq.js.map +1 -0
  344. package/build/utility/openapiGenerator.js +254 -0
  345. package/build/utility/openapiGenerator.js.map +1 -0
  346. package/build/utility/postmanGenerator.js +216 -0
  347. package/build/utility/postmanGenerator.js.map +1 -0
  348. package/build/utility/progressLog.js +50 -0
  349. package/build/utility/progressLog.js.map +1 -0
  350. package/build/utility/puppeteerInstance.js +5 -0
  351. package/build/utility/puppeteerInstance.js.map +1 -0
  352. package/build/utility/replaceUrlPlaceholders.js +48 -0
  353. package/build/utility/replaceUrlPlaceholders.js.map +1 -0
  354. package/build/utility/resolvePath.js +44 -0
  355. package/build/utility/resolvePath.js.map +1 -0
  356. package/build/utility/runSandboxed.js +42 -0
  357. package/build/utility/runSandboxed.js.map +1 -0
  358. package/build/utility/urlUtils.js +21 -0
  359. package/build/utility/urlUtils.js.map +1 -0
  360. package/contributing/nextjs.md +410 -0
  361. package/package.json +75 -0
@@ -0,0 +1,448 @@
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
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import chalk from "chalk";
22
+ import puppeteer from "./puppeteerInstance.js";
23
+ import * as globals from "./globals.js";
24
+ import { get } from "../api_gateway/genReq.js";
25
+ import fs from "fs";
26
+ import { EventEmitter } from "events";
27
+ const reportedFailures = new Set();
28
+ const reportFailure = (url, err) => {
29
+ if (reportedFailures.has(url))
30
+ return;
31
+ reportedFailures.add(url);
32
+ if (globals.getCacheOnly()) {
33
+ console.error(chalk.dim(`[!] Cache miss (cache-only mode): ${url}`));
34
+ return;
35
+ }
36
+ console.error(chalk.red(`[!] Failed to fetch ${url} : ${err}`));
37
+ console.log(chalk.dim("[i] Often, using -k flag (ignore SSL errors) fixes the problem"));
38
+ };
39
+ // random user agents
40
+ const UAs = [
41
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
42
+ ];
43
+ /**
44
+ * Reads response data from cache for future requests.
45
+ *
46
+ * If the cache file exists, and the given URL is present in the cache,
47
+ * it checks if the response contains the specific request headers. If it does,
48
+ * it builds a Response object with the cached data and returns it.
49
+ *
50
+ * If the response does not contain the request headers, or if the cache file
51
+ * does not exist, or if the URL is not present in the cache, it returns null.
52
+ *
53
+ * @param url - The URL to read the cache for
54
+ * @param headers - Request headers that were used
55
+ * @returns A Promise that resolves to a Response object if the cache is found, or null if not
56
+ */
57
+ const readCache = (url, headers) => __awaiter(void 0, void 0, void 0, function* () {
58
+ // first, check if the file exists or not
59
+ if (!fs.existsSync(globals.getRespCacheFile())) {
60
+ return null;
61
+ }
62
+ // console.log("reading cache for", url);
63
+ // open the cache file, build a Response, and return
64
+ let cache;
65
+ try {
66
+ cache = JSON.parse(fs.readFileSync(globals.getRespCacheFile(), "utf-8"));
67
+ }
68
+ catch (_a) {
69
+ return null;
70
+ }
71
+ if (cache[url]) {
72
+ // check if the response contains the specific request headers
73
+ // iterate through cache[url] and build a Response
74
+ let headersMatch = true;
75
+ // first check if the essential headers match
76
+ const rscEnabled = headers["RSC"] ? true : false;
77
+ if (rscEnabled) {
78
+ if (cache[url].rsc) {
79
+ return new Response(Buffer.from(cache[url].rsc.body_b64, "base64"), {
80
+ status: cache[url].rsc.status,
81
+ headers: cache[url].rsc.resp_headers,
82
+ });
83
+ }
84
+ }
85
+ if (!rscEnabled && cache[url] && cache[url].normal) {
86
+ return new Response(Buffer.from(cache[url].normal.body_b64, "base64"), {
87
+ status: cache[url].normal.status,
88
+ headers: cache[url].normal.resp_headers,
89
+ });
90
+ }
91
+ }
92
+ // console.log("cache not found for ", url);
93
+ return null;
94
+ });
95
+ /**
96
+ * Writes response data to cache for future requests.
97
+ *
98
+ * Stores response body, status, and headers in cache file, handling special
99
+ * cases like RSC (React Server Components) headers separately.
100
+ *
101
+ * @param url - The URL to cache the response for
102
+ * @param headers - Request headers that were used
103
+ * @param response - The Response object to cache
104
+ * @returns Promise that resolves when caching is complete
105
+ */
106
+ const writeCache = (url, headers, response) => __awaiter(void 0, void 0, void 0, function* () {
107
+ try {
108
+ yield writeCacheUnsafe(url, headers, response);
109
+ }
110
+ catch (err) {
111
+ // Caching must never break a request. Log and move on.
112
+ console.error(chalk.yellow(`[!] Failed to write response cache for ${url}: ${(err === null || err === void 0 ? void 0 : err.message) || err}`));
113
+ }
114
+ });
115
+ const writeCacheUnsafe = (url, headers, response) => __awaiter(void 0, void 0, void 0, function* () {
116
+ // clone the response
117
+ const clonedResponse = response.clone();
118
+ // if cache exists, return
119
+ if ((yield readCache(url, headers)) !== null) {
120
+ // console.log("cache already exists for ", url);
121
+ return;
122
+ }
123
+ // open the cache file, and write the response based on the special headers
124
+ let cache;
125
+ try {
126
+ cache = JSON.parse(fs.readFileSync(globals.getRespCacheFile(), "utf-8"));
127
+ }
128
+ catch (_a) {
129
+ cache = {};
130
+ }
131
+ if (!cache[url]) {
132
+ cache[url] = {};
133
+ }
134
+ const bodyBuffer = Buffer.from(yield clonedResponse.arrayBuffer());
135
+ const body = bodyBuffer.toString("base64");
136
+ const status = clonedResponse.status;
137
+ const resp_headers = clonedResponse.headers;
138
+ if (headers["RSC"]) {
139
+ cache[url].rsc = {
140
+ req_headers: headers,
141
+ status: status,
142
+ body_b64: body,
143
+ resp_headers: resp_headers,
144
+ };
145
+ // console.log("rsc", url);
146
+ }
147
+ else {
148
+ cache[url].normal = {
149
+ req_headers: headers,
150
+ status: status,
151
+ body_b64: body,
152
+ resp_headers: resp_headers,
153
+ };
154
+ // console.log("normal", url);
155
+ }
156
+ let serialized;
157
+ try {
158
+ // so, the cache is the response body for the URL
159
+ serialized = JSON.stringify(cache);
160
+ }
161
+ catch (err) {
162
+ if (err instanceof RangeError) {
163
+ // console.log(
164
+ // chalk.yellow(
165
+ // `[!] Response cache too large to serialize; dropping entry for ${url} and skipping cache write`
166
+ // )
167
+ // );
168
+ // // Roll back the entry we just added so future writes don't keep retrying.
169
+ // if (headers["RSC"]) {
170
+ // delete cache[url].rsc;
171
+ // } else {
172
+ // delete cache[url].normal;
173
+ // }
174
+ // if (!cache[url].rsc && !cache[url].normal) {
175
+ // delete cache[url];
176
+ // }
177
+ // return;
178
+ console.error(chalk.yellow(`[!] Cache too big... Emptying cache`));
179
+ serialized = JSON.stringify({}); // empty cache
180
+ }
181
+ // throw err;
182
+ }
183
+ fs.writeFileSync(globals.getRespCacheFile(), serialized);
184
+ // console.log("wrote cache for ", url);
185
+ });
186
+ /**
187
+ * Performs a single fetch request with retry logic.
188
+ *
189
+ * @param url - The URL to request
190
+ * @param requestOptions - Request options including headers
191
+ * @param requestTimeout - Timeout in milliseconds
192
+ * @returns A Promise that resolves to a Response, or null if all retries fail
193
+ */
194
+ const singleFetch = (url, requestOptions, requestTimeout) => __awaiter(void 0, void 0, void 0, function* () {
195
+ let res;
196
+ let counter = 0;
197
+ while (true) {
198
+ const controller = new AbortController();
199
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
200
+ const currentRequestOptions = Object.assign(Object.assign({}, requestOptions), { signal: controller.signal });
201
+ try {
202
+ EventEmitter.defaultMaxListeners = 20;
203
+ res = yield fetch(url, currentRequestOptions);
204
+ clearTimeout(timeoutId);
205
+ if (res) {
206
+ break;
207
+ }
208
+ }
209
+ catch (err) {
210
+ clearTimeout(timeoutId);
211
+ counter++;
212
+ // BUG: https://github.com/nodejs/node/issues/47246
213
+ if (err.cause && err.cause.code === "UND_ERR_HEADERS_OVERFLOW") {
214
+ console.error(chalk.yellow(`[!] The tool detected a header overflow. Please increase the limit by setting environment variable \`NODE_OPTIONS="--max-http-header-size=99999999"\`. If the error still persists, please try again with a higher limit.`));
215
+ process.exit(21);
216
+ }
217
+ if (err.name === "AbortError") {
218
+ console.error(chalk.red(`[!] Request to ${url} timed out after ${requestTimeout}ms`));
219
+ return null;
220
+ }
221
+ if (counter > 10) {
222
+ reportFailure(url, err);
223
+ return null;
224
+ }
225
+ // sleep 0.5 s before retrying
226
+ yield new Promise((resolve) => setTimeout(resolve, 500));
227
+ continue;
228
+ }
229
+ }
230
+ return res;
231
+ });
232
+ /**
233
+ * Handles firewall detection and bypass using headless browser.
234
+ *
235
+ * @param url - The URL being requested
236
+ * @param resp_text - The response text to check for firewall signatures
237
+ * @returns A Promise that resolves to Response content if firewall detected, or null if not
238
+ */
239
+ const handleFirewall = (url, resp_text) => __awaiter(void 0, void 0, void 0, function* () {
240
+ if (resp_text.includes("/?bm-verify=") || resp_text.includes("<title>Just a moment...</title>")) {
241
+ console.error(chalk.yellow(`[!] CF Firewall detected. Trying to bypass with headless browser`));
242
+ const browser = yield puppeteer.launch({
243
+ headless: true,
244
+ args: globals.getDisableSandbox() ? ["--no-sandbox", "--disable-setuid-sandbox"] : [],
245
+ });
246
+ const page = yield browser.newPage();
247
+ yield page.goto(url);
248
+ yield new Promise((resolve) => setTimeout(resolve, 5000));
249
+ const content = yield page.content();
250
+ yield browser.close();
251
+ return content;
252
+ }
253
+ else if (resp_text.includes("403 ERROR") && resp_text.includes("Generated by cloudfront")) {
254
+ console.error(chalk.yellow(`[!] Cloudfront Firewall detected. Trying to bypass with headless browser`));
255
+ const browser = yield puppeteer.launch({
256
+ headless: true,
257
+ args: globals.getDisableSandbox() ? ["--no-sandbox", "--disable-setuid-sandbox"] : [],
258
+ });
259
+ const page = yield browser.newPage();
260
+ yield page.goto(url);
261
+ yield new Promise((resolve) => setTimeout(resolve, 5000));
262
+ const content = yield page.content();
263
+ yield browser.close();
264
+ return content;
265
+ }
266
+ return null;
267
+ });
268
+ /**
269
+ * Makes a GET request to the given URL and returns the response.
270
+ *
271
+ * If caching is enabled, it will first check if the response is cached.
272
+ * If it is, it will return the cached response. If not, it will make the request
273
+ * using the given options, and cache the response before returning it.
274
+ *
275
+ * When no custom headers are provided, tries both with and without Referer header,
276
+ * returning the successful (200) response.
277
+ *
278
+ * If the request fails, it will retry up to 10 times with 0.5s of sleep in between.
279
+ * If all retries fail, it will return null.
280
+ *
281
+ * @param url - The URL to request
282
+ * @param args - Request options
283
+ * @returns A Promise that resolves to a Response, or null if all retries fail
284
+ */
285
+ const makeRequest = (url, args) => __awaiter(void 0, void 0, void 0, function* () {
286
+ if (url.startsWith("//")) {
287
+ url = "https:" + url;
288
+ }
289
+ const _a = args || {}, { timeout } = _a, restArgs = __rest(_a, ["timeout"]);
290
+ const requestOptions = restArgs;
291
+ const requestTimeout = timeout || globals.getRequestTimeout();
292
+ const usingDefaultHeaders = !requestOptions.headers;
293
+ // Build default headers if not provided
294
+ const baseHeaders = {
295
+ "User-Agent": UAs[Math.floor(Math.random() * UAs.length)],
296
+ Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
297
+ "Accept-Language": "en-US,en;q=0.9",
298
+ "Sec-Fetch-Site": "same-origin",
299
+ "Sec-Fetch-Mode": "cors",
300
+ "Sec-Fetch-Dest": "empty",
301
+ };
302
+ let parsedOrigin = null;
303
+ try {
304
+ parsedOrigin = new URL(url).origin;
305
+ }
306
+ catch (_b) {
307
+ return null;
308
+ }
309
+ if (!requestOptions.headers) {
310
+ requestOptions.headers = Object.assign(Object.assign({}, baseHeaders), { Referer: parsedOrigin, Origin: parsedOrigin });
311
+ }
312
+ // if cache is enabled, read the cache and return if cache is present. else, continue
313
+ if (!globals.getDisableCache()) {
314
+ const cachedResponse = yield readCache(url, requestOptions.headers || {});
315
+ // if the response if cached, then check if contains any signatures of firewall
316
+ if (cachedResponse !== null) {
317
+ const cachedText = yield cachedResponse.clone().text();
318
+ const firewallContent = yield handleFirewall(url, cachedText);
319
+ if (firewallContent) {
320
+ yield writeCache(url, requestOptions.headers || {}, new Response(firewallContent));
321
+ return new Response(firewallContent);
322
+ }
323
+ return cachedResponse;
324
+ }
325
+ }
326
+ if (globals.getCacheOnly()) {
327
+ reportFailure(url, "cache miss in cache-only mode");
328
+ return null;
329
+ }
330
+ if (globals.useApiGateway) {
331
+ const get_headers = requestOptions.headers;
332
+ const body = yield get(url, get_headers);
333
+ // craft a Response, and return that
334
+ const response = new Response(body);
335
+ // if cache is enabled, write the response to the cache
336
+ if (!globals.getDisableCache()) {
337
+ yield writeCache(url, get_headers, response);
338
+ }
339
+ return response;
340
+ }
341
+ else {
342
+ // Helper to read response once and store data for reuse.
343
+ // We copy the bytes into a Buffer that owns its own ArrayBuffer so the
344
+ // stored body cannot be invalidated by undici recycling its internal
345
+ // buffer after we consume the response.
346
+ const consumeResponse = (res) => __awaiter(void 0, void 0, void 0, function* () {
347
+ if (!res)
348
+ return null;
349
+ const ab = yield res.arrayBuffer();
350
+ const body = Buffer.alloc(ab.byteLength);
351
+ body.set(new Uint8Array(ab));
352
+ const text = body.toString("utf-8");
353
+ // Snapshot headers as a plain object so we can rebuild a fresh
354
+ // Headers instance per Response instead of sharing state.
355
+ const headers = new Headers(res.headers);
356
+ return { body, status: res.status, headers, ok: res.ok, text };
357
+ });
358
+ // Helper to create Response from stored data. Pass the body as an
359
+ // immutable string so each Response gets a fully independent backing
360
+ // store; undici has been known to flag Responses as already-consumed
361
+ // when buffer-backed bodies share underlying memory. Strip headers
362
+ // that no longer match the decoded body (content-length / encoding).
363
+ const createResponse = (data) => {
364
+ // Copy bytes into a fresh Uint8Array so each Response owns its
365
+ // backing memory — text decoding would corrupt binary payloads.
366
+ const bodyCopy = new Uint8Array(data.body.byteLength);
367
+ bodyCopy.set(data.body);
368
+ const headers = new Headers(data.headers);
369
+ headers.delete("content-length");
370
+ headers.delete("content-encoding");
371
+ headers.delete("transfer-encoding");
372
+ return new Response(bodyCopy, { status: data.status, headers });
373
+ };
374
+ // When using default headers, try both with and without Referer/Origin
375
+ // to handle servers that return 404 for one but 200 for the other
376
+ if (usingDefaultHeaders) {
377
+ // First try: with Referer and Origin
378
+ const headersWithReferer = Object.assign(Object.assign({}, baseHeaders), { Referer: new URL(url).origin, Origin: new URL(url).origin });
379
+ const resWithReferer = yield singleFetch(url, Object.assign(Object.assign({}, requestOptions), { headers: headersWithReferer }), requestTimeout);
380
+ const dataWithReferer = yield consumeResponse(resWithReferer);
381
+ if (dataWithReferer && dataWithReferer.ok) {
382
+ // Check for firewall
383
+ const firewallContent = yield handleFirewall(url, dataWithReferer.text);
384
+ if (firewallContent) {
385
+ if (!globals.getDisableCache()) {
386
+ yield writeCache(url, headersWithReferer, new Response(firewallContent));
387
+ }
388
+ return new Response(firewallContent);
389
+ }
390
+ // Cache and return successful response
391
+ if (!globals.getDisableCache()) {
392
+ yield writeCache(url, headersWithReferer, createResponse(dataWithReferer));
393
+ }
394
+ return createResponse(dataWithReferer);
395
+ }
396
+ // Second try: without Referer and Origin
397
+ const headersWithoutReferer = Object.assign({}, baseHeaders);
398
+ const resWithoutReferer = yield singleFetch(url, Object.assign(Object.assign({}, requestOptions), { headers: headersWithoutReferer }), requestTimeout);
399
+ const dataWithoutReferer = yield consumeResponse(resWithoutReferer);
400
+ if (dataWithoutReferer && dataWithoutReferer.ok) {
401
+ // Check for firewall
402
+ const firewallContent = yield handleFirewall(url, dataWithoutReferer.text);
403
+ if (firewallContent) {
404
+ if (!globals.getDisableCache()) {
405
+ yield writeCache(url, headersWithoutReferer, new Response(firewallContent));
406
+ }
407
+ return new Response(firewallContent);
408
+ }
409
+ // Cache and return successful response
410
+ if (!globals.getDisableCache()) {
411
+ yield writeCache(url, headersWithoutReferer, createResponse(dataWithoutReferer));
412
+ }
413
+ return createResponse(dataWithoutReferer);
414
+ }
415
+ // Both failed, return whichever response we got (prefer non-null)
416
+ const finalData = dataWithReferer || dataWithoutReferer;
417
+ if (finalData) {
418
+ if (!globals.getDisableCache()) {
419
+ yield writeCache(url, headersWithReferer, createResponse(finalData));
420
+ }
421
+ return createResponse(finalData);
422
+ }
423
+ return null;
424
+ }
425
+ else {
426
+ // Custom headers provided, use them directly
427
+ const res = yield singleFetch(url, requestOptions, requestTimeout);
428
+ const data = yield consumeResponse(res);
429
+ if (!data)
430
+ return null;
431
+ // Check for firewall
432
+ const firewallContent = yield handleFirewall(url, data.text);
433
+ if (firewallContent) {
434
+ if (!globals.getDisableCache()) {
435
+ yield writeCache(url, requestOptions.headers || {}, new Response(firewallContent));
436
+ }
437
+ return new Response(firewallContent);
438
+ }
439
+ // Cache and return
440
+ if (!globals.getDisableCache()) {
441
+ yield writeCache(url, requestOptions.headers || {}, createResponse(data));
442
+ }
443
+ return createResponse(data);
444
+ }
445
+ }
446
+ });
447
+ export default makeRequest;
448
+ //# sourceMappingURL=makeReq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeReq.js","sourceRoot":"","sources":["../../src/utility/makeReq.ts"],"names":[],"mappings":"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"}