@shriyanss/js-recon 1.0.0 → 1.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-prettify.yaml +65 -0
- package/.github/workflows/npm-publish.yml +35 -0
- package/.prettierignore +2 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +50 -0
- package/README.md +35 -139
- package/build/api_gateway/checkFeasibility.js +32 -0
- package/build/api_gateway/checkFeasibility.js.map +1 -0
- package/build/api_gateway/checkFireWallBlocking.js +24 -0
- package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
- package/build/api_gateway/genReq.js +199 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +275 -0
- package/build/api_gateway/index.js.map +1 -0
- package/build/endpoints/gen_report/gen_json.js +22 -0
- package/build/endpoints/gen_report/gen_json.js.map +1 -0
- package/build/endpoints/gen_report/gen_markdown.js +66 -0
- package/build/endpoints/gen_report/gen_markdown.js.map +1 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js +46 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
- package/build/endpoints/index.js +89 -0
- package/build/endpoints/index.js.map +1 -0
- package/build/endpoints/next_js/client_jsFilesHref.js +91 -0
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
- package/build/endpoints/next_js/client_jsonParse.js +78 -0
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
- package/build/endpoints/next_js/client_subsequentRequests.js +199 -0
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
- package/build/endpoints/next_js/getWebpacks.js +45 -0
- package/build/endpoints/next_js/getWebpacks.js.map +1 -0
- package/build/globalConfig.js +11 -0
- package/build/globalConfig.js.map +1 -0
- package/build/index.js +166 -0
- package/build/index.js.map +1 -0
- package/build/lazyLoad/downloadFilesUtil.js +128 -0
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +51 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
- package/build/lazyLoad/globals.js +22 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +170 -0
- package/build/lazyLoad/index.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js +94 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResources.js +202 -0
- package/build/lazyLoad/next_js/next_GetLazyResources.js.map +1 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +120 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +188 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +75 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +94 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +68 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +95 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
- package/build/map/index.js +58 -0
- package/build/map/index.js.map +1 -0
- package/build/map/next_js/getFetchInstances.js +108 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +227 -0
- package/build/map/next_js/getWebpackConnections.js.map +1 -0
- package/build/map/next_js/interactive.js +32 -0
- package/build/map/next_js/interactive.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js +190 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js +91 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +11 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/next_js/interactive_helpers/keybindings.js +80 -0
- package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
- package/build/map/next_js/interactive_helpers/printer.js +17 -0
- package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +81 -0
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +201 -0
- package/build/map/next_js/resolveFetch.js.map +1 -0
- package/build/run/index.js +62 -0
- package/build/run/index.js.map +1 -0
- package/build/strings/index.js +238 -0
- package/build/strings/index.js.map +1 -0
- package/build/strings/openapi.js +55 -0
- package/build/strings/openapi.js.map +1 -0
- package/build/strings/permutate.js +55 -0
- package/build/strings/permutate.js.map +1 -0
- package/build/strings/secrets.js +89 -0
- package/build/strings/secrets.js.map +1 -0
- package/build/techDetect/index.js +229 -0
- package/build/techDetect/index.js.map +1 -0
- package/build/utility/ai.js +69 -0
- package/build/utility/ai.js.map +1 -0
- package/build/utility/globals.js +84 -0
- package/build/utility/globals.js.map +1 -0
- package/build/utility/interfaces.js +2 -0
- package/build/utility/interfaces.js.map +1 -0
- package/build/utility/makeReq.js +265 -0
- package/build/utility/makeReq.js.map +1 -0
- package/build/utility/resolvePath.js +44 -0
- package/build/utility/resolvePath.js.map +1 -0
- package/{utility → build/utility}/runSandboxed.js +10 -13
- package/build/utility/runSandboxed.js.map +1 -0
- package/{utility → build/utility}/urlUtils.js +9 -11
- package/build/utility/urlUtils.js.map +1 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +20 -0
- package/docs/api-gateway.md +68 -0
- package/docs/endpoints.md +49 -0
- package/docs/example-scenario.md +258 -0
- package/docs/interactive-mode.md +76 -0
- package/docs/lazyload.md +56 -0
- package/docs/map.md +53 -0
- package/docs/run.md +54 -0
- package/docs/strings.md +75 -0
- package/package.json +50 -38
- package/api_gateway/checkFeasibility.js +0 -25
- package/api_gateway/checkFireWallBlocking.js +0 -17
- package/api_gateway/genReq.js +0 -214
- package/api_gateway/index.js +0 -325
- package/endpoints/index.js +0 -7
- package/globalConfig.js +0 -12
- package/index.js +0 -69
- package/lazyLoad/downloadFilesUtil.js +0 -122
- package/lazyLoad/downloadLoadedJsUtil.js +0 -54
- package/lazyLoad/globals.js +0 -15
- package/lazyLoad/index.js +0 -167
- package/lazyLoad/next_js/next_GetJSScript.js +0 -99
- package/lazyLoad/next_js/next_GetLazyResources.js +0 -201
- package/lazyLoad/next_js/next_SubsequentRequests.js +0 -138
- package/lazyLoad/nuxt_js/nuxt_astParse.js +0 -194
- package/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +0 -77
- package/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +0 -99
- package/research/firewall_bypass.md +0 -38
- package/research/next_js.md +0 -116
- package/research/nuxt_js.md +0 -125
- package/research/vue_js.md +0 -9
- package/strings/index.js +0 -145
- package/techDetect/index.js +0 -156
- package/utility/globals.js +0 -6
- package/utility/makeReq.js +0 -179
- package/utility/resolvePath.js +0 -43
|
@@ -0,0 +1,94 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
12
|
+
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
13
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
14
|
+
// for parsing
|
|
15
|
+
import parser from "@babel/parser";
|
|
16
|
+
import _traverse from "@babel/traverse";
|
|
17
|
+
const traverse = _traverse.default;
|
|
18
|
+
let analyzedFiles = [];
|
|
19
|
+
let filesFound = [];
|
|
20
|
+
const parseJSFileContent = (content) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
try {
|
|
22
|
+
const ast = parser.parse(content, {
|
|
23
|
+
sourceType: "module",
|
|
24
|
+
plugins: ["jsx", "typescript"],
|
|
25
|
+
});
|
|
26
|
+
let foundJsFiles = {};
|
|
27
|
+
traverse(ast, {
|
|
28
|
+
StringLiteral(path) {
|
|
29
|
+
const value = path.node.value;
|
|
30
|
+
if (value.startsWith("./") && value.endsWith(".js")) {
|
|
31
|
+
foundJsFiles[value] = value;
|
|
32
|
+
}
|
|
33
|
+
else if (value.startsWith("../") && value.endsWith(".js")) {
|
|
34
|
+
foundJsFiles[value] = value;
|
|
35
|
+
}
|
|
36
|
+
else if (value.endsWith(".js")) {
|
|
37
|
+
foundJsFiles[value] = value;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
return foundJsFiles;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const nuxt_stringAnalysisJSFiles = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
48
|
+
console.log(chalk.cyan("[i] Analyzing strings in the files found"));
|
|
49
|
+
while (true) {
|
|
50
|
+
// get all the JS URLs
|
|
51
|
+
const js_urls = getJsUrls();
|
|
52
|
+
if (js_urls.length === 0) {
|
|
53
|
+
console.log(chalk.red("[!] No JS files found for string analysis"));
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
// if js_urls have everything that is in analyzedFiles, break
|
|
57
|
+
let everythingAnalyzed = true;
|
|
58
|
+
for (const url of js_urls) {
|
|
59
|
+
// if the url is not in analyzedFiles, set everythingAnalyzed to false
|
|
60
|
+
if (!analyzedFiles.includes(url)) {
|
|
61
|
+
everythingAnalyzed = false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// break if everything is analyzed
|
|
65
|
+
if (everythingAnalyzed) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
// iterate through the JS URLs
|
|
69
|
+
for (const js_url of js_urls) {
|
|
70
|
+
if (analyzedFiles.includes(js_url)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const response = yield makeRequest(js_url, {});
|
|
74
|
+
const respText = yield response.text();
|
|
75
|
+
const foundJsFiles = yield parseJSFileContent(respText);
|
|
76
|
+
// iterate through the foundJsFiles and resolve the paths
|
|
77
|
+
for (const [key, value] of Object.entries(foundJsFiles)) {
|
|
78
|
+
const resolvedPath = yield resolvePath(js_url, value);
|
|
79
|
+
if (analyzedFiles.includes(resolvedPath)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
pushToJsUrls(resolvedPath);
|
|
83
|
+
filesFound.push(resolvedPath);
|
|
84
|
+
}
|
|
85
|
+
analyzedFiles.push(js_url);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// dedupe the files
|
|
89
|
+
filesFound = [...new Set(filesFound)];
|
|
90
|
+
console.log(chalk.green(`[✓] Found ${filesFound.length} JS files from string analysis`));
|
|
91
|
+
return filesFound;
|
|
92
|
+
});
|
|
93
|
+
export default nuxt_stringAnalysisJSFiles;
|
|
94
|
+
//# sourceMappingURL=nuxt_stringAnalysisJSFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
import * as cheerio from "cheerio";
|
|
12
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
15
|
+
const svelte_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
console.log(chalk.cyan("[i] Analyzing page source"));
|
|
17
|
+
let foundUrls = [];
|
|
18
|
+
const pageSource = yield makeRequest(url, {});
|
|
19
|
+
const body = yield pageSource.text();
|
|
20
|
+
// cheerio to parse the page source
|
|
21
|
+
const $ = cheerio.load(body);
|
|
22
|
+
// find all link tags
|
|
23
|
+
const linkTags = $("link");
|
|
24
|
+
for (const linkTag of linkTags) {
|
|
25
|
+
const relAttr = $(linkTag).attr("rel");
|
|
26
|
+
if (relAttr === "modulepreload") {
|
|
27
|
+
const hrefAttr = $(linkTag).attr("href");
|
|
28
|
+
if (hrefAttr) {
|
|
29
|
+
if (hrefAttr.startsWith("http")) {
|
|
30
|
+
foundUrls.push(hrefAttr);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
foundUrls.push(yield resolvePath(url, hrefAttr));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// also, parse the script tags
|
|
39
|
+
const scriptTags = $("script");
|
|
40
|
+
for (const scriptTag of scriptTags) {
|
|
41
|
+
const srcAttr = $(scriptTag).attr("src");
|
|
42
|
+
if (srcAttr) {
|
|
43
|
+
if (srcAttr.startsWith("http")) {
|
|
44
|
+
foundUrls.push(srcAttr);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
foundUrls.push(yield resolvePath(url, srcAttr));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (foundUrls.length === 0) {
|
|
52
|
+
console.log(chalk.red("[!] No JS files found from the page source"));
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(chalk.green(`[✓] Found ${foundUrls.length} JS files from the page source`));
|
|
57
|
+
}
|
|
58
|
+
// iterate through the foundUrls and resolve the paths
|
|
59
|
+
for (const foundUrl of foundUrls) {
|
|
60
|
+
if (getJsUrls().includes(foundUrl)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
pushToJsUrls(foundUrl);
|
|
64
|
+
}
|
|
65
|
+
return foundUrls;
|
|
66
|
+
});
|
|
67
|
+
export default svelte_getFromPageSource;
|
|
68
|
+
//# sourceMappingURL=svelte_getFromPageSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_getFromPageSource.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,wBAAwB,GAAG,CAAO,GAAG,EAAE,EAAE;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAErC,mCAAmC;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,qBAAqB;IACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,KAAK,CACP,aAAa,SAAS,CAAC,MAAM,gCAAgC,CAChE,CACJ,CAAC;IACN,CAAC;IAED,sDAAsD;IACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,SAAS;QACb,CAAC;QACD,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AACF,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
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 makeRequest from "../../utility/makeReq.js";
|
|
12
|
+
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
13
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
14
|
+
// for parsing
|
|
15
|
+
import parser from "@babel/parser";
|
|
16
|
+
import _traverse from "@babel/traverse";
|
|
17
|
+
const traverse = _traverse.default;
|
|
18
|
+
let analyzedFiles = [];
|
|
19
|
+
let filesFound = [];
|
|
20
|
+
const parseJSFileContent = (content) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
try {
|
|
22
|
+
const ast = parser.parse(content, {
|
|
23
|
+
sourceType: "module",
|
|
24
|
+
plugins: ["jsx", "typescript"],
|
|
25
|
+
});
|
|
26
|
+
let foundJsFiles = {};
|
|
27
|
+
traverse(ast, {
|
|
28
|
+
StringLiteral(path) {
|
|
29
|
+
const value = path.node.value;
|
|
30
|
+
if (value.startsWith("./") && value.endsWith(".js")) {
|
|
31
|
+
foundJsFiles[value] = value;
|
|
32
|
+
}
|
|
33
|
+
else if (value.startsWith("../") && value.endsWith(".js")) {
|
|
34
|
+
foundJsFiles[value] = value;
|
|
35
|
+
}
|
|
36
|
+
else if (value.endsWith(".js")) {
|
|
37
|
+
foundJsFiles[value] = value;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
return foundJsFiles;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
// console.error(error);
|
|
45
|
+
return {};
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const svelte_stringAnalysisJSFiles = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
console.log(chalk.cyan("[i] Analyzing strings in the files found"));
|
|
50
|
+
while (true) {
|
|
51
|
+
// get all the JS URLs
|
|
52
|
+
const js_urls = getJsUrls();
|
|
53
|
+
if (js_urls.length === 0) {
|
|
54
|
+
console.log(chalk.red("[!] No JS files found for string analysis"));
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
// if js_urls have everything that is in analyzedFiles, break
|
|
58
|
+
let everythingAnalyzed = true;
|
|
59
|
+
for (const url of js_urls) {
|
|
60
|
+
// if the url is not in analyzedFiles, set everythingAnalyzed to false
|
|
61
|
+
if (!analyzedFiles.includes(url)) {
|
|
62
|
+
everythingAnalyzed = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// break if everything is analyzed
|
|
66
|
+
if (everythingAnalyzed) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
// iterate through the JS URLs
|
|
70
|
+
for (const js_url of js_urls) {
|
|
71
|
+
if (analyzedFiles.includes(js_url)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const response = yield makeRequest(js_url, {});
|
|
75
|
+
const respText = yield response.text();
|
|
76
|
+
const foundJsFiles = yield parseJSFileContent(respText);
|
|
77
|
+
// iterate through the foundJsFiles and resolve the paths
|
|
78
|
+
for (const [key, value] of Object.entries(foundJsFiles)) {
|
|
79
|
+
const resolvedPath = yield resolvePath(js_url, value);
|
|
80
|
+
if (analyzedFiles.includes(resolvedPath)) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
pushToJsUrls(resolvedPath);
|
|
84
|
+
filesFound.push(resolvedPath);
|
|
85
|
+
}
|
|
86
|
+
analyzedFiles.push(js_url);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// dedupe the files
|
|
90
|
+
filesFound = [...new Set(filesFound)];
|
|
91
|
+
console.log(chalk.green(`[✓] Found ${filesFound.length} JS files from string analysis`));
|
|
92
|
+
return filesFound;
|
|
93
|
+
});
|
|
94
|
+
export default svelte_stringAnalysisJSFiles;
|
|
95
|
+
//# sourceMappingURL=svelte_stringAnalysisJSFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_stringAnalysisJSFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
// Next.JS
|
|
12
|
+
import getWebpackConnections from "./next_js/getWebpackConnections.js";
|
|
13
|
+
import getFetchInstances from "./next_js/getFetchInstances.js";
|
|
14
|
+
import resolveFetch from "./next_js/resolveFetch.js";
|
|
15
|
+
import interactive from "./next_js/interactive.js";
|
|
16
|
+
const availableTech = {
|
|
17
|
+
next: "Next.JS",
|
|
18
|
+
};
|
|
19
|
+
const availableFormats = {
|
|
20
|
+
json: "JSON",
|
|
21
|
+
};
|
|
22
|
+
const map = (directory, output, formats, tech, list, interactive_mode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
console.log(chalk.cyan("[i] Running 'map' module"));
|
|
24
|
+
if (list) {
|
|
25
|
+
console.log(chalk.cyan("Available technologies:"));
|
|
26
|
+
for (const [key, value] of Object.entries(availableTech)) {
|
|
27
|
+
console.log(chalk.cyan(`- '${key}': ${value}`));
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// iterate through all the formats, and match it with the available formats
|
|
32
|
+
for (const format of formats) {
|
|
33
|
+
if (!Object.keys(availableFormats).includes(format)) {
|
|
34
|
+
console.log(chalk.red(`[!] Invalid format: ${format}`));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!tech) {
|
|
39
|
+
console.log(chalk.red("[!] Please specify a technology with -t/--tech. Run with -l/--list to see available technologies"));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!directory) {
|
|
43
|
+
console.log(chalk.red("[!] Please specify a directory with -d/--directory"));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (tech === "next") {
|
|
47
|
+
let chunks = yield getWebpackConnections(directory, output, formats);
|
|
48
|
+
// now, iterate through them, and check fetch instances
|
|
49
|
+
chunks = yield getFetchInstances(chunks, output, formats);
|
|
50
|
+
// resolve fetch once you've got all
|
|
51
|
+
yield resolveFetch(chunks, directory, formats);
|
|
52
|
+
if (interactive_mode) {
|
|
53
|
+
yield interactive(chunks);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
export default map;
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/map/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU;AACV,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAEnD,MAAM,aAAa,GAAG;IAClB,IAAI,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACrB,IAAI,EAAE,MAAM;CACf,CAAC;AAEF,MAAM,GAAG,GAAG,CACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,gBAAgB,EAClB,EAAE;IACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;IACX,CAAC;IAED,2EAA2E;IAC3E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO;QACX,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,kGAAkG,CACrG,CACJ,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAClE,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAErE,uDAAuD;QACvD,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,oCAAoC;QACpC,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/C,IAAI,gBAAgB,EAAE,CAAC;YACnB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import _traverse from "@babel/traverse";
|
|
13
|
+
const traverse = _traverse.default;
|
|
14
|
+
import parser from "@babel/parser";
|
|
15
|
+
const isFetchIdentifier = (node) => {
|
|
16
|
+
return node.type === "Identifier" && node.name === "fetch";
|
|
17
|
+
};
|
|
18
|
+
const isFetchFallback = (node) => {
|
|
19
|
+
// x ?? fetch OR cond ? x : fetch
|
|
20
|
+
return ((node.type === "LogicalExpression" &&
|
|
21
|
+
node.right &&
|
|
22
|
+
isFetchIdentifier(node.right)) ||
|
|
23
|
+
(node.type === "ConditionalExpression" &&
|
|
24
|
+
isFetchIdentifier(node.alternate)));
|
|
25
|
+
};
|
|
26
|
+
const getFetchInstances = (chunks, output, formats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
+
console.log(chalk.cyan("[i] Running 'getFetchInstances' module"));
|
|
28
|
+
let chunk_copy = Object.assign({}, chunks);
|
|
29
|
+
// iterate through the chunks, and check fetch instances
|
|
30
|
+
for (let chunk of Object.values(chunks)) {
|
|
31
|
+
const chunkAst = parser.parse(chunk.code, {
|
|
32
|
+
sourceType: "module",
|
|
33
|
+
plugins: ["jsx", "typescript"],
|
|
34
|
+
});
|
|
35
|
+
const fetchAliases = new Set();
|
|
36
|
+
const fetchCalls = new Set();
|
|
37
|
+
traverse(chunkAst, {
|
|
38
|
+
// -------- Pass 1: look for aliases --------
|
|
39
|
+
// a) const S = fetch;
|
|
40
|
+
// b) const S = something ?? fetch;
|
|
41
|
+
// c) const S = cond ? x : fetch;
|
|
42
|
+
VariableDeclarator(path) {
|
|
43
|
+
const { id, init } = path.node;
|
|
44
|
+
if (id.type !== "Identifier" || !init)
|
|
45
|
+
return;
|
|
46
|
+
const aliasName = id.name;
|
|
47
|
+
if (isFetchIdentifier(init) || isFetchFallback(init)) {
|
|
48
|
+
// Record the binding *object* so we can track its references later
|
|
49
|
+
const binding = path.scope.getBinding(aliasName);
|
|
50
|
+
if (binding) {
|
|
51
|
+
fetchAliases.add(binding);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
AssignmentExpression(path) {
|
|
56
|
+
// Handles re-assignment: S = fetch;
|
|
57
|
+
const { left, right } = path.node;
|
|
58
|
+
if (left.type !== "Identifier")
|
|
59
|
+
return;
|
|
60
|
+
if (isFetchIdentifier(right) || isFetchFallback(right)) {
|
|
61
|
+
const binding = path.scope.getBinding(left.name);
|
|
62
|
+
if (binding) {
|
|
63
|
+
fetchAliases.add(binding);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
CallExpression(path) {
|
|
68
|
+
if (isFetchIdentifier(path.node.callee)) {
|
|
69
|
+
const { line, column } = path.node.callee.loc.start;
|
|
70
|
+
fetchCalls.add({
|
|
71
|
+
line,
|
|
72
|
+
column,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
// -------- Pass 2: report the call-sites (aliases) --------
|
|
78
|
+
for (const binding of fetchAliases) {
|
|
79
|
+
// @ts-ignore
|
|
80
|
+
binding.referencePaths.forEach((ref) => {
|
|
81
|
+
const parent = ref.parent;
|
|
82
|
+
if (parent.type === "CallExpression" &&
|
|
83
|
+
parent.callee === ref.node) {
|
|
84
|
+
const { line, column } = ref.node.loc.start;
|
|
85
|
+
console.log(chalk.magenta(`[fetch] Webpack ID ${chunk.id}: fetch() alias '${ref.node.name}' called at ${line}:${column}`));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// -------- Pass 3: report the call-sites (direct) --------
|
|
90
|
+
for (const call of fetchCalls) {
|
|
91
|
+
console.log(chalk.magenta(
|
|
92
|
+
// @ts-ignore
|
|
93
|
+
`[fetch] Webpack ID ${chunk.id}: fetch() called at ${call.line}:${call.column}`));
|
|
94
|
+
}
|
|
95
|
+
// if the length of either of the sets is non-zero, then mark the chunk as containing fetch
|
|
96
|
+
if (fetchAliases.size > 0 || fetchCalls.size > 0) {
|
|
97
|
+
chunk_copy[chunk.id].containsFetch = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (formats.includes("json")) {
|
|
101
|
+
const chunks_json = JSON.stringify(chunks, null, 2);
|
|
102
|
+
fs.writeFileSync(`${output}.json`, chunks_json);
|
|
103
|
+
console.log(chalk.green(`[✓] Saved webpack with fetch instances to ${output}.json`));
|
|
104
|
+
}
|
|
105
|
+
return chunk_copy;
|
|
106
|
+
});
|
|
107
|
+
export default getFetchInstances;
|
|
108
|
+
//# sourceMappingURL=getFetchInstances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFetchInstances.js","sourceRoot":"","sources":["../../../src/map/next_js/getFetchInstances.ts"],"names":[],"mappings":"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"}
|