@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.
Files changed (143) hide show
  1. package/.github/workflows/build-and-prettify.yaml +65 -0
  2. package/.github/workflows/npm-publish.yml +35 -0
  3. package/.prettierignore +2 -0
  4. package/.prettierrc +4 -0
  5. package/CHANGELOG.md +50 -0
  6. package/README.md +35 -139
  7. package/build/api_gateway/checkFeasibility.js +32 -0
  8. package/build/api_gateway/checkFeasibility.js.map +1 -0
  9. package/build/api_gateway/checkFireWallBlocking.js +24 -0
  10. package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
  11. package/build/api_gateway/genReq.js +199 -0
  12. package/build/api_gateway/genReq.js.map +1 -0
  13. package/build/api_gateway/index.js +275 -0
  14. package/build/api_gateway/index.js.map +1 -0
  15. package/build/endpoints/gen_report/gen_json.js +22 -0
  16. package/build/endpoints/gen_report/gen_json.js.map +1 -0
  17. package/build/endpoints/gen_report/gen_markdown.js +66 -0
  18. package/build/endpoints/gen_report/gen_markdown.js.map +1 -0
  19. package/build/endpoints/gen_report/utility/iterate_n_store.js +46 -0
  20. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
  21. package/build/endpoints/index.js +89 -0
  22. package/build/endpoints/index.js.map +1 -0
  23. package/build/endpoints/next_js/client_jsFilesHref.js +91 -0
  24. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
  25. package/build/endpoints/next_js/client_jsonParse.js +78 -0
  26. package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
  27. package/build/endpoints/next_js/client_subsequentRequests.js +199 -0
  28. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
  29. package/build/endpoints/next_js/getWebpacks.js +45 -0
  30. package/build/endpoints/next_js/getWebpacks.js.map +1 -0
  31. package/build/globalConfig.js +11 -0
  32. package/build/globalConfig.js.map +1 -0
  33. package/build/index.js +166 -0
  34. package/build/index.js.map +1 -0
  35. package/build/lazyLoad/downloadFilesUtil.js +128 -0
  36. package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
  37. package/build/lazyLoad/downloadLoadedJsUtil.js +51 -0
  38. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
  39. package/build/lazyLoad/globals.js +22 -0
  40. package/build/lazyLoad/globals.js.map +1 -0
  41. package/build/lazyLoad/index.js +170 -0
  42. package/build/lazyLoad/index.js.map +1 -0
  43. package/build/lazyLoad/next_js/next_GetJSScript.js +94 -0
  44. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
  45. package/build/lazyLoad/next_js/next_GetLazyResources.js +202 -0
  46. package/build/lazyLoad/next_js/next_GetLazyResources.js.map +1 -0
  47. package/build/lazyLoad/next_js/next_SubsequentRequests.js +120 -0
  48. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
  49. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +188 -0
  50. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
  51. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +75 -0
  52. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
  53. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +94 -0
  54. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
  55. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +68 -0
  56. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
  57. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +95 -0
  58. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
  59. package/build/map/index.js +58 -0
  60. package/build/map/index.js.map +1 -0
  61. package/build/map/next_js/getFetchInstances.js +108 -0
  62. package/build/map/next_js/getFetchInstances.js.map +1 -0
  63. package/build/map/next_js/getWebpackConnections.js +227 -0
  64. package/build/map/next_js/getWebpackConnections.js.map +1 -0
  65. package/build/map/next_js/interactive.js +32 -0
  66. package/build/map/next_js/interactive.js.map +1 -0
  67. package/build/map/next_js/interactive_helpers/commandHandler.js +190 -0
  68. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
  69. package/build/map/next_js/interactive_helpers/commandHelpers.js +91 -0
  70. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
  71. package/build/map/next_js/interactive_helpers/helpMenu.js +11 -0
  72. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
  73. package/build/map/next_js/interactive_helpers/keybindings.js +80 -0
  74. package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
  75. package/build/map/next_js/interactive_helpers/printer.js +17 -0
  76. package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
  77. package/build/map/next_js/interactive_helpers/ui.js +81 -0
  78. package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
  79. package/build/map/next_js/resolveFetch.js +201 -0
  80. package/build/map/next_js/resolveFetch.js.map +1 -0
  81. package/build/run/index.js +62 -0
  82. package/build/run/index.js.map +1 -0
  83. package/build/strings/index.js +238 -0
  84. package/build/strings/index.js.map +1 -0
  85. package/build/strings/openapi.js +55 -0
  86. package/build/strings/openapi.js.map +1 -0
  87. package/build/strings/permutate.js +55 -0
  88. package/build/strings/permutate.js.map +1 -0
  89. package/build/strings/secrets.js +89 -0
  90. package/build/strings/secrets.js.map +1 -0
  91. package/build/techDetect/index.js +229 -0
  92. package/build/techDetect/index.js.map +1 -0
  93. package/build/utility/ai.js +69 -0
  94. package/build/utility/ai.js.map +1 -0
  95. package/build/utility/globals.js +84 -0
  96. package/build/utility/globals.js.map +1 -0
  97. package/build/utility/interfaces.js +2 -0
  98. package/build/utility/interfaces.js.map +1 -0
  99. package/build/utility/makeReq.js +265 -0
  100. package/build/utility/makeReq.js.map +1 -0
  101. package/build/utility/resolvePath.js +44 -0
  102. package/build/utility/resolvePath.js.map +1 -0
  103. package/{utility → build/utility}/runSandboxed.js +10 -13
  104. package/build/utility/runSandboxed.js.map +1 -0
  105. package/{utility → build/utility}/urlUtils.js +9 -11
  106. package/build/utility/urlUtils.js.map +1 -0
  107. package/docs/CNAME +1 -0
  108. package/docs/README.md +20 -0
  109. package/docs/api-gateway.md +68 -0
  110. package/docs/endpoints.md +49 -0
  111. package/docs/example-scenario.md +258 -0
  112. package/docs/interactive-mode.md +76 -0
  113. package/docs/lazyload.md +56 -0
  114. package/docs/map.md +53 -0
  115. package/docs/run.md +54 -0
  116. package/docs/strings.md +75 -0
  117. package/package.json +50 -38
  118. package/api_gateway/checkFeasibility.js +0 -25
  119. package/api_gateway/checkFireWallBlocking.js +0 -17
  120. package/api_gateway/genReq.js +0 -214
  121. package/api_gateway/index.js +0 -325
  122. package/endpoints/index.js +0 -7
  123. package/globalConfig.js +0 -12
  124. package/index.js +0 -69
  125. package/lazyLoad/downloadFilesUtil.js +0 -122
  126. package/lazyLoad/downloadLoadedJsUtil.js +0 -54
  127. package/lazyLoad/globals.js +0 -15
  128. package/lazyLoad/index.js +0 -167
  129. package/lazyLoad/next_js/next_GetJSScript.js +0 -99
  130. package/lazyLoad/next_js/next_GetLazyResources.js +0 -201
  131. package/lazyLoad/next_js/next_SubsequentRequests.js +0 -138
  132. package/lazyLoad/nuxt_js/nuxt_astParse.js +0 -194
  133. package/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +0 -77
  134. package/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +0 -99
  135. package/research/firewall_bypass.md +0 -38
  136. package/research/next_js.md +0 -116
  137. package/research/nuxt_js.md +0 -125
  138. package/research/vue_js.md +0 -9
  139. package/strings/index.js +0 -145
  140. package/techDetect/index.js +0 -156
  141. package/utility/globals.js +0 -6
  142. package/utility/makeReq.js +0 -179
  143. package/utility/resolvePath.js +0 -43
