@js-recon/js-recon 1.4.3 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-prettify.yaml +6 -6
- package/.github/workflows/rules-smoke-test.yaml +2 -2
- package/CHANGELOG.md +19 -0
- package/README.md +52 -0
- package/build/analyze/helpers/initRules.js +34 -16
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/completion/index.js +44 -3
- package/build/completion/index.js.map +1 -1
- package/build/config/applicationConfig.js +493 -0
- package/build/config/applicationConfig.js.map +1 -0
- package/build/fingerprint/index.js +8 -19
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/index.js +62 -10
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +40 -32
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +150 -50
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +112 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -0
- package/build/lazyLoad/globals.js +4 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +188 -115
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +3 -2
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +8 -9
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +93 -93
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/outputPath.js +92 -0
- package/build/lazyLoad/outputPath.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +15 -5
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_getScriptTags.js +11 -6
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +2 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +93 -59
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +8 -3
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +10 -9
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +69 -45
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +3 -2
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +2 -1
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +4 -3
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +9 -20
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +2 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
- package/build/proxy/checkFeasibility.js +8 -4
- package/build/proxy/checkFeasibility.js.map +1 -1
- package/build/proxy/checkFireWallBlocking.js +23 -13
- package/build/proxy/checkFireWallBlocking.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +203 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -0
- package/build/proxy/genReq.js +434 -127
- package/build/proxy/genReq.js.map +1 -1
- package/build/proxy/oxylabsFallback.js +110 -0
- package/build/proxy/oxylabsFallback.js.map +1 -0
- package/build/proxy/proxyFeasibilityRequest.js +11 -9
- package/build/proxy/proxyFeasibilityRequest.js.map +1 -1
- package/build/run/cancellableStep.js +27 -0
- package/build/run/cancellableStep.js.map +1 -0
- package/build/run/index.js +75 -107
- package/build/run/index.js.map +1 -1
- package/build/run/outputDirectory.js +377 -0
- package/build/run/outputDirectory.js.map +1 -0
- package/build/sourcemaps/index.js +109 -23
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +12 -5
- package/build/strings/index.js.map +1 -1
- package/build/utility/downloadProgress.js +99 -0
- package/build/utility/downloadProgress.js.map +1 -0
- package/build/utility/makeReq.js +490 -257
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/progressLog.js +64 -4
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/targetInputs.js +177 -0
- package/build/utility/targetInputs.js.map +1 -0
- package/build/utility/urlUtils.js +37 -1
- package/build/utility/urlUtils.js.map +1 -1
- package/config.dist.yaml +251 -0
- package/package.json +2 -2
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { parseDocument, stringify } from "yaml";
|
|
6
|
+
export const APPLICATION_CONFIG_VERSION = 1;
|
|
7
|
+
export const APPLICATION_CONFIG_ENV = "JS_RECON_CONFIG";
|
|
8
|
+
const MAX_APPLICATION_CONFIG_BYTES = 1024 * 1024;
|
|
9
|
+
export class ApplicationConfigError extends Error {
|
|
10
|
+
constructor(message, cause) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "ApplicationConfigError";
|
|
13
|
+
this.cause = cause;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
let loadedApplicationConfig;
|
|
17
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
18
|
+
const cloneDefault = (value) => {
|
|
19
|
+
if (Array.isArray(value)) {
|
|
20
|
+
return value.map((entry) => String(entry));
|
|
21
|
+
}
|
|
22
|
+
if (typeof value === "boolean" || typeof value === "string") {
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
if (typeof value === "number") {
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
};
|
|
30
|
+
const optionMap = (command) => new Map(command.options.map((option) => [option.attributeName(), option]));
|
|
31
|
+
const commandMap = (program) => new Map(program.commands.map((command) => [command.name(), command]));
|
|
32
|
+
const assertKnownKeys = (value, allowed, location) => {
|
|
33
|
+
const unknownKeys = Object.keys(value).filter((key) => !allowed.has(key));
|
|
34
|
+
if (unknownKeys.length > 0) {
|
|
35
|
+
throw new ApplicationConfigError(`Unknown ${location} key${unknownKeys.length === 1 ? "" : "s"}: ${unknownKeys.join(", ")}`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const normalizeBoolean = (value, location) => {
|
|
39
|
+
if (typeof value === "boolean")
|
|
40
|
+
return value;
|
|
41
|
+
if (typeof value === "number" && (value === 0 || value === 1))
|
|
42
|
+
return value === 1;
|
|
43
|
+
if (typeof value === "string") {
|
|
44
|
+
const normalized = value.trim().toLowerCase();
|
|
45
|
+
if (["true", "1", "yes", "on"].includes(normalized))
|
|
46
|
+
return true;
|
|
47
|
+
if (["false", "0", "no", "off"].includes(normalized))
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
throw new ApplicationConfigError(`${location} must be a boolean (true/false)`);
|
|
51
|
+
};
|
|
52
|
+
const parseOptionValue = (option, value, location) => {
|
|
53
|
+
if (value === null || value === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
const isBooleanFlag = !option.required && !option.optional;
|
|
56
|
+
if (isBooleanFlag)
|
|
57
|
+
return normalizeBoolean(value, location);
|
|
58
|
+
if (option.optional && typeof value === "boolean") {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
const parseOne = (entry, previous) => {
|
|
62
|
+
if (!["string", "number", "boolean"].includes(typeof entry)) {
|
|
63
|
+
throw new ApplicationConfigError(`${location} must contain only scalar values`);
|
|
64
|
+
}
|
|
65
|
+
const stringValue = String(entry);
|
|
66
|
+
if (!option.parseArg)
|
|
67
|
+
return stringValue;
|
|
68
|
+
try {
|
|
69
|
+
return option.parseArg(stringValue, previous);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new ApplicationConfigError(`${location} is invalid: ${error.message}`, error);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
if (!option.parseArg && !option.variadic && !Array.isArray(option.defaultValue)) {
|
|
77
|
+
throw new ApplicationConfigError(`${location} does not accept a list`);
|
|
78
|
+
}
|
|
79
|
+
if (!option.parseArg) {
|
|
80
|
+
return value.map((entry) => parseOne(entry, undefined));
|
|
81
|
+
}
|
|
82
|
+
return value.reduce((previous, entry) => parseOne(entry, previous), []);
|
|
83
|
+
}
|
|
84
|
+
const previous = Array.isArray(option.defaultValue) ? [] : undefined;
|
|
85
|
+
return parseOne(value, previous);
|
|
86
|
+
};
|
|
87
|
+
const camelToUpperSnake = (value) => value
|
|
88
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1_$2")
|
|
89
|
+
.replace(/[^a-zA-Z0-9]+/g, "_")
|
|
90
|
+
.toUpperCase();
|
|
91
|
+
export const getOptionEnvironmentVariable = (commandName, optionName) => `JS_RECON_${camelToUpperSnake(commandName)}_${camelToUpperSnake(optionName)}`;
|
|
92
|
+
const legacyEnvironmentAliases = Object.freeze({
|
|
93
|
+
"run.outputOverwrite": ["JS_RECON_OUTPUT_OVERWRITE"],
|
|
94
|
+
"run.disableRulesVersionCheck": ["JS_RECON_DISABLE_RULES_VERSION_CHECK"],
|
|
95
|
+
"analyze.disableRulesVersionCheck": ["JS_RECON_DISABLE_RULES_VERSION_CHECK"],
|
|
96
|
+
"run.openaiApiKey": ["OPENAI_API_KEY"],
|
|
97
|
+
"map.openaiApiKey": ["OPENAI_API_KEY"],
|
|
98
|
+
"proxy.awsAccessKey": ["AWS_ACCESS_KEY_ID"],
|
|
99
|
+
"proxy.awsSecretKey": ["AWS_SECRET_ACCESS_KEY"],
|
|
100
|
+
"proxy.proxyMethod": ["JS_RECON_PROXY_METHOD"],
|
|
101
|
+
"proxy.proxy": ["JS_RECON_PROXY_URL"],
|
|
102
|
+
"proxy.oxylabsUsername": ["JS_RECON_OXYLABS_USERNAME"],
|
|
103
|
+
"proxy.oxylabsPassword": ["JS_RECON_OXYLABS_PASSWORD"],
|
|
104
|
+
"proxy.oxylabsCountry": ["JS_RECON_OXYLABS_COUNTRY"],
|
|
105
|
+
"proxy.oxylabsCity": ["JS_RECON_OXYLABS_CITY"],
|
|
106
|
+
"proxy.oxylabsSessionId": ["JS_RECON_OXYLABS_SESSION_ID"],
|
|
107
|
+
});
|
|
108
|
+
export const getDefaultApplicationConfigPath = (homeDirectory = os.homedir()) => path.join(homeDirectory, ".config", "js-recon", "config.yaml");
|
|
109
|
+
export const buildDefaultApplicationConfig = (program) => {
|
|
110
|
+
const commands = Object.fromEntries(program.commands.map((command) => [
|
|
111
|
+
command.name(),
|
|
112
|
+
Object.fromEntries(command.options.map((option) => [
|
|
113
|
+
option.attributeName(),
|
|
114
|
+
cloneDefault(command.getOptionValue(option.attributeName())),
|
|
115
|
+
])),
|
|
116
|
+
]));
|
|
117
|
+
return {
|
|
118
|
+
version: APPLICATION_CONFIG_VERSION,
|
|
119
|
+
oxylabs: {
|
|
120
|
+
username: null,
|
|
121
|
+
password: null,
|
|
122
|
+
country: null,
|
|
123
|
+
},
|
|
124
|
+
commands,
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
const createDefaultConfigIfMissing = (configPath, program) => {
|
|
128
|
+
const directory = path.dirname(configPath);
|
|
129
|
+
let temporaryPath;
|
|
130
|
+
if (fs.existsSync(configPath))
|
|
131
|
+
return;
|
|
132
|
+
try {
|
|
133
|
+
fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
134
|
+
if (fs.existsSync(configPath))
|
|
135
|
+
return;
|
|
136
|
+
fs.chmodSync(directory, 0o700);
|
|
137
|
+
temporaryPath = path.join(directory, `.${path.basename(configPath)}.${process.pid}.${randomUUID()}.tmp`);
|
|
138
|
+
const descriptor = fs.openSync(temporaryPath, "wx", 0o600);
|
|
139
|
+
try {
|
|
140
|
+
fs.writeFileSync(descriptor, stringify(buildDefaultApplicationConfig(program)), "utf8");
|
|
141
|
+
fs.fsyncSync(descriptor);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
fs.closeSync(descriptor);
|
|
145
|
+
}
|
|
146
|
+
fs.linkSync(temporaryPath, configPath);
|
|
147
|
+
fs.chmodSync(configPath, 0o600);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (error.code !== "EEXIST") {
|
|
151
|
+
throw new ApplicationConfigError(`Unable to create default config at ${configPath}`, error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
if (temporaryPath) {
|
|
156
|
+
try {
|
|
157
|
+
fs.unlinkSync(temporaryPath);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
if (error.code !== "ENOENT") {
|
|
161
|
+
throw new ApplicationConfigError(`Unable to clean up temporary config at ${temporaryPath}`, error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const normalizeOxylabsConfig = (value) => {
|
|
168
|
+
var _a, _b, _c, _d, _e;
|
|
169
|
+
if (value === undefined || value === null) {
|
|
170
|
+
return { username: null, password: null, country: null };
|
|
171
|
+
}
|
|
172
|
+
if (!isRecord(value)) {
|
|
173
|
+
throw new ApplicationConfigError("oxylabs must be a mapping");
|
|
174
|
+
}
|
|
175
|
+
const allowed = new Set(["username", "password", "country", "city", "sessionId"]);
|
|
176
|
+
assertKnownKeys(value, allowed, "oxylabs");
|
|
177
|
+
const readNullableString = (key) => {
|
|
178
|
+
const entry = value[key];
|
|
179
|
+
if (entry === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
if (entry === null)
|
|
182
|
+
return null;
|
|
183
|
+
if (typeof entry !== "string") {
|
|
184
|
+
throw new ApplicationConfigError(`oxylabs.${key} must be a string or null`);
|
|
185
|
+
}
|
|
186
|
+
return entry;
|
|
187
|
+
};
|
|
188
|
+
return Object.assign(Object.assign({ username: (_a = readNullableString("username")) !== null && _a !== void 0 ? _a : null, password: (_b = readNullableString("password")) !== null && _b !== void 0 ? _b : null, country: (_c = readNullableString("country")) !== null && _c !== void 0 ? _c : null }, (value.city !== undefined ? { city: (_d = readNullableString("city")) !== null && _d !== void 0 ? _d : null } : {})), (value.sessionId !== undefined ? { sessionId: (_e = readNullableString("sessionId")) !== null && _e !== void 0 ? _e : null } : {}));
|
|
189
|
+
};
|
|
190
|
+
const readConfigSource = (descriptor, configPath) => {
|
|
191
|
+
const chunks = [];
|
|
192
|
+
let bytesRead = 0;
|
|
193
|
+
while (bytesRead <= MAX_APPLICATION_CONFIG_BYTES) {
|
|
194
|
+
const remaining = MAX_APPLICATION_CONFIG_BYTES + 1 - bytesRead;
|
|
195
|
+
const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, remaining));
|
|
196
|
+
const count = fs.readSync(descriptor, chunk, 0, chunk.length, null);
|
|
197
|
+
if (count === 0)
|
|
198
|
+
break;
|
|
199
|
+
chunks.push(chunk.subarray(0, count));
|
|
200
|
+
bytesRead += count;
|
|
201
|
+
}
|
|
202
|
+
if (bytesRead > MAX_APPLICATION_CONFIG_BYTES) {
|
|
203
|
+
throw new ApplicationConfigError(`Config at ${configPath} exceeds the ${MAX_APPLICATION_CONFIG_BYTES}-byte size limit`);
|
|
204
|
+
}
|
|
205
|
+
return Buffer.concat(chunks, bytesRead).toString("utf8");
|
|
206
|
+
};
|
|
207
|
+
const valueContainsUrlCredentials = (value) => {
|
|
208
|
+
const candidates = Array.isArray(value) ? value : [value];
|
|
209
|
+
return candidates.some((candidate) => {
|
|
210
|
+
if (typeof candidate !== "string" || candidate.trim() === "")
|
|
211
|
+
return false;
|
|
212
|
+
try {
|
|
213
|
+
const parsed = new URL(candidate);
|
|
214
|
+
return parsed.username !== "" || parsed.password !== "";
|
|
215
|
+
}
|
|
216
|
+
catch (_a) {
|
|
217
|
+
// Be conservative for malformed-but-obviously credential-bearing URLs;
|
|
218
|
+
// their validation may happen later in the selected command.
|
|
219
|
+
return /^[a-z][a-z\d+.-]*:\/\/[^/@\s]+@/i.test(candidate);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
const parseApplicationConfig = (configPath, program) => {
|
|
224
|
+
var _a, _b, _c, _d;
|
|
225
|
+
let descriptor;
|
|
226
|
+
const noFollowFlag = process.platform === "win32" ? 0 : ((_a = fs.constants.O_NOFOLLOW) !== null && _a !== void 0 ? _a : 0);
|
|
227
|
+
try {
|
|
228
|
+
descriptor = fs.openSync(configPath, fs.constants.O_RDONLY | noFollowFlag);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
if (error.code === "ELOOP") {
|
|
232
|
+
throw new ApplicationConfigError(`Config at ${configPath} must not be a symbolic link`, error);
|
|
233
|
+
}
|
|
234
|
+
throw new ApplicationConfigError(`Unable to open config at ${configPath}`, error);
|
|
235
|
+
}
|
|
236
|
+
let fileStats;
|
|
237
|
+
let source;
|
|
238
|
+
try {
|
|
239
|
+
fileStats = fs.fstatSync(descriptor);
|
|
240
|
+
if (!fileStats.isFile()) {
|
|
241
|
+
throw new ApplicationConfigError(`Config at ${configPath} must be a regular file`);
|
|
242
|
+
}
|
|
243
|
+
if (fileStats.size > MAX_APPLICATION_CONFIG_BYTES) {
|
|
244
|
+
throw new ApplicationConfigError(`Config at ${configPath} exceeds the ${MAX_APPLICATION_CONFIG_BYTES}-byte size limit`);
|
|
245
|
+
}
|
|
246
|
+
source = readConfigSource(descriptor, configPath);
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error instanceof ApplicationConfigError)
|
|
250
|
+
throw error;
|
|
251
|
+
throw new ApplicationConfigError(`Unable to inspect or read config at ${configPath}`, error);
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
fs.closeSync(descriptor);
|
|
255
|
+
}
|
|
256
|
+
const document = parseDocument(source, {
|
|
257
|
+
schema: "core",
|
|
258
|
+
uniqueKeys: true,
|
|
259
|
+
prettyErrors: true,
|
|
260
|
+
});
|
|
261
|
+
if (document.errors.length > 0) {
|
|
262
|
+
const yamlError = document.errors[0];
|
|
263
|
+
const position = (_b = yamlError.linePos) === null || _b === void 0 ? void 0 : _b[0];
|
|
264
|
+
const location = position ? ` at line ${position.line}, column ${position.col}` : "";
|
|
265
|
+
throw new ApplicationConfigError(`Invalid YAML in ${configPath}${location} (${yamlError.code})`);
|
|
266
|
+
}
|
|
267
|
+
let raw;
|
|
268
|
+
try {
|
|
269
|
+
raw = document.toJS({ maxAliasCount: 0 });
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
throw new ApplicationConfigError(`Invalid YAML structure in ${configPath}; aliases are not allowed`, error);
|
|
273
|
+
}
|
|
274
|
+
if (!isRecord(raw)) {
|
|
275
|
+
throw new ApplicationConfigError(`Config at ${configPath} must contain a YAML mapping`);
|
|
276
|
+
}
|
|
277
|
+
assertKnownKeys(raw, new Set(["version", "oxylabs", "commands"]), "top-level config");
|
|
278
|
+
if (raw.version !== APPLICATION_CONFIG_VERSION) {
|
|
279
|
+
throw new ApplicationConfigError(`Unsupported config version ${String(raw.version)}; expected ${APPLICATION_CONFIG_VERSION}`);
|
|
280
|
+
}
|
|
281
|
+
const declaredCommands = commandMap(program);
|
|
282
|
+
const rawCommands = (_c = raw.commands) !== null && _c !== void 0 ? _c : {};
|
|
283
|
+
if (!isRecord(rawCommands)) {
|
|
284
|
+
throw new ApplicationConfigError("commands must be a mapping");
|
|
285
|
+
}
|
|
286
|
+
assertKnownKeys(rawCommands, new Set(declaredCommands.keys()), "command");
|
|
287
|
+
const commands = {};
|
|
288
|
+
for (const [commandName, rawOptions] of Object.entries(rawCommands)) {
|
|
289
|
+
if (!isRecord(rawOptions)) {
|
|
290
|
+
throw new ApplicationConfigError(`commands.${commandName} must be a mapping`);
|
|
291
|
+
}
|
|
292
|
+
const command = declaredCommands.get(commandName);
|
|
293
|
+
const declaredOptions = optionMap(command);
|
|
294
|
+
assertKnownKeys(rawOptions, new Set(declaredOptions.keys()), `commands.${commandName}`);
|
|
295
|
+
commands[commandName] = Object.fromEntries(Object.entries(rawOptions).map(([optionName, value]) => {
|
|
296
|
+
const option = declaredOptions.get(optionName);
|
|
297
|
+
const parsed = parseOptionValue(option, value, `commands.${commandName}.${optionName}`);
|
|
298
|
+
return [optionName, parsed === undefined ? null : parsed];
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
const config = {
|
|
302
|
+
version: APPLICATION_CONFIG_VERSION,
|
|
303
|
+
oxylabs: normalizeOxylabsConfig(raw.oxylabs),
|
|
304
|
+
commands,
|
|
305
|
+
};
|
|
306
|
+
const containsSensitiveValue = Boolean((_d = config.oxylabs.password) === null || _d === void 0 ? void 0 : _d.trim()) ||
|
|
307
|
+
Object.values(config.commands).some((commandOptions) => Object.entries(commandOptions).some(([name, value]) => (/(?:password|secretKey|accessKey|apiKey)$/i.test(name) &&
|
|
308
|
+
value !== null &&
|
|
309
|
+
String(value).trim().length > 0) ||
|
|
310
|
+
valueContainsUrlCredentials(value)));
|
|
311
|
+
if (containsSensitiveValue && process.platform !== "win32") {
|
|
312
|
+
if ((fileStats.mode & 0o077) !== 0) {
|
|
313
|
+
throw new ApplicationConfigError(`Config at ${configPath} contains credentials and must not be readable by group or other users (use chmod 600)`);
|
|
314
|
+
}
|
|
315
|
+
if (typeof process.getuid === "function" && fileStats.uid !== process.getuid()) {
|
|
316
|
+
throw new ApplicationConfigError(`Config at ${configPath} contains credentials and must be owned by this user`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return config;
|
|
320
|
+
};
|
|
321
|
+
const findCommandTokenIndex = (program, argv) => {
|
|
322
|
+
const names = new Set(program.commands.map((command) => command.name()));
|
|
323
|
+
return argv.findIndex((token, index) => index >= 2 && names.has(token));
|
|
324
|
+
};
|
|
325
|
+
const findCliConfigPath = (program, argv) => {
|
|
326
|
+
var _a;
|
|
327
|
+
const commandIndex = findCommandTokenIndex(program, argv);
|
|
328
|
+
const command = commandIndex >= 0 ? program.commands.find((entry) => entry.name() === argv[commandIndex]) : undefined;
|
|
329
|
+
const localConfigCollision = (_a = command === null || command === void 0 ? void 0 : command.options.some((option) => option.long === "--config")) !== null && _a !== void 0 ? _a : false;
|
|
330
|
+
for (let index = 2; index < argv.length; index += 1) {
|
|
331
|
+
const token = argv[index];
|
|
332
|
+
if (token === "--config") {
|
|
333
|
+
if (index + 1 >= argv.length) {
|
|
334
|
+
throw new ApplicationConfigError("--config requires a file path");
|
|
335
|
+
}
|
|
336
|
+
if (commandIndex < 0 || index < commandIndex)
|
|
337
|
+
return argv[index + 1];
|
|
338
|
+
if (!localConfigCollision) {
|
|
339
|
+
throw new ApplicationConfigError("Application --config must appear before the subcommand");
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (token.startsWith("--config=")) {
|
|
343
|
+
if (commandIndex < 0 || index < commandIndex)
|
|
344
|
+
return token.slice("--config=".length);
|
|
345
|
+
if (!localConfigCollision) {
|
|
346
|
+
throw new ApplicationConfigError("Application --config must appear before the subcommand");
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return undefined;
|
|
351
|
+
};
|
|
352
|
+
const expandConfigPath = (value, homeDirectory) => {
|
|
353
|
+
if (value === "~")
|
|
354
|
+
return homeDirectory;
|
|
355
|
+
if (value.startsWith("~/"))
|
|
356
|
+
return path.join(homeDirectory, value.slice(2));
|
|
357
|
+
return path.resolve(value);
|
|
358
|
+
};
|
|
359
|
+
const findOptionForToken = (command, token) => {
|
|
360
|
+
const optionToken = token.startsWith("--") && token.includes("=") ? token.slice(0, token.indexOf("=")) : token;
|
|
361
|
+
return command.options.find((option) => option.long === optionToken || option.short === optionToken);
|
|
362
|
+
};
|
|
363
|
+
const isInformationalInvocation = (program, argv) => {
|
|
364
|
+
if (argv.length <= 2)
|
|
365
|
+
return true;
|
|
366
|
+
let activeCommand = program;
|
|
367
|
+
for (let index = 2; index < argv.length; index += 1) {
|
|
368
|
+
const token = argv[index];
|
|
369
|
+
if (["--help", "-h", "--version", "-V"].includes(token))
|
|
370
|
+
return true;
|
|
371
|
+
if (activeCommand === program && ["help", "completion"].includes(token))
|
|
372
|
+
return true;
|
|
373
|
+
if (activeCommand === program) {
|
|
374
|
+
const subcommand = program.commands.find((command) => command.name() === token);
|
|
375
|
+
if (subcommand) {
|
|
376
|
+
activeCommand = subcommand;
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const option = findOptionForToken(activeCommand, token);
|
|
381
|
+
if (!option || token.includes("="))
|
|
382
|
+
continue;
|
|
383
|
+
if (option.required && index + 1 < argv.length) {
|
|
384
|
+
index += 1;
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
if (option.optional && index + 1 < argv.length && !argv[index + 1].startsWith("-")) {
|
|
388
|
+
index += 1;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return false;
|
|
392
|
+
};
|
|
393
|
+
const applyCommandValues = (program, values, source, includeArrays = true) => {
|
|
394
|
+
for (const command of program.commands) {
|
|
395
|
+
const commandValues = values[command.name()];
|
|
396
|
+
if (!commandValues)
|
|
397
|
+
continue;
|
|
398
|
+
for (const [optionName, value] of Object.entries(commandValues)) {
|
|
399
|
+
if (!includeArrays && Array.isArray(value))
|
|
400
|
+
continue;
|
|
401
|
+
if (value !== null)
|
|
402
|
+
command.setOptionValueWithSource(optionName, value, source);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
const applyDeferredConfigArrays = (program, values) => {
|
|
407
|
+
for (const command of program.commands) {
|
|
408
|
+
const commandValues = values[command.name()];
|
|
409
|
+
if (!commandValues)
|
|
410
|
+
continue;
|
|
411
|
+
for (const [optionName, value] of Object.entries(commandValues)) {
|
|
412
|
+
if (!Array.isArray(value))
|
|
413
|
+
continue;
|
|
414
|
+
const currentSource = command.getOptionValueSource(optionName);
|
|
415
|
+
if (currentSource !== "cli" && currentSource !== "env") {
|
|
416
|
+
command.setOptionValueWithSource(optionName, [...value], "config");
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
const collectEnvironmentValues = (program, env) => {
|
|
422
|
+
var _a;
|
|
423
|
+
const values = {};
|
|
424
|
+
for (const command of program.commands) {
|
|
425
|
+
const commandValues = {};
|
|
426
|
+
for (const option of command.options) {
|
|
427
|
+
const optionName = option.attributeName();
|
|
428
|
+
const variable = getOptionEnvironmentVariable(command.name(), optionName);
|
|
429
|
+
const aliases = (_a = legacyEnvironmentAliases[`${command.name()}.${optionName}`]) !== null && _a !== void 0 ? _a : [];
|
|
430
|
+
const selectedVariable = [variable, ...aliases].find((candidate) => env[candidate] !== undefined);
|
|
431
|
+
const raw = selectedVariable === undefined ? undefined : env[selectedVariable];
|
|
432
|
+
if (raw === undefined)
|
|
433
|
+
continue;
|
|
434
|
+
commandValues[optionName] = parseOptionValue(option, raw, selectedVariable);
|
|
435
|
+
}
|
|
436
|
+
if (Object.keys(commandValues).length > 0)
|
|
437
|
+
values[command.name()] = commandValues;
|
|
438
|
+
}
|
|
439
|
+
return values;
|
|
440
|
+
};
|
|
441
|
+
export const getLoadedApplicationConfig = () => loadedApplicationConfig;
|
|
442
|
+
export const prepareProgramConfiguration = (program, options = {}) => {
|
|
443
|
+
var _a, _b, _c;
|
|
444
|
+
// Root --config must appear before the subcommand so command-local flags such as
|
|
445
|
+
// `proxy --config` and `mcp --config` retain their established meaning.
|
|
446
|
+
program.enablePositionalOptions();
|
|
447
|
+
const argv = (_a = options.argv) !== null && _a !== void 0 ? _a : process.argv;
|
|
448
|
+
const env = (_b = options.env) !== null && _b !== void 0 ? _b : process.env;
|
|
449
|
+
const defaultConfigPath = (_c = options.defaultConfigPath) !== null && _c !== void 0 ? _c : getDefaultApplicationConfigPath();
|
|
450
|
+
if (isInformationalInvocation(program, argv)) {
|
|
451
|
+
loadedApplicationConfig = {
|
|
452
|
+
path: defaultConfigPath,
|
|
453
|
+
source: "default",
|
|
454
|
+
explicitlySupplied: false,
|
|
455
|
+
data: buildDefaultApplicationConfig(program),
|
|
456
|
+
};
|
|
457
|
+
return loadedApplicationConfig;
|
|
458
|
+
}
|
|
459
|
+
const envPath = env[APPLICATION_CONFIG_ENV];
|
|
460
|
+
const cliPath = findCliConfigPath(program, argv);
|
|
461
|
+
const selection = envPath !== undefined
|
|
462
|
+
? { path: envPath, source: "env", explicitlySupplied: true }
|
|
463
|
+
: cliPath !== undefined
|
|
464
|
+
? { path: cliPath, source: "cli", explicitlySupplied: true }
|
|
465
|
+
: { path: defaultConfigPath, source: "default", explicitlySupplied: false };
|
|
466
|
+
if (selection.path.trim() === "") {
|
|
467
|
+
throw new ApplicationConfigError(`${selection.source === "env" ? APPLICATION_CONFIG_ENV : "--config"} cannot be empty`);
|
|
468
|
+
}
|
|
469
|
+
const homeDirectory = os.homedir();
|
|
470
|
+
const selectedPath = expandConfigPath(selection.path, homeDirectory);
|
|
471
|
+
if (!selection.explicitlySupplied)
|
|
472
|
+
createDefaultConfigIfMissing(selectedPath, program);
|
|
473
|
+
const data = parseApplicationConfig(selectedPath, program);
|
|
474
|
+
const environmentValues = collectEnvironmentValues(program, env);
|
|
475
|
+
applyCommandValues(program, data.commands, "config", false);
|
|
476
|
+
applyCommandValues(program, environmentValues, "env");
|
|
477
|
+
program.hook("preAction", () => {
|
|
478
|
+
applyDeferredConfigArrays(program, data.commands);
|
|
479
|
+
applyCommandValues(program, environmentValues, "env");
|
|
480
|
+
if (envPath !== undefined)
|
|
481
|
+
program.setOptionValueWithSource("config", selectedPath, "env");
|
|
482
|
+
});
|
|
483
|
+
if (envPath !== undefined)
|
|
484
|
+
program.setOptionValueWithSource("config", selectedPath, "env");
|
|
485
|
+
loadedApplicationConfig = {
|
|
486
|
+
path: selectedPath,
|
|
487
|
+
source: selection.source,
|
|
488
|
+
explicitlySupplied: selection.explicitlySupplied,
|
|
489
|
+
data,
|
|
490
|
+
};
|
|
491
|
+
return loadedApplicationConfig;
|
|
492
|
+
};
|
|
493
|
+
//# sourceMappingURL=applicationConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applicationConfig.js","sourceRoot":"","sources":["../../src/config/applicationConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,9 @@ import fs from "fs";
|
|
|
12
12
|
import path from "path";
|
|
13
13
|
import * as cliProgress from "cli-progress";
|
|
14
14
|
import frameworkDetect from "../lazyLoad/techDetect/index.js";
|
|
15
|
-
import { computeBarSize, watchBarResize,
|
|
15
|
+
import { activateBarLogger, computeBarSize, progressLog, watchBarResize, withProgressResources, } from "../utility/progressLog.js";
|
|
16
16
|
import * as globalsUtil from "../utility/globals.js";
|
|
17
|
+
import { resolveTargetInputs } from "../utility/targetInputs.js";
|
|
17
18
|
const FRAMEWORK_LABELS = {
|
|
18
19
|
next: "next.js",
|
|
19
20
|
vue: "vue.js",
|
|
@@ -22,16 +23,6 @@ const FRAMEWORK_LABELS = {
|
|
|
22
23
|
angular: "angular",
|
|
23
24
|
react: "react",
|
|
24
25
|
};
|
|
25
|
-
const parseUrls = (urlArg) => {
|
|
26
|
-
if (fs.existsSync(urlArg)) {
|
|
27
|
-
return fs
|
|
28
|
-
.readFileSync(urlArg, "utf-8")
|
|
29
|
-
.split("\n")
|
|
30
|
-
.map((u) => u.trim())
|
|
31
|
-
.filter((u) => u.length > 0);
|
|
32
|
-
}
|
|
33
|
-
return [urlArg];
|
|
34
|
-
};
|
|
35
26
|
export const deriveOutputPath = (outputFile, format) => {
|
|
36
27
|
const ext = path.extname(outputFile);
|
|
37
28
|
const base = ext ? outputFile.slice(0, -ext.length) : outputFile;
|
|
@@ -75,7 +66,7 @@ const logOutputFiles = (outputFile, formats) => {
|
|
|
75
66
|
}
|
|
76
67
|
};
|
|
77
68
|
const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaiter(void 0, [urlArg_1, outputFile_1, formatArg_1, ...args_1], void 0, function* (urlArg, outputFile, formatArg, threads = 5) {
|
|
78
|
-
const urls =
|
|
69
|
+
const urls = resolveTargetInputs(urlArg).targets;
|
|
79
70
|
const concurrency = Math.max(1, threads);
|
|
80
71
|
const rawFormats = formatArg
|
|
81
72
|
.split(",")
|
|
@@ -99,8 +90,7 @@ const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaite
|
|
|
99
90
|
}, cliProgress.Presets.shades_classic);
|
|
100
91
|
const bar = multiBar.create(urls.length, 0, { url: "" });
|
|
101
92
|
const stopWatcher = watchBarResize(bar, overhead);
|
|
102
|
-
|
|
103
|
-
globalsUtil.setQuiet(true);
|
|
93
|
+
const releaseBarLogger = activateBarLogger(multiBar, process.stdout.isTTY === true);
|
|
104
94
|
let nextIdx = 0;
|
|
105
95
|
const worker = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
96
|
var _a;
|
|
@@ -131,11 +121,10 @@ const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaite
|
|
|
131
121
|
bar.increment(1);
|
|
132
122
|
}
|
|
133
123
|
});
|
|
134
|
-
yield
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
stopWatcher();
|
|
124
|
+
yield withProgressResources(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
125
|
+
globalsUtil.setQuiet(true);
|
|
126
|
+
yield Promise.all(Array.from({ length: Math.min(concurrency, urls.length) }, worker));
|
|
127
|
+
}), () => globalsUtil.setQuiet(false), () => multiBar.stop(), stopWatcher, releaseBarLogger);
|
|
139
128
|
const detected = results.filter((r) => r.framework !== null).length;
|
|
140
129
|
console.log(chalk.cyan(`\n[i] ${detected}/${results.length} URLs fingerprinted`));
|
|
141
130
|
if (outputFile) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fingerprint/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,eAAe,MAAM,iCAAiC,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fingerprint/index.ts"],"names":[],"mappings":"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"}
|
package/build/globalConfig.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const githubURL = "https://github.com/js-recon/js-recon";
|
|
2
2
|
const modulesDocs = "https://js-recon.io/docs/category/modules";
|
|
3
|
-
const version = "1.4.
|
|
3
|
+
const version = "1.4.4";
|
|
4
4
|
const toolDesc = "JavaScript Enumeration and SAST";
|
|
5
5
|
const axiosNonHttpMethods = ["isAxiosError"]; // methods available in axios, which are not for making HTTP requests
|
|
6
6
|
let CONFIG = {
|