@shriyanss/js-recon 1.3.1-alpha.2 → 1.3.1-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-prettify.yaml +15 -1
- package/.github/workflows/pr_checker.yml +9 -8
- package/.github/workflows/publish-js-recon.yml +13 -1
- package/CHANGELOG.md +96 -0
- package/CLAUDE.md +225 -0
- package/README.md +2 -0
- package/build/analyze/engine/astEngine.js +57 -29
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/index.js +2 -2
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +32 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -0
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/schemas.js +6 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +49 -9
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +10 -4
- package/build/analyze/index.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +12 -5
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +1 -1
- package/build/index.js +72 -5
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +3 -3
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +16 -11
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +260 -163
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +58 -16
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +8 -4
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +149 -139
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +25 -4
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +13 -5
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/react/react_followImports.js +105 -0
- package/build/lazyLoad/react/react_followImports.js.map +1 -0
- package/build/lazyLoad/react/react_getScriptTags.js +28 -5
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +15 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +15 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +67 -36
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +35 -35
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +31 -25
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +6 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +6 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +6 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/load/index.js +316 -0
- package/build/load/index.js.map +1 -0
- package/build/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +104 -6
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/interactive.js +30 -0
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +26 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +28 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +89 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +298 -0
- package/build/map/react_js/getReactConnections.js.map +1 -0
- package/build/map/react_js/interactive.js +4 -0
- package/build/map/react_js/interactive.js.map +1 -0
- package/build/map/react_js/react_resolveFetch.js +6 -0
- package/build/map/react_js/react_resolveFetch.js.map +1 -0
- package/build/map/svelte_js/interactive.js +58 -0
- package/build/map/svelte_js/interactive.js.map +1 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/bodyResolver.js +477 -0
- package/build/map/vue_js/bodyResolver.js.map +1 -0
- package/build/map/vue_js/crossFileResolver.js +438 -0
- package/build/map/vue_js/crossFileResolver.js.map +1 -0
- package/build/map/vue_js/getViteConnections.js +151 -106
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +28 -0
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +22 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +1 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +279 -25
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +733 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +279 -0
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
- package/build/mcp/chatOneShot.js +101 -0
- package/build/mcp/chatOneShot.js.map +1 -0
- package/build/mcp/claudeCodeCreds.js +150 -0
- package/build/mcp/claudeCodeCreds.js.map +1 -0
- package/build/mcp/cli.js +140 -149
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/commands.js +80 -0
- package/build/mcp/commands.js.map +1 -1
- package/build/mcp/index.js +30 -9
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/intent.js +204 -0
- package/build/mcp/intent.js.map +1 -0
- package/build/mcp/jobs.js +199 -0
- package/build/mcp/jobs.js.map +1 -0
- package/build/mcp/mcpServer.js +241 -0
- package/build/mcp/mcpServer.js.map +1 -0
- package/build/mcp/providers.js +18 -1
- package/build/mcp/providers.js.map +1 -1
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/refactor/index.js +6 -0
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/run/index.js +277 -60
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/utility/globals.js +38 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +39 -5
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +61 -17
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +69 -16
- package/build/utility/postmanGenerator.js.map +1 -1
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/package.json +7 -4
|
@@ -28,6 +28,8 @@ import * as lazyLoadGlobals from "../globals.js";
|
|
|
28
28
|
*/
|
|
29
29
|
class NextJsCrawler {
|
|
30
30
|
constructor(options) {
|
|
31
|
+
/** Set to true by stop() to abort the crawl loop gracefully. */
|
|
32
|
+
this.stopped = false;
|
|
31
33
|
this.url = options.url;
|
|
32
34
|
this.output = options.output;
|
|
33
35
|
this.subsequentRequestsFlag = options.subsequentRequestsFlag;
|
|
@@ -37,10 +39,31 @@ class NextJsCrawler {
|
|
|
37
39
|
this.MAX_ITERATIONS = options.maxIterations;
|
|
38
40
|
this.onUrlsDiscovered = options.onUrlsDiscovered;
|
|
39
41
|
this.discoveredUrls = new Set();
|
|
40
|
-
this.
|
|
42
|
+
this.pageScriptFingerprints = new Map();
|
|
41
43
|
this.techniqueEfficiencyMapping = {};
|
|
42
44
|
}
|
|
43
45
|
// ── helpers ──────────────────────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Normalizes a page URL to origin+pathname, stripping query and fragment.
|
|
48
|
+
* Used as the key for pageScriptFingerprints.
|
|
49
|
+
*/
|
|
50
|
+
normalizePageUrl(u) {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = new URL(u);
|
|
53
|
+
return parsed.origin + parsed.pathname;
|
|
54
|
+
}
|
|
55
|
+
catch (_a) {
|
|
56
|
+
return u;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Produces a stable fingerprint for a set of script URLs. */
|
|
60
|
+
scriptFingerprint(scripts) {
|
|
61
|
+
return [...new Set(scripts)].sort().join(",");
|
|
62
|
+
}
|
|
63
|
+
/** Signal the crawl loop to stop after the current iteration. */
|
|
64
|
+
stop() {
|
|
65
|
+
this.stopped = true;
|
|
66
|
+
}
|
|
44
67
|
/** Register newly found URLs and return only the ones that are truly new. */
|
|
45
68
|
registerUrls(urls) {
|
|
46
69
|
const newUrls = [];
|
|
@@ -86,7 +109,10 @@ class NextJsCrawler {
|
|
|
86
109
|
...jsFromScriptTag,
|
|
87
110
|
];
|
|
88
111
|
this.emitDownloadable(this.registerUrls(jsFromScriptTag));
|
|
89
|
-
|
|
112
|
+
// Record the landing page's script fingerprint so the recursive loop
|
|
113
|
+
// never re-probes it.
|
|
114
|
+
const landingNorm = this.normalizePageUrl(this.url);
|
|
115
|
+
this.pageScriptFingerprints.set(landingNorm, new Set([this.scriptFingerprint(jsFromScriptTag)]));
|
|
90
116
|
// 1b. Client-side paths from <a href> tags on the landing page.
|
|
91
117
|
// These are page URLs (not JS), so they'll be picked up by the
|
|
92
118
|
// recursivePass loop which visits any newly registered non-JS URL.
|
|
@@ -169,10 +195,10 @@ class NextJsCrawler {
|
|
|
169
195
|
return !parsed.pathname.endsWith(".js") && !parsed.pathname.endsWith(".js.map");
|
|
170
196
|
};
|
|
171
197
|
const pageQueue = [];
|
|
172
|
-
const enqueued = new Set();
|
|
198
|
+
const enqueued = new Set(); // tracks full URLs to avoid duplicate entries per pass
|
|
173
199
|
const enqueueIfPage = (u) => {
|
|
174
|
-
if (
|
|
175
|
-
return;
|
|
200
|
+
if (enqueued.has(u))
|
|
201
|
+
return; // exact URL already queued this pass
|
|
176
202
|
if (!isPageUrl(u))
|
|
177
203
|
return;
|
|
178
204
|
enqueued.add(u);
|
|
@@ -183,16 +209,27 @@ class NextJsCrawler {
|
|
|
183
209
|
for (const u of newInThisPass)
|
|
184
210
|
enqueueIfPage(u);
|
|
185
211
|
for (const u of pageQueue) {
|
|
186
|
-
if (this.
|
|
187
|
-
|
|
188
|
-
this.
|
|
212
|
+
if (this.stopped)
|
|
213
|
+
break; // honour stop() at each iteration boundary
|
|
214
|
+
const normalized = this.normalizePageUrl(u);
|
|
215
|
+
// Fetch scripts first — used for both fingerprinting and URL registration.
|
|
189
216
|
const extra = yield next_getJSScript(u);
|
|
190
|
-
// If return value is invalid, log and crash
|
|
191
217
|
if (!extra || !Array.isArray(extra)) {
|
|
192
218
|
console.error(`[NextJsCrawler] Invalid return value from next_getJSScript for URL: ${u}`);
|
|
193
219
|
console.error(`[NextJsCrawler] Returned value:`, extra);
|
|
194
220
|
process.exit(1);
|
|
195
221
|
}
|
|
222
|
+
// Content-entropy dedup: skip this variant if its script set matches
|
|
223
|
+
// a fingerprint already recorded for this pathname.
|
|
224
|
+
const fp = this.scriptFingerprint(extra);
|
|
225
|
+
const knownFPs = this.pageScriptFingerprints.get(normalized);
|
|
226
|
+
if (knownFPs === null || knownFPs === void 0 ? void 0 : knownFPs.has(fp))
|
|
227
|
+
continue;
|
|
228
|
+
// New content for this pathname — record fingerprint and process.
|
|
229
|
+
if (!this.pageScriptFingerprints.has(normalized)) {
|
|
230
|
+
this.pageScriptFingerprints.set(normalized, new Set());
|
|
231
|
+
}
|
|
232
|
+
this.pageScriptFingerprints.get(normalized).add(fp);
|
|
196
233
|
this.techniqueEfficiencyMapping["next_getJSScript"] = [
|
|
197
234
|
...(this.techniqueEfficiencyMapping["next_getJSScript"] || []),
|
|
198
235
|
...extra,
|
|
@@ -232,7 +269,7 @@ class NextJsCrawler {
|
|
|
232
269
|
// Phase 2 – recursive lightweight passes
|
|
233
270
|
let currentBatch = [...this.discoveredUrls];
|
|
234
271
|
let iteration = 0;
|
|
235
|
-
while (iteration < this.MAX_ITERATIONS) {
|
|
272
|
+
while (iteration < this.MAX_ITERATIONS && !this.stopped) {
|
|
236
273
|
iteration++;
|
|
237
274
|
const sizeBefore = this.size;
|
|
238
275
|
console.log(chalk.cyan(`[i] Recursive crawl pass ${iteration} – ${sizeBefore} URLs known`));
|
|
@@ -245,14 +282,19 @@ class NextJsCrawler {
|
|
|
245
282
|
// Next pass only analyses the newly found URLs
|
|
246
283
|
currentBatch = newUrls;
|
|
247
284
|
}
|
|
248
|
-
if (
|
|
285
|
+
if (this.stopped) {
|
|
286
|
+
console.log(chalk.yellow(`[!] Crawler stopped — downloading all discovered files`));
|
|
287
|
+
}
|
|
288
|
+
else if (iteration >= this.MAX_ITERATIONS) {
|
|
249
289
|
console.log(chalk.yellow(`[!] Reached max recursive crawl iterations (${this.MAX_ITERATIONS})`));
|
|
250
290
|
}
|
|
251
|
-
// Phase 3 – brute-force .map files on the final set
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
291
|
+
// Phase 3 – brute-force .map files on the final set (skip if stopped by timeout)
|
|
292
|
+
if (!this.stopped) {
|
|
293
|
+
const allJsUrls = [...this.discoveredUrls].filter((u) => u.endsWith(".js") || u.endsWith(".js.map"));
|
|
294
|
+
const jsFromBrute = yield next_bruteForceJsFiles(allJsUrls);
|
|
295
|
+
this.techniqueEfficiencyMapping["next_bruteForceJsFiles"] = jsFromBrute;
|
|
296
|
+
this.emitDownloadable(this.registerUrls(jsFromBrute));
|
|
297
|
+
}
|
|
256
298
|
// Only return downloadable assets. Anchor-derived page URLs live in
|
|
257
299
|
// discoveredUrls to drive the crawl, but must not reach downloadFiles.
|
|
258
300
|
return [...this.discoveredUrls].filter((u) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextJsCrawler.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/NextJsCrawler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,8BAA8B,MAAM,qCAAqC,CAAC;AACjF,OAAO,oCAAoC,MAAM,2CAA2C,CAAC;AAC7F,OAAO,kBAAkB,MAAM,8BAA8B,CAAC;AAC9D,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AACzD,OAAO,iCAAiC,MAAM,wCAAwC,CAAC;AACvF,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,eAAe,MAAM,eAAe,CAAC;AAcjD;;;;;;GAMG;AACH,MAAM,aAAa;
|
|
1
|
+
{"version":3,"file":"NextJsCrawler.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/NextJsCrawler.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { URL } from "url";
|
|
|
13
13
|
import * as cheerio from "cheerio";
|
|
14
14
|
import makeRequest from "../../utility/makeReq.js";
|
|
15
15
|
import { getJsUrls } from "../globals.js";
|
|
16
|
+
import { getCacheOnly } from "../../utility/globals.js";
|
|
16
17
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
17
18
|
/**
|
|
18
19
|
* Scrapes all lazy-loaded JavaScript file URLs from the provided Next.js page.
|
|
@@ -30,17 +31,20 @@ const next_getJSScript = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
30
31
|
const toReturn = [];
|
|
31
32
|
// get the page source — bounded retry so an unreachable host can't hang the crawler
|
|
32
33
|
let res = null;
|
|
33
|
-
|
|
34
|
+
const maxAttempts = getCacheOnly() ? 1 : MAX_FETCH_ATTEMPTS;
|
|
35
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
34
36
|
res = yield makeRequest(url, {});
|
|
35
37
|
if (res)
|
|
36
38
|
break;
|
|
37
|
-
if (attempt <
|
|
38
|
-
console.log(chalk.yellow(`[!] Request to ${url} failed, retrying (${attempt}/${
|
|
39
|
+
if (attempt < maxAttempts) {
|
|
40
|
+
console.log(chalk.yellow(`[!] Request to ${url} failed, retrying (${attempt}/${maxAttempts})...`));
|
|
39
41
|
yield sleep(1000);
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
if (!res) {
|
|
43
|
-
|
|
45
|
+
if (!getCacheOnly()) {
|
|
46
|
+
console.log(chalk.red(`[!] Giving up on ${url} after ${maxAttempts} attempts`));
|
|
47
|
+
}
|
|
44
48
|
return toReturn;
|
|
45
49
|
}
|
|
46
50
|
const pageSource = yield res.text();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next_GetJSScript.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_GetJSScript.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8BAA8B;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"next_GetJSScript.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_GetJSScript.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,24 +13,28 @@ import parser from "@babel/parser";
|
|
|
13
13
|
import _traverse from "@babel/traverse";
|
|
14
14
|
const traverse = _traverse.default;
|
|
15
15
|
import inquirer from "inquirer";
|
|
16
|
-
import
|
|
16
|
+
import cliProgress from "cli-progress";
|
|
17
17
|
import makeRequest from "../../utility/makeReq.js";
|
|
18
18
|
import execFunc from "../../utility/runSandboxed.js";
|
|
19
|
-
import { getJsonUrls, getJsUrls, pushToJsonUrls, pushToJsUrls } from "../globals.js";
|
|
19
|
+
import { getJsonUrls, getJsUrls, pushToJsonUrls, pushToJsUrls } from "../globals.js";
|
|
20
20
|
import * as globals from "../../utility/globals.js";
|
|
21
|
+
import { setActiveBarLogger, computeBarSize, watchBarResize } from "../../utility/progressLog.js";
|
|
21
22
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* and then extracting all the JS files from it. Then it parses the
|
|
25
|
-
* contents of each JS file and extracts all the functions from it.
|
|
26
|
-
* Then it iterates through the functions and finds out which one
|
|
27
|
-
* ends with `.js`. It then asks the user if this is the correct
|
|
28
|
-
* function, and if so, it proceeds to use the function to fetch
|
|
29
|
-
* all the lazy loaded JS files.
|
|
23
|
+
* Discovers lazy-loaded JS chunk URLs by scanning ALL JS files loaded during the
|
|
24
|
+
* initial page visit, not just webpack-named files.
|
|
30
25
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
26
|
+
* Workflow:
|
|
27
|
+
* 1. Load the page via Puppeteer to capture every network JS request.
|
|
28
|
+
* 2. Scan each discovered JS file for functions that end in `".js"` — the
|
|
29
|
+
* signature of a webpack chunk URL builder (e.g. __webpack_require__.u).
|
|
30
|
+
* A progress bar shows how many files have been checked.
|
|
31
|
+
* 3. For each matched function, show the source and ask the user to approve or
|
|
32
|
+
* deny execution. If the `--yes` / `-y` flag is set, auto-approve.
|
|
33
|
+
* 4. Execute approved functions with every integer found in their source and
|
|
34
|
+
* collect the resulting chunk paths as absolute URLs.
|
|
35
|
+
*
|
|
36
|
+
* @param {string} url - The URL of the page to crawl.
|
|
37
|
+
* @returns {Promise<string[]>} Deduplicated absolute URLs of discovered JS chunks.
|
|
34
38
|
*/
|
|
35
39
|
const next_GetLazyResourcesWebpackJs = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
40
|
const browser = yield puppeteer.launch({
|
|
@@ -40,15 +44,12 @@ const next_GetLazyResourcesWebpackJs = (url) => __awaiter(void 0, void 0, void 0
|
|
|
40
44
|
const page = yield browser.newPage();
|
|
41
45
|
yield page.setRequestInterception(true);
|
|
42
46
|
page.on("request", (request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
-
|
|
44
|
-
const req_url = request.url(); // Renamed to avoid conflict with outer 'url'
|
|
45
|
-
// see if the request is a JS file, and is a get request
|
|
47
|
+
const req_url = request.url();
|
|
46
48
|
if (request.method() === "GET" && req_url.match(/https?:\/\/[a-z0-9:\._\-]+\/.+\.js\??.*/)) {
|
|
47
49
|
if (!getJsUrls().includes(req_url)) {
|
|
48
50
|
pushToJsUrls(req_url);
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
// check if the request is a JSON file with a get request
|
|
52
53
|
if (request.method() === "GET" && req_url.match(/https?:\/\/[\d\w\.\-]+\/.+\.json\??.*$/)) {
|
|
53
54
|
if (!getJsonUrls().includes(req_url)) {
|
|
54
55
|
pushToJsonUrls(req_url);
|
|
@@ -59,154 +60,163 @@ const next_GetLazyResourcesWebpackJs = (url) => __awaiter(void 0, void 0, void 0
|
|
|
59
60
|
try {
|
|
60
61
|
yield page.goto(url, { waitUntil: "networkidle0" });
|
|
61
62
|
}
|
|
62
|
-
catch (
|
|
63
|
+
catch (_a) {
|
|
63
64
|
console.log(chalk.yellow("[!] Timeout reached for page load. Continuing with the current state"));
|
|
64
65
|
}
|
|
65
66
|
yield browser.close();
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// match for webpack js file
|
|
70
|
-
if (js_url.match(/\/webpack.*\.js/)) {
|
|
71
|
-
console.log(chalk.green(`[✓] Found webpack JS file at ${js_url}`));
|
|
72
|
-
webpack_js = js_url;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (!webpack_js) {
|
|
76
|
-
console.log(chalk.red("[!] No webpack JS file found"));
|
|
77
|
-
console.log(chalk.magenta(CONFIG.notFoundMessage));
|
|
67
|
+
const jsUrls = getJsUrls();
|
|
68
|
+
if (jsUrls.length === 0) {
|
|
69
|
+
console.log(chalk.yellow("[!] No JS files discovered during page load"));
|
|
78
70
|
return [];
|
|
79
71
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
72
|
+
console.log(chalk.cyan(`[i] Scanning ${jsUrls.length} JS file(s) for chunk URL builders`));
|
|
73
|
+
// ── progress bar ──────────────────────────────────────────────────────
|
|
74
|
+
const FORMAT = ` ${chalk.cyan("Scanning")} [{bar}] {percentage}% | {value}/{total}`;
|
|
75
|
+
const overhead = 42;
|
|
76
|
+
const bar = new cliProgress.SingleBar({
|
|
77
|
+
format: FORMAT,
|
|
78
|
+
barsize: computeBarSize(overhead),
|
|
79
|
+
hideCursor: true,
|
|
80
|
+
clearOnComplete: true,
|
|
81
|
+
}, cliProgress.Presets.shades_classic);
|
|
82
|
+
bar.start(jsUrls.length, 0);
|
|
83
|
+
setActiveBarLogger(bar);
|
|
84
|
+
const stopResize = watchBarResize(bar, overhead);
|
|
85
|
+
const matched = [];
|
|
86
|
+
let processed = 0;
|
|
87
|
+
for (const jsUrl of jsUrls) {
|
|
88
|
+
try {
|
|
89
|
+
const res = yield makeRequest(jsUrl, {});
|
|
90
|
+
if (!res || res.status !== 200) {
|
|
91
|
+
processed++;
|
|
92
|
+
bar.update(processed);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const jsContent = yield res.text();
|
|
96
|
+
// Fast path: skip files that cannot possibly contain the pattern
|
|
97
|
+
if (!jsContent.includes('".js"')) {
|
|
98
|
+
processed++;
|
|
99
|
+
bar.update(processed);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
let ast;
|
|
103
|
+
try {
|
|
104
|
+
ast = parser.parse(jsContent, {
|
|
105
|
+
sourceType: "unambiguous",
|
|
106
|
+
plugins: ["jsx", "typescript"],
|
|
107
|
+
errorRecovery: true,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (_b) {
|
|
111
|
+
processed++;
|
|
112
|
+
bar.update(processed);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
traverse(ast, {
|
|
116
|
+
FunctionDeclaration(p) {
|
|
117
|
+
var _a, _b;
|
|
118
|
+
const start = (_a = p.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
119
|
+
const end = (_b = p.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
120
|
+
const source = jsContent.slice(start, end);
|
|
121
|
+
if (source.match(/"\.js".{0,15}$/))
|
|
122
|
+
matched.push({ source, jsUrl });
|
|
123
|
+
},
|
|
124
|
+
FunctionExpression(p) {
|
|
125
|
+
var _a, _b;
|
|
126
|
+
const start = (_a = p.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
127
|
+
const end = (_b = p.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
128
|
+
const source = jsContent.slice(start, end);
|
|
129
|
+
if (source.match(/"\.js".{0,15}$/))
|
|
130
|
+
matched.push({ source, jsUrl });
|
|
131
|
+
},
|
|
132
|
+
ArrowFunctionExpression(p) {
|
|
133
|
+
var _a, _b;
|
|
134
|
+
const start = (_a = p.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
135
|
+
const end = (_b = p.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
136
|
+
const source = jsContent.slice(start, end);
|
|
137
|
+
if (source.match(/"\.js".{0,15}$/))
|
|
138
|
+
matched.push({ source, jsUrl });
|
|
139
|
+
},
|
|
140
|
+
ObjectMethod(p) {
|
|
141
|
+
var _a, _b;
|
|
142
|
+
const start = (_a = p.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
143
|
+
const end = (_b = p.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
144
|
+
const source = jsContent.slice(start, end);
|
|
145
|
+
if (source.match(/"\.js".{0,15}$/))
|
|
146
|
+
matched.push({ source, jsUrl });
|
|
147
|
+
},
|
|
148
|
+
ClassMethod(p) {
|
|
149
|
+
var _a, _b;
|
|
150
|
+
const start = (_a = p.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
151
|
+
const end = (_b = p.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
152
|
+
const source = jsContent.slice(start, end);
|
|
153
|
+
if (source.match(/"\.js".{0,15}$/))
|
|
154
|
+
matched.push({ source, jsUrl });
|
|
155
|
+
},
|
|
127
156
|
});
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
let user_verified = false;
|
|
131
|
-
// method 1
|
|
132
|
-
// iterate through the functions, and find out which one ends with `".js"`
|
|
133
|
-
let final_Func;
|
|
134
|
-
for (const func of functions) {
|
|
135
|
-
if (func.source.match(/"\.js".{0,15}$/)) {
|
|
136
|
-
console.log(chalk.green(`[✓] Found JS chunk having the following source`));
|
|
137
|
-
console.log(chalk.yellow(func.source));
|
|
138
|
-
final_Func = func.source;
|
|
139
157
|
}
|
|
158
|
+
catch (_c) {
|
|
159
|
+
// skip files with fetch/parse errors
|
|
160
|
+
}
|
|
161
|
+
processed++;
|
|
162
|
+
bar.update(processed);
|
|
140
163
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
164
|
+
bar.stop();
|
|
165
|
+
setActiveBarLogger(null);
|
|
166
|
+
stopResize();
|
|
167
|
+
if (matched.length === 0) {
|
|
168
|
+
console.log(chalk.yellow("[!] No chunk URL builder functions found in discovered JS files"));
|
|
144
169
|
return [];
|
|
145
170
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
171
|
+
console.log(chalk.green(`[✓] Found ${matched.length} chunk URL builder function(s)`));
|
|
172
|
+
// ── user approval and execution ───────────────────────────────────────
|
|
173
|
+
const chunkUrls = [];
|
|
174
|
+
for (const { source, jsUrl } of matched) {
|
|
175
|
+
console.log(chalk.green(`[✓] Found chunk URL builder in ${jsUrl}`));
|
|
176
|
+
console.log(chalk.yellow(source));
|
|
177
|
+
let approved;
|
|
178
|
+
if (globals.getYes()) {
|
|
179
|
+
approved = true;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
149
182
|
const { confirmed } = yield inquirer.prompt([
|
|
150
183
|
{
|
|
151
184
|
type: "confirm",
|
|
152
185
|
name: "confirmed",
|
|
153
|
-
message: "
|
|
186
|
+
message: "Execute this function to enumerate chunk URLs?",
|
|
154
187
|
default: true,
|
|
155
188
|
},
|
|
156
189
|
]);
|
|
157
|
-
|
|
158
|
-
});
|
|
159
|
-
user_verified = yield askCorrectFuncConfirmation();
|
|
160
|
-
if (user_verified === true) {
|
|
161
|
-
console.log(chalk.cyan("[i] Proceeding with the selected function to fetch files"));
|
|
190
|
+
approved = confirmed;
|
|
162
191
|
}
|
|
163
|
-
|
|
164
|
-
console.log(chalk.red("[!]
|
|
165
|
-
|
|
192
|
+
if (!approved) {
|
|
193
|
+
console.log(chalk.red("[!] Skipping function."));
|
|
194
|
+
continue;
|
|
166
195
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
// Check if integers were found
|
|
175
|
-
// iterate through all integers, and get the output
|
|
196
|
+
console.log(chalk.cyan("[i] Executing function to enumerate chunk URLs"));
|
|
197
|
+
const urlBuilderFunc = `(() => (${source}))()`;
|
|
198
|
+
const integers = source.match(/\d+/g);
|
|
199
|
+
if (!integers)
|
|
200
|
+
continue;
|
|
201
|
+
const baseDir = jsUrl.split("/").slice(0, -2).join("/");
|
|
202
|
+
try {
|
|
176
203
|
for (const i of integers) {
|
|
177
204
|
const output = execFunc(urlBuilderFunc, parseInt(i));
|
|
178
|
-
if (output.includes("undefined"))
|
|
205
|
+
if (typeof output !== "string" || output.includes("undefined"))
|
|
179
206
|
continue;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
js_paths.push(output);
|
|
183
|
-
}
|
|
207
|
+
const fullUrl = new URL(output, baseDir).href;
|
|
208
|
+
chunkUrls.push(fullUrl);
|
|
184
209
|
}
|
|
185
210
|
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
console.error(chalk.red("Unsafe or invalid code:", err.message));
|
|
213
|
+
}
|
|
186
214
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
if (js_paths.length > 0) {
|
|
192
|
-
console.log(chalk.green(`[✓] Found ${js_paths.length} JS chunks`));
|
|
193
|
-
}
|
|
194
|
-
// build final URL
|
|
195
|
-
const final_urls = [];
|
|
196
|
-
for (let i = 0; i < js_paths.length; i++) {
|
|
197
|
-
// following is a broken logic
|
|
198
|
-
// get the directory of webpack file
|
|
199
|
-
// const webpack_dir = webpack_js.split("/").slice(0, -1).join("/");
|
|
200
|
-
// // replace the filename from the js path
|
|
201
|
-
// const js_path_dir = js_paths[i].replace(/\/[a-zA-Z0-9\.]+\.js.*$/, "");
|
|
202
|
-
// const final_url = webpack_dir.replace(js_path_dir, js_paths[i]);
|
|
203
|
-
// final_urls.push(final_url);
|
|
204
|
-
// logic that works:
|
|
205
|
-
const webpack_dir = webpack_js.split("/").slice(0, -2).join("/");
|
|
206
|
-
const js_path_dir = new URL(js_paths[i], webpack_dir).href;
|
|
207
|
-
final_urls.push(js_path_dir);
|
|
215
|
+
const unique = [...new Set(chunkUrls)];
|
|
216
|
+
if (unique.length > 0) {
|
|
217
|
+
console.log(chalk.green(`[✓] Found ${unique.length} JS chunk URL(s)`));
|
|
208
218
|
}
|
|
209
|
-
return
|
|
219
|
+
return unique;
|
|
210
220
|
});
|
|
211
221
|
export default next_GetLazyResourcesWebpackJs;
|
|
212
222
|
//# sourceMappingURL=next_GetLazyResourcesWebpackJs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next_GetLazyResourcesWebpackJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AACnC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"next_GetLazyResourcesWebpackJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.ts"],"names":[],"mappings":"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"}
|