@shriyanss/js-recon 1.2.2 → 1.3.1-alpha.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 (152) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/build/analyze/engine/astEngine.js +65 -31
  3. package/build/analyze/engine/astEngine.js.map +1 -1
  4. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  5. package/build/analyze/helpers/engineHelpers/taintFlow.js +218 -0
  6. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
  7. package/build/analyze/helpers/schemas.js +2 -0
  8. package/build/analyze/helpers/schemas.js.map +1 -1
  9. package/build/endpoints/next_js/client_jsFilesHref.js +4 -2
  10. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  11. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  12. package/build/endpoints/next_js/client_subsequentRequests.js +12 -4
  13. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  14. package/build/globalConfig.js +1 -1
  15. package/build/globalConfig.js.map +1 -1
  16. package/build/index.js +16 -2
  17. package/build/index.js.map +1 -1
  18. package/build/lazyLoad/downloadFilesUtil.js +74 -80
  19. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  20. package/build/lazyLoad/downloadLoadedJsUtil.js +1 -1
  21. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
  22. package/build/lazyLoad/downloadQueue.js +186 -0
  23. package/build/lazyLoad/downloadQueue.js.map +1 -0
  24. package/build/lazyLoad/index.js +76 -89
  25. package/build/lazyLoad/index.js.map +1 -1
  26. package/build/lazyLoad/next_js/NextJsCrawler.js +109 -32
  27. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  28. package/build/lazyLoad/next_js/next_GetJSScript.js +20 -3
  29. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
  30. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +1 -1
  31. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  32. package/build/lazyLoad/next_js/next_SubsequentRequests.js +24 -4
  33. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  34. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +8 -3
  35. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
  36. package/build/lazyLoad/next_js/next_getClientSidePaths.js +83 -0
  37. package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -0
  38. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +10 -1
  39. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
  40. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  41. package/build/lazyLoad/react/react_getScriptTags.js +29 -0
  42. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -0
  43. package/build/lazyLoad/react/react_sourcemapUrls.js +44 -0
  44. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -0
  45. package/build/lazyLoad/react/react_webpackChunkPaths.js +188 -0
  46. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -0
  47. package/build/lazyLoad/techDetect/checkAngularJS.js +70 -0
  48. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -0
  49. package/build/lazyLoad/techDetect/checkNextJS.js +45 -0
  50. package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -0
  51. package/build/lazyLoad/techDetect/checkNuxtJS.js +39 -0
  52. package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -0
  53. package/build/lazyLoad/techDetect/checkReact.js +55 -0
  54. package/build/lazyLoad/techDetect/checkReact.js.map +1 -0
  55. package/build/lazyLoad/techDetect/checkSvelte.js +69 -0
  56. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -0
  57. package/build/lazyLoad/techDetect/checkVueJS.js +118 -0
  58. package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -0
  59. package/build/lazyLoad/techDetect/index.js +29 -258
  60. package/build/lazyLoad/techDetect/index.js.map +1 -1
  61. package/build/lazyLoad/vue/vue_RuntimeJs.js +122 -54
  62. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  63. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +4 -0
  64. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  65. package/build/lazyLoad/vue/vue_discoverJsFiles.js +82 -0
  66. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -0
  67. package/build/lazyLoad/vue/vue_getClientSidePaths.js +149 -0
  68. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -0
  69. package/build/lazyLoad/vue/vue_jsImports.js +40 -34
  70. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  71. package/build/lazyLoad/vue/vue_pageSrc.js +60 -0
  72. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -0
  73. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +8 -0
  74. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
  75. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +136 -0
  76. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -0
  77. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +5 -0
  78. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
  79. package/build/lazyLoad/vue/vue_stringJsFiles.js +142 -0
  80. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
  81. package/build/lazyLoad/vue/vue_viteMapDeps.js +89 -0
  82. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -0
  83. package/build/map/index.js +50 -0
  84. package/build/map/index.js.map +1 -1
  85. package/build/map/next_js/getExports.js +14 -6
  86. package/build/map/next_js/getExports.js.map +1 -1
  87. package/build/map/next_js/getFetchInstances.js +11 -5
  88. package/build/map/next_js/getFetchInstances.js.map +1 -1
  89. package/build/map/next_js/getTurbopackConnections.js +255 -0
  90. package/build/map/next_js/getTurbopackConnections.js.map +1 -0
  91. package/build/map/next_js/getWebpackConnections.js +3 -4
  92. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  93. package/build/map/next_js/resolveAxios.js +24 -5
  94. package/build/map/next_js/resolveAxios.js.map +1 -1
  95. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +2 -2
  96. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -1
  97. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +25 -15
  98. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  99. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  100. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +206 -0
  101. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -0
  102. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +25 -8
  103. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
  104. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +14 -6
  105. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
  106. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +22 -10
  107. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  108. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +913 -0
  109. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -0
  110. package/build/map/next_js/resolveFetch.js +117 -4
  111. package/build/map/next_js/resolveFetch.js.map +1 -1
  112. package/build/map/next_js/resolveNewRequest.js +749 -0
  113. package/build/map/next_js/resolveNewRequest.js.map +1 -0
  114. package/build/map/next_js/utils.js +311 -49
  115. package/build/map/next_js/utils.js.map +1 -1
  116. package/build/map/vue_js/getViteConnections.js +293 -0
  117. package/build/map/vue_js/getViteConnections.js.map +1 -0
  118. package/build/map/vue_js/interactive.js +39 -0
  119. package/build/map/vue_js/interactive.js.map +1 -0
  120. package/build/map/vue_js/interactive_helpers/commandHandler.js +285 -0
  121. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -0
  122. package/build/map/vue_js/interactive_helpers/commandHelpers.js +39 -0
  123. package/build/map/vue_js/interactive_helpers/commandHelpers.js.map +1 -0
  124. package/build/map/vue_js/interactive_helpers/helpMenu.js +11 -0
  125. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -0
  126. package/build/map/vue_js/vue_resolveFetch.js +155 -0
  127. package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
  128. package/build/mcp/cli.js +381 -0
  129. package/build/mcp/cli.js.map +1 -0
  130. package/build/mcp/commands.js +147 -0
  131. package/build/mcp/commands.js.map +1 -0
  132. package/build/mcp/config.js +68 -0
  133. package/build/mcp/config.js.map +1 -0
  134. package/build/mcp/index.js +29 -0
  135. package/build/mcp/index.js.map +1 -0
  136. package/build/mcp/providers.js +153 -0
  137. package/build/mcp/providers.js.map +1 -0
  138. package/build/mcp/tools.js +185 -0
  139. package/build/mcp/tools.js.map +1 -0
  140. package/build/run/index.js +40 -16
  141. package/build/run/index.js.map +1 -1
  142. package/build/strings/index.js +5 -1
  143. package/build/strings/index.js.map +1 -1
  144. package/build/utility/makeReq.js +90 -63
  145. package/build/utility/makeReq.js.map +1 -1
  146. package/build/utility/openapiGenerator.js +46 -2
  147. package/build/utility/openapiGenerator.js.map +1 -1
  148. package/build/utility/postmanGenerator.js +163 -0
  149. package/build/utility/postmanGenerator.js.map +1 -0
  150. package/build/utility/puppeteerInstance.js +5 -0
  151. package/build/utility/puppeteerInstance.js.map +1 -0
  152. package/package.json +11 -4
