@js-recon/js-recon 1.4.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.github/workflows/build-and-prettify.yaml +6 -6
  2. package/.github/workflows/rules-smoke-test.yaml +2 -2
  3. package/CHANGELOG.md +30 -0
  4. package/Dockerfile +13 -2
  5. package/Dockerfile.release +12 -2
  6. package/Dockerfile.w-rules +0 -1
  7. package/README.md +52 -0
  8. package/build/analyze/helpers/initRules.js +34 -16
  9. package/build/analyze/helpers/initRules.js.map +1 -1
  10. package/build/completion/index.js +44 -3
  11. package/build/completion/index.js.map +1 -1
  12. package/build/config/applicationConfig.js +493 -0
  13. package/build/config/applicationConfig.js.map +1 -0
  14. package/build/fingerprint/index.js +8 -19
  15. package/build/fingerprint/index.js.map +1 -1
  16. package/build/globalConfig.js +1 -1
  17. package/build/index.js +62 -9
  18. package/build/index.js.map +1 -1
  19. package/build/lazyLoad/downloadFilesUtil.js +40 -32
  20. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  21. package/build/lazyLoad/downloadQueue.js +150 -50
  22. package/build/lazyLoad/downloadQueue.js.map +1 -1
  23. package/build/lazyLoad/downloadResponse.js +112 -0
  24. package/build/lazyLoad/downloadResponse.js.map +1 -0
  25. package/build/lazyLoad/globals.js +4 -0
  26. package/build/lazyLoad/globals.js.map +1 -1
  27. package/build/lazyLoad/index.js +188 -115
  28. package/build/lazyLoad/index.js.map +1 -1
  29. package/build/lazyLoad/next_js/NextJsCrawler.js +3 -2
  30. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  31. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +8 -9
  32. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  33. package/build/lazyLoad/next_js/next_SubsequentRequests.js +93 -93
  34. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  35. package/build/lazyLoad/outputPath.js +92 -0
  36. package/build/lazyLoad/outputPath.js.map +1 -0
  37. package/build/lazyLoad/react/react_followImports.js +15 -5
  38. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  39. package/build/lazyLoad/react/react_getScriptTags.js +11 -6
  40. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
  41. package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
  42. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
  43. package/build/lazyLoad/react/react_webpackChunkPaths.js +2 -1
  44. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  45. package/build/lazyLoad/techDetect/index.js +93 -59
  46. package/build/lazyLoad/techDetect/index.js.map +1 -1
  47. package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
  48. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  49. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +8 -3
  50. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  51. package/build/lazyLoad/vue/vue_discoverJsFiles.js +10 -9
  52. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  53. package/build/lazyLoad/vue/vue_getClientSidePaths.js +69 -45
  54. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  55. package/build/lazyLoad/vue/vue_jsImports.js +3 -2
  56. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  57. package/build/lazyLoad/vue/vue_pageSrc.js +2 -1
  58. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
  59. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +4 -3
  60. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
  61. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +9 -20
  62. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  63. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +2 -1
  64. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
  65. package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
  66. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
  67. package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
  68. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  69. package/build/proxy/checkFeasibility.js +8 -4
  70. package/build/proxy/checkFeasibility.js.map +1 -1
  71. package/build/proxy/checkFireWallBlocking.js +23 -13
  72. package/build/proxy/checkFireWallBlocking.js.map +1 -1
  73. package/build/proxy/detectBlockedResponse.js +203 -0
  74. package/build/proxy/detectBlockedResponse.js.map +1 -0
  75. package/build/proxy/genReq.js +434 -127
  76. package/build/proxy/genReq.js.map +1 -1
  77. package/build/proxy/oxylabsFallback.js +110 -0
  78. package/build/proxy/oxylabsFallback.js.map +1 -0
  79. package/build/proxy/proxyFeasibilityRequest.js +11 -9
  80. package/build/proxy/proxyFeasibilityRequest.js.map +1 -1
  81. package/build/run/cancellableStep.js +27 -0
  82. package/build/run/cancellableStep.js.map +1 -0
  83. package/build/run/index.js +80 -85
  84. package/build/run/index.js.map +1 -1
  85. package/build/run/outputDirectory.js +377 -0
  86. package/build/run/outputDirectory.js.map +1 -0
  87. package/build/sourcemaps/index.js +109 -23
  88. package/build/sourcemaps/index.js.map +1 -1
  89. package/build/strings/index.js +12 -5
  90. package/build/strings/index.js.map +1 -1
  91. package/build/utility/downloadProgress.js +99 -0
  92. package/build/utility/downloadProgress.js.map +1 -0
  93. package/build/utility/makeReq.js +490 -257
  94. package/build/utility/makeReq.js.map +1 -1
  95. package/build/utility/progressLog.js +64 -4
  96. package/build/utility/progressLog.js.map +1 -1
  97. package/build/utility/targetInputs.js +177 -0
  98. package/build/utility/targetInputs.js.map +1 -0
  99. package/build/utility/urlUtils.js +37 -1
  100. package/build/utility/urlUtils.js.map +1 -1
  101. package/config.dist.yaml +251 -0
  102. package/docker-entrypoint.sh +16 -0
  103. package/package.json +2 -2
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import chalk from "chalk";
11
11
  import cliProgress from "cli-progress";
