@shriyanss/js-recon 1.2.2-alpha.1 → 1.2.2-alpha.11

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 (85) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/build/endpoints/index.js +1 -0
  3. package/build/endpoints/index.js.map +1 -1
  4. package/build/globalConfig.js +2 -1
  5. package/build/globalConfig.js.map +1 -1
  6. package/build/index.js +7 -1
  7. package/build/index.js.map +1 -1
  8. package/build/lazyLoad/angular/angular_getFromMainJs.js +55 -0
  9. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -0
  10. package/build/lazyLoad/angular/angular_getFromPageSource.js +43 -0
  11. package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -0
  12. package/build/lazyLoad/downloadFilesUtil.js +7 -4
  13. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  14. package/build/lazyLoad/index.js +201 -12
  15. package/build/lazyLoad/index.js.map +1 -1
  16. package/build/lazyLoad/next_js/next_GetJSScript.js +2 -3
  17. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
  18. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +32 -23
  19. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  20. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +1 -1
  21. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  22. package/build/lazyLoad/next_js/next_SubsequentRequests.js +54 -4
  23. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  24. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +32 -0
  25. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
  26. package/build/lazyLoad/next_js/next_buildId.js +9 -1
  27. package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
  28. package/build/lazyLoad/next_js/next_parseLayoutJs.js +116 -0
  29. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -0
  30. package/build/lazyLoad/next_js/next_promiseResolve.js +76 -0
  31. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
  32. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +34 -0
  33. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -0
  34. package/build/lazyLoad/sourcemap.js +188 -0
  35. package/build/lazyLoad/sourcemap.js.map +1 -0
  36. package/build/lazyLoad/techDetect/index.js +117 -3
  37. package/build/lazyLoad/techDetect/index.js.map +1 -1
  38. package/build/lazyLoad/vue/vue_RuntimeJs.js +101 -0
  39. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
  40. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +98 -0
  41. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
  42. package/build/lazyLoad/vue/vue_jsImports.js +70 -0
  43. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
  44. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +56 -0
  45. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
  46. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +52 -0
  47. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -0
  48. package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
  49. package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
  50. package/build/map/next_js/getAxiosInstances.js +1 -1
  51. package/build/map/next_js/getAxiosInstances.js.map +1 -1
  52. package/build/map/next_js/getWebpackConnections.js +1 -1
  53. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  54. package/build/map/next_js/interactive_helpers/commandHelpers.js +1 -1
  55. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
  56. package/build/map/next_js/resolveAxios.js +61 -17
  57. package/build/map/next_js/resolveAxios.js.map +1 -1
  58. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
  59. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
  60. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +8 -8
  61. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
  62. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +302 -0
  63. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
  64. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +48 -8
  65. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  66. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
  67. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
  68. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +10 -3
  69. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
  70. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +113 -0
  71. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
  72. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
  73. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
  74. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +506 -0
  75. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
  76. package/build/map/next_js/resolveFetch.js +243 -4
  77. package/build/map/next_js/resolveFetch.js.map +1 -1
  78. package/build/map/next_js/utils.js +867 -11
  79. package/build/map/next_js/utils.js.map +1 -1
  80. package/build/run/index.js +12 -7
  81. package/build/run/index.js.map +1 -1
  82. package/build/utility/globals.js.map +1 -1
  83. package/build/utility/makeReq.js +159 -91
  84. package/build/utility/makeReq.js.map +1 -1
  85. package/package.json +7 -7
