@js-recon/js-recon 1.4.1-beta.1 → 1.4.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 (125) hide show
  1. package/.claude-sync/capture-new.sh +61 -0
  2. package/.claude-sync/capture-scan.sh +55 -0
  3. package/.claude-sync/hooks/post-checkout +16 -0
  4. package/.claude-sync/hooks/post-merge +4 -0
  5. package/.claude-sync/hooks/pre-commit +3 -0
  6. package/.claude-sync/merge-agentic.sh +77 -0
  7. package/.claude-sync/setup.sh +17 -0
  8. package/.claude-sync/sync.sh +64 -0
  9. package/.claude-sync/watch.sh +17 -0
  10. package/.github/workflows/build-and-prettify.yaml +40 -0
  11. package/.github/workflows/promote-js-recon.yml +154 -10
  12. package/.vscode/tasks.json +42 -0
  13. package/CHANGELOG.md +27 -0
  14. package/Dockerfile.w-rules +13 -0
  15. package/README.md +1 -1
  16. package/build/analyze/helpers/initRules.js +27 -5
  17. package/build/analyze/helpers/initRules.js.map +1 -1
  18. package/build/analyze/index.js +3 -2
  19. package/build/analyze/index.js.map +1 -1
  20. package/build/completion/index.js +17 -11
  21. package/build/completion/index.js.map +1 -1
  22. package/build/globalConfig.js +1 -1
  23. package/build/globalConfig.js.map +1 -1
  24. package/build/index.js +55 -23
  25. package/build/index.js.map +1 -1
  26. package/build/lazyLoad/angular/angular_getFromMainJs.js +11 -29
  27. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -1
  28. package/build/lazyLoad/angular/angular_recursiveChunkImports.js +104 -0
  29. package/build/lazyLoad/angular/angular_recursiveChunkImports.js.map +1 -0
  30. package/build/lazyLoad/generic/generic_jsMimeTypes.js +19 -0
  31. package/build/lazyLoad/generic/generic_jsMimeTypes.js.map +1 -0
  32. package/build/lazyLoad/index.js +16 -9
  33. package/build/lazyLoad/index.js.map +1 -1
  34. package/build/lazyLoad/methodFilter.js +1 -1
  35. package/build/lazyLoad/methodFilter.js.map +1 -1
  36. package/build/lazyLoad/next_js/NextJsCrawler.js +5 -5
  37. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  38. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +17 -10
  39. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  40. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +4 -3
  41. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
  42. package/build/lazyLoad/next_js/next_parseLayoutJs.js +31 -31
  43. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  44. package/build/lazyLoad/next_js/next_promiseResolve.js +4 -3
  45. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  46. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +7 -8
  47. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
  48. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +6 -7
  49. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  50. package/build/lazyLoad/react/react_followImports.js +9 -8
  51. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  52. package/build/lazyLoad/react/react_sourcemapUrls.js +5 -11
  53. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
  54. package/build/lazyLoad/react/react_webpackChunkPaths.js +7 -6
  55. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  56. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +13 -12
  57. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
  58. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +6 -7
  59. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  60. package/build/lazyLoad/techDetect/checkInterceptedEvidence.js +18 -0
  61. package/build/lazyLoad/techDetect/checkInterceptedEvidence.js.map +1 -0
  62. package/build/lazyLoad/techDetect/index.js +58 -13
  63. package/build/lazyLoad/techDetect/index.js.map +1 -1
  64. package/build/lazyLoad/vue/vue_discoverJsFiles.js +6 -6
  65. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  66. package/build/lazyLoad/vue/vue_getClientSidePaths.js +8 -7
  67. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  68. package/build/lazyLoad/vue/vue_jsImports.js +16 -16
  69. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  70. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +5 -4
  71. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
  72. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +8 -1
  73. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  74. package/build/lazyLoad/vue/vue_stringJsFiles.js +15 -8
  75. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
  76. package/build/lazyLoad/vue/vue_viteMapDeps.js +6 -5
  77. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  78. package/build/mcp/mcpServer.js +1 -2
  79. package/build/mcp/mcpServer.js.map +1 -1
  80. package/build/mcp/tools.js +1 -2
  81. package/build/mcp/tools.js.map +1 -1
  82. package/build/proxy/awsConfig.js +45 -0
  83. package/build/proxy/awsConfig.js.map +1 -0
  84. package/build/proxy/checkFeasibility.js.map +1 -0
  85. package/build/proxy/checkFireWallBlocking.js.map +1 -0
  86. package/build/proxy/configFile.js +31 -0
  87. package/build/proxy/configFile.js.map +1 -0
  88. package/build/{api_gateway → proxy}/genReq.js +4 -5
  89. package/build/proxy/genReq.js.map +1 -0
  90. package/build/proxy/genericProxy.js +21 -0
  91. package/build/proxy/genericProxy.js.map +1 -0
  92. package/build/proxy/index.js +421 -0
  93. package/build/proxy/index.js.map +1 -0
  94. package/build/proxy/oxylabsProxy.js +34 -0
  95. package/build/proxy/oxylabsProxy.js.map +1 -0
  96. package/build/proxy/resolveProxyConfig.js +38 -0
  97. package/build/proxy/resolveProxyConfig.js.map +1 -0
  98. package/build/refactor/index.js +23 -28
  99. package/build/refactor/index.js.map +1 -1
  100. package/build/report/utility/initGlobalReportDb.js +111 -0
  101. package/build/report/utility/initGlobalReportDb.js.map +1 -0
  102. package/build/report/utility/mergeDomainIntoGlobalDb.js +39 -0
  103. package/build/report/utility/mergeDomainIntoGlobalDb.js.map +1 -0
  104. package/build/run/index.js +129 -75
  105. package/build/run/index.js.map +1 -1
  106. package/build/run/interruptHandler.js +17 -1
  107. package/build/run/interruptHandler.js.map +1 -1
  108. package/build/utility/concurrency.js +35 -0
  109. package/build/utility/concurrency.js.map +1 -0
  110. package/build/utility/configureProxy.js +60 -0
  111. package/build/utility/configureProxy.js.map +1 -0
  112. package/build/utility/globals.js +108 -13
  113. package/build/utility/globals.js.map +1 -1
  114. package/build/utility/makeReq.js +103 -10
  115. package/build/utility/makeReq.js.map +1 -1
  116. package/package.json +9 -2
  117. package/patches/puppeteer-extra-plugin-user-data-dir+2.4.1.patch +31 -0
  118. package/CLAUDE.md +0 -641
  119. package/build/api_gateway/checkFeasibility.js.map +0 -1
  120. package/build/api_gateway/checkFireWallBlocking.js.map +0 -1
  121. package/build/api_gateway/genReq.js.map +0 -1
  122. package/build/api_gateway/index.js +0 -291
  123. package/build/api_gateway/index.js.map +0 -1
  124. /package/build/{api_gateway → proxy}/checkFeasibility.js +0 -0
  125. /package/build/{api_gateway → proxy}/checkFireWallBlocking.js +0 -0
