@shriyanss/js-recon 1.3.1-alpha.2 → 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.
Files changed (162) hide show
  1. package/.github/workflows/build-and-prettify.yaml +15 -1
  2. package/.github/workflows/pr_checker.yml +9 -8
  3. package/.github/workflows/publish-js-recon.yml +13 -1
  4. package/CHANGELOG.md +96 -0
  5. package/CLAUDE.md +225 -0
  6. package/README.md +2 -0
  7. package/build/analyze/engine/astEngine.js +57 -29
  8. package/build/analyze/engine/astEngine.js.map +1 -1
  9. package/build/analyze/engine/index.js +2 -2
  10. package/build/analyze/engine/index.js.map +1 -1
  11. package/build/analyze/helpers/engineHelpers/taintFlow.js +32 -0
  12. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
  13. package/build/analyze/helpers/initRules.js +9 -0
  14. package/build/analyze/helpers/initRules.js.map +1 -1
  15. package/build/analyze/helpers/schemas.js +6 -1
  16. package/build/analyze/helpers/schemas.js.map +1 -1
  17. package/build/analyze/helpers/validate.js +49 -9
  18. package/build/analyze/helpers/validate.js.map +1 -1
  19. package/build/analyze/index.js +10 -4
  20. package/build/analyze/index.js.map +1 -1
  21. package/build/endpoints/next_js/client_mappedJsonFile.js +12 -5
  22. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  23. package/build/fingerprint/index.js +123 -0
  24. package/build/fingerprint/index.js.map +1 -0
  25. package/build/globalConfig.js +1 -1
  26. package/build/index.js +72 -5
  27. package/build/index.js.map +1 -1
  28. package/build/lazyLoad/downloadFilesUtil.js +3 -3
  29. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  30. package/build/lazyLoad/downloadQueue.js +16 -11
  31. package/build/lazyLoad/downloadQueue.js.map +1 -1
  32. package/build/lazyLoad/index.js +260 -163
  33. package/build/lazyLoad/index.js.map +1 -1
  34. package/build/lazyLoad/next_js/NextJsCrawler.js +58 -16
  35. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  36. package/build/lazyLoad/next_js/next_GetJSScript.js +8 -4
  37. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
  38. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +149 -139
  39. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  40. package/build/lazyLoad/next_js/next_SubsequentRequests.js +25 -4
  41. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  42. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +13 -5
  43. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
  44. package/build/lazyLoad/react/react_followImports.js +105 -0
  45. package/build/lazyLoad/react/react_followImports.js.map +1 -0
  46. package/build/lazyLoad/react/react_getScriptTags.js +28 -5
  47. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
  48. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
  49. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
  50. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +15 -0
  51. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
  52. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
  53. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
  54. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +15 -1
  55. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  56. package/build/lazyLoad/techDetect/checkReact.js +67 -36
  57. package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
  58. package/build/lazyLoad/techDetect/checkSvelte.js +35 -35
  59. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
  60. package/build/lazyLoad/techDetect/index.js +31 -25
  61. package/build/lazyLoad/techDetect/index.js.map +1 -1
  62. package/build/lazyLoad/vue/vue_getClientSidePaths.js +6 -0
  63. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  64. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +6 -0
  65. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  66. package/build/lazyLoad/vue/vue_stringJsFiles.js +6 -0
  67. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
  68. package/build/load/index.js +316 -0
  69. package/build/load/index.js.map +1 -0
  70. package/build/map/graphql/resolveGraphql.js +296 -0
  71. package/build/map/graphql/resolveGraphql.js.map +1 -0
  72. package/build/map/index.js +104 -6
  73. package/build/map/index.js.map +1 -1
  74. package/build/map/next_js/interactive.js +30 -0
  75. package/build/map/next_js/interactive.js.map +1 -1
  76. package/build/map/next_js/interactive_helpers/commandHandler.js +26 -0
  77. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
  78. package/build/map/next_js/interactive_helpers/commandHelpers.js +28 -0
  79. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
  80. package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
  81. package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
  82. package/build/map/next_js/interactive_helpers/helpMenu.js +2 -1
  83. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
  84. package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
  85. package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
  86. package/build/map/next_js/interactive_helpers/ui.js +0 -1
  87. package/build/map/next_js/interactive_helpers/ui.js.map +1 -1
  88. package/build/map/next_js/resolveServerActions.js +449 -0
  89. package/build/map/next_js/resolveServerActions.js.map +1 -0
  90. package/build/map/next_js/utils.js +89 -2
  91. package/build/map/next_js/utils.js.map +1 -1
  92. package/build/map/react_js/getReactConnections.js +298 -0
  93. package/build/map/react_js/getReactConnections.js.map +1 -0
  94. package/build/map/react_js/interactive.js +4 -0
  95. package/build/map/react_js/interactive.js.map +1 -0
  96. package/build/map/react_js/react_resolveFetch.js +6 -0
  97. package/build/map/react_js/react_resolveFetch.js.map +1 -0
  98. package/build/map/svelte_js/interactive.js +58 -0
  99. package/build/map/svelte_js/interactive.js.map +1 -0
  100. package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
  101. package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
  102. package/build/map/vue_js/bodyResolver.js +477 -0
  103. package/build/map/vue_js/bodyResolver.js.map +1 -0
  104. package/build/map/vue_js/crossFileResolver.js +438 -0
  105. package/build/map/vue_js/crossFileResolver.js.map +1 -0
  106. package/build/map/vue_js/getViteConnections.js +151 -106
  107. package/build/map/vue_js/getViteConnections.js.map +1 -1
  108. package/build/map/vue_js/interactive.js +28 -0
  109. package/build/map/vue_js/interactive.js.map +1 -1
  110. package/build/map/vue_js/interactive_helpers/commandHandler.js +22 -0
  111. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
  112. package/build/map/vue_js/interactive_helpers/helpMenu.js +1 -0
  113. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
  114. package/build/map/vue_js/taint_utils.js +621 -0
  115. package/build/map/vue_js/taint_utils.js.map +1 -0
  116. package/build/map/vue_js/vue_resolveFetch.js +279 -25
  117. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  118. package/build/map/vue_js/vue_resolveHttpClient.js +733 -0
  119. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
  120. package/build/map/vue_js/vue_resolveXhr.js +279 -0
  121. package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
  122. package/build/mcp/chatOneShot.js +101 -0
  123. package/build/mcp/chatOneShot.js.map +1 -0
  124. package/build/mcp/claudeCodeCreds.js +150 -0
  125. package/build/mcp/claudeCodeCreds.js.map +1 -0
  126. package/build/mcp/cli.js +140 -149
  127. package/build/mcp/cli.js.map +1 -1
  128. package/build/mcp/commands.js +80 -0
  129. package/build/mcp/commands.js.map +1 -1
  130. package/build/mcp/index.js +30 -9
  131. package/build/mcp/index.js.map +1 -1
  132. package/build/mcp/intent.js +204 -0
  133. package/build/mcp/intent.js.map +1 -0
  134. package/build/mcp/jobs.js +199 -0
  135. package/build/mcp/jobs.js.map +1 -0
  136. package/build/mcp/mcpServer.js +241 -0
  137. package/build/mcp/mcpServer.js.map +1 -0
  138. package/build/mcp/providers.js +18 -1
  139. package/build/mcp/providers.js.map +1 -1
  140. package/build/mcp/skills.js +115 -0
  141. package/build/mcp/skills.js.map +1 -0
  142. package/build/refactor/index.js +6 -0
  143. package/build/refactor/index.js.map +1 -1
  144. package/build/refactor/react/index.js +636 -0
  145. package/build/refactor/react/index.js.map +1 -0
  146. package/build/report/utility/populateDb/populateAnalysisFindings.js +1 -1
  147. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
  148. package/build/run/index.js +277 -60
  149. package/build/run/index.js.map +1 -1
  150. package/build/run/interruptHandler.js +93 -0
  151. package/build/run/interruptHandler.js.map +1 -0
  152. package/build/utility/globals.js +38 -0
  153. package/build/utility/globals.js.map +1 -1
  154. package/build/utility/makeReq.js +39 -5
  155. package/build/utility/makeReq.js.map +1 -1
  156. package/build/utility/openapiGenerator.js +61 -17
  157. package/build/utility/openapiGenerator.js.map +1 -1
  158. package/build/utility/postmanGenerator.js +69 -16
  159. package/build/utility/postmanGenerator.js.map +1 -1
  160. package/build/utility/progressLog.js +50 -0
  161. package/build/utility/progressLog.js.map +1 -0
  162. 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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"}