@@ -0,0 +1,32 @@
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 makeRequest from "../../utility/makeReq.js";
11
+ import chalk from "chalk";
12
+ const next_bruteForceJsFiles = (urls) => __awaiter(void 0, void 0, void 0, function* () {
13
+ // just append .map to all of them and bruteforce for 200
14
+ console.log(chalk.cyan("[i] Bruteforcing .map files"));
15
+ const mapFiles = urls.map((url) => url + ".map");
16
+ let foundSourceMaps = [];
17
+ for (const mapFile of mapFiles) {
18
+ const req = yield makeRequest(mapFile);
19
+ const status = req.status;
20
+ if (status === 200) {
21
+ foundSourceMaps.push(mapFile);
22
+ }
23
+ }
24
+ if (foundSourceMaps.length === 0) {
25
+ console.log(chalk.red("[!] No source maps found"));
26
+ return foundSourceMaps;
27
+ }
28
+ console.log(chalk.green(`[✓] Found ${foundSourceMaps.length} source maps`));
29
+ return foundSourceMaps;
30
+ });
31
+ export default next_bruteForceJsFiles;
32
+ //# sourceMappingURL=next_bruteForceJsFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next_bruteForceJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_bruteForceJsFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,sBAAsB,GAAG,CAAO,IAAc,EAAE,EAAE;IACpD,yDAAyD;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;IAEjD,IAAI,eAAe,GAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,eAAe,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;IAC5E,OAAO,eAAe,CAAC;AAC3B,CAAC,CAAA,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -10,9 +10,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { readdir, readFile } from "fs/promises";
11
11
  import path from "path";
12
12
  import * as next_globals from "./next_globals.js";