@@ -0,0 +1,421 @@
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 inquirer from "inquirer";
12
+ import { APIGatewayClient, CreateRestApiCommand, DeleteRestApiCommand } from "@aws-sdk/client-api-gateway";
13
+ import checkFeasibility from "./checkFeasibility.js";
14
+ import { readAwsGatewayMap, writeAwsGatewayMap } from "./awsConfig.js";
15
+ import { setActiveProxyMethod, writeMethodConfig } from "./configFile.js";
16
+ import { parseProxyUrl } from "./genericProxy.js";
17
+ import { composeOxylabsUsername } from "./oxylabsProxy.js";
18
+ const VALID_PROXY_METHODS = ["aws", "socks", "http", "oxylabs"];
19
+ // read the docs for all the methods for api gateway at https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/api-gateway/
20
+ // for the rate limits, refer to https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
21
+ /**
22
+ * Selects a random AWS region from the available API Gateway regions.
23
+ *
24
+ * @returns A randomly selected AWS region identifier
25
+ */
26
+ const randomRegion = () => {
27
+ const apiGatewayRegions = [
28
+ "us-east-2", // US East (Ohio)
29
+ "us-east-1", // US East (N. Virginia)
30
+ "us-west-1", // US West (N. California)
31
+ "us-west-2", // US West (Oregon)
32
+ "af-south-1", // Africa (Cape Town)
33
+ "ap-east-1", // Asia Pacific (Hong Kong)
34
+ "ap-south-2", // Asia Pacific (Hyderabad)
35
+ "ap-southeast-3", // Asia Pacific (Jakarta)
36
+ "ap-southeast-5", // Asia Pacific (Malaysia)
37
+ "ap-southeast-4", // Asia Pacific (Melbourne)
38
+ "ap-south-1", // Asia Pacific (Mumbai)
39
+ "ap-northeast-3", // Asia Pacific (Osaka)
40
+ "ap-northeast-2", // Asia Pacific (Seoul)
41
+ "ap-southeast-1", // Asia Pacific (Singapore)
42
+ "ap-southeast-2", // Asia Pacific (Sydney)
43
+ "ap-east-2", // Asia Pacific (Taipei)
44
+ "ap-southeast-7", // Asia Pacific (Thailand)
45
+ "ap-northeast-1", // Asia Pacific (Tokyo)
46
+ "ca-central-1", // Canada (Central)
47
+ "ca-west-1", // Canada West (Calgary)
48
+ "eu-central-1", // Europe (Frankfurt)
49
+ "eu-west-1", // Europe (Ireland)
50
+ "eu-west-2", // Europe (London)
51
+ "eu-south-1", // Europe (Milan)
52
+ "eu-west-3", // Europe (Paris)
53
+ "eu-south-2", // Europe (Spain)
54
+ "eu-north-1", // Europe (Stockholm)
55
+ "eu-central-2", // Europe (Zurich)
56
+ "il-central-1", // Israel (Tel Aviv)
57
+ "mx-central-1", // Mexico (Central)
58
+ "me-south-1", // Middle East (Bahrain)
59
+ "me-central-1", // Middle East (UAE)
60
+ "sa-east-1", // South America (São Paulo)
61
+ ];
62
+ return apiGatewayRegions[Math.floor(Math.random() * apiGatewayRegions.length)];
63
+ };
64
+ let aws_access_key;
65
+ let aws_secret_key;
66
+ let region;
67
+ let configFile = "";
68
+ /**
69
+ * Utility function to pause execution for a specified duration.
70
+ *
71
+ * @param ms - Number of milliseconds to sleep
72
+ * @returns Promise that resolves after the specified delay
73
+ */
74
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
75
+ /**
76
+ * Create a new API Gateway.
77
+ *
78
+ * @async
79
+ * @returns {Promise<void>}
80
+ */
81
+ const createGateway = () => __awaiter(void 0, void 0, void 0, function* () {
82
+ console.log(chalk.cyan("[i] Creating API Gateway"));
83
+ const client = new APIGatewayClient({
84
+ region,
85
+ credentials: {
86
+ accessKeyId: aws_access_key,
87
+ secretAccessKey: aws_secret_key,
88
+ },
89
+ });
90
+ const apigw_created_at = Date.now();
91
+ const apigw_name = `js_recon-${apigw_created_at}-${Math.floor(Math.random() * 1000)}`;
92
+ const command = new CreateRestApiCommand({
93
+ name: apigw_name,
94
+ description: `API Gateway for JS Recon created at ${new Intl.DateTimeFormat("en-US", {
95
+ year: "numeric",
96
+ month: "long",
97
+ day: "2-digit",
98
+ hour: "2-digit",
99
+ minute: "2-digit",
100
+ second: "2-digit",
101
+ timeZoneName: "short",
102
+ }).format(apigw_created_at)}`,
103
+ endpointConfiguration: {
104
+ ipAddressType: "dualstack",
105
+ types: ["REGIONAL"],
106
+ },
107
+ });
108
+ const response = yield client.send(command);
109
+ yield sleep(3000);
110
+ console.log(chalk.green(`[✓] Created API Gateway`));
111
+ console.log(chalk.bgGreen("ID:"), chalk.green(response.id));
112
+ console.log(chalk.bgGreen("Name:"), chalk.green(apigw_name));
113
+ console.log(chalk.bgGreen("Region:"), chalk.green(region));
114
+ // load the existing aws gateway map, if any
115
+ const config = readAwsGatewayMap(configFile);
116
+ config[apigw_name] = {
117
+ id: response.id,
118
+ name: apigw_name,
119
+ description: response.description,
120
+ created_at: apigw_created_at,
121
+ region: region,
122
+ access_key: aws_access_key,
123
+ secret_key: aws_secret_key,
124
+ };
125
+ writeAwsGatewayMap(configFile, config);
126
+ console.log(chalk.green(`[✓] Config saved to ${configFile}`));
127
+ });
128
+ /**
129
+ * Destroy an API Gateway.
130
+ *
131
+ * @async
132
+ * @param {string} id - The ID of the API Gateway to destroy.
133
+ * @returns {Promise<void>}
134
+ */
135
+ const destroyGateway = (id) => __awaiter(void 0, void 0, void 0, function* () {
136
+ console.log(chalk.cyan("[i] Destroying API Gateway"));
137
+ if (!id) {
138
+ console.error(chalk.red("[!] Please provide an API Gateway ID"));
139
+ return;
140
+ }
141
+ // read the aws gateway map
142
+ let config = readAwsGatewayMap(configFile);
143
+ // get the name of the api gateway
144
+ let name = Object.keys(config).find((key) => config[key].id === id);
145
+ console.log(chalk.bgGreen("Name:"), chalk.green(name));
146
+ console.log(chalk.bgGreen("ID:"), chalk.green(id));
147
+ console.log(chalk.bgGreen("Region:"), chalk.green(config[name].region));
148
+ region = config[name].region;
149
+ const client = new APIGatewayClient({
150
+ region,
151
+ credentials: {
152
+ accessKeyId: aws_access_key,
153
+ secretAccessKey: aws_secret_key,
154
+ },
155
+ });
156
+ const command = new DeleteRestApiCommand({
157
+ restApiId: id,
158
+ });
159
+ yield client.send(command);
160
+ // remove from the config file
161
+ delete config[name];
162
+ writeAwsGatewayMap(configFile, config);
163
+ yield sleep(30000);
164
+ console.log(chalk.green(`[✓] Destroyed API Gateway: ${id}`));
165
+ });
166
+ /**
167
+ * Destroy all API Gateways.
168
+ *
169
+ * @async
170
+ * @returns {Promise<void>}
171
+ */
172
+ const destroyAllGateways = () => __awaiter(void 0, void 0, void 0, function* () {
173
+ console.log(chalk.cyan("[i] Destroying all API Gateways"));
174
+ // read the aws gateway map
175
+ let config = readAwsGatewayMap(configFile);
176
+ // destroy all the gateways
177
+ for (const [key, value] of Object.entries(config)) {
178
+ const client = new APIGatewayClient({
179
+ region: value.region,
180
+ credentials: {
181
+ accessKeyId: aws_access_key,
182
+ secretAccessKey: aws_secret_key,
183
+ },
184
+ });
185
+ console.log(chalk.cyan(`[i] Destroying API Gateway: ${key} : ${value.id} : ${value.region}`));
186
+ const command = new DeleteRestApiCommand({
187
+ restApiId: value.id,
188
+ });
189
+ yield sleep(30000);
190
+ yield client.send(command);
191
+ console.log(chalk.green(`[✓] Destroyed API Gateway: ${key} : ${value.id} : ${value.region}`));
192
+ }
193
+ // nullify the aws gateway map
194
+ writeAwsGatewayMap(configFile, {});
195
+ console.log(chalk.green("[✓] Destroyed all API Gateways"));
196
+ });
197
+ /**
198
+ * List all API Gateways.
199
+ *
200
+ * @async
201
+ * @returns {Promise<void>}
202
+ */
203
+ const listGateways = () => __awaiter(void 0, void 0, void 0, function* () {
204
+ console.log(chalk.cyan("[i] Listing all API Gateways"));
205
+ // read the aws gateway map
206
+ const config = readAwsGatewayMap(configFile);
207
+ // if list is empty
208
+ if (Object.keys(config).length === 0) {
209
+ console.error(chalk.red("[!] No API Gateways found"));
210
+ return;
211
+ }
212
+ console.log(chalk.green("[✓] List of API Gateways"));
213
+ for (const [key, value] of Object.entries(config)) {
214
+ console.log(chalk.bgGreen("Name:"), chalk.green(key));
215
+ console.log(chalk.bgGreen("ID:"), chalk.green(value.id));
216
+ console.log(chalk.bgGreen("Region:"), chalk.green(value.region));
217
+ console.log("\n");
218
+ }
219
+ });
220
+ /** Masks a credential for secure display by showing only the first and last 4 characters. */
221
+ const keyMask = (key) => {
222
+ if (key.length < 6)
223
+ return key;
224
+ return key.slice(0, 4) + "..." + key.slice(-4);
225
+ };
226
+ /** Resolves the proxy method to configure: the `--proxy-method` flag if given, otherwise an interactive prompt. */
227
+ const promptProxyMethod = (methodInput) => __awaiter(void 0, void 0, void 0, function* () {
228
+ if (methodInput) {
229
+ if (!VALID_PROXY_METHODS.includes(methodInput)) {
230
+ throw new Error(`Invalid proxy method: ${methodInput}. Expected one of: ${VALID_PROXY_METHODS.join(", ")}`);
231
+ }
232
+ return methodInput;
233
+ }
234
+ const { method } = yield inquirer.prompt([
235
+ {
236
+ type: "list",
237
+ name: "method",
238
+ message: "Select proxy method to configure",
239
+ choices: [
240
+ { name: "aws - AWS API Gateway IP rotation", value: "aws" },
241
+ { name: "socks - Generic SOCKS5 proxy", value: "socks" },
242
+ { name: "http - Generic HTTP proxy", value: "http" },
243
+ { name: "oxylabs - Oxylabs datacenter proxy", value: "oxylabs" },
244
+ ],
245
+ },
246
+ ]);
247
+ return method;
248
+ });
249
+ /** Resolves the socks/http proxy URL: the `--proxy` flag if given (validated), otherwise an interactive prompt. */
250
+ const promptProxyUrl = (method, urlInput) => __awaiter(void 0, void 0, void 0, function* () {
251
+ if (urlInput) {
252
+ parseProxyUrl(urlInput);
253
+ return urlInput;
254
+ }
255
+ const example = method === "socks" ? "socks5://user:pass@host:1080" : "http://user:pass@host:8080";
256
+ const { url } = yield inquirer.prompt([
257
+ {
258
+ type: "input",
259
+ name: "url",
260
+ message: `${method === "socks" ? "SOCKS5" : "HTTP"} proxy URL (e.g. ${example})`,
261
+ validate: (value) => {
262
+ try {
263
+ parseProxyUrl(value);
264
+ return true;
265
+ }
266
+ catch (err) {
267
+ return err.message;
268
+ }
269
+ },
270
+ },
271
+ ]);
272
+ return url;
273
+ });
274
+ /** Resolves the oxylabs config field-by-field: CLI flags where given, otherwise interactive prompts. */
275
+ const promptOxylabsConfig = (opts) => __awaiter(void 0, void 0, void 0, function* () {
276
+ const answers = yield inquirer.prompt([
277
+ {
278
+ type: "input",
279
+ name: "username",
280
+ message: "Oxylabs username",
281
+ when: !opts.oxylabsUsername,
282
+ validate: (value) => !!value || "Username is required",
283
+ },
284
+ {
285
+ type: "password",
286
+ name: "password",
287
+ mask: "*",
288
+ message: "Oxylabs password",
289
+ when: !opts.oxylabsPassword,
290
+ validate: (value) => !!value || "Password is required",
291
+ },
292
+ {
293
+ type: "input",
294
+ name: "country",
295
+ message: "Country code (optional, e.g. US)",
296
+ when: opts.oxylabsCountry === undefined,
297
+ },
298
+ {
299
+ type: "input",
300
+ name: "city",
301
+ message: "City (optional, requires country)",
302
+ when: (currentAnswers) => opts.oxylabsCity === undefined && !!(opts.oxylabsCountry || currentAnswers.country),
303
+ },
304
+ {
305
+ type: "input",
306
+ name: "sessionId",
307
+ message: "Sticky session id (optional)",
308
+ when: opts.oxylabsSessionId === undefined,
309
+ },
310
+ ]);
311
+ const cfg = {
312
+ username: opts.oxylabsUsername || answers.username,
313
+ password: opts.oxylabsPassword || answers.password,
314
+ country: opts.oxylabsCountry || answers.country || undefined,
315
+ city: opts.oxylabsCity || answers.city || undefined,
316
+ sessionId: opts.oxylabsSessionId || answers.sessionId || undefined,
317
+ };
318
+ composeOxylabsUsername(cfg); // throws if city was given without country
319
+ return cfg;
320
+ });
321
+ /** Resolves AWS credentials/region for the interactive `--init` flow: flags/env first, prompts for whatever's missing. */
322
+ const resolveAwsCredentialsInteractive = (opts) => __awaiter(void 0, void 0, void 0, function* () {
323
+ aws_access_key = opts.awsAccessKey || process.env.AWS_ACCESS_KEY_ID || undefined;
324
+ aws_secret_key = opts.awsSecretKey || process.env.AWS_SECRET_ACCESS_KEY || undefined;
325
+ region = opts.region || undefined;
326
+ const answers = yield inquirer.prompt([
327
+ {
328
+ type: "input",
329
+ name: "accessKey",
330
+ message: "AWS access key",
331
+ when: !aws_access_key,
332
+ validate: (value) => !!value || "Required",
333
+ },
334
+ {
335
+ type: "password",
336
+ name: "secretKey",
337
+ mask: "*",
338
+ message: "AWS secret key",
339
+ when: !aws_secret_key,
340
+ validate: (value) => !!value || "Required",
341
+ },
342
+ {
343
+ type: "input",
344
+ name: "region",
345
+ message: "AWS region (leave blank for random)",
346
+ when: !region,
347
+ },
348
+ ]);
349
+ aws_access_key = aws_access_key || answers.accessKey;
350
+ aws_secret_key = aws_secret_key || answers.secretKey;
351
+ region = region || answers.region || randomRegion();
352
+ });
353
+ /**
354
+ * Main entry point for the `proxy` module.
355
+ *
356
+ * `-i/--init` runs the interactive config wizard covering all 4 methods (aws/socks/http/oxylabs),
357
+ * writing the result to `.proxy_config.json`. `-d/--destroy`, `--destroy-all`, and `-l/--list`
358
+ * remain AWS-only lifecycle actions, unchanged from the original api-gateway module.
359
+ *
360
+ * @async
361
+ * @param opts - Resolved CLI options for the `proxy` command.
362
+ * @returns {Promise<void>}
363
+ */
364
+ const proxy = (opts) => __awaiter(void 0, void 0, void 0, function* () {
365
+ configFile = opts.config || ".proxy_config.json";
366
+ // if feasibility is true, check feasibility
367
+ if (opts.feasibility) {
368
+ if (!opts.feasibilityUrl) {
369
+ console.error(chalk.red("[!] Please provide a URL to check feasibility of"));
370
+ return;
371
+ }
372
+ yield checkFeasibility(opts.feasibilityUrl);
373
+ return;
374
+ }
375
+ if (opts.init) {
376
+ const method = yield promptProxyMethod(opts.proxyMethod);
377
+ if (method === "aws") {
378
+ console.log(chalk.cyan("[i] Configuring 'Proxy' module (aws method)"));
379
+ yield resolveAwsCredentialsInteractive(opts);
380
+ console.log(chalk.cyan(`[i] Using region: ${region}`));
381
+ console.log(chalk.cyan(`[i] Using access key: ${keyMask(aws_access_key)}`));
382
+ yield createGateway();
383
+ setActiveProxyMethod(configFile, "aws");
384
+ return;
385
+ }
386
+ if (method === "socks" || method === "http") {
387
+ const url = yield promptProxyUrl(method, opts.proxyUrl);
388
+ writeMethodConfig(configFile, method, { url });
389
+ console.log(chalk.green(`[✓] Saved ${method} proxy config to ${configFile}`));
390
+ return;
391
+ }
392
+ // method === "oxylabs"
393
+ const oxylabsConfig = yield promptOxylabsConfig(opts);
394
+ writeMethodConfig(configFile, "oxylabs", oxylabsConfig);
395
+ console.log(chalk.green(`[✓] Saved oxylabs proxy config to ${configFile}`));
396
+ return;
397
+ }
398
+ // destroy / destroy-all / list remain AWS-only, non-interactive
399
+ if (opts.destroy || opts.destroyAll || opts.list) {
400
+ aws_access_key = opts.awsAccessKey || process.env.AWS_ACCESS_KEY_ID || undefined;
401
+ aws_secret_key = opts.awsSecretKey || process.env.AWS_SECRET_ACCESS_KEY || undefined;
402
+ region = opts.region || randomRegion();
403
+ if (!aws_access_key || !aws_secret_key) {
404
+ console.error(chalk.red("[!] AWS Access Key or Secret Key not found. Run with -h to see help"));
405
+ process.exit(1);
406
+ }
407
+ if (opts.destroy) {
408
+ yield destroyGateway(opts.destroy);
409
+ }
410
+ else if (opts.destroyAll) {
411
+ yield destroyAllGateways();
412
+ }
413
+ else {
414
+ yield listGateways();
415
+ }
416
+ return;
417
+ }
418
+ console.error(chalk.red("[!] Please provide a valid action (-i/--init, -d/--destroy, --destroy-all, or -l/--list)"));
419
+ });
420
+ export default proxy;
421
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Composes the Oxylabs datacenter-proxy username: auth is entirely encoded here, no separate API.
3
+ * user-USERNAME[-country-XX]
4
+ *
5
+ * Verified against a live Oxylabs datacenter account (dc.oxylabs.io:8000) — the previous
6
+ * `customer-USERNAME-cc-XX` residential-style scheme returns a 407 Proxy Authentication Required
7
+ * against real datacenter credentials; this is the confirmed-working format per
8
+ * https://developers.oxylabs.io/products/proxies/datacenter-proxies/select-country.
9
+ *
10
+ * `city` and `sessionId` are not supported here: Oxylabs' datacenter tier has no documented
11
+ * username-level city targeting, and sticky sessions are selected by port number, not by a
12
+ * username suffix — silently encoding either into the username would produce a wrong username
13
+ * that fails auth, so both are rejected explicitly instead.
14
+ */
15
+ export const composeOxylabsUsername = (cfg) => {
16
+ if (cfg.city) {
17
+ throw new Error("Oxylabs config: `city` is not supported (no documented username-level city targeting for datacenter proxies). Omit `city`.");
18
+ }
19
+ if (cfg.sessionId) {
20
+ throw new Error("Oxylabs config: `sessionId` is not supported via username for datacenter proxies (sticky sessions are selected by port, not username). Omit `sessionId`.");
21
+ }
22
+ let username = `user-${cfg.username}`;
23
+ if (cfg.country) {
24
+ username += `-country-${cfg.country}`;
25
+ }
26
+ return username;
27
+ };
28
+ const OXYLABS_ENTRY_ENDPOINT = "dc.oxylabs.io:8000";
29
+ /** Composes the full Oxylabs datacenter proxy URL. */
30
+ export const buildOxylabsProxyUrl = (cfg) => {
31
+ const username = composeOxylabsUsername(cfg);
32
+ return `http://${encodeURIComponent(username)}:${encodeURIComponent(cfg.password)}@${OXYLABS_ENTRY_ENDPOINT}`;
33
+ };
34
+ //# sourceMappingURL=oxylabsProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oxylabsProxy.js","sourceRoot":"","sources":["../../src/proxy/oxylabsProxy.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAkB,EAAU,EAAE;IACjE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,4HAA4H,CAC/H,CAAC;IACN,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACX,0JAA0J,CAC7J,CAAC;IACN,CAAC;IAED,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACd,QAAQ,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAEpD,sDAAsD;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAkB,EAAU,EAAE;IAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,UAAU,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;AAClH,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ const isValidMethod = (value) => {
2
+ return value === "aws" || value === "socks" || value === "http" || value === "oxylabs";
3
+ };
4
+ export const resolveProxyConfig = (input) => {
5
+ var _a;
6
+ const { cli, env, ignoreEnv, configFileParsed } = input;
7
+ const envMethod = ignoreEnv ? undefined : env.JS_RECON_PROXY_METHOD;
8
+ const rawMethod = cli.proxyMethod || envMethod || configFileParsed.method;
9
+ const method = isValidMethod(rawMethod) ? rawMethod : null;
10
+ if (method === null) {
11
+ return { method: null };
12
+ }
13
+ if (method === "socks" || method === "http") {
14
+ const envUrl = ignoreEnv ? undefined : env.JS_RECON_PROXY_URL;
15
+ const url = cli.proxyUrl || envUrl || ((_a = configFileParsed[method]) === null || _a === void 0 ? void 0 : _a.url);
16
+ return { method, url };
17
+ }
18
+ if (method === "oxylabs") {
19
+ const envUsername = ignoreEnv ? undefined : env.JS_RECON_OXYLABS_USERNAME;
20
+ const envPassword = ignoreEnv ? undefined : env.JS_RECON_OXYLABS_PASSWORD;
21
+ const envCountry = ignoreEnv ? undefined : env.JS_RECON_OXYLABS_COUNTRY;
22
+ const envCity = ignoreEnv ? undefined : env.JS_RECON_OXYLABS_CITY;
23
+ const envSessionId = ignoreEnv ? undefined : env.JS_RECON_OXYLABS_SESSION_ID;
24
+ const fileOxylabs = configFileParsed.oxylabs || {};
25
+ const username = cli.oxylabsUsername || envUsername || fileOxylabs.username;
26
+ const password = cli.oxylabsPassword || envPassword || fileOxylabs.password;
27
+ const country = cli.oxylabsCountry || envCountry || fileOxylabs.country;
28
+ const city = cli.oxylabsCity || envCity || fileOxylabs.city;
29
+ const sessionId = cli.oxylabsSessionId || envSessionId || fileOxylabs.sessionId;
30
+ if (!username || !password) {
31
+ return { method: null };
32
+ }
33
+ return { method, oxylabs: { username, password, country, city, sessionId } };
34
+ }
35
+ // method === "aws"
36
+ return { method, awsGatewayMap: configFileParsed.aws || {} };
37
+ };
38
+ //# sourceMappingURL=resolveProxyConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveProxyConfig.js","sourceRoot":"","sources":["../../src/proxy/resolveProxyConfig.ts"],"names":[],"mappings":"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"}
@@ -27,30 +27,22 @@ import { loadRefactorConfig, validateRefactorConfig, purgeDynamicVersionDetectio
27
27
  import { loadListCache, saveListCache, shouldRefreshListCache, loadCachedSignature, saveSignatureToCache, isSignatureCacheFresh, validateCaches, } from "./remote/cache.js";
28
28
  import { detectReactVersion, VERSION_TECH_TO_BUNDLER, listAvailableVersions, selectDynamicScatConfigs, validateStaticScatConfig, } from "./remote/version-detect.js";
29
29
  /**
30
- * Derives the assets directory from the URL embedded in any chunk's code comment.
31
- * Chunks have a header like `// File Source: http://localhost:3001/assets/foo.js`.
32
- * Returns null if the assets directory cannot be determined or does not exist.
30
+ * Locates the assets directory holding vendor chunk files not present in `mapped.json`.
31
+ * `explicitAssetsDir` (the actual download dir + host, known by the `run` orchestrator)
32
+ * is used when given — `mapped.json` isn't always co-located with the downloaded assets
33
+ * (e.g. single-target `run` writes `mapped.json` to cwd but assets to `<-o>/<host>/assets`).
34
+ * Falls back to `<mapped.json's dir>/assets`, which holds for manual/CLI refactor
35
+ * invocations where `-m` points at a `mapped.json` living inside the host output dir.
36
+ * Returns null if the resolved directory does not exist.
33
37
  */
34
- function findAssetsDir(chunks, mappedJsonPath) {
35
- var _a;
36
- for (const chunk of Object.values(chunks)) {
37
- const firstLine = ((_a = chunk.code) !== null && _a !== void 0 ? _a : "").split("\n")[0];
38
- const urlMatch = firstLine.match(/\/\/ File Source: (https?:\/\/[^\s]+)/);
39
- if (!urlMatch)
40
- continue;
41
- try {
42
- const url = new URL(urlMatch[1]);
43
- const port = url.port;
44
- const hostname = url.hostname + (port ? `_${port}` : "");
45
- const assetsDir = path.join(path.dirname(path.resolve(mappedJsonPath)), "output", hostname, "assets");
46
- if (fs.existsSync(assetsDir))
47
- return assetsDir;
48
- }
49
- catch (_b) {
50
- continue;
51
- }
38
+ export function findAssetsDir(mappedJsonPath, explicitAssetsDir) {
39
+ const assetsDir = explicitAssetsDir !== null && explicitAssetsDir !== void 0 ? explicitAssetsDir : path.join(path.dirname(path.resolve(mappedJsonPath)), "assets");
40
+ try {
41
+ return fs.statSync(assetsDir).isDirectory() ? assetsDir : null;
42
+ }
43
+ catch (_a) {
44
+ return null;
52
45
  }
53
- return null;
54
46
  }
55
47
  /**
56
48
  * Returns paths to .js files in `assetsDir` that are NOT covered by any chunk in `chunks`.
@@ -626,9 +618,12 @@ function resolveVersionDetectionScatDirs(bundler, opts) {
626
618
  * @param outputDir - Directory where refactored code files will be written
627
619
  * @param tech - Technology stack identifier (e.g., 'next' for Next.js)
628
620
  * @param list - Whether to list available technologies instead of running refactoring
621
+ * @param assetsDir - Directory holding downloaded vendor chunk files not present in
622
+ * `mapped.json` (react-webpack/react-vite only). Defaults to `<mapped.json's dir>/assets`
623
+ * when omitted; pass explicitly when `mapped.json` isn't co-located with the assets dir.
629
624
  * @returns Promise that resolves when refactoring is complete
630
625
  */
631
- const refactor = (mappedJson, outputDir, tech, list, collisionsFile, remoteOpts) => __awaiter(void 0, void 0, void 0, function* () {
626
+ const refactor = (mappedJson, outputDir, tech, list, collisionsFile, remoteOpts, assetsDir) => __awaiter(void 0, void 0, void 0, function* () {
632
627
  var _a, _b, _c, _d, _e, _f, _g, _h;
633
628
  console.log(chalk.cyan("[i] Loading refactor module..."));
634
629
  if (list) {
@@ -771,9 +766,9 @@ const refactor = (mappedJson, outputDir, tech, list, collisionsFile, remoteOpts)
771
766
  // Pre-scan vendor chunks from the assets directory that are not in mapped.json.
772
767
  // These files (e.g. vendor-router.*.js, vendor-react-dom.*.js) contain library
773
768
  // modules whose export maps must be classified before processing application chunks.
774
- const assetsDir = findAssetsDir(chunks, mappedJson);
775
- if (assetsDir) {
776
- const vendorFiles = findVendorChunkFiles(chunks, assetsDir);
769
+ const preScanAssetsDir = findAssetsDir(mappedJson, assetsDir);
770
+ if (preScanAssetsDir) {
771
+ const vendorFiles = findVendorChunkFiles(chunks, preScanAssetsDir);
777
772
  for (const vendorFile of vendorFiles) {
778
773
  console.log(chalk.cyan(`[i] Pre-scanning vendor chunk: ${path.basename(vendorFile)}`));
779
774
  const vendorCode = fs.readFileSync(vendorFile, "utf8");
@@ -835,7 +830,7 @@ const refactor = (mappedJson, outputDir, tech, list, collisionsFile, remoteOpts)
835
830
  // signature set contains only app-level code and misses version-specific React
836
831
  // library signatures.
837
832
  const vendorCodes = [];
838
- const vDetectAssetsDir = findAssetsDir(chunks, mappedJson);
833
+ const vDetectAssetsDir = findAssetsDir(mappedJson, assetsDir);
839
834
  if (vDetectAssetsDir) {
840
835
  for (const vendorFile of findVendorChunkFiles(chunks, vDetectAssetsDir)) {
841
836
  try {
@@ -865,7 +860,7 @@ const refactor = (mappedJson, outputDir, tech, list, collisionsFile, remoteOpts)
865
860
  // Vendor chunks (vendor-react-*.js) are referenced by app chunks but are typically
866
861
  // absent from mapped.json. Without them, vendorExportMaps is empty and vendor
867
862
  // import statements are never rewritten — leaving unresolvable references in output.
868
- const vitAssetsDir = findAssetsDir(chunks, mappedJson);
863
+ const vitAssetsDir = findAssetsDir(mappedJson, assetsDir);
869
864
  if (vitAssetsDir) {
870
865
  const missingFiles = findVendorChunkFiles(chunks, vitAssetsDir);
871
866
  for (const vendorFile of missingFiles) {