@shriyanss/js-recon 1.2.2-alpha.3 → 1.2.2-alpha.5
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/CHANGELOG.md +34 -1
- package/build/globalConfig.js +2 -1
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +7 -4
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/index.js +114 -2
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +32 -0
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js +76 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
- package/build/lazyLoad/sourcemap.js +188 -0
- package/build/lazyLoad/sourcemap.js.map +1 -0
- package/build/lazyLoad/techDetect/index.js +49 -3
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +101 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +96 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_jsImports.js +65 -0
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +56 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +1 -1
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +1 -1
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +21 -4
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +8 -8
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +302 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +48 -8
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +12 -2
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +10 -3
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +113 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +506 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +243 -4
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/utils.js +867 -11
- package/build/map/next_js/utils.js.map +1 -1
- package/build/run/index.js +7 -5
- package/build/run/index.js.map +1 -1
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +159 -91
- package/build/utility/makeReq.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import _traverse from "@babel/traverse";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import parser from "@babel/parser";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import * as globals from "../../../utility/globals.js";
|
|
6
|
+
import { getThirdArg } from "../resolveAxios.js";
|
|
7
|
+
import { resolveNodeValue } from "../utils.js";
|
|
8
|
+
const traverse = _traverse.default;
|
|
9
|
+
/**
|
|
10
|
+
* Recursively trace axios instance exports across chunks
|
|
11
|
+
*
|
|
12
|
+
* @param {string} sourceChunkId - The chunk ID where the axios instance was created
|
|
13
|
+
* @param {string} axiosVarName - The variable name holding the axios instance
|
|
14
|
+
* @param {Chunks} chunks - Dictionary of all chunks
|
|
15
|
+
* @param {string} directory - Directory containing chunk files
|
|
16
|
+
* @param {Set<string>} visited - Set of visited chunks to prevent infinite recursion
|
|
17
|
+
*/
|
|
18
|
+
export const traceAxiosInstanceExports = (sourceChunkId, axiosVarName, chunks, directory, visited = new Set()) => {
|
|
19
|
+
// Prevent infinite recursion
|
|
20
|
+
if (visited.has(sourceChunkId)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
visited.add(sourceChunkId);
|
|
24
|
+
const sourceChunk = chunks[sourceChunkId];
|
|
25
|
+
if (!sourceChunk) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Step 1: Find if the axios instance is exported from this chunk
|
|
29
|
+
const exportName = findAxiosInstanceExport(sourceChunkId, axiosVarName, chunks);
|
|
30
|
+
if (!exportName) {
|
|
31
|
+
console.log(chalk.yellow(` [!] Axios instance '${axiosVarName}' in chunk ${sourceChunkId} is not exported`));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk.blue(` [→] Axios instance '${axiosVarName}' exported as '${exportName}' from chunk ${sourceChunkId}`));
|
|
35
|
+
// Step 2: Find all chunks that import this chunk
|
|
36
|
+
const importingChunks = findImportingChunks(sourceChunkId, chunks);
|
|
37
|
+
if (importingChunks.length === 0) {
|
|
38
|
+
console.log(chalk.yellow(` [!] No chunks import the axios instance '${exportName}' from chunk ${sourceChunkId}`));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
console.log(chalk.blue(` [→] Found ${importingChunks.length} chunk(s) importing axios instance '${exportName}'`));
|
|
42
|
+
// Step 3: Process each importing chunk
|
|
43
|
+
for (const importingChunkId of importingChunks) {
|
|
44
|
+
processImportingChunk(importingChunkId, sourceChunkId, exportName, chunks, directory, visited);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Find if an axios instance variable is exported from a chunk
|
|
49
|
+
*/
|
|
50
|
+
const findAxiosInstanceExport = (chunkId, axiosVarName, chunks) => {
|
|
51
|
+
const chunk = chunks[chunkId];
|
|
52
|
+
if (!chunk || !chunk.exports || chunk.exports.length === 0) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const chunkCode = chunk.code;
|
|
56
|
+
const ast = parser.parse(chunkCode, {
|
|
57
|
+
sourceType: "unambiguous",
|
|
58
|
+
plugins: ["jsx", "typescript"],
|
|
59
|
+
errorRecovery: true,
|
|
60
|
+
});
|
|
61
|
+
let foundExportName = null;
|
|
62
|
+
// Look for export pattern: n.d(t, { ExportName: function() { return axiosVarName } })
|
|
63
|
+
traverse(ast, {
|
|
64
|
+
CallExpression(path) {
|
|
65
|
+
const callee = path.node.callee;
|
|
66
|
+
if (callee.type === "MemberExpression" &&
|
|
67
|
+
callee.property.type === "Identifier" &&
|
|
68
|
+
callee.property.name === "d" &&
|
|
69
|
+
path.node.arguments.length >= 2 &&
|
|
70
|
+
path.node.arguments[1].type === "ObjectExpression") {
|
|
71
|
+
const exportsObj = path.node.arguments[1];
|
|
72
|
+
for (const prop of exportsObj.properties) {
|
|
73
|
+
if (prop.type === "ObjectProperty" &&
|
|
74
|
+
(prop.value.type === "FunctionExpression" || prop.value.type === "ArrowFunctionExpression")) {
|
|
75
|
+
let exportName = "";
|
|
76
|
+
if (prop.key.type === "Identifier") {
|
|
77
|
+
exportName = prop.key.name;
|
|
78
|
+
}
|
|
79
|
+
else if (prop.key.type === "StringLiteral") {
|
|
80
|
+
exportName = prop.key.value;
|
|
81
|
+
}
|
|
82
|
+
// Check if this export returns our axios variable
|
|
83
|
+
if (prop.value.body && prop.value.body.type === "BlockStatement") {
|
|
84
|
+
for (const stmt of prop.value.body.body) {
|
|
85
|
+
if (stmt.type === "ReturnStatement" &&
|
|
86
|
+
stmt.argument &&
|
|
87
|
+
stmt.argument.type === "Identifier" &&
|
|
88
|
+
stmt.argument.name === axiosVarName) {
|
|
89
|
+
foundExportName = exportName;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (prop.value.body &&
|
|
95
|
+
prop.value.body.type === "Identifier" &&
|
|
96
|
+
prop.value.body.name === axiosVarName) {
|
|
97
|
+
foundExportName = exportName;
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
return foundExportName;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Find all chunks that import a specific chunk
|
|
109
|
+
*/
|
|
110
|
+
const findImportingChunks = (sourceChunkId, chunks) => {
|
|
111
|
+
const importingChunks = [];
|
|
112
|
+
for (const [chunkId, chunk] of Object.entries(chunks)) {
|
|
113
|
+
if (chunk.imports && chunk.imports.includes(sourceChunkId)) {
|
|
114
|
+
importingChunks.push(chunkId);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return importingChunks;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Process a chunk that imports an axios instance
|
|
121
|
+
*/
|
|
122
|
+
const processImportingChunk = (importingChunkId, sourceChunkId, exportName, chunks, directory, visited) => {
|
|
123
|
+
const importingChunk = chunks[importingChunkId];
|
|
124
|
+
if (!importingChunk) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const chunkCode = importingChunk.code;
|
|
128
|
+
const ast = parser.parse(chunkCode, {
|
|
129
|
+
sourceType: "unambiguous",
|
|
130
|
+
plugins: ["jsx", "typescript"],
|
|
131
|
+
errorRecovery: true,
|
|
132
|
+
});
|
|
133
|
+
// Get the third argument (import function)
|
|
134
|
+
const thirdArg = getThirdArg(ast);
|
|
135
|
+
if (!thirdArg) {
|
|
136
|
+
console.log(chalk.yellow(` [!] Could not find third argument in chunk ${importingChunkId}`));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Find the variable that imports the axios instance
|
|
140
|
+
const importVarName = findImportVariable(ast, thirdArg, sourceChunkId);
|
|
141
|
+
if (!importVarName) {
|
|
142
|
+
console.log(chalk.yellow(` [!] Could not find import variable for chunk ${sourceChunkId} in chunk ${importingChunkId}`));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
console.log(chalk.blue(` [→] In chunk ${importingChunkId}, axios instance imported as '${importVarName}.${exportName}'`));
|
|
146
|
+
// Check if this chunk uses or re-exports the axios instance
|
|
147
|
+
const isReexported = checkIfReexported(ast, importVarName, exportName, chunks, importingChunkId);
|
|
148
|
+
if (isReexported.reexported) {
|
|
149
|
+
console.log(chalk.magenta(` [↻] Axios instance re-exported from chunk ${importingChunkId}, tracing further...`));
|
|
150
|
+
// Recursively trace the re-export
|
|
151
|
+
traceAxiosInstanceExports(importingChunkId, isReexported.localVarName, chunks, directory, visited);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// This chunk uses the axios instance, extract API calls
|
|
155
|
+
console.log(chalk.greenBright(` [✓] Chunk ${importingChunkId} uses the axios instance, extracting API calls...`));
|
|
156
|
+
extractApiCalls(ast, chunkCode, importVarName, exportName, importingChunkId, chunks, directory, thirdArg);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Find the variable that imports the source chunk
|
|
161
|
+
*/
|
|
162
|
+
const findImportVariable = (ast, thirdArg, sourceChunkId) => {
|
|
163
|
+
let importVar = null;
|
|
164
|
+
traverse(ast, {
|
|
165
|
+
VariableDeclarator(path) {
|
|
166
|
+
if (path.node.init &&
|
|
167
|
+
path.node.init.type === "CallExpression" &&
|
|
168
|
+
path.node.init.callee.type === "Identifier" &&
|
|
169
|
+
path.node.init.callee.name === thirdArg &&
|
|
170
|
+
path.node.init.arguments.length > 0 &&
|
|
171
|
+
path.node.id.type === "Identifier") {
|
|
172
|
+
const arg = path.node.init.arguments[0];
|
|
173
|
+
if ((arg.type === "NumericLiteral" && arg.value.toString() === sourceChunkId) ||
|
|
174
|
+
(arg.type === "StringLiteral" && arg.value === sourceChunkId)) {
|
|
175
|
+
importVar = path.node.id.name;
|
|
176
|
+
path.stop();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
return importVar;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Check if the imported axios instance is re-exported
|
|
185
|
+
*/
|
|
186
|
+
const checkIfReexported = (ast, importVarName, exportName, chunks, chunkId) => {
|
|
187
|
+
const chunk = chunks[chunkId];
|
|
188
|
+
if (!chunk || !chunk.exports || chunk.exports.length === 0) {
|
|
189
|
+
return { reexported: false };
|
|
190
|
+
}
|
|
191
|
+
// First, check if there's a local assignment: localVar = importVar.exportName(...)
|
|
192
|
+
let localVarName = null;
|
|
193
|
+
let foundPattern = false;
|
|
194
|
+
traverse(ast, {
|
|
195
|
+
AssignmentExpression(path) {
|
|
196
|
+
// Check for: p = ((t) => { ... i.C(...) ... })
|
|
197
|
+
if (path.node.left.type === "Identifier" &&
|
|
198
|
+
(path.node.right.type === "ArrowFunctionExpression" ||
|
|
199
|
+
path.node.right.type === "FunctionExpression" ||
|
|
200
|
+
path.node.right.type === "CallExpression")) {
|
|
201
|
+
// Check if the function body contains a call to importVar.exportName
|
|
202
|
+
const containsAxiosCall = checkNodeForAxiosCall(path.node.right, importVarName, exportName);
|
|
203
|
+
if (containsAxiosCall) {
|
|
204
|
+
localVarName = path.node.left.name;
|
|
205
|
+
foundPattern = true;
|
|
206
|
+
path.stop();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
VariableDeclarator(path) {
|
|
211
|
+
// Check for: const p = ((t) => { ... i.C(...) ... })
|
|
212
|
+
if (path.node.id.type === "Identifier" &&
|
|
213
|
+
path.node.init &&
|
|
214
|
+
(path.node.init.type === "ArrowFunctionExpression" ||
|
|
215
|
+
path.node.init.type === "FunctionExpression" ||
|
|
216
|
+
path.node.init.type === "CallExpression")) {
|
|
217
|
+
const containsAxiosCall = checkNodeForAxiosCall(path.node.init, importVarName, exportName);
|
|
218
|
+
if (containsAxiosCall) {
|
|
219
|
+
localVarName = path.node.id.name;
|
|
220
|
+
foundPattern = true;
|
|
221
|
+
path.stop();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
if (foundPattern && localVarName) {
|
|
227
|
+
// Check if this local variable is exported
|
|
228
|
+
const isExported = chunk.exports.some((exp) => {
|
|
229
|
+
// We need to check if the export returns localVarName
|
|
230
|
+
return checkIfVariableIsExported(ast, exp, localVarName);
|
|
231
|
+
});
|
|
232
|
+
if (isExported) {
|
|
233
|
+
return { reexported: true, localVarName };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return { reexported: false };
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Check if a node contains a call to the axios instance (recursive AST inspection)
|
|
240
|
+
*/
|
|
241
|
+
const checkNodeForAxiosCall = (node, importVarName, exportName) => {
|
|
242
|
+
if (!node)
|
|
243
|
+
return false;
|
|
244
|
+
// Check if this node is a call expression to our axios instance
|
|
245
|
+
if (node.type === "CallExpression") {
|
|
246
|
+
const callee = node.callee;
|
|
247
|
+
// Check for: importVar.exportName(...)
|
|
248
|
+
if (callee.type === "MemberExpression" &&
|
|
249
|
+
callee.object.type === "Identifier" &&
|
|
250
|
+
callee.object.name === importVarName &&
|
|
251
|
+
callee.property.type === "Identifier" &&
|
|
252
|
+
callee.property.name === exportName) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
// Check for: (0, importVar.exportName)(...)
|
|
256
|
+
if (callee.type === "SequenceExpression" &&
|
|
257
|
+
callee.expressions.length === 2 &&
|
|
258
|
+
callee.expressions[0].type === "NumericLiteral" &&
|
|
259
|
+
callee.expressions[0].value === 0 &&
|
|
260
|
+
callee.expressions[1].type === "MemberExpression" &&
|
|
261
|
+
callee.expressions[1].object.type === "Identifier" &&
|
|
262
|
+
callee.expressions[1].object.name === importVarName &&
|
|
263
|
+
callee.expressions[1].property.type === "Identifier" &&
|
|
264
|
+
callee.expressions[1].property.name === exportName) {
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Recursively check common node structures
|
|
269
|
+
if (node.body) {
|
|
270
|
+
if (Array.isArray(node.body)) {
|
|
271
|
+
for (const stmt of node.body) {
|
|
272
|
+
if (checkNodeForAxiosCall(stmt, importVarName, exportName)) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
return checkNodeForAxiosCall(node.body, importVarName, exportName);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Check block statement body
|
|
282
|
+
if (node.type === "BlockStatement" && node.body) {
|
|
283
|
+
for (const stmt of node.body) {
|
|
284
|
+
if (checkNodeForAxiosCall(stmt, importVarName, exportName)) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Check expressions
|
|
290
|
+
if (node.expression) {
|
|
291
|
+
return checkNodeForAxiosCall(node.expression, importVarName, exportName);
|
|
292
|
+
}
|
|
293
|
+
// Check argument/callee for nested calls
|
|
294
|
+
if (node.callee) {
|
|
295
|
+
if (checkNodeForAxiosCall(node.callee, importVarName, exportName)) {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Check arguments
|
|
300
|
+
if (node.arguments && Array.isArray(node.arguments)) {
|
|
301
|
+
for (const arg of node.arguments) {
|
|
302
|
+
if (checkNodeForAxiosCall(arg, importVarName, exportName)) {
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Check init value for variable declarators
|
|
308
|
+
if (node.init) {
|
|
309
|
+
return checkNodeForAxiosCall(node.init, importVarName, exportName);
|
|
310
|
+
}
|
|
311
|
+
// Check right side of assignment
|
|
312
|
+
if (node.right) {
|
|
313
|
+
return checkNodeForAxiosCall(node.right, importVarName, exportName);
|
|
314
|
+
}
|
|
315
|
+
return false;
|
|
316
|
+
};
|
|
317
|
+
/**
|
|
318
|
+
* Check if a variable is exported with a given export name
|
|
319
|
+
*/
|
|
320
|
+
const checkIfVariableIsExported = (ast, exportName, varName) => {
|
|
321
|
+
let isExported = false;
|
|
322
|
+
traverse(ast, {
|
|
323
|
+
CallExpression(path) {
|
|
324
|
+
const callee = path.node.callee;
|
|
325
|
+
if (callee.type === "MemberExpression" &&
|
|
326
|
+
callee.property.type === "Identifier" &&
|
|
327
|
+
callee.property.name === "d" &&
|
|
328
|
+
path.node.arguments.length >= 2 &&
|
|
329
|
+
path.node.arguments[1].type === "ObjectExpression") {
|
|
330
|
+
const exportsObj = path.node.arguments[1];
|
|
331
|
+
for (const prop of exportsObj.properties) {
|
|
332
|
+
if (prop.type === "ObjectProperty") {
|
|
333
|
+
let currentExportName = "";
|
|
334
|
+
if (prop.key.type === "Identifier") {
|
|
335
|
+
currentExportName = prop.key.name;
|
|
336
|
+
}
|
|
337
|
+
else if (prop.key.type === "StringLiteral") {
|
|
338
|
+
currentExportName = prop.key.value;
|
|
339
|
+
}
|
|
340
|
+
if (currentExportName === exportName) {
|
|
341
|
+
// Check if it returns varName
|
|
342
|
+
if (prop.value.type === "FunctionExpression" ||
|
|
343
|
+
prop.value.type === "ArrowFunctionExpression") {
|
|
344
|
+
if (prop.value.body && prop.value.body.type === "BlockStatement") {
|
|
345
|
+
for (const stmt of prop.value.body.body) {
|
|
346
|
+
if (stmt.type === "ReturnStatement" &&
|
|
347
|
+
stmt.argument &&
|
|
348
|
+
stmt.argument.type === "Identifier" &&
|
|
349
|
+
stmt.argument.name === varName) {
|
|
350
|
+
isExported = true;
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else if (prop.value.body &&
|
|
356
|
+
prop.value.body.type === "Identifier" &&
|
|
357
|
+
prop.value.body.name === varName) {
|
|
358
|
+
isExported = true;
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
return isExported;
|
|
369
|
+
};
|
|
370
|
+
/**
|
|
371
|
+
* Extract API calls made using the axios instance
|
|
372
|
+
*/
|
|
373
|
+
const extractApiCalls = (ast, chunkCode, importVarName, exportName, chunkId, chunks, directory, thirdArgName) => {
|
|
374
|
+
const chunk = chunks[chunkId];
|
|
375
|
+
const functionFile = `${directory}/${chunk.file}`;
|
|
376
|
+
traverse(ast, {
|
|
377
|
+
CallExpression(path) {
|
|
378
|
+
const callee = path.node.callee;
|
|
379
|
+
let isTargetCall = false;
|
|
380
|
+
// Check for: (0, importVar.exportName)({...})
|
|
381
|
+
if (callee.type === "SequenceExpression" &&
|
|
382
|
+
callee.expressions.length === 2 &&
|
|
383
|
+
callee.expressions[0].type === "NumericLiteral" &&
|
|
384
|
+
callee.expressions[0].value === 0 &&
|
|
385
|
+
callee.expressions[1].type === "MemberExpression" &&
|
|
386
|
+
callee.expressions[1].object.type === "Identifier" &&
|
|
387
|
+
callee.expressions[1].object.name === importVarName &&
|
|
388
|
+
callee.expressions[1].property.type === "Identifier" &&
|
|
389
|
+
callee.expressions[1].property.name === exportName) {
|
|
390
|
+
isTargetCall = true;
|
|
391
|
+
}
|
|
392
|
+
// Check for: importVar.exportName({...})
|
|
393
|
+
if (callee.type === "MemberExpression" &&
|
|
394
|
+
callee.object.type === "Identifier" &&
|
|
395
|
+
callee.object.name === importVarName &&
|
|
396
|
+
callee.property.type === "Identifier" &&
|
|
397
|
+
callee.property.name === exportName) {
|
|
398
|
+
isTargetCall = true;
|
|
399
|
+
}
|
|
400
|
+
if (isTargetCall && path.node.arguments.length > 0) {
|
|
401
|
+
const configArg = path.node.arguments[0];
|
|
402
|
+
if (configArg.type === "ObjectExpression") {
|
|
403
|
+
let url = "";
|
|
404
|
+
let method = "";
|
|
405
|
+
let data = "";
|
|
406
|
+
let params = "";
|
|
407
|
+
let headers = "";
|
|
408
|
+
for (const prop of configArg.properties) {
|
|
409
|
+
if (prop.type === "ObjectProperty" && prop.key.type === "Identifier") {
|
|
410
|
+
const propName = prop.key.name;
|
|
411
|
+
// Use resolveNodeValue for better resolution with webpack chunk context
|
|
412
|
+
const resolvedValue = resolveNodeValue(prop.value, path.scope, chunkCode.substring(prop.value.start, prop.value.end), "axios", chunkCode, chunks, thirdArgName);
|
|
413
|
+
if (propName === "url") {
|
|
414
|
+
// Handle both string and resolved values
|
|
415
|
+
if (typeof resolvedValue === "string") {
|
|
416
|
+
url = resolvedValue;
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
url = JSON.stringify(resolvedValue);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else if (propName === "method") {
|
|
423
|
+
if (typeof resolvedValue === "string") {
|
|
424
|
+
method = resolvedValue.replace(/"/g, "").toUpperCase();
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
method = String(resolvedValue).replace(/"/g, "").toUpperCase();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
else if (propName === "data") {
|
|
431
|
+
if (typeof resolvedValue === "object" && resolvedValue !== null) {
|
|
432
|
+
data = JSON.stringify(resolvedValue);
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
data = String(resolvedValue);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else if (propName === "params") {
|
|
439
|
+
if (typeof resolvedValue === "object" && resolvedValue !== null) {
|
|
440
|
+
params = JSON.stringify(resolvedValue);
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
params = String(resolvedValue);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else if (propName === "headers") {
|
|
447
|
+
if (typeof resolvedValue === "object" && resolvedValue !== null) {
|
|
448
|
+
headers = JSON.stringify(resolvedValue);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
headers = String(resolvedValue);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// Find line number
|
|
457
|
+
const codeFileContent = fs.readFileSync(functionFile, "utf-8");
|
|
458
|
+
const callSnippet = chunkCode.substring(path.node.start, path.node.end);
|
|
459
|
+
let functionFileLine = -1;
|
|
460
|
+
const lines = codeFileContent.split("\n");
|
|
461
|
+
for (let i = 0; i < lines.length; i++) {
|
|
462
|
+
if (lines[i].includes(callSnippet.trim().substring(0, Math.min(callSnippet.length, 30)))) {
|
|
463
|
+
functionFileLine = i + 1;
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// Log the found API call
|
|
468
|
+
console.log(chalk.yellow(` [+] Found API call in chunk ${chunkId} ("${functionFile}":${functionFileLine})`));
|
|
469
|
+
if (url)
|
|
470
|
+
console.log(chalk.cyan(` URL: ${url}`));
|
|
471
|
+
if (method)
|
|
472
|
+
console.log(chalk.magenta(` Method: ${method}`));
|
|
473
|
+
if (data)
|
|
474
|
+
console.log(chalk.blue(` Data: ${data}`));
|
|
475
|
+
if (params)
|
|
476
|
+
console.log(chalk.blue(` Params: ${params}`));
|
|
477
|
+
if (headers)
|
|
478
|
+
console.log(chalk.gray(` Headers: ${headers}`));
|
|
479
|
+
// Add to global collection
|
|
480
|
+
let parsedHeaders = {};
|
|
481
|
+
if (headers) {
|
|
482
|
+
try {
|
|
483
|
+
parsedHeaders = JSON.parse(headers);
|
|
484
|
+
}
|
|
485
|
+
catch (e) {
|
|
486
|
+
// If JSON parsing fails, use the raw string
|
|
487
|
+
parsedHeaders = { _raw: headers };
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
globals.addOpenapiOutput({
|
|
491
|
+
url: url || "",
|
|
492
|
+
method: method || "",
|
|
493
|
+
path: url || "",
|
|
494
|
+
headers: parsedHeaders,
|
|
495
|
+
body: data || params || "",
|
|
496
|
+
chunkId: chunkId,
|
|
497
|
+
functionFile: functionFile,
|
|
498
|
+
functionFileLine: functionFileLine,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
},
|
|
503
|
+
});
|
|
504
|
+
};
|
|
505
|
+
export default traceAxiosInstanceExports;
|
|
506
|
+
//# sourceMappingURL=traceAxiosInstanceExports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceAxiosInstanceExports.js","sourceRoot":"","sources":["../../../../src/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.ts"],"names":[],"mappings":"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"}
|