@shriyanss/js-recon 1.3.1-alpha.3 → 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/publish-js-recon.yml +13 -1
- package/CHANGELOG.md +76 -0
- package/CLAUDE.md +100 -11
- 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.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 +5 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/index.js +7 -2
- 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 +51 -4
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +9 -8
- 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_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 +10 -6
- 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/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +93 -1
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +4 -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/helpMenu.js +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.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 +1 -0
- 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 +150 -129
- package/build/map/vue_js/getViteConnections.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 +79 -392
- 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/run/index.js +260 -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 +29 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +14 -2
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +46 -14
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +62 -13
- 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
|
@@ -0,0 +1,180 @@
|
|
|
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 * as cheerio from "cheerio";
|
|
12
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
13
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
14
|
+
import { URL } from "url";
|
|
15
|
+
import { pushToJsUrls } from "../globals.js";
|
|
16
|
+
import react_followImports from "../react/react_followImports.js";
|
|
17
|
+
const STAGNATION_LIMIT = 3;
|
|
18
|
+
/**
|
|
19
|
+
* Extracts same-origin page URLs from <a href> and <link href> tags.
|
|
20
|
+
* Hash fragments are stripped; only URLs matching the entry origin are returned.
|
|
21
|
+
*/
|
|
22
|
+
const extractPageLinks = (pageUrl, html) => {
|
|
23
|
+
const $ = cheerio.load(html);
|
|
24
|
+
const origin = new URL(pageUrl).origin;
|
|
25
|
+
const links = new Set();
|
|
26
|
+
$("a[href], link[href]").each((_, el) => {
|
|
27
|
+
const href = $(el).attr("href");
|
|
28
|
+
if (!href)
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
const resolved = new URL(href, pageUrl);
|
|
32
|
+
if (resolved.origin !== origin)
|
|
33
|
+
return;
|
|
34
|
+
resolved.hash = "";
|
|
35
|
+
links.add(resolved.href);
|
|
36
|
+
}
|
|
37
|
+
catch (_a) {
|
|
38
|
+
// unparseable href — skip
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return [...links];
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Extracts JS file URLs from pre-fetched HTML: <link rel="modulepreload">,
|
|
45
|
+
* <script src>, and Astro island component-url attributes.
|
|
46
|
+
*/
|
|
47
|
+
const extractJsFromHtml = (pageUrl, html) => __awaiter(void 0, void 0, void 0, function* () {
|
|
48
|
+
const $ = cheerio.load(html);
|
|
49
|
+
const jsFiles = [];
|
|
50
|
+
for (const el of $("link").toArray()) {
|
|
51
|
+
const rel = $(el).attr("rel");
|
|
52
|
+
if (rel === "modulepreload") {
|
|
53
|
+
const href = $(el).attr("href");
|
|
54
|
+
if (href)
|
|
55
|
+
jsFiles.push(href.startsWith("http") ? href : yield resolvePath(pageUrl, href));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const el of $("script").toArray()) {
|
|
59
|
+
const src = $(el).attr("src");
|
|
60
|
+
if (src)
|
|
61
|
+
jsFiles.push(src.startsWith("http") ? src : yield resolvePath(pageUrl, src));
|
|
62
|
+
}
|
|
63
|
+
for (const el of $("astro-island").toArray()) {
|
|
64
|
+
for (const attr of ["component-url", "renderer-url"]) {
|
|
65
|
+
const value = $(el).attr(attr);
|
|
66
|
+
if (value)
|
|
67
|
+
jsFiles.push(value.startsWith("http") ? value : yield resolvePath(pageUrl, value));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return jsFiles;
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Recursively crawls same-origin HTML pages discovered via <a href> and
|
|
74
|
+
* <link href> links. For every page that responds with text/html, it runs
|
|
75
|
+
* the full JS-discovery pipeline (HTML extraction + ESM import following)
|
|
76
|
+
* and queues any new page links for further recursion.
|
|
77
|
+
*
|
|
78
|
+
* Termination:
|
|
79
|
+
* - pending queue is exhausted, or
|
|
80
|
+
* - STAGNATION_LIMIT consecutive rounds produce no new JS files.
|
|
81
|
+
*
|
|
82
|
+
* Already-visited pages are never re-processed; ESM import traversal
|
|
83
|
+
* reuses a single visited Set across all pages so no JS file is fetched
|
|
84
|
+
* twice.
|
|
85
|
+
*/
|
|
86
|
+
const svelte_recursivePageCrawl = (entryUrl_1, ...args_1) => __awaiter(void 0, [entryUrl_1, ...args_1], void 0, function* (entryUrl, maxJsSizeMb = 2, onFilesDiscovered) {
|
|
87
|
+
var _a;
|
|
88
|
+
const allJsFiles = new Set();
|
|
89
|
+
const visitedPages = new Set([entryUrl]);
|
|
90
|
+
const knownPages = new Set([entryUrl]);
|
|
91
|
+
const importVisited = new Set();
|
|
92
|
+
// Seed from entry page
|
|
93
|
+
const entryRes = yield makeRequest(entryUrl, {});
|
|
94
|
+
if (!entryRes)
|
|
95
|
+
return [];
|
|
96
|
+
const entryHtml = yield entryRes.text();
|
|
97
|
+
const initialLinks = extractPageLinks(entryUrl, entryHtml);
|
|
98
|
+
const pendingPages = [];
|
|
99
|
+
for (const link of initialLinks) {
|
|
100
|
+
if (!knownPages.has(link)) {
|
|
101
|
+
knownPages.add(link);
|
|
102
|
+
pendingPages.push(link);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (pendingPages.length === 0)
|
|
106
|
+
return [];
|
|
107
|
+
console.log(chalk.cyan(`[i] Found ${pendingPages.length} candidate page link(s) for recursive JS discovery`));
|
|
108
|
+
let stagnantRounds = 0;
|
|
109
|
+
while (pendingPages.length > 0) {
|
|
110
|
+
const batch = pendingPages.splice(0);
|
|
111
|
+
const sizeBeforeRound = allJsFiles.size;
|
|
112
|
+
for (const pageUrl of batch) {
|
|
113
|
+
if (visitedPages.has(pageUrl))
|
|
114
|
+
continue;
|
|
115
|
+
visitedPages.add(pageUrl);
|
|
116
|
+
try {
|
|
117
|
+
const res = yield makeRequest(pageUrl, {});
|
|
118
|
+
if (!res)
|
|
119
|
+
continue;
|
|
120
|
+
const contentType = (_a = res.headers.get("content-type")) !== null && _a !== void 0 ? _a : "";
|
|
121
|
+
if (!contentType.includes("text/html"))
|
|
122
|
+
continue;
|
|
123
|
+
const html = yield res.text();
|
|
124
|
+
// Extract JS files from this page's HTML
|
|
125
|
+
const jsFromPage = yield extractJsFromHtml(pageUrl, html);
|
|
126
|
+
if (jsFromPage.length > 0) {
|
|
127
|
+
for (const f of jsFromPage) {
|
|
128
|
+
pushToJsUrls(f);
|
|
129
|
+
allJsFiles.add(f);
|
|
130
|
+
}
|
|
131
|
+
if (onFilesDiscovered)
|
|
132
|
+
onFilesDiscovered(jsFromPage);
|
|
133
|
+
console.log(chalk.green(`[✓] ${pageUrl}: extracted ${jsFromPage.length} JS file(s)`));
|
|
134
|
+
}
|
|
135
|
+
// Follow ESM imports from the newly found JS files
|
|
136
|
+
let toFollow = jsFromPage.filter((f) => !importVisited.has(f));
|
|
137
|
+
while (toFollow.length > 0) {
|
|
138
|
+
const newFiles = yield react_followImports(toFollow, maxJsSizeMb, pageUrl, importVisited);
|
|
139
|
+
if (newFiles.length === 0)
|
|
140
|
+
break;
|
|
141
|
+
for (const f of newFiles) {
|
|
142
|
+
pushToJsUrls(f);
|
|
143
|
+
allJsFiles.add(f);
|
|
144
|
+
}
|
|
145
|
+
if (onFilesDiscovered)
|
|
146
|
+
onFilesDiscovered(newFiles);
|
|
147
|
+
toFollow = newFiles;
|
|
148
|
+
}
|
|
149
|
+
// Queue newly discovered same-origin page links
|
|
150
|
+
const newLinks = extractPageLinks(pageUrl, html);
|
|
151
|
+
for (const link of newLinks) {
|
|
152
|
+
if (!knownPages.has(link)) {
|
|
153
|
+
knownPages.add(link);
|
|
154
|
+
pendingPages.push(link);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
console.log(chalk.yellow(`[!] Failed to crawl ${pageUrl}: ${err instanceof Error ? err.message : String(err)}`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const newFilesThisRound = allJsFiles.size - sizeBeforeRound;
|
|
163
|
+
if (newFilesThisRound === 0) {
|
|
164
|
+
stagnantRounds++;
|
|
165
|
+
if (stagnantRounds >= STAGNATION_LIMIT) {
|
|
166
|
+
console.log(chalk.yellow(`[!] Stopping page crawl: ${STAGNATION_LIMIT} consecutive rounds without new JS files`));
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
stagnantRounds = 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (allJsFiles.size > 0) {
|
|
175
|
+
console.log(chalk.green(`[✓] Recursive page crawl found ${allJsFiles.size} JS file(s) across ${visitedPages.size - 1} page(s)`));
|
|
176
|
+
}
|
|
177
|
+
return [...allJsFiles];
|
|
178
|
+
});
|
|
179
|
+
export default svelte_recursivePageCrawl;
|
|
180
|
+
//# sourceMappingURL=svelte_recursivePageCrawl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte_recursivePageCrawl.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_recursivePageCrawl.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import _traverse from "@babel/traverse";
|
|
|
17
17
|
const traverse = _traverse.default;
|
|
18
18
|
let analyzedFiles = [];
|
|
19
19
|
let filesFound = [];
|
|
20
|
+
let mapFilesFound = [];
|
|
20
21
|
/**
|
|
21
22
|
* Parses the content of a JavaScript file and returns an object containing
|
|
22
23
|
* all the strings that end with ".js".
|
|
@@ -88,6 +89,15 @@ const svelte_stringAnalysisJSFiles = (url) => __awaiter(void 0, void 0, void 0,
|
|
|
88
89
|
const response = yield makeRequest(js_url, {});
|
|
89
90
|
const respText = yield response.text();
|
|
90
91
|
const foundJsFiles = yield parseJSFileContent(respText);
|
|
92
|
+
// check for sourcemap reference and queue the .map file
|
|
93
|
+
const sourcemapMatch = respText.match(/\/\/# sourceMappingURL=(.+)$/m);
|
|
94
|
+
if (sourcemapMatch) {
|
|
95
|
+
const rawRef = sourcemapMatch[1].trim();
|
|
96
|
+
const mapUrl = new URL(rawRef, js_url).href;
|
|
97
|
+
if (!mapFilesFound.includes(mapUrl)) {
|
|
98
|
+
mapFilesFound.push(mapUrl);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
91
101
|
// iterate through the foundJsFiles and resolve the paths
|
|
92
102
|
for (const [key, value] of Object.entries(foundJsFiles)) {
|
|
93
103
|
const resolvedPath = yield resolvePath(js_url, value);
|
|
@@ -102,8 +112,12 @@ const svelte_stringAnalysisJSFiles = (url) => __awaiter(void 0, void 0, void 0,
|
|
|
102
112
|
}
|
|
103
113
|
// dedupe the files
|
|
104
114
|
filesFound = [...new Set(filesFound)];
|
|
115
|
+
mapFilesFound = [...new Set(mapFilesFound)];
|
|
105
116
|
console.log(chalk.green(`[✓] Found ${filesFound.length} JS files from string analysis`));
|
|
106
|
-
|
|
117
|
+
if (mapFilesFound.length > 0) {
|
|
118
|
+
console.log(chalk.green(`[✓] Found ${mapFilesFound.length} sourcemap(s) from JS files`));
|
|
119
|
+
}
|
|
120
|
+
return { jsFiles: filesFound, mapFiles: mapFilesFound };
|
|
107
121
|
});
|
|
108
122
|
export default svelte_stringAnalysisJSFiles;
|
|
109
123
|
//# sourceMappingURL=svelte_stringAnalysisJSFiles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_stringAnalysisJSFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AAEvD,cAAc;AACd,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAEnC,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,UAAU,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"svelte_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_stringAnalysisJSFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,48 +8,79 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
const REACT_MARKERS = [
|
|
12
|
+
"__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
|
|
13
|
+
"__REACT_DEVTOOLS_GLOBAL_HOOK__",
|
|
14
|
+
"react-jsx-runtime.production",
|
|
15
|
+
"react-dom.production",
|
|
16
|
+
"__reactRouterVersion",
|
|
17
|
+
];
|
|
18
|
+
const matchesReact = (body) => {
|
|
19
|
+
for (const marker of REACT_MARKERS) {
|
|
20
|
+
if (body.includes(marker))
|
|
21
|
+
return marker;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
};
|
|
25
|
+
const fetchAndCheck = (src, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
var _a;
|
|
27
|
+
let resolvedUrl;
|
|
28
|
+
try {
|
|
29
|
+
resolvedUrl = new URL(src, url).href;
|
|
30
|
+
}
|
|
31
|
+
catch (_b) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
// Fast path: filename itself contains "react"
|
|
35
|
+
const filename = (_a = resolvedUrl.split("/").pop()) !== null && _a !== void 0 ? _a : "";
|
|
36
|
+
if (/react/i.test(filename)) {
|
|
37
|
+
return `React-named file referenced: ${src}`;
|
|
38
|
+
}
|
|
39
|
+
const res = yield makeRequest(resolvedUrl, {});
|
|
40
|
+
if (!res)
|
|
41
|
+
return null;
|
|
42
|
+
const body = yield res.text();
|
|
43
|
+
const marker = matchesReact(body);
|
|
44
|
+
return marker ? `Found "${marker}" in ${src}` : null;
|
|
45
|
+
});
|
|
11
46
|
const checkReact = ($, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
-
|
|
13
|
-
let evidence = "";
|
|
14
|
-
// to detect react, first go through all the <script src>
|
|
47
|
+
// Check <script src="..."> elements
|
|
15
48
|
for (const el of $("script").get()) {
|
|
16
49
|
const attribs = el.attribs;
|
|
17
|
-
if (attribs)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (!res)
|
|
34
|
-
continue;
|
|
35
|
-
const body = yield res.text();
|
|
36
|
-
// check if the body contains "react" or "react-dom"
|
|
37
|
-
if (body.includes("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED") &&
|
|
38
|
-
body.includes("__REACT_DEVTOOLS_GLOBAL_HOOK__")) {
|
|
39
|
-
detected = true;
|
|
40
|
-
evidence = `Found "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED" and "__REACT_DEVTOOLS_GLOBAL_HOOK__" in ${src}`;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
else if (body.includes("__reactRouterVersion")) {
|
|
44
|
-
detected = true;
|
|
45
|
-
evidence = `Found "__reactRouterVersion" in ${src}`;
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
50
|
+
if (!attribs)
|
|
51
|
+
continue;
|
|
52
|
+
const src = attribs["src"];
|
|
53
|
+
if (src) {
|
|
54
|
+
const evidence = yield fetchAndCheck(src, url);
|
|
55
|
+
if (evidence)
|
|
56
|
+
return { detected: true, evidence };
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Inline script — scan the text content directly (Vite bundles, etc.)
|
|
60
|
+
const inlineContent = $(el).text();
|
|
61
|
+
if (!inlineContent)
|
|
62
|
+
continue;
|
|
63
|
+
const marker = matchesReact(inlineContent);
|
|
64
|
+
if (marker) {
|
|
65
|
+
return { detected: true, evidence: `Found "${marker}" in inline <script> on ${url}` };
|
|
49
66
|
}
|
|
50
67
|
}
|
|
51
68
|
}
|
|
52
|
-
|
|
69
|
+
// Check <link rel="modulepreload"> elements (Vite splits React into separate vendor chunks)
|
|
70
|
+
for (const el of $("link").get()) {
|
|
71
|
+
const attribs = el.attribs;
|
|
72
|
+
if (!attribs)
|
|
73
|
+
continue;
|
|
74
|
+
if (attribs["rel"] !== "modulepreload")
|
|
75
|
+
continue;
|
|
76
|
+
const href = attribs["href"];
|
|
77
|
+
if (!href)
|
|
78
|
+
continue;
|
|
79
|
+
const evidence = yield fetchAndCheck(href, url);
|
|
80
|
+
if (evidence)
|
|
81
|
+
return { detected: true, evidence };
|
|
82
|
+
}
|
|
83
|
+
return { detected: false, evidence: "" };
|
|
53
84
|
});
|
|
54
85
|
export { checkReact };
|
|
55
86
|
//# sourceMappingURL=checkReact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkReact.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkReact.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAGnD,MAAM,
|
|
1
|
+
{"version":3,"file":"checkReact.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkReact.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
11
|
-
* Detects if a webpage uses Svelte/SvelteKit by checking for
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* like data-sveltekit-reload to identify Svelte applications.
|
|
11
|
+
* Detects if a webpage uses Svelte/SvelteKit or Astro+Svelte by checking for
|
|
12
|
+
* Svelte-specific attributes, SvelteKit navigation markers, and Astro island
|
|
13
|
+
* elements whose renderer is the Svelte adapter.
|
|
15
14
|
*
|
|
16
15
|
* @param $ - The Cheerio API object containing the parsed HTML
|
|
17
16
|
* @returns Promise that resolves to an object with detection status and evidence
|
|
@@ -19,49 +18,50 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
19
18
|
export const checkSvelte = ($) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
19
|
let detected = false;
|
|
21
20
|
let evidence = "";
|
|
22
|
-
//
|
|
21
|
+
// SvelteKit: svelte- prefixed class names or IDs
|
|
23
22
|
$("*").each((_, el) => {
|
|
24
|
-
const tag = $(el).get(0).tagName;
|
|
25
23
|
const attribs = el.attribs;
|
|
26
|
-
if (attribs)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
24
|
+
if (!attribs)
|
|
25
|
+
return;
|
|
26
|
+
for (const [attrName, attrValue] of Object.entries(attribs)) {
|
|
27
|
+
if (attrName === "class" || attrName === "id") {
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
if (attrValue.includes("svelte-")) {
|
|
30
|
+
detected = true;
|
|
31
|
+
evidence = `${attrName} :: ${attrValue}`;
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
35
|
});
|
|
38
|
-
//
|
|
36
|
+
// SvelteKit: data-sveltekit-reload or other data-sveltekit-* attributes
|
|
39
37
|
$("*").each((_, el) => {
|
|
40
|
-
const tag = $(el).get(0).tagName;
|
|
41
38
|
const attribs = el.attribs;
|
|
42
|
-
if (attribs)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
evidence = `${attrName} :: ${attrValue}`;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
39
|
+
if (!attribs)
|
|
40
|
+
return;
|
|
41
|
+
for (const attrName of Object.keys(attribs)) {
|
|
42
|
+
if (attrName.startsWith("data-sveltekit-")) {
|
|
43
|
+
detected = true;
|
|
44
|
+
evidence = `${attrName} :: ${attribs[attrName]}`;
|
|
51
45
|
}
|
|
52
46
|
}
|
|
53
47
|
});
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
// Astro+Svelte: astro-island elements whose renderer-url contains ".svelte."
|
|
49
|
+
// or whose opts attribute contains "value":"svelte"
|
|
50
|
+
$("astro-island").each((_, el) => {
|
|
57
51
|
const attribs = el.attribs;
|
|
58
|
-
if (attribs)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
if (!attribs)
|
|
53
|
+
return;
|
|
54
|
+
const rendererUrl = attribs["renderer-url"] || "";
|
|
55
|
+
if (rendererUrl.includes(".svelte.") || rendererUrl.includes("/svelte")) {
|
|
56
|
+
detected = true;
|
|
57
|
+
evidence = `astro-island renderer-url :: ${rendererUrl}`;
|
|
58
|
+
return false; // break
|
|
59
|
+
}
|
|
60
|
+
const opts = attribs["opts"] || "";
|
|
61
|
+
if (opts.includes('"value":"svelte"') || opts.includes("'value':'svelte'")) {
|
|
62
|
+
detected = true;
|
|
63
|
+
evidence = `astro-island opts :: ${opts.slice(0, 80)}`;
|
|
64
|
+
return false;
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
return { detected, evidence };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkSvelte.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkSvelte.ts"],"names":[],"mappings":";;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"checkSvelte.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkSvelte.ts"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,CAAC,EAAE,EAAE;IACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,iDAAiD;IACjD,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC5C,aAAa;gBACb,IAAK,SAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5C,QAAQ,GAAG,IAAI,CAAC;oBAChB,QAAQ,GAAG,GAAG,QAAQ,OAAO,SAAS,EAAE,CAAC;gBAC7C,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACzC,QAAQ,GAAG,IAAI,CAAC;gBAChB,QAAQ,GAAG,GAAG,QAAQ,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,oDAAoD;IACpD,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,WAAW,GAAW,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,gCAAgC,WAAW,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC,CAAC,QAAQ;QAC1B,CAAC;QACD,MAAM,IAAI,GAAW,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzE,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,wBAAwB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAA,CAAC"}
|
|
@@ -29,7 +29,11 @@ import { checkReact } from "./checkReact.js";
|
|
|
29
29
|
* - evidence: A string with the evidence of the detection, or an empty string if no front-end framework was detected.
|
|
30
30
|
*/
|
|
31
31
|
const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
-
|
|
32
|
+
const log = (...args) => {
|
|
33
|
+
if (!globalsUtil.getQuiet())
|
|
34
|
+
console.log(...args);
|
|
35
|
+
};
|
|
36
|
+
log(chalk.cyan("[i] Detecting front-end framework"));
|
|
33
37
|
// get the page source. Drain the body immediately into a string — if we
|
|
34
38
|
// wait until after the puppeteer + downstream check* calls, the Response
|
|
35
39
|
// body gets invalidated (undici flips bodyUsed=true mid-flight when the
|
|
@@ -41,7 +45,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
41
45
|
resBody = yield res.text();
|
|
42
46
|
}
|
|
43
47
|
catch (err) {
|
|
44
|
-
|
|
48
|
+
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
49
|
}
|
|
46
50
|
}
|
|
47
51
|
// get the page source in the browser (skipped in cache-only mode — no network allowed)
|
|
@@ -63,7 +67,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
63
67
|
pageSource = yield page.content();
|
|
64
68
|
}
|
|
65
69
|
catch (err) {
|
|
66
|
-
|
|
70
|
+
log(chalk.yellow("[!] Page navigation/content failed, falling back to fetch response if available"));
|
|
67
71
|
}
|
|
68
72
|
finally {
|
|
69
73
|
yield browser.close().catch(() => { });
|
|
@@ -93,7 +97,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
93
97
|
let $res;
|
|
94
98
|
// if network error was caused, then return
|
|
95
99
|
if (res === null) {
|
|
96
|
-
|
|
100
|
+
log(chalk.red("[!] Fetch request failed after retries"));
|
|
97
101
|
}
|
|
98
102
|
else if (resBody !== null) {
|
|
99
103
|
$res = cheerio.load(resBody);
|
|
@@ -108,8 +112,8 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
108
112
|
return { name: "next", evidence };
|
|
109
113
|
}
|
|
110
114
|
else if (result_checkVueJS.detected === true || result_checkVueJS_res.detected === true) {
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
log(chalk.green("[✓] Vue.js detected"));
|
|
116
|
+
log(chalk.cyan(`[i] Checking Nuxt.JS`), chalk.dim("(Nuxt.JS is built on Vue.js)"));
|
|
113
117
|
const result_checkNuxtJS = yield checkNuxtJS($);
|
|
114
118
|
const result_checkNuxtJS_res = $res ? yield checkNuxtJS($res) : { detected: false, evidence: "" };
|
|
115
119
|
if (result_checkNuxtJS.detected === true || result_checkNuxtJS_res.detected === true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAG,CAAO,GAAW,EAA+C,EAAE;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import chalk from "chalk";
|
|
|
13
13
|
import cliProgress from "cli-progress";
|
|
14
14
|
import parser from "@babel/parser";
|
|
15
15
|
import t from "@babel/types";
|
|
16
|
+
import { setActiveBarLogger, computeBarSize, watchBarResize } from "../../utility/progressLog.js";
|
|
16
17
|
const traverse = _traverse.default;
|
|
17
18
|
const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0, [url_1, jsFiles_1, ...args_1], void 0, function* (url, jsFiles, maxJsSizeMb = 2) {
|
|
18
19
|
const MAX_JS_SIZE_BYTES = maxJsSizeMb * 1024 * 1024;
|
|
@@ -23,6 +24,7 @@ const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0
|
|
|
23
24
|
"[{bar}] {percentage}% | {value}/{total} files | {paths} paths | {skipped} skipped",
|
|
24
25
|
barCompleteChar: "█",
|
|
25
26
|
barIncompleteChar: "░",
|
|
27
|
+
barsize: computeBarSize(86),
|
|
26
28
|
hideCursor: false,
|
|
27
29
|
clearOnComplete: false,
|
|
28
30
|
stopOnComplete: false,
|
|
@@ -30,6 +32,8 @@ const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0
|
|
|
30
32
|
let processed = 0;
|
|
31
33
|
let skipped = 0;
|
|
32
34
|
bar.start(jsFiles.length, 0, { paths: 0, skipped: 0 });
|
|
35
|
+
const stopBarWatcher = watchBarResize(bar, 86);
|
|
36
|
+
setActiveBarLogger({ log: (s) => process.stdout.write("\r\x1b[K" + s) });
|
|
33
37
|
// iterate through all those
|
|
34
38
|
for (const jsFile of jsFiles) {
|
|
35
39
|
if (!jsFile.endsWith(".js")) {
|
|
@@ -140,6 +144,8 @@ const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0
|
|
|
140
144
|
bar.update(processed, { paths: toReturn.length, skipped });
|
|
141
145
|
}
|
|
142
146
|
bar.stop();
|
|
147
|
+
stopBarWatcher();
|
|
148
|
+
setActiveBarLogger(null);
|
|
143
149
|
if (toReturn.length > 0) {
|
|
144
150
|
console.log(chalk.green(`[+] Found ${toReturn.length} client-side paths from JS files!`));
|
|
145
151
|
}
|