@@ -10,260 +10,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import chalk from "chalk";
11
11
  import * as cheerio from "cheerio";
12
12
  import makeRequest from "../../utility/makeReq.js";
13
- import puppeteer from "puppeteer";
13
+ import puppeteer from "../../utility/puppeteerInstance.js";
14
14
  import * as globalsUtil from "../../utility/globals.js";
15
- /**
16
- * Checks if a webpage uses Next.js by iterating through all HTML tags and checking if any src, srcset, or imageSrcSet attribute value starts with "/_next/".
17
- * @returns {Promise<{detected: boolean, evidence: string}>}
18
- * A promise that resolves to an object with two properties:
19
- * - detected: A boolean indicating whether Next.js was detected.
20
- * - evidence: A string with the evidence of the detection, or an empty string
21
- * if Next.js was not detected.
22
- */
23
- const checkNextJS = ($) => __awaiter(void 0, void 0, void 0, function* () {
24
- let detected = false;
25
- let evidence = "";
26
- // iterate through each HTML tag, and file tag value that starts with `/_next/`
27
- $("*").each((_, el) => {
28
- const tag = $(el).get(0).tagName;
29
- // check the value of three attributes
30
- const src = $(el).attr("src");
31
- const srcSet = $(el).attr("srcset");
32
- const imageSrcSet = $(el).attr("imageSrcSet");
33
- if (src || srcSet || imageSrcSet) {
34
- if (src && src.includes("/_next/")) {
35
- detected = true;
36
- evidence = `${tag} :: ${src}`;
37
- }
38
- else if (srcSet && srcSet.includes("/_next/")) {
39
- detected = true;
40
- evidence = `${tag} :: ${srcSet}`;
41
- }
42
- else if (imageSrcSet && imageSrcSet.includes("/_next/")) {
43
- detected = true;
44
- evidence = `${tag} :: ${imageSrcSet}`;
45
- }
46
- }
47
- });
48
- return { detected, evidence };
49
- });
50
- /**
51
- * Checks if a webpage uses Vue.js by iterating through all HTML tags and checking if any attribute name starts with "data-v-".
52
- * @returns {Promise<{detected: boolean, evidence: string}>}
53
- * A promise that resolves to an object with two properties:
54
- * - detected: A boolean indicating whether Vue.js was detected.
55
- * - evidence: A string with the evidence of the detection, or an empty string
56
- * if Vue.js was not detected.
57
- */
58
- const checkVueJS = ($, url) => __awaiter(void 0, void 0, void 0, function* () {
59
- let detected = false;
60
- let evidence = "";
61
- $("*").each((_, el) => {
62
- const tag = $(el).get(0).tagName;
63
- const attribs = el.attribs;
64
- if (attribs) {
65
- for (const [attrName, attrValue] of Object.entries(attribs)) {
66
- if (attrName.startsWith("data-v-")) {
67
- detected = true;
68
- evidence = `${tag} :: ${attrName}`;
69
- }
70
- else if (attrName.startsWith("data-vue-")) {
71
- detected = true;
72
- evidence = `${tag} :: ${attrName}`;
73
- }
74
- }
75
- }
76
- });
77
- if (detected) {
78
- return { detected, evidence };
79
- }
80
- // now, iterate through all the script tags, and find something like `app.js`
81
- let appJsURL;
82
- $("script").each((_, el) => {
83
- const tag = $(el).get(0).tagName;
84
- const attribs = el.attribs;
85
- if (attribs) {
86
- for (const [attrName, attrValue] of Object.entries(attribs)) {
87
- if (attrName === "src") {
88
- // @ts-ignore
89
- if (attrValue.includes("app.js")) {
90
- // get the URL of the app.js file
91
- // @ts-ignore
92
- if (attrValue.startsWith("/")) {
93
- // @ts-ignore
94
- appJsURL = new URL(attrValue, url).href;
95
- // @ts-ignore
96
- }
97
- else if (attrValue.startsWith("http")) {
98
- // @ts-ignore
99
- appJsURL = attrValue;
100
- }
101
- else {
102
- // @ts-ignore
103
- appJsURL = new URL(attrValue, url).href;
104
- }
105
- }
106
- }
107
- }
108
- }
109
- });
110
- if (appJsURL) {
111
- const appJsContent = yield makeRequest(appJsURL).then((res) => res.text());
112
- if (appJsContent) {
113
- if (appJsContent.includes("Vue.component(")) {
114
- detected = true;
115
- evidence = `${appJsURL} :: Vue.component()`;
116
- }
117
- }
118
- }
119
- return { detected, evidence };
120
- });
121
- /**
122
- * Detects if a webpage uses Nuxt.js by checking for "/_nuxt" paths in src or href attributes.
123
- *
124
- * @param $ - The Cheerio API object containing the parsed HTML
125
- * @returns Promise that resolves to an object with detection status and evidence
126
- */
127
- const checkNuxtJS = ($) => __awaiter(void 0, void 0, void 0, function* () {
128
- let detected = false;
129
- let evidence = "";
130
- // go through the page source, and check for "/_nuxt" in the src or href attribute
131
- $("*").each((_, el) => {
132
- // @ts-ignore
133
- const tag = $(el).get(0).tagName;
134
- // @ts-ignore
135
- const attribs = el.attribs;
136
- if (attribs) {
137
- for (const [attrName, attrValue] of Object.entries(attribs)) {
138
- if (attrName === "src" || attrName === "href") {
139
- // @ts-ignore
140
- if (attrValue.includes("/_nuxt")) {
141
- detected = true;
142
- evidence = `${attrName} :: ${attrValue}`;
143
- }
144
- }
145
- }
146
- }
147
- });
148
- return { detected, evidence };
149
- });
150
- /**
151
- * Detects if a webpage uses Svelte/SvelteKit by checking for Svelte-specific attributes.
152
- *
153
- * Looks for svelte- prefixed class names, IDs, and SvelteKit-specific attributes
154
- * like data-sveltekit-reload to identify Svelte applications.
155
- *
156
- * @param $ - The Cheerio API object containing the parsed HTML
157
- * @returns Promise that resolves to an object with detection status and evidence
158
- */
159
- const checkSvelte = ($) => __awaiter(void 0, void 0, void 0, function* () {
160
- let detected = false;
161
- let evidence = "";
162
- // go through the page source, and check for all the class names of all HTML tags
163
- $("*").each((_, el) => {
164
- const tag = $(el).get(0).tagName;
165
- const attribs = el.attribs;
166
- if (attribs) {
167
- for (const [attrName, attrValue] of Object.entries(attribs)) {
168
- if (attrName === "class") {
169
- // @ts-ignore
170
- if (attrValue.includes("svelte-")) {
171
- detected = true;
172
- evidence = `${attrName} :: ${attrValue}`;
173
- }
174
- }
175
- }
176
- }
177
- });
178
- // now, search for the svelte- id of all elements
179
- $("*").each((_, el) => {
180
- const tag = $(el).get(0).tagName;
181
- const attribs = el.attribs;
182
- if (attribs) {
183
- for (const [attrName, attrValue] of Object.entries(attribs)) {
184
- if (attrName === "id") {
185
- // @ts-ignore
186
- if (attrValue.includes("svelte-")) {
187
- detected = true;
188
- evidence = `${attrName} :: ${attrValue}`;
189
- }
190
- }
191
- }
192
- }
193
- });
194
- // now, check for the data-sveltekit-reload attribute
195
- $("*").each((_, el) => {
196
- const tag = $(el).get(0).tagName;
197
- const attribs = el.attribs;
198
- if (attribs) {
199
- for (const [attrName, attrValue] of Object.entries(attribs)) {
200
- if (attrName === "data-sveltekit-reload") {
201
- detected = true;
202
- evidence = `${attrName} :: ${attrValue}`;
203
- }
204
- }
205
- }
206
- });
207
- return { detected, evidence };
208
- });
209
- const checkAngularJS = ($, url) => __awaiter(void 0, void 0, void 0, function* () {
210
- let detected = false;
211
- let evidence = "";
212
- // to detect angular js, first check if it has something like `main-*.js` or `main.js` in script src
213
- let hasMainJs = false;
214
- let mainJsURL = undefined;
215
- $("script").each((_, el) => {
216
- const tag = $(el).get(0).tagName;
217
- const attribs = el.attribs;
218
- if (attribs) {
219
- for (const [attrName, attrValue] of Object.entries(attribs)) {
220
- if (attrName === "src") {
221
- // @ts-ignore
222
- if (attrValue.includes("main-")) {
223
- hasMainJs = true;
224
- // if the url starts with `main-...`, then build the full url
225
- if (!attrValue.startsWith("http")) {
226
- mainJsURL = new URL(attrValue, url).href;
227
- }
228
- else {
229
- mainJsURL = attrValue;
230
- }
231
- }
232
- }
233
- }
234
- }
235
- });
236
- // now, get the contents of the main.js file
237
- if (hasMainJs) {
238
- const mainJsRes = yield makeRequest(mainJsURL, {});
239
- const mainJsBody = yield mainJsRes.text();
240
- // check if the traces of angular js are present
241
- // using regex for this, as this is simple and fast
242
- // check: isAngularZone(), "isAngularZone", this.ngZone
243
- // if lazyload enabled, need to check routerlink: `["routerLink",`
244
- const isAngularZoneRegex = /isAngularZone\(\)/;
245
- const isAngularZoneRegex2 = /"isAngularZone"/;
246
- const ngZoneRegex = /this\.ngZone/;
247
- const routerLinkRegex = /"routerLink"/;
248
- if (isAngularZoneRegex.test(mainJsBody)) {
249
- detected = true;
250
- evidence = "isAngularZone()";
251
- }
252
- else if (isAngularZoneRegex2.test(mainJsBody)) {
253
- detected = true;
254
- evidence = '"isAngularZone"';
255
- }
256
- else if (ngZoneRegex.test(mainJsBody)) {
257
- detected = true;
258
- evidence = "this.ngZone";
259
- }
260
- else if (routerLinkRegex.test(mainJsBody)) {
261
- detected = true;
262
- evidence = "routerLink";
263
- }
264
- }
265
- return { detected, evidence };
266
- });
15
+ import { checkNextJS } from "./checkNextJS.js";
16
+ import { checkNuxtJS } from "./checkNuxtJS.js";
17
+ import { checkSvelte } from "./checkSvelte.js";
18
+ import { checkVueJS } from "./checkVueJS.js";
19
+ import { checkAngularJS } from "./checkAngularJS.js";
20
+ import { checkReact } from "./checkReact.js";
267
21
  /**
268
22
  * Detects the front-end framework used in a webpage.
269
23
  * It does this by iterating through all HTML tags and checking if any attribute name starts with "data-v-".
@@ -276,11 +30,22 @@ const checkAngularJS = ($, url) => __awaiter(void 0, void 0, void 0, function* (
276
30
  */
