@shriyanss/js-recon 1.0.0 → 1.1.0-beta.1
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/.api_gateway_config.json +1 -0
- package/.github/workflows/npm-publish.yml +35 -0
- package/.github/workflows/prettier.yaml +44 -0
- package/.prettierignore +2 -0
- package/.prettierrc +4 -0
- package/.resp_cache.json +1 -0
- package/.vscode/launch.json +27 -0
- package/CHANGELOG.md +40 -0
- package/README.md +35 -140
- 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 +202 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +277 -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 +75 -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 +25 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +171 -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 +105 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +224 -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 +235 -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 +224 -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/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/endpoints.json +77 -0
- package/extracted_urls-openapi.json +225 -0
- package/extracted_urls-swagger.json +225 -0
- package/extracted_urls.json +47 -0
- package/extracted_urls.txt +296 -0
- package/mapped.json +3413 -0
- package/output/ss0x00.com/_next/data/k7xKVnxmboK4SktY2dZWt/index.json +971 -0
- package/output/ss0x00.com/_next/static/chunks/12.7e6d2ac6e1808fc2.js +247 -0
- package/output/ss0x00.com/_next/static/chunks/128.160aa801ef0445bc.js +1074 -0
- package/output/ss0x00.com/_next/static/chunks/132.55df84f7707fc278.js +102 -0
- package/output/ss0x00.com/_next/static/chunks/142.77038c55d9ec10ba.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/215.321479e91d330bfa.js +228 -0
- package/output/ss0x00.com/_next/static/chunks/229.097c396d86b4a882.js +458 -0
- package/output/ss0x00.com/_next/static/chunks/257.5fd052aa4ef06ef9.js +1327 -0
- package/output/ss0x00.com/_next/static/chunks/268.72cb3779f66db70b.js +10520 -0
- package/output/ss0x00.com/_next/static/chunks/320.57d528b0e9bf86f0.js +186 -0
- package/output/ss0x00.com/_next/static/chunks/325.302a44b604c35f17.js +88 -0
- package/output/ss0x00.com/_next/static/chunks/328.e4a0307a4fddf318.js +248 -0
- package/output/ss0x00.com/_next/static/chunks/432.3621f17504ef18f2.js +443 -0
- package/output/ss0x00.com/_next/static/chunks/44.e90dd963003a3d43.js +1094 -0
- package/output/ss0x00.com/_next/static/chunks/442.8c054f100f9e5e50.js +1082 -0
- package/output/ss0x00.com/_next/static/chunks/460.f8db9a5142598e2c.js +466 -0
- package/output/ss0x00.com/_next/static/chunks/487.05ca55420459c002.js +78 -0
- package/output/ss0x00.com/_next/static/chunks/567.1909a6b0a920114b.js +1374 -0
- package/output/ss0x00.com/_next/static/chunks/586.802fc9214d87fb29.js +752 -0
- package/output/ss0x00.com/_next/static/chunks/620.a2a3a6b94d30a4c8.js +1037 -0
- package/output/ss0x00.com/_next/static/chunks/642.6b3e487c9604cbb8.js +1628 -0
- package/output/ss0x00.com/_next/static/chunks/673.e5d77887e5c6a68c.js +1045 -0
- package/output/ss0x00.com/_next/static/chunks/684.8b8e52baca70524b.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/686.79480519e5ccfb77.js +296 -0
- package/output/ss0x00.com/_next/static/chunks/756.7a3878a2e6765be7.js +504 -0
- package/output/ss0x00.com/_next/static/chunks/761.7bea7516c5d22b2a.js +1485 -0
- package/output/ss0x00.com/_next/static/chunks/794.e079ef369b41a3c5.js +1350 -0
- package/output/ss0x00.com/_next/static/chunks/826.31ba213e1d023c68.js +1031 -0
- package/output/ss0x00.com/_next/static/chunks/847.d8397a73efc81848.js +1068 -0
- package/output/ss0x00.com/_next/static/chunks/848.5feaeee1e2624aea.js +132 -0
- package/output/ss0x00.com/_next/static/chunks/850.ecc7c3c3d787ee03.js +1472 -0
- package/output/ss0x00.com/_next/static/chunks/853.50b9eb60b7d0e83c.js +1472 -0
- package/output/ss0x00.com/_next/static/chunks/856.7a7bb6c3c7bfc2ba.js +1320 -0
- package/output/ss0x00.com/_next/static/chunks/859.df4bd45c03a65f53.js +1306 -0
- package/output/ss0x00.com/_next/static/chunks/867.e8633955a147c978.js +541 -0
- package/output/ss0x00.com/_next/static/chunks/921.c3123f20a4c8d53c.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/932.25cb421c466c99cb.js +999 -0
- package/output/ss0x00.com/_next/static/chunks/framework-64ad27b21261a9ce.js +9189 -0
- package/output/ss0x00.com/_next/static/chunks/main-710ab85aa9a8f10d.js +6583 -0
- package/output/ss0x00.com/_next/static/chunks/pages/5D-af5a23529ce3c337.js +486 -0
- package/output/ss0x00.com/_next/static/chunks/pages/_app-c449865c8af1faa0.js +39 -0
- package/output/ss0x00.com/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +6383 -0
- package/output/ss0x00.com/_next/static/chunks/webpack-efff35ee26971294.js +271 -0
- package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_buildManifest.js +8 -0
- package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_ssgManifest.js +3 -0
- package/output/ss0x00.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js +82 -0
- package/package.json +50 -38
- package/strings.json +7407 -0
- 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,277 @@
|
|
|
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 { APIGatewayClient, CreateRestApiCommand, DeleteRestApiCommand, } from "@aws-sdk/client-api-gateway";
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import checkFeasibility from "./checkFeasibility.js";
|
|
14
|
+
// read the docs for all the methods for api gateway at https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/api-gateway/
|
|
15
|
+
// for the rate limits, refer to https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
|
|
16
|
+
const randomRegion = () => {
|
|
17
|
+
const apiGatewayRegions = [
|
|
18
|
+
"us-east-2", // US East (Ohio)
|
|
19
|
+
"us-east-1", // US East (N. Virginia)
|
|
20
|
+
"us-west-1", // US West (N. California)
|
|
21
|
+
"us-west-2", // US West (Oregon)
|
|
22
|
+
"af-south-1", // Africa (Cape Town)
|
|
23
|
+
"ap-east-1", // Asia Pacific (Hong Kong)
|
|
24
|
+
"ap-south-2", // Asia Pacific (Hyderabad)
|
|
25
|
+
"ap-southeast-3", // Asia Pacific (Jakarta)
|
|
26
|
+
"ap-southeast-5", // Asia Pacific (Malaysia)
|
|
27
|
+
"ap-southeast-4", // Asia Pacific (Melbourne)
|
|
28
|
+
"ap-south-1", // Asia Pacific (Mumbai)
|
|
29
|
+
"ap-northeast-3", // Asia Pacific (Osaka)
|
|
30
|
+
"ap-northeast-2", // Asia Pacific (Seoul)
|
|
31
|
+
"ap-southeast-1", // Asia Pacific (Singapore)
|
|
32
|
+
"ap-southeast-2", // Asia Pacific (Sydney)
|
|
33
|
+
"ap-east-2", // Asia Pacific (Taipei)
|
|
34
|
+
"ap-southeast-7", // Asia Pacific (Thailand)
|
|
35
|
+
"ap-northeast-1", // Asia Pacific (Tokyo)
|
|
36
|
+
"ca-central-1", // Canada (Central)
|
|
37
|
+
"ca-west-1", // Canada West (Calgary)
|
|
38
|
+
"eu-central-1", // Europe (Frankfurt)
|
|
39
|
+
"eu-west-1", // Europe (Ireland)
|
|
40
|
+
"eu-west-2", // Europe (London)
|
|
41
|
+
"eu-south-1", // Europe (Milan)
|
|
42
|
+
"eu-west-3", // Europe (Paris)
|
|
43
|
+
"eu-south-2", // Europe (Spain)
|
|
44
|
+
"eu-north-1", // Europe (Stockholm)
|
|
45
|
+
"eu-central-2", // Europe (Zurich)
|
|
46
|
+
"il-central-1", // Israel (Tel Aviv)
|
|
47
|
+
"mx-central-1", // Mexico (Central)
|
|
48
|
+
"me-south-1", // Middle East (Bahrain)
|
|
49
|
+
"me-central-1", // Middle East (UAE)
|
|
50
|
+
"sa-east-1", // South America (São Paulo)
|
|
51
|
+
];
|
|
52
|
+
return apiGatewayRegions[Math.floor(Math.random() * apiGatewayRegions.length)];
|
|
53
|
+
};
|
|
54
|
+
let aws_access_key;
|
|
55
|
+
let aws_secret_key;
|
|
56
|
+
let region;
|
|
57
|
+
let configFile;
|
|
58
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
59
|
+
/**
|
|
60
|
+
* Create a new API Gateway.
|
|
61
|
+
*
|
|
62
|
+
* @async
|
|
63
|
+
* @returns {Promise<void>}
|
|
64
|
+
*/
|
|
65
|
+
const createGateway = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
+
console.log(chalk.cyan("[i] Creating API Gateway"));
|
|
67
|
+
const client = new APIGatewayClient({
|
|
68
|
+
region,
|
|
69
|
+
credentials: {
|
|
70
|
+
accessKeyId: aws_access_key,
|
|
71
|
+
secretAccessKey: aws_secret_key,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
const apigw_created_at = Date.now();
|
|
75
|
+
const apigw_name = `js_recon-${apigw_created_at}-${Math.floor(Math.random() * 1000)}`;
|
|
76
|
+
const command = new CreateRestApiCommand({
|
|
77
|
+
name: apigw_name,
|
|
78
|
+
description: `API Gateway for JS Recon created at ${new Intl.DateTimeFormat("en-US", {
|
|
79
|
+
year: "numeric",
|
|
80
|
+
month: "long",
|
|
81
|
+
day: "2-digit",
|
|
82
|
+
hour: "2-digit",
|
|
83
|
+
minute: "2-digit",
|
|
84
|
+
second: "2-digit",
|
|
85
|
+
timeZoneName: "short",
|
|
86
|
+
}).format(apigw_created_at)}`,
|
|
87
|
+
endpointConfiguration: {
|
|
88
|
+
ipAddressType: "dualstack",
|
|
89
|
+
types: ["REGIONAL"],
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
const response = yield client.send(command);
|
|
93
|
+
yield sleep(3000);
|
|
94
|
+
console.log(chalk.green(`[✓] Created API Gateway`));
|
|
95
|
+
console.log(chalk.bgGreen("ID:"), chalk.green(response.id));
|
|
96
|
+
console.log(chalk.bgGreen("Name:"), chalk.green(apigw_name));
|
|
97
|
+
console.log(chalk.bgGreen("Region:"), chalk.green(region));
|
|
98
|
+
// load the config file if any. Else, create a new one
|
|
99
|
+
let config = {};
|
|
100
|
+
try {
|
|
101
|
+
config = JSON.parse(fs.readFileSync(configFile));
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
config = {};
|
|
105
|
+
}
|
|
106
|
+
config[apigw_name] = {
|
|
107
|
+
id: response.id,
|
|
108
|
+
name: apigw_name,
|
|
109
|
+
description: response.description,
|
|
110
|
+
created_at: apigw_created_at,
|
|
111
|
+
region: region,
|
|
112
|
+
access_key: aws_access_key,
|
|
113
|
+
secret_key: aws_secret_key,
|
|
114
|
+
};
|
|
115
|
+
fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
|
|
116
|
+
console.log(chalk.green(`[✓] Config saved to ${configFile}`));
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Destroy an API Gateway.
|
|
120
|
+
*
|
|
121
|
+
* @async
|
|
122
|
+
* @param {string} id - The ID of the API Gateway to destroy.
|
|
123
|
+
* @returns {Promise<void>}
|
|
124
|
+
*/
|
|
125
|
+
const destroyGateway = (id) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
|
+
console.log(chalk.cyan("[i] Destroying API Gateway"));
|
|
127
|
+
if (!id) {
|
|
128
|
+
console.log(chalk.red("[!] Please provide an API Gateway ID"));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// read the config file
|
|
132
|
+
let config = JSON.parse(fs.readFileSync(configFile));
|
|
133
|
+
// get the name of the api gateway
|
|
134
|
+
let name = Object.keys(config).find((key) => config[key].id === id);
|
|
135
|
+
console.log(chalk.bgGreen("Name:"), chalk.green(name));
|
|
136
|
+
console.log(chalk.bgGreen("ID:"), chalk.green(id));
|
|
137
|
+
console.log(chalk.bgGreen("Region:"), chalk.green(config[name].region));
|
|
138
|
+
region = config[name].region;
|
|
139
|
+
const client = new APIGatewayClient({
|
|
140
|
+
region,
|
|
141
|
+
credentials: {
|
|
142
|
+
accessKeyId: aws_access_key,
|
|
143
|
+
secretAccessKey: aws_secret_key,
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
const command = new DeleteRestApiCommand({
|
|
147
|
+
restApiId: id,
|
|
148
|
+
});
|
|
149
|
+
yield client.send(command);
|
|
150
|
+
// remove from the config file
|
|
151
|
+
delete config[name];
|
|
152
|
+
fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
|
|
153
|
+
yield sleep(30000);
|
|
154
|
+
console.log(chalk.green(`[✓] Destroyed API Gateway: ${id}`));
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* Destroy all API Gateways.
|
|
158
|
+
*
|
|
159
|
+
* @async
|
|
160
|
+
* @returns {Promise<void>}
|
|
161
|
+
*/
|
|
162
|
+
const destroyAllGateways = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
163
|
+
console.log(chalk.cyan("[i] Destroying all API Gateways"));
|
|
164
|
+
// read the config file
|
|
165
|
+
let config = JSON.parse(fs.readFileSync(configFile));
|
|
166
|
+
// destroy all the gateways
|
|
167
|
+
for (const [key, value] of Object.entries(config)) {
|
|
168
|
+
const client = new APIGatewayClient({
|
|
169
|
+
region: value.region,
|
|
170
|
+
credentials: {
|
|
171
|
+
accessKeyId: aws_access_key,
|
|
172
|
+
secretAccessKey: aws_secret_key,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
console.log(chalk.cyan(`[i] Destroying API Gateway: ${key} : ${value.id} : ${value.region}`));
|
|
176
|
+
const command = new DeleteRestApiCommand({
|
|
177
|
+
restApiId: value.id,
|
|
178
|
+
});
|
|
179
|
+
yield sleep(30000);
|
|
180
|
+
yield client.send(command);
|
|
181
|
+
console.log(chalk.green(`[✓] Destroyed API Gateway: ${key} : ${value.id} : ${value.region}`));
|
|
182
|
+
}
|
|
183
|
+
// nullify the config file
|
|
184
|
+
fs.writeFileSync(configFile, JSON.stringify({}, null, 2));
|
|
185
|
+
console.log(chalk.green("[✓] Destroyed all API Gateways"));
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* List all API Gateways.
|
|
189
|
+
*
|
|
190
|
+
* @async
|
|
191
|
+
* @returns {Promise<void>}
|
|
192
|
+
*/
|
|
193
|
+
const listGateways = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
194
|
+
console.log(chalk.cyan("[i] Listing all API Gateways"));
|
|
195
|
+
// read the config file, and list these
|
|
196
|
+
// check if the config file exists
|
|
197
|
+
if (!fs.existsSync(configFile)) {
|
|
198
|
+
console.log(chalk.red("[!] Config file does not exist"));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const config = JSON.parse(fs.readFileSync(configFile));
|
|
202
|
+
// if list is empty
|
|
203
|
+
if (Object.keys(config).length === 0) {
|
|
204
|
+
console.log(chalk.red("[!] No API Gateways found"));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
console.log(chalk.green("[✓] List of API Gateways"));
|
|
208
|
+
for (const [key, value] of Object.entries(config)) {
|
|
209
|
+
console.log(chalk.bgGreen("Name:"), chalk.green(key));
|
|
210
|
+
console.log(chalk.bgGreen("ID:"), chalk.green(value.id));
|
|
211
|
+
console.log(chalk.bgGreen("Region:"), chalk.green(value.region));
|
|
212
|
+
console.log("\n");
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
/**
|
|
216
|
+
* Main function for API Gateway.
|
|
217
|
+
*
|
|
218
|
+
* @async
|
|
219
|
+
* @param {boolean} initInput - Whether to initialize the API Gateway.
|
|
220
|
+
* @param {string} destroyInput - The ID of the API Gateway to destroy.
|
|
221
|
+
* @param {boolean} destroyAllInput - Whether to destroy all API Gateways.
|
|
222
|
+
* @param {boolean} listInput - Whether to list all API Gateways.
|
|
223
|
+
* @param {string} regionInput - The region to use.
|
|
224
|
+
* @param {string} accessKey - The access key to use.
|
|
225
|
+
* @param {string} secretKey - The secret key to use.
|
|
226
|
+
* @param {string} configInput - The config file to use.
|
|
227
|
+
* @param {boolean} feasibilityInput - Whether to check feasibility.
|
|
228
|
+
* @param {string} feasibilityUrlInput - The URL to check feasibility for.
|
|
229
|
+
* @returns {Promise<void>}
|
|
230
|
+
*/
|
|
231
|
+
const apiGateway = (initInput, destroyInput, destroyAllInput, listInput, regionInput, accessKey, secretKey, configInput, feasibilityInput, feasibilityUrlInput) => __awaiter(void 0, void 0, void 0, function* () {
|
|
232
|
+
console.log(chalk.cyan("[i] Loading 'API Gateway' module"));
|
|
233
|
+
// if feasibility is true, check feasibility
|
|
234
|
+
if (feasibilityInput) {
|
|
235
|
+
if (!feasibilityUrlInput) {
|
|
236
|
+
console.log(chalk.red("[!] Please provide a URL to check feasibility of"));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
yield checkFeasibility(feasibilityUrlInput);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// configure the access and secret key
|
|
243
|
+
aws_access_key = accessKey || process.env.AWS_ACCESS_KEY_ID || undefined;
|
|
244
|
+
aws_secret_key =
|
|
245
|
+
secretKey || process.env.AWS_SECRET_ACCESS_KEY || undefined;
|
|
246
|
+
region = regionInput || randomRegion();
|
|
247
|
+
configFile = configInput || "config.json";
|
|
248
|
+
if (!aws_access_key || !aws_secret_key) {
|
|
249
|
+
console.log(chalk.red("[!] AWS Access Key or Secret Key not found. Run with -h to see help"));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
console.log(chalk.cyan(`[i] Using region: ${region}`));
|
|
253
|
+
const keyMask = (key) => {
|
|
254
|
+
if (key.length < 6)
|
|
255
|
+
return key;
|
|
256
|
+
return key.slice(0, 4) + "..." + key.slice(-4);
|
|
257
|
+
};
|
|
258
|
+
console.log(chalk.cyan(`[i] Using access key: ${keyMask(aws_access_key)}`));
|
|
259
|
+
// create a new API gateway
|
|
260
|
+
if (initInput) {
|
|
261
|
+
yield createGateway();
|
|
262
|
+
}
|
|
263
|
+
else if (destroyInput) {
|
|
264
|
+
yield destroyGateway(destroyInput);
|
|
265
|
+
}
|
|
266
|
+
else if (destroyAllInput) {
|
|
267
|
+
yield destroyAllGateways();
|
|
268
|
+
}
|
|
269
|
+
else if (listInput) {
|
|
270
|
+
yield listGateways();
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
console.log(chalk.red("[!] Please provide a valid action (-i/--init or -d/--destroy or --destroy-all)"));
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
export default apiGateway;
|
|
277
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api_gateway/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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 fs from "fs";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import iterate_n_store from "./utility/iterate_n_store.js";
|
|
13
|
+
const gen_json = (url, hrefs, output) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
// iterate over hrefs
|
|
15
|
+
const result = yield iterate_n_store(url, hrefs);
|
|
16
|
+
const finalJSON = JSON.stringify(result, null, 2);
|
|
17
|
+
fs.writeFileSync(`${output}.json`, finalJSON);
|
|
18
|
+
console.log(chalk.green(`[✓] Generated JSON report at ${output}.json`));
|
|
19
|
+
return finalJSON;
|
|
20
|
+
});
|
|
21
|
+
export default gen_json;
|
|
22
|
+
//# sourceMappingURL=gen_json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen_json.js","sourceRoot":"","sources":["../../../src/endpoints/gen_report/gen_json.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAE3D,MAAM,QAAQ,GAAG,CAAO,GAAW,EAAE,KAAe,EAAE,MAAc,EAAE,EAAE;IACpE,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,EAAE,SAAS,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,MAAM,OAAO,CAAC,CAAC,CAAC;IACxE,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 fs from "fs";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
const gen_markdown = (url, hrefs, output) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
const hosts = {};
|
|
14
|
+
const baseUrlObj = new URL(url);
|
|
15
|
+
// Ensure the base host is in the list
|
|
16
|
+
hosts[baseUrlObj.hostname] = new Set();
|
|
17
|
+
for (const href of hrefs) {
|
|
18
|
+
if (!href || href.startsWith("mailto:") || href.startsWith("tel:")) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
let fullUrl;
|
|
22
|
+
try {
|
|
23
|
+
// Handle protocol-relative, absolute, and relative URLs
|
|
24
|
+
if (href.startsWith("//")) {
|
|
25
|
+
fullUrl = new URL(`${baseUrlObj.protocol}${href}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
fullUrl = new URL(href, baseUrlObj.href);
|
|
29
|
+
}
|
|
30
|
+
const host = fullUrl.hostname;
|
|
31
|
+
if (!hosts[host]) {
|
|
32
|
+
hosts[host] = new Set();
|
|
33
|
+
}
|
|
34
|
+
const path = fullUrl.pathname + fullUrl.search + fullUrl.hash;
|
|
35
|
+
// Only add meaningful paths
|
|
36
|
+
if (path !== "/" || fullUrl.href !== baseUrlObj.href) {
|
|
37
|
+
hosts[host].add(path);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
console.error(`Skipping invalid URL or path: ${href}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let mermaidDiagram = "```mermaid\ngraph TD\n";
|
|
45
|
+
const hostNodeIds = {};
|
|
46
|
+
Object.keys(hosts).forEach((host, index) => {
|
|
47
|
+
const nodeId = `H${index}`;
|
|
48
|
+
hostNodeIds[host] = nodeId;
|
|
49
|
+
mermaidDiagram += ` ${nodeId}["${host}"]\n`;
|
|
50
|
+
});
|
|
51
|
+
Object.entries(hosts).forEach(([host, paths]) => {
|
|
52
|
+
const hostNodeId = hostNodeIds[host];
|
|
53
|
+
paths.forEach((path, pathIndex) => {
|
|
54
|
+
const pathNodeId = `${hostNodeId}_P${pathIndex}`;
|
|
55
|
+
const pathLabel = path.replace(/"/g, "#quot;");
|
|
56
|
+
mermaidDiagram += ` ${pathNodeId}["${pathLabel}"]\n`;
|
|
57
|
+
mermaidDiagram += ` ${hostNodeId} --> ${pathNodeId}\n`;
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
mermaidDiagram += "```";
|
|
61
|
+
fs.writeFileSync(`${output}.md`, mermaidDiagram);
|
|
62
|
+
console.log(chalk.green(`[✓] Generated markdown report at ${output}.md`));
|
|
63
|
+
return mermaidDiagram;
|
|
64
|
+
});
|
|
65
|
+
export default gen_markdown;
|
|
66
|
+
//# sourceMappingURL=gen_markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen_markdown.js","sourceRoot":"","sources":["../../../src/endpoints/gen_report/gen_markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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 resolvePath from "../../../utility/resolvePath.js";
|
|
11
|
+
const iterate_n_store = (baseUrl, urls) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
let result = {};
|
|
13
|
+
for (let url of urls) {
|
|
14
|
+
if (url.startsWith("mailto:") || url.startsWith("tel:")) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (url.startsWith("/")) {
|
|
18
|
+
url = resolvePath(baseUrl, url);
|
|
19
|
+
}
|
|
20
|
+
// Parse the URL once and extract the bits we need
|
|
21
|
+
const { origin, pathname } = new URL(url);
|
|
22
|
+
// Ensure we have a container object for this origin
|
|
23
|
+
if (!result[origin]) {
|
|
24
|
+
result[origin] = {};
|
|
25
|
+
}
|
|
26
|
+
// Always insert the root path for this origin
|
|
27
|
+
if (!result[origin]["/"]) {
|
|
28
|
+
result[origin]["/"] = {};
|
|
29
|
+
}
|
|
30
|
+
// Normalise the pathname – strip leading/trailing slashes and split into segments
|
|
31
|
+
const segments = pathname === "/" ? [] : pathname.replace(/^\/|\/$/g, "").split("/");
|
|
32
|
+
let cumulativePath = ""; // will build up like "/app", "/app/dashboard"
|
|
33
|
+
let currentNode = result[origin];
|
|
34
|
+
for (const segment of segments) {
|
|
35
|
+
cumulativePath += `/${segment}`;
|
|
36
|
+
if (!currentNode[cumulativePath]) {
|
|
37
|
+
currentNode[cumulativePath] = {};
|
|
38
|
+
}
|
|
39
|
+
// descend into the newly created / already existing child
|
|
40
|
+
currentNode = currentNode[cumulativePath];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
});
|
|
45
|
+
export default iterate_n_store;
|
|
46
|
+
//# sourceMappingURL=iterate_n_store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate_n_store.js","sourceRoot":"","sources":["../../../../src/endpoints/gen_report/utility/iterate_n_store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAE1D,MAAM,eAAe,GAAG,CAAO,OAAe,EAAE,IAAc,EAAE,EAAE;IAC9D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,SAAS;QACb,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,kDAAkD;QAClD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1C,oDAAoD;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,kFAAkF;QAClF,MAAM,QAAQ,GACV,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExE,IAAI,cAAc,GAAG,EAAE,CAAC,CAAC,8CAA8C;QACvE,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,cAAc,IAAI,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;YACD,0DAA0D;YAC1D,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
// Next.JS
|
|
13
|
+
import client_subsequentRequests from "./next_js/client_subsequentRequests.js";
|
|
14
|
+
import client_jsFilesHref from "./next_js/client_jsFilesHref.js";
|
|
15
|
+
import client_jsonParse from "./next_js/client_jsonParse.js";
|
|
16
|
+
// Report Generation
|
|
17
|
+
import gen_markdown from "./gen_report/gen_markdown.js";
|
|
18
|
+
import gen_json from "./gen_report/gen_json.js";
|
|
19
|
+
const techs = ["Next.JS (next)"];
|
|
20
|
+
const outputFormats = ["md", "json"];
|
|
21
|
+
const endpoints = (url, directory, output, outputFormat, tech, list, subsequentRequestsDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
console.log(chalk.cyan("[i] Loading endpoints module"));
|
|
23
|
+
// list available technologies
|
|
24
|
+
if (list) {
|
|
25
|
+
console.log(chalk.cyan("[i] Listing available technologies"));
|
|
26
|
+
for (const tech of techs) {
|
|
27
|
+
console.log(chalk.greenBright(`- ${tech}`));
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// iterate over the output format, and match it with the available output formats
|
|
32
|
+
for (const format of outputFormat) {
|
|
33
|
+
if (!outputFormats.includes(format)) {
|
|
34
|
+
console.log(chalk.red("[!] Invalid output format"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// check if the directory is present
|
|
39
|
+
if (!directory) {
|
|
40
|
+
console.log(chalk.red("[!] Please provide a directory"));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// check if the technology is present
|
|
44
|
+
if (!tech) {
|
|
45
|
+
console.log(chalk.red("[!] Please provide a technology"));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// check if the output file is present
|
|
49
|
+
if (!output) {
|
|
50
|
+
console.log(chalk.red("[!] Please provide an output file"));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// check if the url is present
|
|
54
|
+
if (!url) {
|
|
55
|
+
console.log(chalk.red("[!] Please provide a URL"));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log(chalk.cyan("[i] Extracting endpoints"));
|
|
59
|
+
if (tech === "next") {
|
|
60
|
+
console.log(chalk.cyan("[i] Checking for client-side paths for Next.JS"));
|
|
61
|
+
// check if the subsequent requests directory is present
|
|
62
|
+
if (!subsequentRequestsDir) {
|
|
63
|
+
console.log(chalk.red("[!] Please provide a directory containing subsequent requests (--subsequent-requests-dir)"));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// check if the subsequent requests directory exists
|
|
67
|
+
if (!fs.existsSync(subsequentRequestsDir)) {
|
|
68
|
+
console.log(chalk.red("[!] Directory containing subsequent requests does not exist"));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let final_client_side = [];
|
|
72
|
+
const client_subsequentRequestsResult = yield client_subsequentRequests(subsequentRequestsDir, url);
|
|
73
|
+
final_client_side.push(...client_subsequentRequestsResult);
|
|
74
|
+
// first, get all the webpacks
|
|
75
|
+
// const webpacksFound = await getWebpacks(directory);
|
|
76
|
+
const client_jsFilesHrefResult = yield client_jsFilesHref(directory);
|
|
77
|
+
final_client_side.push(...client_jsFilesHrefResult);
|
|
78
|
+
const client_jsonParseResult = yield client_jsonParse(directory);
|
|
79
|
+
final_client_side.push(...client_jsonParseResult);
|
|
80
|
+
if (outputFormat.includes("md")) {
|
|
81
|
+
const gen_markdownResult = yield gen_markdown(url, final_client_side, output);
|
|
82
|
+
}
|
|
83
|
+
if (outputFormat.includes("json")) {
|
|
84
|
+
const gen_jsonResult = yield gen_json(url, final_client_side, output);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
export default endpoints;
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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 fs from "fs";
|
|
11
|
+
import path from "path";
|
|
12
|
+
import parser from "@babel/parser";
|
|
13
|
+
import _traverse from "@babel/traverse";
|
|
14
|
+
import chalk from "chalk";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
const client_jsFilesHref = (directory) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
console.log(chalk.cyan("[i] Searching for `href` in the JS chunks"));
|
|
18
|
+
let discoveredPaths = [];
|
|
19
|
+
// index all the files in the directory
|
|
20
|
+
let files;
|
|
21
|
+
files = fs.readdirSync(directory, { recursive: true });
|
|
22
|
+
// filter out the directories
|
|
23
|
+
files = files.filter((file) => !fs.statSync(path.join(directory, file)).isDirectory());
|
|
24
|
+
// filter out the subsequent requests files
|
|
25
|
+
files = files.filter((file) => !file.startsWith("___subsequent_requests"));
|
|
26
|
+
for (const file of files) {
|
|
27
|
+
const code = fs.readFileSync(path.join(directory, file), "utf8");
|
|
28
|
+
// parse the code with ast
|
|
29
|
+
let ast;
|
|
30
|
+
try {
|
|
31
|
+
ast = parser.parse(code, {
|
|
32
|
+
sourceType: "unambiguous",
|
|
33
|
+
plugins: ["jsx", "typescript"],
|
|
34
|
+
});
|
|
35
|
+
traverse(ast, {
|
|
36
|
+
ObjectProperty(path) {
|
|
37
|
+
const keyNode = path.node.key;
|
|
38
|
+
let keyName;
|
|
39
|
+
if (keyNode.type === "Identifier") {
|
|
40
|
+
keyName = keyNode.name;
|
|
41
|
+
}
|
|
42
|
+
else if (keyNode.type === "StringLiteral") {
|
|
43
|
+
keyName = keyNode.value;
|
|
44
|
+
}
|
|
45
|
+
if (keyName !== "href") {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const valueNode = path.node.value;
|
|
49
|
+
let hrefValue = null;
|
|
50
|
+
if (valueNode.type === "StringLiteral") {
|
|
51
|
+
hrefValue = valueNode.value;
|
|
52
|
+
}
|
|
53
|
+
else if (valueNode.type === "CallExpression" &&
|
|
54
|
+
valueNode.callee.type === "MemberExpression" &&
|
|
55
|
+
valueNode.callee.property.name === "concat") {
|
|
56
|
+
// It's a .concat() call.
|
|
57
|
+
// Let's find string literal arguments that look like paths.
|
|
58
|
+
const pathArg = valueNode.arguments.find((arg) => arg.type === "StringLiteral" &&
|
|
59
|
+
(arg.value.startsWith("/") ||
|
|
60
|
+
arg.value.startsWith("http")));
|
|
61
|
+
if (pathArg) {
|
|
62
|
+
hrefValue = pathArg.value;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Handle fallback case: e.g. "".concat(s || "/docs/guides")
|
|
66
|
+
const logicalExprArg = valueNode.arguments.find((arg) => arg.type === "LogicalExpression" &&
|
|
67
|
+
arg.operator === "||");
|
|
68
|
+
if (logicalExprArg &&
|
|
69
|
+
logicalExprArg.right.type === "StringLiteral") {
|
|
70
|
+
hrefValue = logicalExprArg.right.value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (hrefValue) {
|
|
75
|
+
const isPath = hrefValue.startsWith("/") ||
|
|
76
|
+
hrefValue.startsWith("http");
|
|
77
|
+
if (isPath && !discoveredPaths.includes(hrefValue)) {
|
|
78
|
+
discoveredPaths.push(hrefValue);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return discoveredPaths;
|
|
89
|
+
});
|
|
90
|
+
export default client_jsFilesHref;
|
|
91
|
+
//# sourceMappingURL=client_jsFilesHref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client_jsFilesHref.js","sourceRoot":"","sources":["../../../src/endpoints/next_js/client_jsFilesHref.ts"],"names":[],"mappings":"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"}
|