@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.
Files changed (198) hide show
  1. package/.api_gateway_config.json +1 -0
  2. package/.github/workflows/npm-publish.yml +35 -0
  3. package/.github/workflows/prettier.yaml +44 -0
  4. package/.prettierignore +2 -0
  5. package/.prettierrc +4 -0
  6. package/.resp_cache.json +1 -0
  7. package/.vscode/launch.json +27 -0
  8. package/CHANGELOG.md +40 -0
  9. package/README.md +35 -140
  10. package/build/api_gateway/checkFeasibility.js +32 -0
  11. package/build/api_gateway/checkFeasibility.js.map +1 -0
  12. package/build/api_gateway/checkFireWallBlocking.js +24 -0
  13. package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
  14. package/build/api_gateway/genReq.js +202 -0
  15. package/build/api_gateway/genReq.js.map +1 -0
  16. package/build/api_gateway/index.js +277 -0
  17. package/build/api_gateway/index.js.map +1 -0
  18. package/build/endpoints/gen_report/gen_json.js +22 -0
  19. package/build/endpoints/gen_report/gen_json.js.map +1 -0
  20. package/build/endpoints/gen_report/gen_markdown.js +66 -0
  21. package/build/endpoints/gen_report/gen_markdown.js.map +1 -0
  22. package/build/endpoints/gen_report/utility/iterate_n_store.js +46 -0
  23. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
  24. package/build/endpoints/index.js +89 -0
  25. package/build/endpoints/index.js.map +1 -0
  26. package/build/endpoints/next_js/client_jsFilesHref.js +91 -0
  27. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
  28. package/build/endpoints/next_js/client_jsonParse.js +75 -0
  29. package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
  30. package/build/endpoints/next_js/client_subsequentRequests.js +199 -0
  31. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
  32. package/build/endpoints/next_js/getWebpacks.js +45 -0
  33. package/build/endpoints/next_js/getWebpacks.js.map +1 -0
  34. package/build/globalConfig.js +11 -0
  35. package/build/globalConfig.js.map +1 -0
  36. package/build/index.js +166 -0
  37. package/build/index.js.map +1 -0
  38. package/build/lazyLoad/downloadFilesUtil.js +128 -0
  39. package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
  40. package/build/lazyLoad/downloadLoadedJsUtil.js +51 -0
  41. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
  42. package/build/lazyLoad/globals.js +25 -0
  43. package/build/lazyLoad/globals.js.map +1 -0
  44. package/build/lazyLoad/index.js +171 -0
  45. package/build/lazyLoad/index.js.map +1 -0
  46. package/build/lazyLoad/next_js/next_GetJSScript.js +94 -0
  47. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
  48. package/build/lazyLoad/next_js/next_GetLazyResources.js +202 -0
  49. package/build/lazyLoad/next_js/next_GetLazyResources.js.map +1 -0
  50. package/build/lazyLoad/next_js/next_SubsequentRequests.js +120 -0
  51. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
  52. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +188 -0
  53. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
  54. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +75 -0
  55. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
  56. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +94 -0
  57. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
  58. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +68 -0
  59. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
  60. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +95 -0
  61. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
  62. package/build/map/index.js +58 -0
  63. package/build/map/index.js.map +1 -0
  64. package/build/map/next_js/getFetchInstances.js +105 -0
  65. package/build/map/next_js/getFetchInstances.js.map +1 -0
  66. package/build/map/next_js/getWebpackConnections.js +224 -0
  67. package/build/map/next_js/getWebpackConnections.js.map +1 -0
  68. package/build/map/next_js/interactive.js +32 -0
  69. package/build/map/next_js/interactive.js.map +1 -0
  70. package/build/map/next_js/interactive_helpers/commandHandler.js +190 -0
  71. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
  72. package/build/map/next_js/interactive_helpers/commandHelpers.js +91 -0
  73. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
  74. package/build/map/next_js/interactive_helpers/helpMenu.js +11 -0
  75. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
  76. package/build/map/next_js/interactive_helpers/keybindings.js +80 -0
  77. package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
  78. package/build/map/next_js/interactive_helpers/printer.js +17 -0
  79. package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
  80. package/build/map/next_js/interactive_helpers/ui.js +81 -0
  81. package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
  82. package/build/map/next_js/resolveFetch.js +201 -0
  83. package/build/map/next_js/resolveFetch.js.map +1 -0
  84. package/build/run/index.js +62 -0
  85. package/build/run/index.js.map +1 -0
  86. package/build/strings/index.js +235 -0
  87. package/build/strings/index.js.map +1 -0
  88. package/build/strings/openapi.js +55 -0
  89. package/build/strings/openapi.js.map +1 -0
  90. package/build/strings/permutate.js +55 -0
  91. package/build/strings/permutate.js.map +1 -0
  92. package/build/strings/secrets.js +89 -0
  93. package/build/strings/secrets.js.map +1 -0
  94. package/build/techDetect/index.js +224 -0
  95. package/build/techDetect/index.js.map +1 -0
  96. package/build/utility/ai.js +69 -0
  97. package/build/utility/ai.js.map +1 -0
  98. package/build/utility/globals.js +84 -0
  99. package/build/utility/globals.js.map +1 -0
  100. package/build/utility/interfaces.js +2 -0
  101. package/build/utility/interfaces.js.map +1 -0
  102. package/build/utility/makeReq.js +265 -0
  103. package/build/utility/makeReq.js.map +1 -0
  104. package/build/utility/resolvePath.js +44 -0
  105. package/build/utility/resolvePath.js.map +1 -0
  106. package/{utility → build/utility}/runSandboxed.js +10 -13
  107. package/build/utility/runSandboxed.js.map +1 -0
  108. package/{utility → build/utility}/urlUtils.js +9 -11
  109. package/build/utility/urlUtils.js.map +1 -0
  110. package/docs/README.md +20 -0
  111. package/docs/api-gateway.md +68 -0
  112. package/docs/endpoints.md +49 -0
  113. package/docs/example-scenario.md +258 -0
  114. package/docs/interactive-mode.md +76 -0
  115. package/docs/lazyload.md +56 -0
  116. package/docs/map.md +53 -0
  117. package/docs/run.md +54 -0
  118. package/docs/strings.md +75 -0
  119. package/endpoints.json +77 -0
  120. package/extracted_urls-openapi.json +225 -0
  121. package/extracted_urls-swagger.json +225 -0
  122. package/extracted_urls.json +47 -0
  123. package/extracted_urls.txt +296 -0
  124. package/mapped.json +3413 -0
  125. package/output/ss0x00.com/_next/data/k7xKVnxmboK4SktY2dZWt/index.json +971 -0
  126. package/output/ss0x00.com/_next/static/chunks/12.7e6d2ac6e1808fc2.js +247 -0
  127. package/output/ss0x00.com/_next/static/chunks/128.160aa801ef0445bc.js +1074 -0
  128. package/output/ss0x00.com/_next/static/chunks/132.55df84f7707fc278.js +102 -0
  129. package/output/ss0x00.com/_next/static/chunks/142.77038c55d9ec10ba.js +96 -0
  130. package/output/ss0x00.com/_next/static/chunks/215.321479e91d330bfa.js +228 -0
  131. package/output/ss0x00.com/_next/static/chunks/229.097c396d86b4a882.js +458 -0
  132. package/output/ss0x00.com/_next/static/chunks/257.5fd052aa4ef06ef9.js +1327 -0
  133. package/output/ss0x00.com/_next/static/chunks/268.72cb3779f66db70b.js +10520 -0
  134. package/output/ss0x00.com/_next/static/chunks/320.57d528b0e9bf86f0.js +186 -0
  135. package/output/ss0x00.com/_next/static/chunks/325.302a44b604c35f17.js +88 -0
  136. package/output/ss0x00.com/_next/static/chunks/328.e4a0307a4fddf318.js +248 -0
  137. package/output/ss0x00.com/_next/static/chunks/432.3621f17504ef18f2.js +443 -0
  138. package/output/ss0x00.com/_next/static/chunks/44.e90dd963003a3d43.js +1094 -0
  139. package/output/ss0x00.com/_next/static/chunks/442.8c054f100f9e5e50.js +1082 -0
  140. package/output/ss0x00.com/_next/static/chunks/460.f8db9a5142598e2c.js +466 -0
  141. package/output/ss0x00.com/_next/static/chunks/487.05ca55420459c002.js +78 -0
  142. package/output/ss0x00.com/_next/static/chunks/567.1909a6b0a920114b.js +1374 -0
  143. package/output/ss0x00.com/_next/static/chunks/586.802fc9214d87fb29.js +752 -0
  144. package/output/ss0x00.com/_next/static/chunks/620.a2a3a6b94d30a4c8.js +1037 -0
  145. package/output/ss0x00.com/_next/static/chunks/642.6b3e487c9604cbb8.js +1628 -0
  146. package/output/ss0x00.com/_next/static/chunks/673.e5d77887e5c6a68c.js +1045 -0
  147. package/output/ss0x00.com/_next/static/chunks/684.8b8e52baca70524b.js +96 -0
  148. package/output/ss0x00.com/_next/static/chunks/686.79480519e5ccfb77.js +296 -0
  149. package/output/ss0x00.com/_next/static/chunks/756.7a3878a2e6765be7.js +504 -0
  150. package/output/ss0x00.com/_next/static/chunks/761.7bea7516c5d22b2a.js +1485 -0
  151. package/output/ss0x00.com/_next/static/chunks/794.e079ef369b41a3c5.js +1350 -0
  152. package/output/ss0x00.com/_next/static/chunks/826.31ba213e1d023c68.js +1031 -0
  153. package/output/ss0x00.com/_next/static/chunks/847.d8397a73efc81848.js +1068 -0
  154. package/output/ss0x00.com/_next/static/chunks/848.5feaeee1e2624aea.js +132 -0
  155. package/output/ss0x00.com/_next/static/chunks/850.ecc7c3c3d787ee03.js +1472 -0
  156. package/output/ss0x00.com/_next/static/chunks/853.50b9eb60b7d0e83c.js +1472 -0
  157. package/output/ss0x00.com/_next/static/chunks/856.7a7bb6c3c7bfc2ba.js +1320 -0
  158. package/output/ss0x00.com/_next/static/chunks/859.df4bd45c03a65f53.js +1306 -0
  159. package/output/ss0x00.com/_next/static/chunks/867.e8633955a147c978.js +541 -0
  160. package/output/ss0x00.com/_next/static/chunks/921.c3123f20a4c8d53c.js +96 -0
  161. package/output/ss0x00.com/_next/static/chunks/932.25cb421c466c99cb.js +999 -0
  162. package/output/ss0x00.com/_next/static/chunks/framework-64ad27b21261a9ce.js +9189 -0
  163. package/output/ss0x00.com/_next/static/chunks/main-710ab85aa9a8f10d.js +6583 -0
  164. package/output/ss0x00.com/_next/static/chunks/pages/5D-af5a23529ce3c337.js +486 -0
  165. package/output/ss0x00.com/_next/static/chunks/pages/_app-c449865c8af1faa0.js +39 -0
  166. package/output/ss0x00.com/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +6383 -0
  167. package/output/ss0x00.com/_next/static/chunks/webpack-efff35ee26971294.js +271 -0
  168. package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_buildManifest.js +8 -0
  169. package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_ssgManifest.js +3 -0
  170. package/output/ss0x00.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js +82 -0
  171. package/package.json +50 -38
  172. package/strings.json +7407 -0
  173. package/api_gateway/checkFeasibility.js +0 -25
  174. package/api_gateway/checkFireWallBlocking.js +0 -17
  175. package/api_gateway/genReq.js +0 -214
  176. package/api_gateway/index.js +0 -325
  177. package/endpoints/index.js +0 -7
  178. package/globalConfig.js +0 -12
  179. package/index.js +0 -69
  180. package/lazyLoad/downloadFilesUtil.js +0 -122
  181. package/lazyLoad/downloadLoadedJsUtil.js +0 -54
  182. package/lazyLoad/globals.js +0 -15
  183. package/lazyLoad/index.js +0 -167
  184. package/lazyLoad/next_js/next_GetJSScript.js +0 -99
  185. package/lazyLoad/next_js/next_GetLazyResources.js +0 -201
  186. package/lazyLoad/next_js/next_SubsequentRequests.js +0 -138
  187. package/lazyLoad/nuxt_js/nuxt_astParse.js +0 -194
  188. package/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +0 -77
  189. package/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +0 -99
  190. package/research/firewall_bypass.md +0 -38
  191. package/research/next_js.md +0 -116
  192. package/research/nuxt_js.md +0 -125
  193. package/research/vue_js.md +0 -9
  194. package/strings/index.js +0 -145
  195. package/techDetect/index.js +0 -156
  196. package/utility/globals.js +0 -6
  197. package/utility/makeReq.js +0 -179
  198. 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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"}