13
+ import chalk from "chalk";
13
14
  export const next_buildId_RSC = (rsc_directory) => __awaiter(void 0, void 0, void 0, function* () {
14
15
  const traverseDirectory = (directory) => __awaiter(void 0, void 0, void 0, function* () {
15
- const dirents = yield readdir(directory, { withFileTypes: true });
16
+ let dirents;
17
+ try {
18
+ dirents = yield readdir(directory, { withFileTypes: true });
19
+ }
20
+ catch (_a) {
21
+ console.log(chalk.red(`[!] Can't read subsequent requests directory. Skipping build ID extraction using this method...`));
22
+ return false;
23
+ }
16
24
  for (const dirent of dirents) {
17
25
  const fullPath = path.join(directory, dirent.name);
18
26
  if (dirent.isDirectory()) {
@@ -1 +1 @@
1
- {"version":3,"file":"next_buildId.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_buildId.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,aAAqB,EAA0B,EAAE;IACpF,MAAM,iBAAiB,GAAG,CAAO,SAAiB,EAAoB,EAAE;QACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,SAAS;YACb,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAErD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;wBACzD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;4BACd,YAAY,CAAC,UAAU,CAAC,KAAe,CAAC,CAAC;4BACzC,OAAO,IAAI,CAAC;wBAChB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAA,CAAC;IAEF,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACvC,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;AACrC,CAAC,CAAA,CAAC"}
1
+ {"version":3,"file":"next_buildId.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_buildId.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,aAAqB,EAA0B,EAAE;IACpF,MAAM,iBAAiB,GAAG,CAAO,SAAiB,EAAoB,EAAE;QACpE,IAAI,OAAyB,CAAC;QAC9B,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,iGAAiG,CACpG,CACJ,CAAC;YACF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,SAAS;YACb,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAErD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;wBACzD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;4BACd,YAAY,CAAC,UAAU,CAAC,KAAe,CAAC,CAAC;4BACzC,OAAO,IAAI,CAAC;wBAChB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAA,CAAC;IAEF,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACvC,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;AACrC,CAAC,CAAA,CAAC"}
@@ -0,0 +1,116 @@
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 makeRequest from "../../utility/makeReq.js";
11
+ import parser from "@babel/parser";
12
+ import _traverse from "@babel/traverse";
13
+ import chalk from "chalk";
14
+ import next_getJSScript from "./next_GetJSScript.js";
15
+ const traverse = _traverse.default;
16
+ const next_parseLayoutJs = (baseUrl, urls) => __awaiter(void 0, void 0, void 0, function* () {
17
+ console.log(chalk.cyan("[i] Parsing layout.js files"));
18
+ let toReturn = [];
19
+ // iterate through all the URLs and find the layout.*.js files
20
+ for (const url of urls) {
21
+ if (url.includes("layout-")) {
22
+ // request the content, and parse it
23
+ const req = yield makeRequest(url);
24
+ const jsContent = yield req.text();
25
+ let ast;
26
+ try {
27
+ ast = parser.parse(jsContent, {
28
+ sourceType: "unambiguous",
29
+ plugins: ["jsx", "typescript"],
30
+ errorRecovery: true,
31
+ });
32
+ }
33
+ catch (_a) {
34
+ continue;
35
+ }
36
+ let hrefFinds = [];
37
+ const resolveString = (node) => {
38
+ if (!node)
39
+ return "";
40
+ if (node.type === "StringLiteral") {
41
+ return node.value;
42
+ }
43
+ if (node.type === "TemplateLiteral") {
44
+ let str = "";
45
+ node.quasis.forEach((q, i) => {
46
+ str += q.value.raw;
47
+ if (i < node.expressions.length) {
48
+ str += resolveString(node.expressions[i]);
49
+ }
50
+ });
51
+ return str;
52
+ }
53
+ if (node.type === "BinaryExpression" && node.operator === "+") {
54
+ return resolveString(node.left) + resolveString(node.right);
55
+ }
56
+ if (node.type === "CallExpression") {
57
+ if (node.callee.type === "MemberExpression" && node.callee.property.name === "concat") {
58
+ let base = resolveString(node.callee.object);
59
+ node.arguments.forEach((arg) => {
60
+ base += resolveString(arg);
61
+ });
62
+ return base;
63
+ }
64
+ }
65
+ // If it's an identifier or unknown, we return a placeholder to represent dynamic content
66
+ return Math.random()
67
+ .toString(36)
68
+ .substring(2, 2 + 64);
69
+ };
70
+ // traverse through the AST, and find all the hrefs
71
+ traverse(ast, {
72
+ ObjectProperty(path) {
73
+ const { key, value } = path.node;
74
+ // Check if key is 'href' (identifier) or "href" (literal)
75
+ if (key.name === "href") {
76
+ const resolved = resolveString(value);
77
+ if (resolved) {
78
+ hrefFinds.push(resolved);
79
+ }
80
+ }
81
+ },
82
+ });
83
+ // iterate through each href, and try to send the server a request
84
+ // if the response code is 200, run all the methods again on that
85
+ for (const href of hrefFinds) {
86
+ const newUrl = new URL(href, new URL(url).origin).href;
87
+ if (newUrl.startsWith("mailto:"))
88
+ continue;
89
+ // also, check if the origin is same or not
90
+ if (new URL(baseUrl).origin !== new URL(newUrl).origin)
91
+ continue;
92
+ let req;
93
+ try {
94
+ req = yield makeRequest(newUrl);
95
+ }
96
+ catch (_b) {
97
+ continue;
98
+ }
99
+ if (req.status === 200) {
100
+ console.log(chalk.green("[✓] Found new client side URL: ", newUrl));
101
+ // parse the HTML for script tags
102
+ const jsFiles = yield next_getJSScript(newUrl);
103
+ toReturn.push(...jsFiles);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ // dedupe
109
+ toReturn = [...new Set(toReturn)];
110
+ if (toReturn.length !== 0) {
111
+ console.log(chalk.green(`[✓] Found ${toReturn.length} JS files from the layout.js files`));
112
+ }
113
+ return toReturn;
114
+ });
115
+ export default next_parseLayoutJs;
116
+ //# sourceMappingURL=next_parseLayoutJs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next_parseLayoutJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_parseLayoutJs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import makeRequest from "../../utility/makeReq.js";
12
+ import parser from "@babel/parser";
13
+ import _traverse from "@babel/traverse";
14
+ const traverse = _traverse.default;
15
+ const next_promiseResolve = (urls) => __awaiter(void 0, void 0, void 0, function* () {
16
+ console.log(chalk.cyan("[i] Check for Promise.all pattern"));
17
+ let toReturn = [];
18
+ // go through all the URLs, and find which which one has `static/chunks/` in it
19
+ let jsDirBase = null;
20
+ for (const url of urls) {
21
+ if (url.includes("static/chunks/")) {
22
+ jsDirBase = url.split("/").slice(0, -1).join("/");
23
+ break;
24
+ }
25
+ }
26
+ for (const url of urls) {
27
+ // get the contents of the file
28
+ const req = yield makeRequest(url);
29
+ if (!req || !req.ok)
30
+ continue;
31
+ const data = yield req.text();
32
+ try {
33
+ const ast = parser.parse(data, {
34
+ sourceType: "unambiguous",
35
+ plugins: ["jsx", "typescript"],
36
+ errorRecovery: true,
37
+ });
38
+ let matches = [];
39
+ traverse(ast, {
40
+ CallExpression(path) {
41
+ const { node } = path;
42
+ // Check for Promise.all([...].map(...)) pattern
43
+ if (node.callee.type === "MemberExpression" &&
44
+ node.callee.object.type === "Identifier" &&
45
+ node.callee.object.name === "Promise" &&
46
+ node.callee.property.type === "Identifier" &&
47
+ node.callee.property.name === "all") {
48
+ const arg = node.arguments[0];
49
+ if (arg &&
50
+ arg.type === "CallExpression" &&
51
+ arg.callee.type === "MemberExpression" &&
52
+ arg.callee.property.type === "Identifier" &&
53
+ arg.callee.property.name === "map" &&
54
+ arg.callee.object.type === "ArrayExpression") {
55
+ arg.callee.object.elements.forEach((element) => {
56
+ if (element && element.type === "StringLiteral") {
57
+ matches.push(element.value);
58
+ }
59
+ });
60
+ }
61
+ }
62
+ },
63
+ });
64
+ // now that we got the match, we can use it to build the final URL
65
+ for (const match of matches) {
66
+ const jsFileName = match.replace("static/chunks/", "/");
67
+ const jsFileUrl = jsDirBase + jsFileName;
68
+ toReturn.push(jsFileUrl);
69
+ }
70
+ }
71
+ catch (e) { }
72
+ }
73
+ return toReturn;
74
+ });
75
+ export default next_promiseResolve;
76
+ //# sourceMappingURL=next_promiseResolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next_promiseResolve.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_promiseResolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import next_getJSScript from "./next_GetJSScript.js";
12
+ import fs from "fs";
13
+ const next_scriptTagsSubsequentRequests = (url, endpointsFile) => __awaiter(void 0, void 0, void 0, function* () {
14
+ console.log(chalk.cyan("[i] Getting JS files from subsequent requests (script tags)"));
15
+ let endpoints = JSON.parse(fs.readFileSync(endpointsFile, "utf8")).paths;
16
+ endpoints.push("/");
17
+ let jsUrls = [];
18
+ // TODO: when you get a page, you can also search for anchor tags. If you find any additional
19
+ // pages, you can go through them as well. this will give you a lot more JS files
20
+ // go through all endpoints, and parse them
21
+ for (const endpoint of endpoints) {
22
+ const reqUrl = new URL(endpoint, url).href;
23
+ const jsUrlsFromEndpoint = yield next_getJSScript(reqUrl);
24
+ jsUrls.push(...jsUrlsFromEndpoint);
25
+ }
26
+ // dedupe
27
+ jsUrls = [...new Set(jsUrls)];
28
+ if (jsUrls.length !== 0) {
29
+ console.log(chalk.green(`[✓] Found ${jsUrls.length} JS files from subsequent requests (script tags)`));
30
+ }
31
+ return jsUrls;
32
+ });
33
+ export default next_scriptTagsSubsequentRequests;
34
+ //# sourceMappingURL=next_scriptTagsSubsequentRequests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next_scriptTagsSubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_scriptTagsSubsequentRequests.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,iCAAiC,GAAG,CAAO,GAAW,EAAE,aAAqB,EAAE,EAAE;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAEvF,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpB,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,6FAA6F;IAC7F,iFAAiF;IAEjF,2CAA2C;IAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3C,MAAM,kBAAkB,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;IACT,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,kDAAkD,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,eAAe,iCAAiC,CAAC"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Source Map Decoder
3
+ *
4
+ * Extracts original source code from minified JavaScript using source maps.
5
+ */
6
+ /**
7
+ * Extract original source files from a source map.
8
+ *
9
+ * @param sourceMap - The source map object or JSON string
10
+ * @param options - Optional configuration
11
+ * @returns Object containing extracted files and count of missing sources
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { extractSources } from './sourcemap';
16
+ *
17
+ * const sourceMap = {
18
+ * version: 3,
19
+ * sources: ['src/app.ts', 'src/utils.ts'],
20
+ * sourcesContent: ['const x = 1;', 'export const y = 2;'],
21
+ * mappings: '...',
22
+ * };
23
+ *
24
+ * const result = extractSources(sourceMap);
25
+ * for (const file of result.files) {
26
+ * console.log(`${file.path}:\n${file.content}`);
27
+ * }
28
+ * ```
29
+ */
30
+ export function extractSources(sourceMap, options = {}) {
31
+ var _a;
32
+ const { cleanPaths = true, normalizePaths = true } = options;
33
+ // Parse JSON string if needed
34
+ const map = typeof sourceMap === "string" ? JSON.parse(sourceMap) : sourceMap;
35
+ // Validate source map
36
+ if (!map.sources || !Array.isArray(map.sources)) {
37
+ throw new Error('Invalid source map: missing "sources" array');
38
+ }
39
+ const files = [];
40
+ let missingCount = 0;
41
+ for (let i = 0; i < map.sources.length; i++) {
42
+ let path = map.sources[i];
43
+ const content = (_a = map.sourcesContent) === null || _a === void 0 ? void 0 : _a[i];
44
+ // Skip if no content
45
+ if (content === null || content === undefined) {
46
+ missingCount++;
47
+ continue;
48
+ }
49
+ // Clean up path
50
+ if (cleanPaths) {
51
+ path = cleanPath(path);
52
+ }
53
+ if (normalizePaths) {
54
+ path = normalizePath(path);
55
+ }
56
+ // Apply sourceRoot if present
57
+ if (map.sourceRoot && !path.startsWith("/")) {
58
+ const root = cleanPaths ? cleanPath(map.sourceRoot) : map.sourceRoot;
59
+ path = joinPaths(root, path);
60
+ }
61
+ files.push({ path, content });
62
+ }
63
+ return { files, missingCount };
64
+ }
65
+ /**
66
+ * Extract a single source file by index or path.
67
+ *
68
+ * @param sourceMap - The source map object or JSON string
69
+ * @param indexOrPath - Index into sources array or file path to find
70
+ * @returns The source file or null if not found
71
+ */
72
+ export function extractSource(sourceMap, indexOrPath) {
73
+ var _a, _b;
74
+ const map = typeof sourceMap === "string" ? JSON.parse(sourceMap) : sourceMap;
75
+ if (typeof indexOrPath === "number") {
76
+ const index = indexOrPath;
77
+ if (index < 0 || index >= map.sources.length) {
78
+ return null;
79
+ }
80
+ const content = (_a = map.sourcesContent) === null || _a === void 0 ? void 0 : _a[index];
81
+ if (content === null || content === undefined) {
82
+ return null;
83
+ }
84
+ return { path: map.sources[index], content };
85
+ }
86
+ // Search by path
87
+ const searchPath = indexOrPath;
88
+ const index = map.sources.findIndex((s) => s === searchPath ||
89
+ s.endsWith(searchPath) ||
90
+ cleanPath(s) === searchPath ||
91
+ cleanPath(s).endsWith(searchPath));
92
+ if (index === -1) {
93
+ return null;
94
+ }
95
+ const content = (_b = map.sourcesContent) === null || _b === void 0 ? void 0 : _b[index];
96
+ if (content === null || content === undefined) {
97
+ return null;
98
+ }
99
+ return { path: map.sources[index], content };
100
+ }
101
+ /**
102
+ * Get list of source file paths without extracting content.
103
+ *
104
+ * @param sourceMap - The source map object or JSON string
105
+ * @returns Array of source file paths
106
+ */
107
+ export function listSources(sourceMap) {
108
+ const map = typeof sourceMap === "string" ? JSON.parse(sourceMap) : sourceMap;
109
+ return map.sources || [];
110
+ }
111
+ /**
112
+ * Check if a source map has embedded source content.
113
+ *
114
+ * @param sourceMap - The source map object or JSON string
115
+ * @returns true if sourcesContent is present and has at least one non-null entry
116
+ */
117
+ export function hasSourceContent(sourceMap) {
118
+ const map = typeof sourceMap === "string" ? JSON.parse(sourceMap) : sourceMap;
119
+ return Array.isArray(map.sourcesContent) && map.sourcesContent.some((c) => c !== null && c !== undefined);
120
+ }
121
+ /**
122
+ * Remove protocol prefixes like webpack://, file://, etc.
123
+ */
124
+ function cleanPath(path) {
125
+ return path
126
+ .replace(/^webpack:\/\/[^/]*\//, "") // webpack://package-name/
127
+ .replace(/^webpack:\/\//, "") // webpack://
128
+ .replace(/^file:\/\//, "") // file://
129
+ .replace(/^\.\//, ""); // ./
130
+ }
131
+ /**
132
+ * Normalize path by resolving ../ sequences.
133
+ * SECURITY: Removes all leading ../ to prevent directory traversal attacks.
134
+ * Files will always stay within the intended output directory.
135
+ */
136
+ function normalizePath(path) {
137
+ const parts = path.split("/");
138
+ const result = [];
139
+ for (const part of parts) {
140
+ if (part === "..") {
141
+ // Only allow going back within the path we've built
142
+ // Never allow escaping (result would go negative)
143
+ if (result.length > 0) {
144
+ result.pop();
145
+ }
146
+ // If result is empty, just skip the '..' entirely (prevents traversal)
147
+ }
148
+ else if (part !== "." && part !== "") {
149
+ result.push(part);
150
+ }
151
+ }
152
+ return result.join("/") || ".";
153
+ }
154
+ /**
155
+ * Sanitize a path to ensure it cannot escape the output directory.
156
+ * This is a safety check that should be used before writing files.
157
+ *
158
+ * @param basePath - The base output directory (absolute path)
159
+ * @param filePath - The file path to sanitize
160
+ * @returns Safe path that is guaranteed to be under basePath
161
+ */
162
+ export function safePath(basePath, filePath) {
163
+ // Clean and normalize the file path
164
+ let cleaned = cleanPath(filePath);
165
+ cleaned = normalizePath(cleaned);
166
+ // Remove any remaining ../ sequences (belt and suspenders)
167
+ cleaned = cleaned.replace(/\.\.\//g, "").replace(/^\.\.$/, "");
168
+ // Remove leading slashes to prevent absolute path injection
169
+ cleaned = cleaned.replace(/^\/+/, "");
170
+ // Join with base path
171
+ const joined = basePath.endsWith("/") ? basePath + cleaned : basePath + "/" + cleaned;
172
+ return joined;
173
+ }
174
+ /**
175
+ * Join two path segments
176
+ */
177
+ function joinPaths(base, path) {
178
+ if (!base)
179
+ return path;
180
+ if (!path)
181
+ return base;
182
+ const baseClean = base.endsWith("/") ? base.slice(0, -1) : base;
183
+ const pathClean = path.startsWith("/") ? path.slice(1) : path;
184
+ return `${baseClean}/${pathClean}`;
185
+ }
186
+ // Default export for convenience
187
+ export default { extractSources, extractSource, listSources, hasSourceContent };
188
+ //# sourceMappingURL=sourcemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemap.js","sourceRoot":"","sources":["../../src/lazyLoad/sourcemap.ts"],"names":[],"mappings":"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"}