@shriyanss/js-recon 1.3.1-alpha.3 → 1.3.1-alpha.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 +15 -1
- package/.github/workflows/publish-js-recon.yml +13 -1
- package/CHANGELOG.md +76 -0
- package/CLAUDE.md +100 -11
- package/README.md +2 -0
- package/build/analyze/engine/astEngine.js +57 -29
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +32 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -0
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/schemas.js +5 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/index.js +7 -2
- package/build/analyze/index.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +12 -5
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +1 -1
- package/build/index.js +51 -4
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +9 -8
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +260 -163
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +58 -16
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +149 -139
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +25 -4
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +13 -5
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/react/react_followImports.js +105 -0
- package/build/lazyLoad/react/react_followImports.js.map +1 -0
- package/build/lazyLoad/react/react_getScriptTags.js +28 -5
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +15 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +15 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +67 -36
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +35 -35
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +10 -6
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +6 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +6 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +6 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +93 -1
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +28 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +1 -0
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +298 -0
- package/build/map/react_js/getReactConnections.js.map +1 -0
- package/build/map/react_js/interactive.js +4 -0
- package/build/map/react_js/interactive.js.map +1 -0
- package/build/map/react_js/react_resolveFetch.js +6 -0
- package/build/map/react_js/react_resolveFetch.js.map +1 -0
- package/build/map/svelte_js/interactive.js +58 -0
- package/build/map/svelte_js/interactive.js.map +1 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/bodyResolver.js +477 -0
- package/build/map/vue_js/bodyResolver.js.map +1 -0
- package/build/map/vue_js/crossFileResolver.js +438 -0
- package/build/map/vue_js/crossFileResolver.js.map +1 -0
- package/build/map/vue_js/getViteConnections.js +150 -129
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +79 -392
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +733 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +279 -0
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
- package/build/mcp/chatOneShot.js +101 -0
- package/build/mcp/chatOneShot.js.map +1 -0
- package/build/mcp/claudeCodeCreds.js +150 -0
- package/build/mcp/claudeCodeCreds.js.map +1 -0
- package/build/mcp/cli.js +140 -149
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/commands.js +80 -0
- package/build/mcp/commands.js.map +1 -1
- package/build/mcp/index.js +30 -9
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/intent.js +204 -0
- package/build/mcp/intent.js.map +1 -0
- package/build/mcp/jobs.js +199 -0
- package/build/mcp/jobs.js.map +1 -0
- package/build/mcp/mcpServer.js +241 -0
- package/build/mcp/mcpServer.js.map +1 -0
- package/build/mcp/providers.js +18 -1
- package/build/mcp/providers.js.map +1 -1
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/refactor/index.js +6 -0
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.js.map +1 -0
- package/build/run/index.js +260 -60
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/utility/globals.js +29 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +14 -2
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +46 -14
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +62 -13
- package/build/utility/postmanGenerator.js.map +1 -1
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,58 @@
|
|
|
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 { createUI } from "../next_js/interactive_helpers/ui.js";
|
|
11
|
+
import { handleCommand } from "./interactive_helpers/commandHandler.js";
|
|
12
|
+
import { setupKeybindings } from "../next_js/interactive_helpers/keybindings.js";
|
|
13
|
+
import { enableCursorInput } from "../next_js/interactive_helpers/inputPatch.js";
|
|
14
|
+
const interactive = (chunks, map_file) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
const state = {
|
|
16
|
+
chunks,
|
|
17
|
+
lastCommandStatus: true,
|
|
18
|
+
functionNavHistory: [],
|
|
19
|
+
functionNavHistoryIndex: -1,
|
|
20
|
+
funcWriteFile: undefined,
|
|
21
|
+
commandHistory: [],
|
|
22
|
+
commandHistoryIndex: -1,
|
|
23
|
+
writeimports: false,
|
|
24
|
+
mapFile: map_file,
|
|
25
|
+
};
|
|
26
|
+
const ui = createUI();
|
|
27
|
+
ui.inputBox.on("submit", (text) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
yield handleCommand(text, state, ui);
|
|
29
|
+
}));
|
|
30
|
+
setupKeybindings(ui.screen, ui.inputBox, ui.outputBox, state);
|
|
31
|
+
enableCursorInput(ui.inputBox);
|
|
32
|
+
ui.inputBox.focus();
|
|
33
|
+
ui.screen.render();
|
|
34
|
+
});
|
|
35
|
+
const runCommands = (chunks, map_file, commands) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
const state = {
|
|
37
|
+
chunks,
|
|
38
|
+
lastCommandStatus: true,
|
|
39
|
+
functionNavHistory: [],
|
|
40
|
+
functionNavHistoryIndex: -1,
|
|
41
|
+
funcWriteFile: undefined,
|
|
42
|
+
commandHistory: [],
|
|
43
|
+
commandHistoryIndex: -1,
|
|
44
|
+
writeimports: false,
|
|
45
|
+
mapFile: map_file,
|
|
46
|
+
};
|
|
47
|
+
const headlessUi = {
|
|
48
|
+
screen: { render: () => { } },
|
|
49
|
+
outputBox: { log: (s) => console.log(s), setText: () => { } },
|
|
50
|
+
inputBox: { clearValue: () => { }, focus: () => { } },
|
|
51
|
+
};
|
|
52
|
+
for (const command of commands) {
|
|
53
|
+
yield handleCommand(command, state, headlessUi);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
export { runCommands };
|
|
57
|
+
export default interactive;
|
|
58
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/map/svelte_js/interactive.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAejF,MAAM,WAAW,GAAG,CAAO,MAAc,EAAE,QAAgB,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAU;QACjB,MAAM;QACN,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,EAAE;QACtB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,aAAa,EAAE,SAAS;QACxB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,QAAQ;KACpB,CAAC;IAEF,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAO,IAAY,EAAE,EAAE;QAC5C,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,KAAY,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE/B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACpB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAA,CAAC;AAEF,MAAM,WAAW,GAAG,CAAO,MAAc,EAAE,QAAgB,EAAE,QAAkB,EAAiB,EAAE;IAC9F,MAAM,KAAK,GAAU;QACjB,MAAM;QACN,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,EAAE;QACtB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,aAAa,EAAE,SAAS;QACxB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,QAAQ;KACpB,CAAC;IAEF,MAAM,UAAU,GAAQ;QACpB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QAC5B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QACpE,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;KACtD,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Svelte interactive command handler — delegates to Vue's implementation since
|
|
2
|
+
// both are Vite-based bundles with identical chunk structure.
|
|
3
|
+
export { handleCommand } from "../../vue_js/interactive_helpers/commandHandler.js";
|
|
4
|
+
//# sourceMappingURL=commandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandHandler.js","sourceRoot":"","sources":["../../../../src/map/svelte_js/interactive_helpers/commandHandler.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8DAA8D;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC"}
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { resolveNodeValue, memberChainToString } from "../next_js/utils.js";
|
|
2
|
+
import { substituteCallerPlaceholders, makeGetCallersSameFile } from "./taint_utils.js";
|
|
3
|
+
const _sameFileGetCallers = makeGetCallersSameFile();
|
|
4
|
+
/**
|
|
5
|
+
* Deep AST-based resolver for body/payload nodes. Walks an expression and
|
|
6
|
+
* produces a JS value (object / array / string / placeholder marker).
|
|
7
|
+
*
|
|
8
|
+
* The motivation: `resolveNodeValue` emits opaque `[call:NAME()]` markers
|
|
9
|
+
* whenever a value comes from a CallExpression. In webpack output the body is
|
|
10
|
+
* frequently produced by a thin local builder function that just forwards one
|
|
11
|
+
* of its parameters (e.g. `f(e,t,n,l) { const p = {body: l || {}, …}; return
|
|
12
|
+
* (…, p.body); }`). Inlining that call recovers the parameter reference so
|
|
13
|
+
* later taint analysis can chase it across wrapper boundaries.
|
|
14
|
+
*
|
|
15
|
+
* Pattern coverage targeted by this resolver:
|
|
16
|
+
* - Local function call whose return traces to one of its parameters
|
|
17
|
+
* (directly, through `param || default`, through `localVar.prop` where
|
|
18
|
+
* `localVar = { prop: param || … }`, or through a SequenceExpression's
|
|
19
|
+
* last value).
|
|
20
|
+
* - ObjectExpression / ArrayExpression literal nesting.
|
|
21
|
+
* - Logical `||` (prefer LHS marker, fall back to RHS literal).
|
|
22
|
+
* - Identifier indirection via `binding.init`.
|
|
23
|
+
* - MemberExpression where the base is a local object literal binding.
|
|
24
|
+
*/
|
|
25
|
+
const PLACEHOLDER_RE = /^\[(unresolved|call|member|param|var |MemberExpression)/;
|
|
26
|
+
const isUnresolvedString = (v) => typeof v === "string" && PLACEHOLDER_RE.test(v);
|
|
27
|
+
const isResolvedLiteralString = (v) => typeof v === "string" && v.length > 0 && !PLACEHOLDER_RE.test(v);
|
|
28
|
+
const getPropKey = (prop) => {
|
|
29
|
+
if (prop.computed)
|
|
30
|
+
return null;
|
|
31
|
+
if (prop.key.type === "Identifier")
|
|
32
|
+
return prop.key.name;
|
|
33
|
+
if (prop.key.type === "StringLiteral")
|
|
34
|
+
return prop.key.value;
|
|
35
|
+
return null;
|
|
36
|
+
};
|
|
37
|
+
const getFunctionFromBinding = (binding) => {
|
|
38
|
+
var _a;
|
|
39
|
+
if (!((_a = binding === null || binding === void 0 ? void 0 : binding.path) === null || _a === void 0 ? void 0 : _a.node))
|
|
40
|
+
return null;
|
|
41
|
+
const n = binding.path.node;
|
|
42
|
+
if (n.type === "FunctionDeclaration")
|
|
43
|
+
return n;
|
|
44
|
+
if (n.type === "VariableDeclarator" && n.init) {
|
|
45
|
+
const init = n.init;
|
|
46
|
+
if (init.type === "FunctionExpression" ||
|
|
47
|
+
init.type === "ArrowFunctionExpression" ||
|
|
48
|
+
init.type === "FunctionDeclaration") {
|
|
49
|
+
return init;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
};
|
|
54
|
+
const getReturnExpression = (fnNode) => {
|
|
55
|
+
const body = fnNode.body;
|
|
56
|
+
if (!body)
|
|
57
|
+
return null;
|
|
58
|
+
if (body.type !== "BlockStatement")
|
|
59
|
+
return body;
|
|
60
|
+
for (let i = body.body.length - 1; i >= 0; i--) {
|
|
61
|
+
const s = body.body[i];
|
|
62
|
+
if (s.type === "ReturnStatement" && s.argument)
|
|
63
|
+
return s.argument;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
};
|
|
67
|
+
export const deepResolveValue = (node, scope, fileContent, depth = 0) => {
|
|
68
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
69
|
+
if (!node)
|
|
70
|
+
return null;
|
|
71
|
+
if (depth > 8)
|
|
72
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
73
|
+
switch (node.type) {
|
|
74
|
+
case "StringLiteral":
|
|
75
|
+
case "NumericLiteral":
|
|
76
|
+
case "BooleanLiteral":
|
|
77
|
+
return node.value;
|
|
78
|
+
case "NullLiteral":
|
|
79
|
+
return null;
|
|
80
|
+
case "TemplateLiteral":
|
|
81
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
82
|
+
case "ObjectExpression": {
|
|
83
|
+
const out = {};
|
|
84
|
+
for (const prop of node.properties) {
|
|
85
|
+
if (prop.type === "ObjectProperty") {
|
|
86
|
+
const key = getPropKey(prop);
|
|
87
|
+
if (!key)
|
|
88
|
+
continue;
|
|
89
|
+
out[key] = deepResolveValue(prop.value, scope, fileContent, depth + 1);
|
|
90
|
+
}
|
|
91
|
+
else if (prop.type === "SpreadElement") {
|
|
92
|
+
const sub = deepResolveValue(prop.argument, scope, fileContent, depth + 1);
|
|
93
|
+
if (sub && typeof sub === "object" && !Array.isArray(sub)) {
|
|
94
|
+
for (const [k, v] of Object.entries(sub)) {
|
|
95
|
+
if (!(k in out))
|
|
96
|
+
out[k] = v;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const chain = memberChainToString(prop.argument);
|
|
101
|
+
out[`...${chain !== null && chain !== void 0 ? chain : "spread"}`] = "<spread>";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
case "ArrayExpression":
|
|
108
|
+
return node.elements.map((e) => (e ? deepResolveValue(e, scope, fileContent, depth + 1) : null));
|
|
109
|
+
case "LogicalExpression": {
|
|
110
|
+
// For `a || b` we prefer the LHS — even if it resolves to a
|
|
111
|
+
// `[param:X]` marker. Runtime would pick LHS when truthy; statically
|
|
112
|
+
// the LHS is the value we'd want taint analysis to chase. Only when
|
|
113
|
+
// LHS is fully `null` / `undefined` do we look at RHS.
|
|
114
|
+
const left = deepResolveValue(node.left, scope, fileContent, depth + 1);
|
|
115
|
+
if (node.operator === "||") {
|
|
116
|
+
if (left === null || left === undefined) {
|
|
117
|
+
return deepResolveValue(node.right, scope, fileContent, depth + 1);
|
|
118
|
+
}
|
|
119
|
+
return left;
|
|
120
|
+
}
|
|
121
|
+
if (node.operator === "&&") {
|
|
122
|
+
return deepResolveValue(node.right, scope, fileContent, depth + 1);
|
|
123
|
+
}
|
|
124
|
+
if (node.operator === "??") {
|
|
125
|
+
if (left === null || left === undefined) {
|
|
126
|
+
return deepResolveValue(node.right, scope, fileContent, depth + 1);
|
|
127
|
+
}
|
|
128
|
+
return left;
|
|
129
|
+
}
|
|
130
|
+
return left;
|
|
131
|
+
}
|
|
132
|
+
case "ConditionalExpression": {
|
|
133
|
+
const c = deepResolveValue(node.consequent, scope, fileContent, depth + 1);
|
|
134
|
+
if (c !== null && c !== undefined && !isUnresolvedString(c))
|
|
135
|
+
return c;
|
|
136
|
+
return deepResolveValue(node.alternate, scope, fileContent, depth + 1);
|
|
137
|
+
}
|
|
138
|
+
case "SequenceExpression":
|
|
139
|
+
return deepResolveValue(node.expressions[node.expressions.length - 1], scope, fileContent, depth + 1);
|
|
140
|
+
case "ParenthesizedExpression":
|
|
141
|
+
return deepResolveValue(node.expression, scope, fileContent, depth + 1);
|
|
142
|
+
case "Identifier": {
|
|
143
|
+
// Prefer following the binding's init ourselves — `resolveNodeValue`
|
|
144
|
+
// also follows it, but its ObjectExpression branch handles nested
|
|
145
|
+
// CallExpressions by emitting opaque `[call:NAME()]` markers, with
|
|
146
|
+
// no opportunity to inline them. By recursing through
|
|
147
|
+
// `deepResolveValue` we keep the structure and pick up local
|
|
148
|
+
// function inlining for each leaf.
|
|
149
|
+
try {
|
|
150
|
+
const binding = (_a = scope === null || scope === void 0 ? void 0 : scope.getBinding) === null || _a === void 0 ? void 0 : _a.call(scope, node.name);
|
|
151
|
+
const init = (_c = (_b = binding === null || binding === void 0 ? void 0 : binding.path) === null || _b === void 0 ? void 0 : _b.node) === null || _c === void 0 ? void 0 : _c.init;
|
|
152
|
+
if (init &&
|
|
153
|
+
(init.type === "ObjectExpression" ||
|
|
154
|
+
init.type === "ArrayExpression" ||
|
|
155
|
+
init.type === "CallExpression" ||
|
|
156
|
+
init.type === "LogicalExpression" ||
|
|
157
|
+
init.type === "ConditionalExpression" ||
|
|
158
|
+
init.type === "MemberExpression" ||
|
|
159
|
+
init.type === "Identifier")) {
|
|
160
|
+
return deepResolveValue(init, (_d = binding.scope) !== null && _d !== void 0 ? _d : scope, fileContent, depth + 1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (_j) { }
|
|
164
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
165
|
+
}
|
|
166
|
+
case "OptionalMemberExpression":
|
|
167
|
+
case "MemberExpression": {
|
|
168
|
+
// Try resolving the whole member chain via a local object literal:
|
|
169
|
+
// const p = { body: X, … }; return p.body → X
|
|
170
|
+
if (!node.computed && node.property.type === "Identifier" && node.object.type === "Identifier") {
|
|
171
|
+
try {
|
|
172
|
+
const binding = (_e = scope === null || scope === void 0 ? void 0 : scope.getBinding) === null || _e === void 0 ? void 0 : _e.call(scope, node.object.name);
|
|
173
|
+
const init = (_g = (_f = binding === null || binding === void 0 ? void 0 : binding.path) === null || _f === void 0 ? void 0 : _f.node) === null || _g === void 0 ? void 0 : _g.init;
|
|
174
|
+
if (init && init.type === "ObjectExpression") {
|
|
175
|
+
for (const prop of init.properties) {
|
|
176
|
+
if (prop.type !== "ObjectProperty")
|
|
177
|
+
continue;
|
|
178
|
+
if (getPropKey(prop) === node.property.name) {
|
|
179
|
+
return deepResolveValue(prop.value, (_h = binding.scope) !== null && _h !== void 0 ? _h : scope, fileContent, depth + 1);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (_k) { }
|
|
185
|
+
}
|
|
186
|
+
// Fall back to the generic resolver (emits `[member:a.b]`).
|
|
187
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
188
|
+
}
|
|
189
|
+
case "CallExpression": {
|
|
190
|
+
const inlined = inlineLocalCall(node, scope, fileContent, depth);
|
|
191
|
+
if (inlined !== undefined)
|
|
192
|
+
return inlined;
|
|
193
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
194
|
+
}
|
|
195
|
+
case "AwaitExpression":
|
|
196
|
+
return deepResolveValue(node.argument, scope, fileContent, depth + 1);
|
|
197
|
+
default:
|
|
198
|
+
return resolveNodeValue(node, scope, "", "fetch", fileContent);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Attempts to inline a CallExpression to a local function defined in the same
|
|
203
|
+
* file. Returns `undefined` to signal "fall back to opaque marker"; any other
|
|
204
|
+
* value (including `null`) is treated as a resolved result.
|
|
205
|
+
*
|
|
206
|
+
* The caller's scope is needed to resolve the arguments passed in; the
|
|
207
|
+
* function's own scope is needed to resolve any local bindings referenced
|
|
208
|
+
* inside its return expression.
|
|
209
|
+
*/
|
|
210
|
+
const inlineLocalCall = (callNode, callerScope, fileContent, depth) => {
|
|
211
|
+
var _a, _b, _c, _d, _e, _f;
|
|
212
|
+
if (callNode.callee.type !== "Identifier")
|
|
213
|
+
return undefined;
|
|
214
|
+
const fnName = callNode.callee.name;
|
|
215
|
+
let binding;
|
|
216
|
+
try {
|
|
217
|
+
binding = (_a = callerScope === null || callerScope === void 0 ? void 0 : callerScope.getBinding) === null || _a === void 0 ? void 0 : _a.call(callerScope, fnName);
|
|
218
|
+
}
|
|
219
|
+
catch (_g) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
if (!binding)
|
|
223
|
+
return undefined;
|
|
224
|
+
const fnNode = getFunctionFromBinding(binding);
|
|
225
|
+
if (!fnNode)
|
|
226
|
+
return undefined;
|
|
227
|
+
const params = (fnNode.params || []).map((p) => {
|
|
228
|
+
var _a;
|
|
229
|
+
return (p === null || p === void 0 ? void 0 : p.type) === "Identifier"
|
|
230
|
+
? p.name
|
|
231
|
+
: (p === null || p === void 0 ? void 0 : p.type) === "AssignmentPattern" && ((_a = p.left) === null || _a === void 0 ? void 0 : _a.type) === "Identifier"
|
|
232
|
+
? p.left.name
|
|
233
|
+
: null;
|
|
234
|
+
});
|
|
235
|
+
const args = callNode.arguments || [];
|
|
236
|
+
const returnExpr = getReturnExpression(fnNode);
|
|
237
|
+
if (!returnExpr)
|
|
238
|
+
return undefined;
|
|
239
|
+
const fnScope = (_f = (_e = (_d = (_c = (_b = binding.path) === null || _b === void 0 ? void 0 : _b.get) === null || _c === void 0 ? void 0 : _c.call(_b, "body")) === null || _d === void 0 ? void 0 : _d.scope) !== null && _e !== void 0 ? _e : binding.scope) !== null && _f !== void 0 ? _f : callerScope;
|
|
240
|
+
return resolveReturnInline(returnExpr, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
241
|
+
};
|
|
242
|
+
const resolveReturnInline = (node, params, args, fnScope, callerScope, fileContent, depth) => {
|
|
243
|
+
var _a, _b, _c, _d;
|
|
244
|
+
if (!node)
|
|
245
|
+
return undefined;
|
|
246
|
+
if (depth > 10)
|
|
247
|
+
return undefined;
|
|
248
|
+
switch (node.type) {
|
|
249
|
+
case "Identifier": {
|
|
250
|
+
const idx = params.indexOf(node.name);
|
|
251
|
+
if (idx >= 0 && idx < args.length && args[idx]) {
|
|
252
|
+
return deepResolveValue(args[idx], callerScope, fileContent, depth);
|
|
253
|
+
}
|
|
254
|
+
// Local binding inside the function; resolve in fnScope.
|
|
255
|
+
return deepResolveValue(node, fnScope, fileContent, depth);
|
|
256
|
+
}
|
|
257
|
+
case "SequenceExpression":
|
|
258
|
+
return resolveReturnInline(node.expressions[node.expressions.length - 1], params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
259
|
+
case "LogicalExpression": {
|
|
260
|
+
const l = resolveReturnInline(node.left, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
261
|
+
if (node.operator === "||" || node.operator === "??") {
|
|
262
|
+
if (l === null || l === undefined) {
|
|
263
|
+
return resolveReturnInline(node.right, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
264
|
+
}
|
|
265
|
+
return l;
|
|
266
|
+
}
|
|
267
|
+
if (node.operator === "&&") {
|
|
268
|
+
return resolveReturnInline(node.right, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
269
|
+
}
|
|
270
|
+
return l;
|
|
271
|
+
}
|
|
272
|
+
case "ConditionalExpression": {
|
|
273
|
+
const c = resolveReturnInline(node.consequent, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
274
|
+
if (c !== null && c !== undefined && !isUnresolvedString(c))
|
|
275
|
+
return c;
|
|
276
|
+
return resolveReturnInline(node.alternate, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
277
|
+
}
|
|
278
|
+
case "OptionalMemberExpression":
|
|
279
|
+
case "MemberExpression": {
|
|
280
|
+
// Look up `local.prop` where `local` is bound to an ObjectExpression
|
|
281
|
+
// inside the function — common builder pattern.
|
|
282
|
+
if (!node.computed && node.object.type === "Identifier" && node.property.type === "Identifier") {
|
|
283
|
+
try {
|
|
284
|
+
const localBinding = (_a = fnScope === null || fnScope === void 0 ? void 0 : fnScope.getBinding) === null || _a === void 0 ? void 0 : _a.call(fnScope, node.object.name);
|
|
285
|
+
const init = (_c = (_b = localBinding === null || localBinding === void 0 ? void 0 : localBinding.path) === null || _b === void 0 ? void 0 : _b.node) === null || _c === void 0 ? void 0 : _c.init;
|
|
286
|
+
if (init && init.type === "ObjectExpression") {
|
|
287
|
+
for (const prop of init.properties) {
|
|
288
|
+
if (prop.type !== "ObjectProperty")
|
|
289
|
+
continue;
|
|
290
|
+
if (getPropKey(prop) === node.property.name) {
|
|
291
|
+
return resolveReturnInline(prop.value, params, args, (_d = localBinding.scope) !== null && _d !== void 0 ? _d : fnScope, callerScope, fileContent, depth + 1);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch (_e) { }
|
|
297
|
+
}
|
|
298
|
+
return deepResolveValue(node, fnScope, fileContent, depth);
|
|
299
|
+
}
|
|
300
|
+
case "ObjectExpression": {
|
|
301
|
+
const out = {};
|
|
302
|
+
for (const prop of node.properties) {
|
|
303
|
+
if (prop.type === "ObjectProperty") {
|
|
304
|
+
const key = getPropKey(prop);
|
|
305
|
+
if (!key)
|
|
306
|
+
continue;
|
|
307
|
+
out[key] = resolveReturnInline(prop.value, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
308
|
+
}
|
|
309
|
+
else if (prop.type === "SpreadElement") {
|
|
310
|
+
const sub = resolveReturnInline(prop.argument, params, args, fnScope, callerScope, fileContent, depth + 1);
|
|
311
|
+
if (sub && typeof sub === "object" && !Array.isArray(sub)) {
|
|
312
|
+
for (const [k, v] of Object.entries(sub)) {
|
|
313
|
+
if (!(k in out))
|
|
314
|
+
out[k] = v;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return out;
|
|
320
|
+
}
|
|
321
|
+
case "ArrayExpression":
|
|
322
|
+
return node.elements.map((e) => e ? resolveReturnInline(e, params, args, fnScope, callerScope, fileContent, depth + 1) : null);
|
|
323
|
+
case "CallExpression": {
|
|
324
|
+
// Recurse: the return might itself be a call to another local helper.
|
|
325
|
+
const inlined = inlineLocalCall(node, fnScope, fileContent, depth + 1);
|
|
326
|
+
if (inlined !== undefined)
|
|
327
|
+
return inlined;
|
|
328
|
+
return deepResolveValue(node, fnScope, fileContent, depth);
|
|
329
|
+
}
|
|
330
|
+
default:
|
|
331
|
+
return deepResolveValue(node, fnScope, fileContent, depth);
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* Walks a resolved value (object/array/string) and applies a string-rewriter to
|
|
336
|
+
* every leaf string. Used so the existing taint-substitution helpers can be
|
|
337
|
+
* applied to every nested marker inside a deeply-resolved body without having
|
|
338
|
+
* to teach them about object structure.
|
|
339
|
+
*/
|
|
340
|
+
export const mapLeafStrings = (value, fn) => {
|
|
341
|
+
if (value === null || value === undefined)
|
|
342
|
+
return value;
|
|
343
|
+
if (typeof value === "string")
|
|
344
|
+
return fn(value);
|
|
345
|
+
if (Array.isArray(value))
|
|
346
|
+
return value.map((v) => mapLeafStrings(v, fn));
|
|
347
|
+
if (typeof value === "object") {
|
|
348
|
+
const out = {};
|
|
349
|
+
for (const [k, v] of Object.entries(value))
|
|
350
|
+
out[k] = mapLeafStrings(v, fn);
|
|
351
|
+
return out;
|
|
352
|
+
}
|
|
353
|
+
return value;
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* Returns true if any leaf string in the value contains a placeholder marker
|
|
357
|
+
* that taint analysis can substitute.
|
|
358
|
+
*/
|
|
359
|
+
export const hasMarkers = (value) => {
|
|
360
|
+
if (value === null || value === undefined)
|
|
361
|
+
return false;
|
|
362
|
+
if (typeof value === "string")
|
|
363
|
+
return /\[(urlsearchparams|member|param|call):/.test(value);
|
|
364
|
+
if (Array.isArray(value))
|
|
365
|
+
return value.some((v) => hasMarkers(v));
|
|
366
|
+
if (typeof value === "object") {
|
|
367
|
+
for (const v of Object.values(value))
|
|
368
|
+
if (hasMarkers(v))
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
return false;
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Like resolveFirstArg in taint_utils but returns any JS value — objects,
|
|
375
|
+
* arrays, or scalars — so callers can substitute a [param:X] body leaf with
|
|
376
|
+
* the full structured value that was passed at the call site.
|
|
377
|
+
*
|
|
378
|
+
* Placed here (not in taint_utils) to avoid a circular import:
|
|
379
|
+
* taint_utils → (nothing from bodyResolver); bodyResolver → taint_utils types only.
|
|
380
|
+
*/
|
|
381
|
+
// Returns true if value contains at least one concrete literal (non-marker) leaf.
|
|
382
|
+
// Used to skip caller results where every value is still an unresolved placeholder.
|
|
383
|
+
const hasRealValue = (v) => {
|
|
384
|
+
if (v === null || v === undefined)
|
|
385
|
+
return false;
|
|
386
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
387
|
+
return true;
|
|
388
|
+
if (typeof v === "string")
|
|
389
|
+
return v.length > 0 && !v.startsWith("[");
|
|
390
|
+
if (Array.isArray(v))
|
|
391
|
+
return v.some(hasRealValue);
|
|
392
|
+
if (typeof v === "object")
|
|
393
|
+
return Object.values(v).some(hasRealValue);
|
|
394
|
+
return true;
|
|
395
|
+
};
|
|
396
|
+
export const resolveParamToAnyValue = (paramName, enclosingFn, getCallers, depth = 0) => {
|
|
397
|
+
var _a, _b, _c;
|
|
398
|
+
if (depth > 4)
|
|
399
|
+
return null;
|
|
400
|
+
let fn = enclosingFn;
|
|
401
|
+
while (fn && (!fn.bindingName || !((_a = fn.paramNames) !== null && _a !== void 0 ? _a : []).includes(paramName))) {
|
|
402
|
+
fn = (_b = fn.parent) !== null && _b !== void 0 ? _b : null;
|
|
403
|
+
}
|
|
404
|
+
if (!fn || !fn.bindingName)
|
|
405
|
+
return null;
|
|
406
|
+
const paramIndex = ((_c = fn.paramNames) !== null && _c !== void 0 ? _c : []).indexOf(paramName);
|
|
407
|
+
if (paramIndex < 0)
|
|
408
|
+
return null;
|
|
409
|
+
const searchCallers = (callerList) => {
|
|
410
|
+
let firstObj = undefined;
|
|
411
|
+
let firstStr = undefined;
|
|
412
|
+
for (const caller of callerList) {
|
|
413
|
+
const arg = caller.args[paramIndex];
|
|
414
|
+
if (!arg)
|
|
415
|
+
continue;
|
|
416
|
+
const resolved = deepResolveValue(arg, caller.scope, caller.fileContent);
|
|
417
|
+
if (resolved === null || resolved === undefined)
|
|
418
|
+
continue;
|
|
419
|
+
if (!hasRealValue(resolved))
|
|
420
|
+
continue;
|
|
421
|
+
if (typeof resolved === "object" && firstObj === undefined)
|
|
422
|
+
firstObj = resolved;
|
|
423
|
+
if (typeof resolved !== "object" && firstStr === undefined)
|
|
424
|
+
firstStr = resolved;
|
|
425
|
+
if (firstObj !== undefined && firstStr !== undefined)
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
return { obj: firstObj, str: firstStr };
|
|
429
|
+
};
|
|
430
|
+
const { obj, str } = searchCallers(getCallers(fn.bindingName, fn.file));
|
|
431
|
+
if (obj !== undefined)
|
|
432
|
+
return obj;
|
|
433
|
+
// Fallback for short binding names: makeGetCallers skips them to avoid
|
|
434
|
+
// cross-file false positives, but same-file direct calls are unambiguous.
|
|
435
|
+
if (fn.bindingName.length <= 2 && fn.file) {
|
|
436
|
+
const { obj: sameObj, str: sameStr } = searchCallers(_sameFileGetCallers(fn.bindingName, fn.file));
|
|
437
|
+
if (sameObj !== undefined)
|
|
438
|
+
return sameObj;
|
|
439
|
+
if (str === undefined && sameStr !== undefined)
|
|
440
|
+
return sameStr;
|
|
441
|
+
}
|
|
442
|
+
return str !== null && str !== void 0 ? str : null;
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* Recursively walks a resolved value (object/array/string). When a leaf
|
|
446
|
+
* string is a bare [param:name] placeholder, tries resolveParamToAnyValue
|
|
447
|
+
* first so a caller-side ObjectExpression is returned as a real nested object
|
|
448
|
+
* rather than a string. Falls back to substituteCallerPlaceholders for
|
|
449
|
+
* non-param and composite markers.
|
|
450
|
+
*
|
|
451
|
+
* Exported so both the HTTP-client resolver and the fetch resolver can use it
|
|
452
|
+
* without duplicating the logic.
|
|
453
|
+
*/
|
|
454
|
+
export const deepSubstituteBodyValue = (value, enclosingFn, getCallers) => {
|
|
455
|
+
if (value === null || value === undefined)
|
|
456
|
+
return value;
|
|
457
|
+
if (typeof value === "string") {
|
|
458
|
+
const m = value.match(/^\[param:([A-Za-z_$][\w$]*)\]$/);
|
|
459
|
+
if (m && enclosingFn) {
|
|
460
|
+
const resolved = resolveParamToAnyValue(m[1], enclosingFn, getCallers);
|
|
461
|
+
if (resolved !== null && resolved !== undefined)
|
|
462
|
+
return resolved;
|
|
463
|
+
}
|
|
464
|
+
return substituteCallerPlaceholders(value, enclosingFn, getCallers);
|
|
465
|
+
}
|
|
466
|
+
if (Array.isArray(value))
|
|
467
|
+
return value.map((v) => deepSubstituteBodyValue(v, enclosingFn, getCallers));
|
|
468
|
+
if (typeof value === "object") {
|
|
469
|
+
const out = {};
|
|
470
|
+
for (const [k, v] of Object.entries(value)) {
|
|
471
|
+
out[k] = deepSubstituteBodyValue(v, enclosingFn, getCallers);
|
|
472
|
+
}
|
|
473
|
+
return out;
|
|
474
|
+
}
|
|
475
|
+
return value;
|
|
476
|
+
};
|
|
477
|
+
//# sourceMappingURL=bodyResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyResolver.js","sourceRoot":"","sources":["../../../src/map/vue_js/bodyResolver.ts"],"names":[],"mappings":"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"}
|