@@ -0,0 +1,275 @@
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
+ const randomRegion = () => {
15
+ const apiGatewayRegions = [
16
+ "us-east-2", // US East (Ohio)
17
+ "us-east-1", // US East (N. Virginia)
18
+ "us-west-1", // US West (N. California)
19
+ "us-west-2", // US West (Oregon)
20
+ "af-south-1", // Africa (Cape Town)
21
+ "ap-east-1", // Asia Pacific (Hong Kong)
22
+ "ap-south-2", // Asia Pacific (Hyderabad)
23
+ "ap-southeast-3", // Asia Pacific (Jakarta)
24
+ "ap-southeast-5", // Asia Pacific (Malaysia)
25
+ "ap-southeast-4", // Asia Pacific (Melbourne)
26
+ "ap-south-1", // Asia Pacific (Mumbai)
27
+ "ap-northeast-3", // Asia Pacific (Osaka)
28
+ "ap-northeast-2", // Asia Pacific (Seoul)
29
+ "ap-southeast-1", // Asia Pacific (Singapore)
30
+ "ap-southeast-2", // Asia Pacific (Sydney)
31
+ "ap-east-2", // Asia Pacific (Taipei)
32
+ "ap-southeast-7", // Asia Pacific (Thailand)
33
+ "ap-northeast-1", // Asia Pacific (Tokyo)
34
+ "ca-central-1", // Canada (Central)
35
+ "ca-west-1", // Canada West (Calgary)
36
+ "eu-central-1", // Europe (Frankfurt)
37
+ "eu-west-1", // Europe (Ireland)
38
+ "eu-west-2", // Europe (London)
39
+ "eu-south-1", // Europe (Milan)
40
+ "eu-west-3", // Europe (Paris)
41
+ "eu-south-2", // Europe (Spain)
42
+ "eu-north-1", // Europe (Stockholm)
43
+ "eu-central-2", // Europe (Zurich)
44
+ "il-central-1", // Israel (Tel Aviv)
45
+ "mx-central-1", // Mexico (Central)
46
+ "me-south-1", // Middle East (Bahrain)
47
+ "me-central-1", // Middle East (UAE)
48
+ "sa-east-1", // South America (São Paulo)
49
+ ];
50
+ return apiGatewayRegions[Math.floor(Math.random() * apiGatewayRegions.length)];
51
+ };
52
+ let aws_access_key;
53
+ let aws_secret_key;
54
+ let region;
55
+ let configFile = "";
56
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
57
+ /**
58
+ * Create a new API Gateway.
59
+ *
60
+ * @async
61
+ * @returns {Promise<void>}
62
+ */
63
+ const createGateway = () => __awaiter(void 0, void 0, void 0, function* () {
64
+ console.log(chalk.cyan("[i] Creating API Gateway"));
65
+ const client = new APIGatewayClient({
66
+ region,
67
+ credentials: {
68
+ accessKeyId: aws_access_key,
69
+ secretAccessKey: aws_secret_key,
70
+ },
71
+ });
72
+ const apigw_created_at = Date.now();
73
+ const apigw_name = `js_recon-${apigw_created_at}-${Math.floor(Math.random() * 1000)}`;
74
+ const command = new CreateRestApiCommand({
75
+ name: apigw_name,
76
+ description: `API Gateway for JS Recon created at ${new Intl.DateTimeFormat("en-US", {
77
+ year: "numeric",
78
+ month: "long",
79
+ day: "2-digit",
80
+ hour: "2-digit",
81
+ minute: "2-digit",
82
+ second: "2-digit",
83
+ timeZoneName: "short",
84
+ }).format(apigw_created_at)}`,
85
+ endpointConfiguration: {
86
+ ipAddressType: "dualstack",
87
+ types: ["REGIONAL"],
88
+ },
89
+ });
90
+ const response = yield client.send(command);
91
+ yield sleep(3000);
92
+ console.log(chalk.green(`[✓] Created API Gateway`));
93
+ console.log(chalk.bgGreen("ID:"), chalk.green(response.id));
94
+ console.log(chalk.bgGreen("Name:"), chalk.green(apigw_name));
95
+ console.log(chalk.bgGreen("Region:"), chalk.green(region));
96
+ // load the config file if any. Else, create a new one
97
+ let config = {};
98
+ try {
99
+ config = JSON.parse(fs.readFileSync(configFile, "utf8"));
100
+ }
101
+ catch (e) {
102
+ config = {};
103
+ }
104
+ config[apigw_name] = {
105
+ id: response.id,
106
+ name: apigw_name,
107
+ description: response.description,
108
+ created_at: apigw_created_at,
109
+ region: region,
110
+ access_key: aws_access_key,
111
+ secret_key: aws_secret_key,
112
+ };
113
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
114
+ console.log(chalk.green(`[✓] Config saved to ${configFile}`));
115
+ });
116
+ /**
117
+ * Destroy an API Gateway.
118
+ *
119
+ * @async
120
+ * @param {string} id - The ID of the API Gateway to destroy.
121
+ * @returns {Promise<void>}
122
+ */
123
+ const destroyGateway = (id) => __awaiter(void 0, void 0, void 0, function* () {
124
+ console.log(chalk.cyan("[i] Destroying API Gateway"));
125
+ if (!id) {
126
+ console.log(chalk.red("[!] Please provide an API Gateway ID"));
127
+ return;
128
+ }
129
+ // read the config file
130
+ let config = JSON.parse(fs.readFileSync(configFile, "utf8"));
131
+ // get the name of the api gateway
132
+ let name = Object.keys(config).find((key) => config[key].id === id);
133
+ console.log(chalk.bgGreen("Name:"), chalk.green(name));
134
+ console.log(chalk.bgGreen("ID:"), chalk.green(id));
135
+ console.log(chalk.bgGreen("Region:"), chalk.green(config[name].region));
136
+ region = config[name].region;
137
+ const client = new APIGatewayClient({
138
+ region,
139
+ credentials: {
140
+ accessKeyId: aws_access_key,
141
+ secretAccessKey: aws_secret_key,
142
+ },
143
+ });
144
+ const command = new DeleteRestApiCommand({
145
+ restApiId: id,
146
+ });
147
+ yield client.send(command);
148
+ // remove from the config file
149
+ delete config[name];
150
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
151
+ yield sleep(30000);
152
+ console.log(chalk.green(`[✓] Destroyed API Gateway: ${id}`));
153
+ });
154
+ /**
155
+ * Destroy all API Gateways.
156
+ *
157
+ * @async
158
+ * @returns {Promise<void>}
159
+ */
160
+ const destroyAllGateways = () => __awaiter(void 0, void 0, void 0, function* () {
161
+ console.log(chalk.cyan("[i] Destroying all API Gateways"));
162
+ // read the config file
163
+ let config = JSON.parse(fs.readFileSync(configFile, "utf8"));
164
+ // destroy all the gateways
165
+ for (const [key, value] of Object.entries(config)) {
166
+ const client = new APIGatewayClient({
167
+ region: value.region,
168
+ credentials: {
169
+ accessKeyId: aws_access_key,
170
+ secretAccessKey: aws_secret_key,
171
+ },
172
+ });
173
+ console.log(chalk.cyan(`[i] Destroying API Gateway: ${key} : ${value.id} : ${value.region}`));
174
+ const command = new DeleteRestApiCommand({
175
+ restApiId: value.id,
176
+ });
177
+ yield sleep(30000);
178
+ yield client.send(command);
179
+ console.log(chalk.green(`[✓] Destroyed API Gateway: ${key} : ${value.id} : ${value.region}`));
180
+ }
181
+ // nullify the config file
182
+ fs.writeFileSync(configFile, JSON.stringify({}, null, 2));
183
+ console.log(chalk.green("[✓] Destroyed all API Gateways"));
184
+ });
185
+ /**
186
+ * List all API Gateways.
187
+ *
188
+ * @async
189
+ * @returns {Promise<void>}
190
+ */
191
+ const listGateways = () => __awaiter(void 0, void 0, void 0, function* () {
192
+ console.log(chalk.cyan("[i] Listing all API Gateways"));
193
+ // read the config file, and list these
194
+ // check if the config file exists
195
+ if (!fs.existsSync(configFile)) {
196
+ console.log(chalk.red("[!] Config file does not exist"));
197
+ return;
198
+ }
199
+ const config = JSON.parse(fs.readFileSync(configFile, "utf8"));
200
+ // if list is empty
201
+ if (Object.keys(config).length === 0) {
202
+ console.log(chalk.red("[!] No API Gateways found"));
203
+ return;
204
+ }
205
+ console.log(chalk.green("[✓] List of API Gateways"));
206
+ for (const [key, value] of Object.entries(config)) {
207
+ console.log(chalk.bgGreen("Name:"), chalk.green(key));
208
+ console.log(chalk.bgGreen("ID:"), chalk.green(value.id));
209
+ console.log(chalk.bgGreen("Region:"), chalk.green(value.region));
210
+ console.log("\n");
211
+ }
212
+ });
213
+ /**
214
+ * Main function for API Gateway.
215
+ *
216
+ * @async
217
+ * @param {boolean} initInput - Whether to initialize the API Gateway.
218
+ * @param {string} destroyInput - The ID of the API Gateway to destroy.
219
+ * @param {boolean} destroyAllInput - Whether to destroy all API Gateways.
220
+ * @param {boolean} listInput - Whether to list all API Gateways.
221
+ * @param {string} regionInput - The region to use.
222
+ * @param {string} accessKey - The access key to use.
223
+ * @param {string} secretKey - The secret key to use.
224
+ * @param {string} configInput - The config file to use.
225
+ * @param {boolean} feasibilityInput - Whether to check feasibility.
226
+ * @param {string} feasibilityUrlInput - The URL to check feasibility for.
227
+ * @returns {Promise<void>}
228
+ */
229
+ const apiGateway = (initInput, destroyInput, destroyAllInput, listInput, regionInput, accessKey, secretKey, configInput, feasibilityInput, feasibilityUrlInput) => __awaiter(void 0, void 0, void 0, function* () {
230
+ console.log(chalk.cyan("[i] Loading 'API Gateway' module"));
231
+ // if feasibility is true, check feasibility
232
+ if (feasibilityInput) {
233
+ if (!feasibilityUrlInput) {
234
+ console.log(chalk.red("[!] Please provide a URL to check feasibility of"));
235
+ return;
236
+ }
237
+ yield checkFeasibility(feasibilityUrlInput);
238
+ return;
239
+ }
240
+ // configure the access and secret key
241
+ aws_access_key = accessKey || process.env.AWS_ACCESS_KEY_ID || undefined;
242
+ aws_secret_key =
243
+ secretKey || process.env.AWS_SECRET_ACCESS_KEY || undefined;
244
+ region = regionInput || randomRegion();
245
+ configFile = configInput || "config.json";
246
+ if (!aws_access_key || !aws_secret_key) {
247
+ console.log(chalk.red("[!] AWS Access Key or Secret Key not found. Run with -h to see help"));
248
+ return;
249
+ }
250
+ console.log(chalk.cyan(`[i] Using region: ${region}`));
251
+ const keyMask = (key) => {
252
+ if (key.length < 6)
253
+ return key;
254
+ return key.slice(0, 4) + "..." + key.slice(-4);
255
+ };
256
+ console.log(chalk.cyan(`[i] Using access key: ${keyMask(aws_access_key)}`));
257
+ // create a new API gateway
258
+ if (initInput) {
259
+ yield createGateway();
260
+ }
261
+ else if (destroyInput) {
262
+ yield destroyGateway(destroyInput);
263
+ }
264
+ else if (destroyAllInput) {
265
+ yield destroyAllGateways();
266
+ }
267
+ else if (listInput) {
268
+ yield listGateways();
269
+ }
270
+ else {
271
+ console.log(chalk.red("[!] Please provide a valid action (-i/--init or -d/--destroy or --destroy-all)"));
272
+ }
273
+ });
274
+ export default apiGateway;
275
+ //# 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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"}