@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,316 @@
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 __asyncValues = (this && this.__asyncValues) || function (o) {
11
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
12
+ var m = o[Symbol.asyncIterator], i;
13
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
14
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
15
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
16
+ };
17
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
18
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
19
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
20
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
21
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
22
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
23
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
24
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
25
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
26
+ function fulfill(value) { resume("next", value); }
27
+ function reject(value) { resume("throw", value); }
28
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
29
+ };
30
+ import fs from "fs";
31
+ import chalk from "chalk";
32
+ import { URL } from "url";
33
+ import zlib from "zlib";
34
+ import * as globals from "../utility/globals.js";
35
+ const DEFAULT_PORTS = { "http:": 80, "https:": 443 };
36
+ function streamCaidoEntries(filePath, rawFilter) {
37
+ return __asyncGenerator(this, arguments, function* streamCaidoEntries_1() {
38
+ var _a, e_1, _b, _c;
39
+ const stream = fs.createReadStream(filePath, { encoding: "utf8", highWaterMark: 1024 * 1024 });
40
+ let depth = 0;
41
+ let inString = false;
42
+ let escape = false;
43
+ let started = false;
44
+ let inObject = false;
45
+ let pending = [];
46
+ let startIdx = -1;
47
+ try {
48
+ for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield __await(stream_1.next()), _a = stream_1_1.done, !_a; _d = true) {
49
+ _c = stream_1_1.value;
50
+ _d = false;
51
+ const chunk = _c;
52
+ const buf = chunk;
53
+ for (let i = 0; i < buf.length; i++) {
54
+ const c = buf[i];
55
+ if (!started) {
56
+ if (c === "[")
57
+ started = true;
58
+ continue;
59
+ }
60
+ if (!inObject) {
61
+ if (c === "{") {
62
+ inObject = true;
63
+ depth = 1;
64
+ startIdx = i;
65
+ }
66
+ continue;
67
+ }
68
+ if (inString) {
69
+ if (escape)
70
+ escape = false;
71
+ else if (c === "\\")
72
+ escape = true;
73
+ else if (c === '"')
74
+ inString = false;
75
+ continue;
76
+ }
77
+ if (c === '"') {
78
+ inString = true;
79
+ }
80
+ else if (c === "{") {
81
+ depth++;
82
+ }
83
+ else if (c === "}") {
84
+ depth--;
85
+ if (depth === 0) {
86
+ pending.push(buf.slice(startIdx, i + 1));
87
+ const objStr = pending.length === 1 ? pending[0] : pending.join("");
88
+ pending = [];
89
+ inObject = false;
90
+ startIdx = -1;
91
+ if (rawFilter(objStr)) {
92
+ try {
93
+ yield yield __await(JSON.parse(objStr));
94
+ }
95
+ catch (_e) {
96
+ // skip malformed object
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ if (inObject && startIdx !== -1) {
103
+ pending.push(buf.slice(startIdx));
104
+ startIdx = 0;
105
+ }
106
+ }
107
+ }
108
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
109
+ finally {
110
+ try {
111
+ if (!_d && !_a && (_b = stream_1.return)) yield __await(_b.call(stream_1));
112
+ }
113
+ finally { if (e_1) throw e_1.error; }
114
+ }
115
+ });
116
+ }
117
+ function splitHttpMessage(raw) {
118
+ const sep = Buffer.from("\r\n\r\n");
119
+ const idx = raw.indexOf(sep);
120
+ if (idx === -1) {
121
+ const lfSep = Buffer.from("\n\n");
122
+ const idx2 = raw.indexOf(lfSep);
123
+ if (idx2 === -1)
124
+ return null;
125
+ return { headerText: raw.slice(0, idx2).toString("utf8"), body: raw.slice(idx2 + 2) };
126
+ }
127
+ return { headerText: raw.slice(0, idx).toString("utf8"), body: raw.slice(idx + 4) };
128
+ }
129
+ function parseHeaders(headerText) {
130
+ const lines = headerText.split(/\r?\n/);
131
+ const firstLine = lines.shift() || "";
132
+ const headers = {};
133
+ for (const line of lines) {
134
+ if (!line)
135
+ continue;
136
+ const colon = line.indexOf(":");
137
+ if (colon === -1)
138
+ continue;
139
+ const key = line.slice(0, colon).trim();
140
+ const value = line.slice(colon + 1).trim();
141
+ if (!key)
142
+ continue;
143
+ headers[key] = value;
144
+ }
145
+ return { firstLine, headers };
146
+ }
147
+ function decodeBody(body, headers) {
148
+ var _a, _b;
149
+ const enc = (_b = (_a = Object.entries(headers)
150
+ .find(([k]) => k.toLowerCase() === "content-encoding")) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.toLowerCase();
151
+ if (!enc)
152
+ return body;
153
+ try {
154
+ if (enc.includes("gzip"))
155
+ return zlib.gunzipSync(body);
156
+ if (enc.includes("br"))
157
+ return zlib.brotliDecompressSync(body);
158
+ if (enc.includes("deflate")) {
159
+ try {
160
+ return zlib.inflateSync(body);
161
+ }
162
+ catch (_c) {
163
+ return zlib.inflateRawSync(body);
164
+ }
165
+ }
166
+ if (enc.includes("zstd") && zlib.zstdDecompressSync) {
167
+ return zlib.zstdDecompressSync(body);
168
+ }
169
+ }
170
+ catch (_d) {
171
+ // fall through and return raw body
172
+ }
173
+ return body;
174
+ }
175
+ function buildUrlVariants(entry) {
176
+ const scheme = entry.is_tls ? "https:" : "http:";
177
+ const defaultPort = DEFAULT_PORTS[scheme];
178
+ const hasNonDefaultPort = entry.port && entry.port !== defaultPort;
179
+ const hostWithPort = hasNonDefaultPort ? `${entry.host}:${entry.port}` : entry.host;
180
+ const hostNoPort = entry.host;
181
+ const path = entry.path || "/";
182
+ const query = entry.query ? `?${entry.query}` : "";
183
+ const variants = new Set();
184
+ variants.add(`${scheme}//${hostWithPort}${path}${query}`);
185
+ if (hasNonDefaultPort) {
186
+ variants.add(`${scheme}//${hostNoPort}${path}${query}`);
187
+ }
188
+ else {
189
+ variants.add(`${scheme}//${entry.host}:${entry.port}${path}${query}`);
190
+ }
191
+ if (path === "/" && !query) {
192
+ variants.add(`${scheme}//${hostWithPort}`);
193
+ if (hasNonDefaultPort)
194
+ variants.add(`${scheme}//${hostNoPort}`);
195
+ }
196
+ return Array.from(variants);
197
+ }
198
+ const load = (caidoFile, targetUrl) => __awaiter(void 0, void 0, void 0, function* () {
199
+ var _a, e_2, _b, _c;
200
+ console.log(chalk.cyan("[i] Loading 'Load' module"));
201
+ if (!fs.existsSync(caidoFile)) {
202
+ console.error(chalk.red(`[!] Caido file not found: ${caidoFile}`));
203
+ process.exit(1);
204
+ }
205
+ let targetHost;
206
+ let targetPort;
207
+ let targetScheme;
208
+ try {
209
+ const u = new URL(targetUrl);
210
+ targetHost = u.hostname;
211
+ targetScheme = u.protocol;
212
+ targetPort = u.port ? parseInt(u.port, 10) : DEFAULT_PORTS[u.protocol];
213
+ }
214
+ catch (_d) {
215
+ console.error(chalk.red(`[!] Invalid target URL: ${targetUrl}`));
216
+ process.exit(1);
217
+ }
218
+ const cacheFile = globals.getRespCacheFile();
219
+ let cache = {};
220
+ if (fs.existsSync(cacheFile)) {
221
+ try {
222
+ cache = JSON.parse(fs.readFileSync(cacheFile, "utf-8"));
223
+ }
224
+ catch (_e) {
225
+ cache = {};
226
+ }
227
+ }
228
+ console.log(chalk.cyan(`[i] Filtering Caido entries for ${targetScheme}//${targetHost}:${targetPort} → ${cacheFile}`));
229
+ let scanned = 0;
230
+ let matched = 0;
231
+ let stored = 0;
232
+ const hostNeedle = `"host":"${targetHost}"`;
233
+ const rawFilter = (raw) => raw.includes(hostNeedle);
234
+ try {
235
+ for (var _f = true, _g = __asyncValues(streamCaidoEntries(caidoFile, rawFilter)), _h; _h = yield _g.next(), _a = _h.done, !_a; _f = true) {
236
+ _c = _h.value;
237
+ _f = false;
238
+ const entry = _c;
239
+ scanned++;
240
+ if (scanned % 5000 === 0) {
241
+ process.stdout.write(chalk.dim(`\r[i] Scanned ${scanned} entries (matched ${matched})`));
242
+ }
243
+ if (!entry || !entry.host)
244
+ continue;
245
+ if (entry.host !== targetHost)
246
+ continue;
247
+ if (entry.port !== targetPort)
248
+ continue;
249
+ const entryScheme = entry.is_tls ? "https:" : "http:";
250
+ if (entryScheme !== targetScheme)
251
+ continue;
252
+ if (!entry.response)
253
+ continue;
254
+ matched++;
255
+ let respRaw;
256
+ let reqRaw;
257
+ try {
258
+ respRaw = Buffer.from(entry.response.raw, "base64");
259
+ reqRaw = Buffer.from(entry.raw, "base64");
260
+ }
261
+ catch (_j) {
262
+ continue;
263
+ }
264
+ const respParts = splitHttpMessage(respRaw);
265
+ if (!respParts)
266
+ continue;
267
+ const reqParts = splitHttpMessage(reqRaw);
268
+ const respParsed = parseHeaders(respParts.headerText);
269
+ const reqHeaders = reqParts ? parseHeaders(reqParts.headerText).headers : {};
270
+ const decodedBody = decodeBody(respParts.body, respParsed.headers);
271
+ const bodyB64 = decodedBody.toString("base64");
272
+ const respHeaders = {};
273
+ for (const [k, v] of Object.entries(respParsed.headers)) {
274
+ const lk = k.toLowerCase();
275
+ if (lk === "content-length" || lk === "content-encoding" || lk === "transfer-encoding")
276
+ continue;
277
+ respHeaders[k] = v;
278
+ }
279
+ const status = entry.response.status_code || parseInt(respParsed.firstLine.split(/\s+/)[1] || "200", 10);
280
+ const isRsc = Object.keys(reqHeaders).some((h) => h.toUpperCase() === "RSC");
281
+ const entryKey = isRsc ? "rsc" : "normal";
282
+ for (const url of buildUrlVariants(entry)) {
283
+ if (!cache[url])
284
+ cache[url] = {};
285
+ cache[url][entryKey] = {
286
+ req_headers: reqHeaders,
287
+ status,
288
+ body_b64: bodyB64,
289
+ resp_headers: respHeaders,
290
+ };
291
+ stored++;
292
+ }
293
+ }
294
+ }
295
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
296
+ finally {
297
+ try {
298
+ if (!_f && !_a && (_b = _g.return)) yield _b.call(_g);
299
+ }
300
+ finally { if (e_2) throw e_2.error; }
301
+ }
302
+ process.stdout.write("\r");
303
+ try {
304
+ fs.writeFileSync(cacheFile, JSON.stringify(cache));
305
+ }
306
+ catch (err) {
307
+ if (err instanceof RangeError) {
308
+ console.error(chalk.red(`[!] Cache too large to serialize as one JSON string.`));
309
+ process.exit(1);
310
+ }
311
+ throw err;
312
+ }
313
+ console.log(chalk.green(`[✓] Load complete — scanned ${scanned}, matched ${matched}, wrote ${stored} cache entries to ${cacheFile}`));
314
+ });
315
+ export default load;
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/load/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,296 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import fs from "fs";
12
+ import path from "path";
13
+ import parser from "@babel/parser";
14
+ import _traverse from "@babel/traverse";
15
+ import { parse as gqlParse, print as gqlPrint, Kind, } from "graphql";
16
+ import * as globals from "../../utility/globals.js";
17
+ const traverse = _traverse.default;
18
+ const OPERATION_TOKEN_RE = /\b(query|mutation|subscription|fragment)\b/;
19
+ const MIN_CANDIDATE_LEN = 20;
20
+ /**
21
+ * Convert a TemplateLiteral AST node into a cooked string with each
22
+ * interpolation replaced by a neutral placeholder. We use a short alphanumeric
23
+ * filler rather than `${...}` because the GraphQL parser would reject the
24
+ * literal `$` syntax. Interpolations inside GraphQL templates almost always
25
+ * sit at value positions (variable defaults, enum names) where a placeholder
26
+ * may or may not parse — failures are silently dropped at the parse stage.
27
+ */
28
+ const templateLiteralToString = (node) => {
29
+ var _a, _b, _c, _d;
30
+ if (!node || !Array.isArray(node.quasis))
31
+ return "";
32
+ const parts = [];
33
+ for (let i = 0; i < node.quasis.length; i++) {
34
+ const q = node.quasis[i];
35
+ const cooked = (_d = (_b = (_a = q === null || q === void 0 ? void 0 : q.value) === null || _a === void 0 ? void 0 : _a.cooked) !== null && _b !== void 0 ? _b : (_c = q === null || q === void 0 ? void 0 : q.value) === null || _c === void 0 ? void 0 : _c.raw) !== null && _d !== void 0 ? _d : "";
36
+ parts.push(cooked);
37
+ if (i < node.quasis.length - 1) {
38
+ parts.push("__jsrecon_interp__");
39
+ }
40
+ }
41
+ return parts.join("");
42
+ };
43
+ /**
44
+ * Maps a GraphQL variable type AST node onto an example value that follows
45
+ * the existing `<string>` / `<number>` / `<boolean>` placeholder convention
46
+ * already understood by openapiGenerator's getZodPlaceholderType().
47
+ */
48
+ const placeholderForType = (typeNode) => {
49
+ if (typeNode.kind === Kind.NON_NULL_TYPE) {
50
+ return placeholderForType(typeNode.type);
51
+ }
52
+ if (typeNode.kind === Kind.LIST_TYPE) {
53
+ return [placeholderForType(typeNode.type)];
54
+ }
55
+ const name = typeNode.name.value;
56
+ switch (name) {
57
+ case "String":
58
+ case "ID":
59
+ return "<string>";
60
+ case "Int":
61
+ case "Float":
62
+ return "<number>";
63
+ case "Boolean":
64
+ return "<boolean>";
65
+ default:
66
+ return "<string>";
67
+ }
68
+ };
69
+ const buildVariablesStub = (defs) => {
70
+ const out = {};
71
+ if (!defs)
72
+ return out;
73
+ for (const def of defs) {
74
+ out[def.variable.name.value] = placeholderForType(def.type);
75
+ }
76
+ return out;
77
+ };
78
+ /**
79
+ * Captures candidate strings from a JS file's AST. We look at StringLiteral
80
+ * and TemplateLiteral nodes only — both directly carry GraphQL source text in
81
+ * real-world bundles (plain strings from `gql("…")` calls and inlined
82
+ * mutation/query exports; template literals from `gql\`…\``).
83
+ */
84
+ const collectCandidates = (code) => {
85
+ const candidates = [];
86
+ let ast;
87
+ try {
88
+ ast = parser.parse(code, {
89
+ sourceType: "unambiguous",
90
+ allowReturnOutsideFunction: true,
91
+ allowAwaitOutsideFunction: true,
92
+ allowImportExportEverywhere: true,
93
+ errorRecovery: true,
94
+ plugins: ["jsx", "typescript"],
95
+ });
96
+ }
97
+ catch (_a) {
98
+ return candidates;
99
+ }
100
+ const seenInFile = new Set();
101
+ traverse(ast, {
102
+ StringLiteral(p) {
103
+ var _a, _b, _c;
104
+ const v = p.node.value;
105
+ if (typeof v !== "string" || v.length < MIN_CANDIDATE_LEN)
106
+ return;
107
+ if (!OPERATION_TOKEN_RE.test(v))
108
+ return;
109
+ if (seenInFile.has(v))
110
+ return;
111
+ seenInFile.add(v);
112
+ candidates.push({ source: v, line: (_c = (_b = (_a = p.node.loc) === null || _a === void 0 ? void 0 : _a.start) === null || _b === void 0 ? void 0 : _b.line) !== null && _c !== void 0 ? _c : 0 });
113
+ },
114
+ TemplateLiteral(p) {
115
+ var _a, _b, _c;
116
+ const v = templateLiteralToString(p.node);
117
+ if (v.length < MIN_CANDIDATE_LEN)
118
+ return;
119
+ if (!OPERATION_TOKEN_RE.test(v))
120
+ return;
121
+ if (seenInFile.has(v))
122
+ return;
123
+ seenInFile.add(v);
124
+ candidates.push({ source: v, line: (_c = (_b = (_a = p.node.loc) === null || _a === void 0 ? void 0 : _a.start) === null || _b === void 0 ? void 0 : _b.line) !== null && _c !== void 0 ? _c : 0 });
125
+ },
126
+ });
127
+ return candidates;
128
+ };
129
+ const tryParse = (source) => {
130
+ try {
131
+ return gqlParse(source, { noLocation: true });
132
+ }
133
+ catch (_a) {
134
+ return null;
135
+ }
136
+ };
137
+ /**
138
+ * Re-prints a single operation as a standalone document, inlining any
139
+ * fragment definitions referenced from the operation so the emitted query
140
+ * body is self-contained.
141
+ */
142
+ const printOperationStandalone = (op, fragments) => {
143
+ const referenced = new Set();
144
+ const visit = (node) => {
145
+ var _a;
146
+ if (!node || typeof node !== "object")
147
+ return;
148
+ if (node.kind === Kind.FRAGMENT_SPREAD && ((_a = node === null || node === void 0 ? void 0 : node.name) === null || _a === void 0 ? void 0 : _a.value)) {
149
+ referenced.add(node.name.value);
150
+ }
151
+ for (const key of Object.keys(node)) {
152
+ const child = node[key];
153
+ if (Array.isArray(child))
154
+ child.forEach(visit);
155
+ else if (child && typeof child === "object" && child.kind)
156
+ visit(child);
157
+ }
158
+ };
159
+ visit(op);
160
+ // Transitively pull in fragments that reference other fragments
161
+ const out = [];
162
+ const queue = Array.from(referenced);
163
+ const added = new Set();
164
+ while (queue.length > 0) {
165
+ const name = queue.shift();
166
+ if (added.has(name))
167
+ continue;
168
+ const frag = fragments.get(name);
169
+ if (!frag)
170
+ continue;
171
+ added.add(name);
172
+ out.push(frag);
173
+ visit(frag);
174
+ for (const ref of referenced) {
175
+ if (!added.has(ref) && !queue.includes(ref))
176
+ queue.push(ref);
177
+ }
178
+ }
179
+ const doc = { kind: Kind.DOCUMENT, definitions: [op, ...out] };
180
+ return gqlPrint(doc);
181
+ };
182
+ /**
183
+ * Scans every JS file under `directory` for embedded GraphQL operations and
184
+ * emits one OpenAPI POST entry per distinct operation under a flat
185
+ * `GraphQL` collection folder. The endpoint URL is parameterised via the
186
+ * `{{graphqlEndpoint}}` placeholder so importers can substitute the real
187
+ * path at import time — this resolver does not attempt to locate the
188
+ * transport URL in the bundle.
189
+ */
190
+ const resolveGraphql = (directory) => __awaiter(void 0, void 0, void 0, function* () {
191
+ var _a;
192
+ console.log(chalk.cyan("[i] Scanning for embedded GraphQL operations"));
193
+ let files;
194
+ try {
195
+ files = fs.readdirSync(directory, { recursive: true, encoding: "utf8" });
196
+ }
197
+ catch (_b) {
198
+ console.error(chalk.red(`[!] Could not read directory: ${directory}`));
199
+ return;
200
+ }
201
+ files = files.filter((f) => f.endsWith(".js") || f.endsWith(".mjs"));
202
+ const total = files.length;
203
+ console.log(chalk.cyan(`[i] Scanning ${total} JS file(s) for GraphQL operations`));
204
+ // Two-phase to handle fragment-only files: first collect ALL fragments
205
+ // across all files, then emit operations with their fragment closures.
206
+ const allFragments = new Map();
207
+ const pendingOps = [];
208
+ let lastPct = -1;
209
+ const startTs = Date.now();
210
+ for (let i = 0; i < total; i++) {
211
+ if (i > 0 && i % 50 === 0)
212
+ yield new Promise((r) => setImmediate(r));
213
+ const pct = total === 0 ? 100 : Math.floor(((i + 1) * 100) / total);
214
+ if (pct !== lastPct && (pct % 10 === 0 || pct === 100)) {
215
+ const elapsed = ((Date.now() - startTs) / 1000).toFixed(1);
216
+ console.log(chalk.gray(` [scan] ${pct}% (${i + 1}/${total}) ops=${pendingOps.length} fragments=${allFragments.size} elapsed=${elapsed}s`));
217
+ lastPct = pct;
218
+ }
219
+ const rel = files[i];
220
+ const filePath = path.join(directory, rel);
221
+ let stat;
222
+ try {
223
+ stat = fs.lstatSync(filePath);
224
+ }
225
+ catch (_c) {
226
+ continue;
227
+ }
228
+ if (stat.isDirectory())
229
+ continue;
230
+ let content;
231
+ try {
232
+ content = fs.readFileSync(filePath, "utf-8");
233
+ }
234
+ catch (_d) {
235
+ continue;
236
+ }
237
+ if (!OPERATION_TOKEN_RE.test(content))
238
+ continue;
239
+ const candidates = collectCandidates(content);
240
+ for (const c of candidates) {
241
+ const doc = tryParse(c.source);
242
+ if (!doc)
243
+ continue;
244
+ for (const def of doc.definitions) {
245
+ if (def.kind === Kind.OPERATION_DEFINITION) {
246
+ pendingOps.push({ op: def, filePath, line: c.line });
247
+ }
248
+ else if (def.kind === Kind.FRAGMENT_DEFINITION) {
249
+ const name = def.name.value;
250
+ if (!allFragments.has(name))
251
+ allFragments.set(name, def);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ const emittedKeys = new Set();
257
+ let emitted = 0;
258
+ let anonCounter = 0;
259
+ for (const { op, filePath, line } of pendingOps) {
260
+ const printedQuery = printOperationStandalone(op, allFragments);
261
+ const operationName = (_a = op.name) === null || _a === void 0 ? void 0 : _a.value;
262
+ const variables = buildVariablesStub(op.variableDefinitions);
263
+ const bodyObj = { query: printedQuery };
264
+ if (operationName)
265
+ bodyObj.operationName = operationName;
266
+ if (Object.keys(variables).length > 0)
267
+ bodyObj.variables = variables;
268
+ // Dedupe key: normalized query + operationName. A fragment used by
269
+ // multiple operations still produces distinct entries because the
270
+ // surrounding operation differs.
271
+ const dedupeKey = `${operationName !== null && operationName !== void 0 ? operationName : ""}::${printedQuery}`;
272
+ if (emittedKeys.has(dedupeKey))
273
+ continue;
274
+ emittedKeys.add(dedupeKey);
275
+ const summary = operationName !== null && operationName !== void 0 ? operationName : `anonymous ${op.operation} #${++anonCounter}`;
276
+ globals.addOpenapiOutput({
277
+ url: "/{{graphqlEndpoint}}",
278
+ method: "POST",
279
+ path: "/{{graphqlEndpoint}}",
280
+ headers: {
281
+ "Content-Type": "application/json",
282
+ Accept: "application/json",
283
+ },
284
+ body: JSON.stringify(bodyObj),
285
+ chunkId: "",
286
+ functionFile: filePath,
287
+ functionFileLine: line,
288
+ summary,
289
+ collectionFolder: "GraphQL",
290
+ });
291
+ emitted++;
292
+ }
293
+ console.log(chalk.green(`[✓] GraphQL: emitted ${emitted} operation(s) from ${allFragments.size} fragment(s) and ${pendingOps.length} parsed operation(s)`));
294
+ });
295
+ export default resolveGraphql;
296
+ //# sourceMappingURL=resolveGraphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveGraphql.js","sourceRoot":"","sources":["../../../src/map/graphql/resolveGraphql.ts"],"names":[],"mappings":"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"}