277
31
  const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* () {
278
32
  console.log(chalk.cyan("[i] Detecting front-end framework"));
279
- // get the page source
33
+ // get the page source. Drain the body immediately into a string — if we
34
+ // wait until after the puppeteer + downstream check* calls, the Response
35
+ // body gets invalidated (undici flips bodyUsed=true mid-flight when the
36
+ // response is held idle alongside other in-flight fetches).
280
37
  const res = yield makeRequest(url, {});
38
+ let resBody = null;
39
+ if (res !== null) {
40
+ try {
41
+ resBody = yield res.text();
42
+ }
43
+ catch (err) {
44
+ console.log(chalk.yellow(`[!] Could not read fetch response body for ${url} (${(err === null || err === void 0 ? void 0 : err.message) || err}); using browser-rendered source only.`));
45
+ }
46
+ }
281
47
  // get the page source in the browser
282
48
  const browser = yield puppeteer.launch({
283
- headless: true,
284
49
  args: globalsUtil.getDisableSandbox() ? ["--no-sandbox", "--disable-setuid-sandbox"] : [],
285
50
  });
286
51
  const page = yield browser.newPage();
@@ -316,23 +81,25 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
316
81
  const result_checkVueJS = yield checkVueJS($, url);
317
82
  const result_checkSvelte = yield checkSvelte($);
318
83
  const result_checkAngular = yield checkAngularJS($, url);
84
+ const result_checkReact = yield checkReact($, url);
319
85
  // now, also check with the res response
320
86
  let result_checkNextJS_res = { detected: false, evidence: "" };
321
87
  let result_checkVueJS_res = { detected: false, evidence: "" };
322
88
  let result_checkSvelte_res = { detected: false, evidence: "" };
323
89
  let result_checkAngularJS_res = { detected: false, evidence: "" };
90
+ let result_checkReact_res = { detected: false, evidence: "" };
324
91
  let $res;
325
92
  // if network error was caused, then return
326
93
  if (res === null) {
327
94
  console.log(chalk.red("[!] Fetch request failed after retries"));
328
95
  }
329
- else {
330
- const resBody = yield res.text();
96
+ else if (resBody !== null) {
331
97
  $res = cheerio.load(resBody);
332
98
  result_checkNextJS_res = yield checkNextJS($res);
333
99
  result_checkVueJS_res = yield checkVueJS($res, url);
334
100
  result_checkSvelte_res = yield checkSvelte($res);
335
101
  result_checkAngularJS_res = yield checkAngularJS($res, url);
102
+ result_checkReact_res = yield checkReact($res, url);
336
103
  }
337
104
  if (result_checkNextJS.detected === true || result_checkNextJS_res.detected === true) {
338
105
  const evidence = result_checkNextJS.evidence !== "" ? result_checkNextJS.evidence : result_checkNextJS_res.evidence;
@@ -342,7 +109,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
342
109
  console.log(chalk.green("[✓] Vue.js detected"));
343
110
  console.log(chalk.cyan(`[i] Checking Nuxt.JS`), chalk.dim("(Nuxt.JS is built on Vue.js)"));
344
111
  const result_checkNuxtJS = yield checkNuxtJS($);
345
- const result_checkNuxtJS_res = yield checkNuxtJS($res);
112
+ const result_checkNuxtJS_res = $res ? yield checkNuxtJS($res) : { detected: false, evidence: "" };
346
113
  if (result_checkNuxtJS.detected === true || result_checkNuxtJS_res.detected === true) {
347
114
  const evidence = result_checkNuxtJS.evidence !== "" ? result_checkNuxtJS.evidence : result_checkNuxtJS_res.evidence;
348
115
  return { name: "nuxt", evidence };
@@ -358,6 +125,10 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
358
125
  const evidence = result_checkAngular.evidence !== "" ? result_checkAngular.evidence : result_checkAngularJS_res.evidence;
359
126
  return { name: "angular", evidence };
360
127
  }
128
+ else if (result_checkReact.detected === true || result_checkReact_res.detected === true) {
129
+ const evidence = result_checkReact.evidence !== "" ? result_checkReact.evidence : result_checkReact_res.evidence;
130
+ return { name: "react", evidence };
131
+ }
361
132
  return null;
362
133
  });
363
134
  export default frameworkDetect;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,3 @@
1
- /**
2
- * ==============================================
3
- * ==============================================
4
- * ==============================================
5
- *
6
- * !!!INCOMPLETE MODULE!!!
7
- *
8
- * WILL RETURN BLANK LIST
9
- *
10
- * ==============================================
11
- * ==============================================
12
- * ==============================================
13
- */
14
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -20,81 +7,162 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
21
8
  });