12
12
  import makeRequest from "../../utility/makeReq.js";
13
- import { setActiveBarLogger, computeBarSize, watchBarResize } from "../../utility/progressLog.js";
13
+ import { activateBarLogger, computeBarSize, watchBarResize, withProgressResources } from "../../utility/progressLog.js";
14
14
  import parser from "@babel/parser";
15
15
  import { extractStrings } from "../../strings/index.js";
16
16
  import { runWithConcurrency } from "../../utility/concurrency.js";
@@ -106,24 +106,28 @@ const fetchAndExtractJsStrings = (url, maxJsSizeMb) => __awaiter(void 0, void 0,
106
106
  * known JS file for references that end in `.js` and resolving them against
107
107
  * the file's own URL.
108
108
  */
109
- const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [knownJsFiles_1, ...args_1], void 0, function* (knownJsFiles, maxJsSizeMb = 2, threads = 1) {
109
+ const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [knownJsFiles_1, ...args_1], void 0, function* (knownJsFiles, maxJsSizeMb = 2, threads = 1, showProgress = true) {
110
110
  const allFound = new Set();
111
111
  const crawled = new Set(knownJsFiles);
112
- const bar = new cliProgress.SingleBar({
113
- format: chalk.cyan("[i] Scanning JS string refs ") +
114
- "[{bar}] {percentage}% | {value}/{total} files | {refs} refs found",
115
- barCompleteChar: "█",
116
- barIncompleteChar: "░",
117
- barsize: computeBarSize(72),
118
- hideCursor: false,
119
- clearOnComplete: false,
120
- stopOnComplete: false,
121
- }, cliProgress.Presets.shades_classic);
112
+ const bar = showProgress
113
+ ? new cliProgress.SingleBar({
114
+ format: chalk.cyan("[i] Scanning JS string refs ") +
115
+ "[{bar}] {percentage}% | {value}/{total} files | {refs} refs found",
116
+ barCompleteChar: "█",
117
+ barIncompleteChar: "░",
118
+ barsize: computeBarSize(72),
119
+ hideCursor: false,
120
+ clearOnComplete: false,
121
+ stopOnComplete: false,
122
+ }, cliProgress.Presets.shades_classic)
123
+ : null;
122
124
  let processed = 0;
123
125
  let totalKnown = knownJsFiles.length;
124
- bar.start(totalKnown, 0, { refs: 0 });
125
- const stopBarWatcher = watchBarResize(bar, 72);
126
- setActiveBarLogger({ log: (s) => process.stdout.write("\r\x1b[K" + s) });
126
+ bar === null || bar === void 0 ? void 0 : bar.start(totalKnown, 0, { refs: 0 });
127
+ const stopBarWatcher = bar ? watchBarResize(bar, 72) : () => undefined;
128
+ const releaseBarLogger = bar
129
+ ? activateBarLogger({ log: (s) => process.stdout.write("\r\x1b[K" + s) }, process.stdout.isTTY === true)
130
+ : () => undefined;
127
131
  const processFile = (url, newFiles) => __awaiter(void 0, void 0, void 0, function* () {
128
132
  const discovered = yield fetchAndExtractJsStrings(url, maxJsSizeMb);
129
133
  for (const u of discovered) {
@@ -132,23 +136,22 @@ const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [know
132
136
  crawled.add(u);
133
137
  newFiles.push(u);
134
138
  totalKnown++;
135
- bar.setTotal(totalKnown);
139
+ bar === null || bar === void 0 ? void 0 : bar.setTotal(totalKnown);
136
140
  }
137
141
  }
138
142
  processed++;
139
- bar.update(processed, { refs: allFound.size });
143
+ bar === null || bar === void 0 ? void 0 : bar.update(processed, { refs: allFound.size });
140
144
  });
141
145
  // Fixpoint discovery, processed in rounds: each round's batch is fetched
142
146
  // concurrently, and any newly-discovered files seed the next round.
143
147
  let currentBatch = [...knownJsFiles];
144
- while (currentBatch.length > 0) {
145
- const newFiles = [];
146
- yield runWithConcurrency(currentBatch, threads, (url) => processFile(url, newFiles));
147
- currentBatch = newFiles;
148
- }
149
- bar.stop();
150
- stopBarWatcher();
151
- setActiveBarLogger(null);
148
+ yield withProgressResources(() => __awaiter(void 0, void 0, void 0, function* () {
149
+ while (currentBatch.length > 0) {
150
+ const newFiles = [];
151
+ yield runWithConcurrency(currentBatch, threads, (url) => processFile(url, newFiles));
152
+ currentBatch = newFiles;
153
+ }
154
+ }), () => bar === null || bar === void 0 ? void 0 : bar.stop(), stopBarWatcher, releaseBarLogger);
152
155
  return [...allFound];
153
156
  });
154
157
  export default vue_stringJsFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"vue_stringJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_stringJsFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAiB,EAAE;IACtE,IAAI,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAEnC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC;QAED,kEAAkE;QAClE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;QAE9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,8DAA8D;YAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,OAAO,MAAM,GAAG,GAAG,CAAC;QACxB,CAAC;QAED,wEAAwE;QACxE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,wEAAwE;QACxE,+DAA+D;QAC/D,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;gBAAE,SAAS;YAEjD,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACV,CAAC;YACL,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/E,OAAO,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;YAC3C,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,OAAO,MAAM,GAAG,GAAG,CAAC;IACxB,CAAC;IAAC,WAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAO,GAAW,EAAE,WAAmB,EAAwB,EAAE;IAC9F,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAE9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,KAAK,CAAC;IAE1C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACD,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;YACrB,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;YAC9B,aAAa,EAAE,IAAI;SACtB,CAAC,CAAC;IACP,CAAC;IAAC,WAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAEjC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAA,CAAC;AAEF;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,4BAIL,EAAE,mEAHnB,YAAsB,EACtB,cAAsB,CAAC,EACvB,UAAkB,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,CAAC;IAE9C,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,SAAS,CACjC;QACI,MAAM,EACF,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC;YAC1C,mEAAmE;QACvE,eAAe,EAAE,GAAG;QACpB,iBAAiB,EAAE,GAAG;QACtB,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3B,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,KAAK;KACxB,EACD,WAAW,CAAC,OAAO,CAAC,cAAc,CACrC,CAAC;IAEF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;IAErC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjF,MAAM,WAAW,GAAG,CAAO,GAAW,EAAE,QAAkB,EAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,UAAU,EAAE,CAAC;gBACb,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,SAAS,EAAE,CAAC;QACZ,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAA,CAAC;IAEF,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACrC,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrF,YAAY,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,cAAc,EAAE,CAAC;IACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACzB,CAAC,CAAA,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"vue_stringJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_stringJsFiles.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import _traverse from "@babel/traverse";
14
14
  import chalk from "chalk";
15
15
  import t from "@babel/types";
16
16
  import { runWithConcurrency } from "../../utility/concurrency.js";
17
+ import { progressLog } from "../../utility/progressLog.js";
17
18
  const traverse = ((_a = _traverse.default) !== null && _a !== void 0 ? _a : _traverse);
18
19
  /**
19
20
  * Pure parser: given the text content of a JS file and the URL it was fetched
@@ -63,7 +64,12 @@ export const extractViteMapDepsChunks = (content, jsUrl) => {
63
64
  // Explicit relative paths (./ or ../) → file-relative.
64
65
  // Everything else → root-relative (origin).
65
66
  const isFileRelative = val.startsWith("./") || val.startsWith("../");
66
- found.push(new URL(val, isFileRelative ? jsUrl : jsOrigin).href);
67
+ try {
68
+ found.push(new URL(val, isFileRelative ? jsUrl : jsOrigin).href);
69
+ }
70
+ catch (_a) {
71
+ // Target-controlled manifests may contain malformed URL-like strings.
72
+ }
67
73
  }
68
74
  }
69
75
  },
@@ -87,7 +93,7 @@ const vue_viteMapDeps = (jsFiles_1, ...args_1) => __awaiter(void 0, [jsFiles_1,
87
93
  return;
88
94
  const chunks = extractViteMapDepsChunks(content, jsUrl);
89
95
  if (chunks.length > 0) {
90
- console.log(chalk.green(`[✓] Found ${chunks.length} chunks from __vite__mapDeps in ${jsUrl}`));
96
+ progressLog(chalk.green(`[✓] Found ${chunks.length} chunks from __vite__mapDeps in ${jsUrl}`));
91
97
  for (const u of chunks)
92
98
  discovered.add(u);
93
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vue_viteMapDeps.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_viteMapDeps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vue_viteMapDeps.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_viteMapDeps.ts"],"names":[],"mappings":"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"}
@@ -57,13 +57,17 @@ export const determineFeasibilityOutcome = (blockedWithoutProxy, blockedWithProx
57
57
  */
58
58
  export const probeFeasibility = (resolved, url) => __awaiter(void 0, void 0, void 0, function* () {
59
59
  console.log(chalk.cyan(`[i] Checking feasibility of the "${resolved.method}" proxy method with ${url}`));
60
- const directBody = yield (yield fetch(url)).text();
61
- const blockedWithoutProxy = yield checkFireWallBlocking(directBody);
60
+ const directResponse = yield fetch(url);
61
+ const directBody = yield directResponse.text();
62
+ const blockedWithoutProxy = yield checkFireWallBlocking(directBody, {
63
+ status: directResponse.status,
64
+ headers: directResponse.headers,
65
+ });
62
66
  let blockedWithProxy = false;
63
67
  if (blockedWithoutProxy) {
64
68
  for (let i = 0; i < PROXY_CHECK_REQUESTS; i++) {
65
- const body = yield proxyFeasibilityRequest(resolved, url);
66
- if (yield checkFireWallBlocking(body)) {
69
+ const { body, status, headers } = yield proxyFeasibilityRequest(resolved, url);
70
+ if (yield checkFireWallBlocking(body, { status, headers })) {
67
71
  blockedWithProxy = true;
68
72
  break;
69
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkFeasibility.js","sourceRoot":"","sources":["../../src/proxy/checkFeasibility.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,4GAA4G;AAC5G,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAOhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,mBAA4B,EAC5B,gBAAyB,EACP,EAAE;IACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,kFAAkF;SAC9F,CAAC;IACN,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,2FAA2F;SACvG,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI,EAAE,CAAC;QACP,OAAO,EACH,mHAAmH;KAC1H,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAA+B,EAAE;IAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAEpE,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,2BAA2B,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAC9E,CAAC,CAAA,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAAiB,EAAE;IACzF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"checkFeasibility.js","sourceRoot":"","sources":["../../src/proxy/checkFeasibility.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,4GAA4G;AAC5G,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAOhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,mBAA4B,EAC5B,gBAAyB,EACP,EAAE;IACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,kFAAkF;SAC9F,CAAC;IACN,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,2FAA2F;SACvG,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI,EAAE,CAAC;QACP,OAAO,EACH,mHAAmH;KAC1H,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAA+B,EAAE;IAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE;QAChE,MAAM,EAAE,cAAc,CAAC,MAAM;QAC7B,OAAO,EAAE,cAAc,CAAC,OAAO;KAClC,CAAC,CAAC;IAEH,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/E,IAAI,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACzD,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,2BAA2B,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAC9E,CAAC,CAAA,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAAiB,EAAE;IACzF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -8,26 +8,36 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import chalk from "chalk";
11
+ import detectBlockedResponse from "./detectBlockedResponse.js";
12
+ /**
13
+ * Sentinel status used when the caller has no real HTTP status available. Outside the
14
+ * 400–599 range detectBlockedResponse's corroborated-status/generated-error paths require,
15
+ * so omitting status *skips* those paths instead of spoofing a match against the wrong
16
+ * denial-pattern set.
17
+ */
18
+ const UNKNOWN_STATUS = 0;
11
19
  /**
12
20
  * Checks if a response body contains signs of firewall or security system blocking.
13
21
  *
14
- * Currently detects Cloudflare protection pages by looking for specific HTML title patterns
15
- * that indicate the request was intercepted by a security system.
22
+ * Detects Cloudflare challenge pages from body content alone, and (when the caller can
23
+ * supply the real HTTP status and headers) corroborated 403/429/503 WAF/CDN denial pages.
16
24
  *
17
25
  * @param body - The response body content to analyze for blocking indicators
26
+ * @param context - The real HTTP status/headers, when available
18
27
  * @returns Promise that resolves to true if blocking is detected, false otherwise
19
28
  */
20
- const checkFireWallBlocking = (body) => __awaiter(void 0, void 0, void 0, function* () {
21
- // check common signs of CF first
22
- if (body.includes("<title>Just a moment...</title>")) {
23
- console.error(chalk.red("[!] Cloudflare detected"));
24
- return true;
25
- }
26
- else if (body.includes("<title>Attention Required! | Cloudflare</title>")) {
27
- console.error(chalk.red("[!] Cloudflare detected"));
28
- return true;
29
- }
30
- return false;
29
+ const checkFireWallBlocking = (body_1, ...args_1) => __awaiter(void 0, [body_1, ...args_1], void 0, function* (body, context = {}) {
30
+ var _a;
31
+ const detection = detectBlockedResponse({
32
+ status: (_a = context.status) !== null && _a !== void 0 ? _a : UNKNOWN_STATUS,
33
+ headers: context.headers,
34
+ body,
35
+ });
36
+ if (!detection.blocked)
37
+ return false;
38
+ const provider = detection.provider === "cloudfront" ? "CloudFront" : "Cloudflare/CDN";
39
+ console.error(chalk.red(`[!] ${provider} detected`));
40
+ return true;
31
41
  });
32
42
  export default checkFireWallBlocking;
33
43
  //# sourceMappingURL=checkFireWallBlocking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkFireWallBlocking.js","sourceRoot":"","sources":["../../src/proxy/checkFireWallBlocking.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,CAAO,IAAY,EAAoB,EAAE;IACnE,iCAAiC;IACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAA,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"checkFireWallBlocking.js","sourceRoot":"","sources":["../../src/proxy/checkFireWallBlocking.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAsD,MAAM,4BAA4B,CAAC;AAEhG;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAOzB;;;;;;;;;GASG;AACH,MAAM,qBAAqB,GAAG,oBAA2E,EAAE,2DAAtE,IAAY,EAAE,UAAgC,EAAE;;IACjF,MAAM,SAAS,GAAG,qBAAqB,CAAC;QACpC,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,cAAc;QACxC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI;KACP,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACvF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,203 @@
1
+ const NO_EVIDENCE = Object.freeze([]);
2
+ const NOT_BLOCKED = Object.freeze({
3
+ blocked: false,
4
+ provider: null,
5
+ reason: null,
6
+ evidence: NO_EVIDENCE,
7
+ });
8
+ const HTML_DOCUMENT_START = /^\uFEFF?\s*(?:<!doctype\s+html\b|<html\b|<head\b|<title\b)/i;
9
+ const JAVASCRIPT_CONTENT_TYPE = /(?:java|ecma)script/i;
10
+ const CLOUDFRONT_ERROR_BODY = /\berror:\s*the request could not be satisfied\b/i;
11
+ const CLOUDFRONT_GENERATOR = /\bgenerated by cloudfront\s*\(cloudfront\)/i;
12
+ const CDN_HEADER_RULES = Object.freeze([
13
+ Object.freeze({
14
+ name: "cf-ray",
15
+ provider: "cloudflare",
16
+ matches: (value) => value.trim().length > 0,
17
+ }),
18
+ Object.freeze({
19
+ name: "server",
20
+ provider: "cloudflare",
21
+ matches: (value) => /(?:^|\s|\()cloudflare(?:$|\s|\))/i.test(value),
22
+ }),
23
+ Object.freeze({
24
+ name: "x-amz-cf-id",
25
+ provider: "cloudfront",
26
+ matches: (value) => value.trim().length > 0,
27
+ }),
28
+ Object.freeze({
29
+ name: "server",
30
+ provider: "cloudfront",
31
+ matches: (value) => /\bcloudfront\b/i.test(value),
32
+ }),
33
+ Object.freeze({
34
+ name: "via",
35
+ provider: "cloudfront",
36
+ matches: (value) => /\bcloudfront\b/i.test(value),
37
+ }),
38
+ Object.freeze({
39
+ name: "x-cache",
40
+ provider: "cloudfront",
41
+ matches: (value) => /\bcloudfront\b/i.test(value),
42
+ }),
43
+ Object.freeze({
44
+ name: "server",
45
+ provider: "cdn",
46
+ matches: (value) => /^(?:akamaighost|fastly|varnish|sucuri\/cloudproxy)\b/i.test(value.trim()),
47
+ }),
48
+ Object.freeze({
49
+ name: "via",
50
+ provider: "cdn",
51
+ matches: (value) => /\b(?:akamai|fastly|varnish)\b/i.test(value),
52
+ }),
53
+ Object.freeze({
54
+ name: "x-served-by",
55
+ provider: "cdn",
56
+ matches: (value) => /(?:^|[\s,])cache-/i.test(value),
57
+ }),
58
+ Object.freeze({
59
+ name: "x-akamai-transformed",
60
+ provider: "cdn",
61
+ matches: (value) => value.trim().length > 0,
62
+ }),
63
+ Object.freeze({
64
+ name: "x-sucuri-id",
65
+ provider: "cdn",
66
+ matches: (value) => value.trim().length > 0,
67
+ }),
68
+ ]);
69
+ const STATUS_DENIAL_PATTERNS = Object.freeze({
70
+ 403: Object.freeze([
71
+ Object.freeze({ pattern: /\baccess\s+denied\b/i, label: "access denied" }),
72
+ Object.freeze({ pattern: /\brequest\s+(?:was\s+)?blocked\b/i, label: "request blocked" }),
73
+ ]),
74
+ 429: Object.freeze([
75
+ Object.freeze({ pattern: /\btoo many requests\b/i, label: "too many requests" }),
76
+ Object.freeze({ pattern: /\brate[ -]?limit(?:ed| exceeded)?\b/i, label: "rate limit" }),
77
+ ]),
78
+ 503: Object.freeze([
79
+ Object.freeze({ pattern: /\bservice unavailable\b/i, label: "service unavailable" }),
80
+ Object.freeze({ pattern: /\btemporarily unavailable\b/i, label: "temporarily unavailable" }),
81
+ Object.freeze({ pattern: /\bchecking your browser\b/i, label: "browser check" }),
82
+ ]),
83
+ });
84
+ const normalizeHeaderValue = (value) => {
85
+ if (typeof value === "string")
86
+ return value;
87
+ if (Array.isArray(value))
88
+ return value.join(", ");
89
+ return null;
90
+ };
91
+ const normalizeHeaderEntries = (entries) => Object.freeze(entries.reduce((normalized, [name, rawValue]) => {
92
+ const value = normalizeHeaderValue(rawValue);
93
+ return value === null ? normalized : Object.assign(Object.assign({}, normalized), { [name.toLowerCase()]: value });
94
+ }, {}));
95
+ const normalizeHeaders = (headers) => {
96
+ if (!headers)
97
+ return Object.freeze({});
98
+ if (typeof Headers !== "undefined" && headers instanceof Headers) {
99
+ return normalizeHeaderEntries(Array.from(headers.entries()));
100
+ }
101
+ return normalizeHeaderEntries(Object.entries(headers));
102
+ };
103
+ const evidence = (source, signal, value, name) => Object.freeze(Object.assign(Object.assign({ source, signal }, (name ? { name } : {})), { value }));
104
+ const blockedResult = (provider, reason, items) => Object.freeze({
105
+ blocked: true,
106
+ provider,
107
+ reason,
108
+ evidence: Object.freeze([...items]),
109
+ });
110
+ const isHtmlDocument = (headers, body) => { var _a; return !JAVASCRIPT_CONTENT_TYPE.test((_a = headers["content-type"]) !== null && _a !== void 0 ? _a : "") && HTML_DOCUMENT_START.test(body); };
111
+ const normalizedTitle = (body) => {
112
+ const match = /<title(?:\s[^>]*)?>([\s\S]*?)<\/title\s*>/i.exec(body);
113
+ return match ? match[1].replace(/\s+/g, " ").trim() : null;
114
+ };
115
+ const cloudflareDocumentEvidence = (body) => {
116
+ const title = normalizedTitle(body);
117
+ const titleMatch = title && ["just a moment...", "attention required! | cloudflare"].includes(title.toLowerCase())
118
+ ? evidence("title", "cloudflare-challenge-title", title)
119
+ : null;
120
+ const bodyMarker = /\/cdn-cgi\/challenge-platform\//i.test(body)
121
+ ? "/cdn-cgi/challenge-platform/"
122
+ : /\/\?bm-verify=/i.test(body)
123
+ ? "/?bm-verify="
124
+ : /\b(?:window\.)?_cf_chl_opt\b/i.test(body)
125
+ ? "_cf_chl_opt"
126
+ : /\bchecking your browser\b/i.test(body) && /\bcloudflare\b/i.test(body)
127
+ ? "Cloudflare browser check"
128
+ : null;
129
+ const bodyMatch = bodyMarker ? evidence("body", "cloudflare-challenge-body", bodyMarker) : null;
130
+ return Object.freeze([titleMatch, bodyMatch].filter((item) => item !== null));
131
+ };
132
+ const cdnHeaderMatches = (headers) => Object.freeze(CDN_HEADER_RULES.flatMap((rule) => {
133
+ const value = headers[rule.name];
134
+ return value && rule.matches(value)
135
+ ? [Object.freeze({ provider: rule.provider, name: rule.name, value })]
136
+ : [];
137
+ }));
138
+ const providerFromHeaderMatches = (matches) => {
139
+ if (matches.some((match) => match.provider === "cloudflare"))
140
+ return "cloudflare";
141
+ if (matches.some((match) => match.provider === "cloudfront"))
142
+ return "cloudfront";
143
+ return "cdn";
144
+ };
145
+ const denialBodyMarker = (status, body) => {
146
+ var _a, _b, _c;
147
+ const patterns = (_a = STATUS_DENIAL_PATTERNS[status]) !== null && _a !== void 0 ? _a : [];
148
+ return (_c = (_b = patterns.find(({ pattern }) => pattern.test(body))) === null || _b === void 0 ? void 0 : _b.label) !== null && _c !== void 0 ? _c : null;
149
+ };
150
+ /**
151
+ * Detects strongly evidenced CDN/WAF block responses without I/O or logging.
152
+ *
153
+ * Generic 403/429/503 responses are only classified when status, a recognized CDN header,
154
+ * and a status-appropriate HTML denial body corroborate one another. Explicit Cloudflare
155
+ * challenge and CloudFront-generated-error signals can be decisive on their own.
156
+ */
157
+ export const detectBlockedResponse = (input) => {
158
+ const headers = normalizeHeaders(input.headers);
159
+ const body = typeof input.body === "string" ? input.body : "";
160
+ const cfMitigated = headers["cf-mitigated"];
161
+ if (cfMitigated === null || cfMitigated === void 0 ? void 0 : cfMitigated.split(",").some((value) => value.trim().toLowerCase() === "challenge")) {
162
+ return blockedResult("cloudflare", "explicit-challenge", [
163
+ evidence("header", "cloudflare-challenge-header", cfMitigated, "cf-mitigated"),
164
+ ]);
165
+ }
166
+ const htmlDocument = isHtmlDocument(headers, body);
167
+ if (htmlDocument) {
168
+ const cloudflareEvidence = cloudflareDocumentEvidence(body);
169
+ if (cloudflareEvidence.length > 0) {
170
+ return blockedResult("cloudflare", "explicit-challenge", cloudflareEvidence);
171
+ }
172
+ }
173
+ const errorStatus = Number.isInteger(input.status) && input.status >= 400 && input.status <= 599 && input.status !== 404;
174
+ const cloudfrontErrorHeader = headers["x-cache"];
175
+ if (errorStatus && cloudfrontErrorHeader && /\berror from cloudfront\b/i.test(cloudfrontErrorHeader)) {
176
+ const requestId = headers["x-amz-cf-id"];
177
+ return blockedResult("cloudfront", "generated-error", [
178
+ evidence("status", "error-http-status", input.status),
179
+ evidence("header", "cloudfront-generated-error-header", cloudfrontErrorHeader, "x-cache"),
180
+ ...(requestId ? [evidence("header", "cloudfront-request-id-header", requestId, "x-amz-cf-id")] : []),
181
+ ]);
182
+ }
183
+ if (errorStatus && htmlDocument && CLOUDFRONT_ERROR_BODY.test(body) && CLOUDFRONT_GENERATOR.test(body)) {
184
+ return blockedResult("cloudfront", "generated-error", [
185
+ evidence("status", "error-http-status", input.status),
186
+ evidence("body", "cloudfront-generated-error-body", "Generated by cloudfront (CloudFront)"),
187
+ ]);
188
+ }
189
+ const denialMarker = htmlDocument ? denialBodyMarker(input.status, body) : null;
190
+ if (denialMarker) {
191
+ const headerMatches = cdnHeaderMatches(headers);
192
+ if (headerMatches.length > 0) {
193
+ return blockedResult(providerFromHeaderMatches(headerMatches), "corroborated-status", [
194
+ evidence("status", "blocked-http-status", input.status),
195
+ ...headerMatches.map((match) => evidence("header", "cdn-response-header", match.value, match.name)),
196
+ evidence("body", "status-matched-denial-body", denialMarker),
197
+ ]);
198
+ }
199
+ }
200
+ return NOT_BLOCKED;
201
+ };
202
+ export default detectBlockedResponse;
203
+ //# sourceMappingURL=detectBlockedResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectBlockedResponse.js","sourceRoot":"","sources":["../../src/proxy/detectBlockedResponse.ts"],"names":[],"mappings":"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"}