22
9
  };
10
+ import chalk from "chalk";
23
11
  import makeRequest from "../../utility/makeReq.js";
24
12
  import * as cheerio from "cheerio";
25
13
  import * as parser from "@babel/parser";
26
14
  import _traverse from "@babel/traverse";
27
15
  const traverse = _traverse.default;
16
+ import inquirer from "inquirer";
17
+ import CONFIG from "../../globalConfig.js";
18
+ import execFunc from "../../utility/runSandboxed.js";
19
+ import * as globals from "../../utility/globals.js";
28
20
  const vue_runtimeJs = (url) => __awaiter(void 0, void 0, void 0, function* () {
29
- let discovered_urls = [];
30
- const rootHtml = yield makeRequest(url).then((res) => res.text());
21
+ const rootHtmlRes = yield makeRequest(url);
22
+ if (!rootHtmlRes) {
23
+ console.log(chalk.red(`[!] Failed to fetch ${url}`));
24
+ return [];
25
+ }
26
+ const rootHtml = yield rootHtmlRes.text();
31
27
  let runtimeJsUrl;
32
- // iterate through the HTML, and find all script tags.
33
- // from those, find the one that has runtime.<hash>.js
34
- // DEBUG: base64 decode the HTML
35
28
  const $ = cheerio.load(rootHtml);
36
- // const $ = cheerio.load(Buffer.from(rootHtml, "base64").toString("utf-8"));
37
29
  $("script").each((_, el) => {
38
- const tag = $(el).get(0).tagName;
39
30
  const attribs = el.attribs;
40
31
  if (attribs) {
41
32
  for (const [attrName, attrValue] of Object.entries(attribs)) {
42
- if (attrName === "src") {
43
- // @ts-ignore
44
- if (attrValue.match(/runtime\..+\.js/)) {
45
- // @ts-ignore
46
- runtimeJsUrl = attrValue;
47
- }
33
+ // Match webpack runtime filename specifically: /runtime.<hex>.js
34
+ // Exclude things like /vue.runtime.2.7.20.min.js
35
+ if (attrName === "src" && attrValue.match(/\/runtime\.[a-f0-9]+\.js(?:$|\?)/)) {
36
+ runtimeJsUrl = attrValue;
48
37
  }
49
38
  }
50
39
  }
51
40
  });
52
- if (runtimeJsUrl) {
53
- // if it starts with HTTP, then great. else, construct using path.join
54
- if (!runtimeJsUrl.startsWith("http")) {
55
- runtimeJsUrl = new URL(runtimeJsUrl, url).href;
56
- }
41
+ if (!runtimeJsUrl) {
42
+ console.log(chalk.red("[!] No runtime JS file found in page source"));
43
+ console.log(chalk.magenta(CONFIG.notFoundMessage));
44
+ return [];
57
45
  }
58
- // now, get the contents of the runtime.<hash>.js file
59
- const runtimeJsContent = yield makeRequest(runtimeJsUrl).then((res) => res.text());
60
- // ast parser goes brrrr
46
+ if (!runtimeJsUrl.startsWith("http")) {
47
+ runtimeJsUrl = new URL(runtimeJsUrl, url).href;
48
+ }
49
+ const runtimeJsRes = yield makeRequest(runtimeJsUrl);
50
+ if (!runtimeJsRes) {
51
+ console.log(chalk.red(`[!] Failed to fetch ${runtimeJsUrl}`));
52
+ return [];
53
+ }
54
+ const runtimeJsContent = yield runtimeJsRes.text();
61
55
  const ast = parser.parse(runtimeJsContent, {
62
56
  sourceType: "unambiguous",
63
57
  plugins: ["jsx", "typescript"],
64
58
  errorRecovery: true,
65
59
  });
66
- // now, traverse the ast, and find the right spot
67
- // Looking for: script.src = function(e) { ... }(e)
68
- let scriptSrcAssignment = null;
60
+ let scriptSrcFuncSource;
61
+ let publicPathObj;
62
+ let publicPathProp;
69
63
  traverse(ast, {
70
64
  AssignmentExpression(path) {
65
+ var _a, _b;
71
66
  const { left, right } = path.node;
72
- // Check if left side is `script.src`
67
+ // Anchor on the always-present pattern: script.src = function(e){...}(e)
73
68
  if (left.type === "MemberExpression" &&
74
69
  left.object.type === "Identifier" &&
75
70
  left.object.name === "script" &&
76
71
  left.property.type === "Identifier" &&
77
- left.property.name === "src") {
78
- // Check if right side is a CallExpression (IIFE pattern)
79
- // i.e., function(e) { ... }(e)
80
- if (right.type === "CallExpression" && right.callee.type === "FunctionExpression") {
81
- // Found the pattern! Extract the function body
82
- const funcExpr = right.callee;
83
- // Get the source code for this node
84
- const start = path.node.start;
85
- const end = path.node.end;
86
- if (start !== null && end !== null) {
87
- const sourceCode = runtimeJsContent.slice(start, end);
88
- console.log("Found script.src assignment:", sourceCode);
89
- scriptSrcAssignment = path.node;
90
- // TODO: Process the function body to extract chunk mappings
91
- // The function typically contains object mappings for chunk names and hashes
72
+ left.property.name === "src" &&
73
+ right.type === "CallExpression" &&
74
+ right.callee.type === "FunctionExpression") {
75
+ const funcExpr = right.callee;
76
+ if (funcExpr.start !== null && funcExpr.end !== null) {
77
+ scriptSrcFuncSource = runtimeJsContent.slice(funcExpr.start, funcExpr.end);
78
+ }
79
+ // The public-path variable is whatever sits leftmost in the
80
+ // concatenation chain of the return statement. The webpack
81
+ // template emits any short <obj>.<prop> identifier here, not
82
+ // necessarily `c.p`.
83
+ const returnStmt = (_b = (_a = funcExpr.body) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.find((s) => s.type === "ReturnStatement");
84
+ if (returnStmt && returnStmt.argument) {
85
+ let cursor = returnStmt.argument;
86
+ while (cursor && cursor.type === "BinaryExpression") {
87
+ cursor = cursor.left;
88
+ }
89
+ if (cursor &&
90
+ cursor.type === "MemberExpression" &&
91
+ !cursor.computed &&
92
+ cursor.object.type === "Identifier" &&
93
+ cursor.property.type === "Identifier") {
94
+ publicPathObj = cursor.object.name;
95
+ publicPathProp = cursor.property.name;
92
96
  }
93
97
  }
94
98
  }
95
99
  },
96
100
  });
97
- // TODO: Add the rest of the logic from the code
101
+ if (!scriptSrcFuncSource) {
102
+ console.log(chalk.red("[!] Could not find chunk URL builder function in runtime JS"));
103
+ console.log(chalk.magenta(CONFIG.notFoundMessage));
104
+ return [];
105
+ }
106
+ console.log(chalk.green("[✓] Found chunk URL builder function"));
107
+ console.log(chalk.yellow(scriptSrcFuncSource));
108
+ if (publicPathObj && publicPathProp) {
109
+ console.log(chalk.green(`[✓] Public-path variable detected: ${publicPathObj}.${publicPathProp}`));
110
+ }
111
+ else {
112
+ console.log(chalk.yellow("[!] Could not detect public-path variable; will resolve chunk paths against runtime.js directory regardless"));
113
+ }
114
+ if (!globals.getYes()) {
115
+ const { confirmed } = yield inquirer.prompt([
116
+ {
117
+ type: "confirm",
118
+ name: "confirmed",
119
+ message: "Is this the correct function?",
120
+ default: true,
121
+ },
122
+ ]);
123
+ if (!confirmed) {
124
+ console.log(chalk.red("[!] Not executing function."));
125
+ return [];
126
+ }
127
+ }
128
+ console.log(chalk.cyan("[i] Proceeding with the selected function to fetch files"));
129
+ // Stub the public-path variable with empty string so the function returns
130
+ // just the relative chunk path (e.g. "pages/index.<hash>.js"). The real
131
+ // public path value isn't needed -- chunks live alongside runtime.js, so
132
+ // resolving the relative path against the runtime.js directory gives the
133
+ // correct absolute URL.
134
+ const stubDecl = publicPathObj && publicPathProp ? `var ${publicPathObj} = { ${publicPathProp}: "" };` : "";
135
+ const urlBuilderFunc = `(() => { ${stubDecl} return (${scriptSrcFuncSource}); })()`;
136
+ const js_paths = [];
137
+ try {
138
+ const integers = scriptSrcFuncSource.match(/\d+/g);
139
+ if (integers) {
140
+ for (const i of integers) {
141
+ const output = execFunc(urlBuilderFunc, parseInt(i));
142
+ if (output !== null && output !== undefined && !String(output).includes("undefined")) {
143
+ js_paths.push(String(output));
144
+ }
145
+ }
146
+ }
147
+ }
148
+ catch (err) {
149
+ console.error(chalk.red("Unsafe or invalid code:", err instanceof Error ? err.message : String(err)));
150
+ return [];
151
+ }
152
+ const unique_paths = [...new Set(js_paths)];
153
+ if (unique_paths.length > 0) {
154
+ console.log(chalk.green(`[✓] Found ${unique_paths.length} JS chunks`));
155
+ }
156
+ const runtimeDir = runtimeJsUrl.split("/").slice(0, -1).join("/") + "/";
157
+ const discovered_urls = [];
158
+ for (const js_path of unique_paths) {
159
+ if (js_path.startsWith("http")) {
160
+ discovered_urls.push(js_path);
161
+ }
162
+ else {
163
+ discovered_urls.push(new URL(js_path, runtimeDir).href);
164
+ }
165
+ }
98
166
  return discovered_urls;
99
167
  });
100
168
  export default vue_runtimeJs;
@@ -1 +1 @@
1
- {"version":3,"file":"vue_RuntimeJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_RuntimeJs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vue_RuntimeJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_RuntimeJs.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,10 @@ const vue_singleJsFileOnHome = (url) => __awaiter(void 0, void 0, void 0, functi
17
17
  let jsFilesFound = [];
18
18
  // first, get the home page content
19
19
  const req = yield makeRequest(url, {});
20
+ if (req == null) {
21
+ console.log(chalk.red(`Failed to fetch ${url}`));
22
+ return jsFilesFound;
23
+ }
20
24
  const homePageContent = yield req.text();
21
25
  // load the home page content into cheerio
22
26
  const $ = cheerio.load(homePageContent);