@prosopo/provider 4.15.14 → 4.15.15

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 (232) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +106 -106
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +107 -104
  4. package/CHANGELOG.md +49 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/api/admin/apiAdminRoutesProvider.js +27 -46
  7. package/dist/api/admin/apiClearAllCountersEndpoint.js +62 -57
  8. package/dist/api/admin/apiDnsEventEndpoint.js +79 -92
  9. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js +43 -45
  10. package/dist/api/admin/apiGetDecisionMachineEndpoint.js +40 -40
  11. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +23 -22
  12. package/dist/api/admin/apiRegisterSiteKeysEndpoint.js +26 -30
  13. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js +35 -37
  14. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js +40 -40
  15. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  16. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +29 -31
  17. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js +33 -29
  18. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js +32 -31
  19. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +43 -35
  20. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js +43 -63
  21. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +36 -35
  22. package/dist/api/admin/createApiAdminRoutesProvider.js +6 -8
  23. package/dist/api/blacklistRequestInspector.js +285 -377
  24. package/dist/api/block.js +17 -30
  25. package/dist/api/captcha/checkSpamEmail.js +88 -98
  26. package/dist/api/captcha/contextAwareValidation.js +21 -15
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +126 -140
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +11 -12
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +236 -299
  30. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js +10 -13
  31. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +336 -462
  32. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js +17 -14
  33. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js +27 -27
  34. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +42 -63
  35. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +2 -4
  36. package/dist/api/captcha/getImageCaptchaChallenge.js +136 -207
  37. package/dist/api/captcha/getPoWCaptchaChallenge.js +128 -198
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +132 -201
  39. package/dist/api/captcha/maintenanceModeResponses.js +38 -47
  40. package/dist/api/captcha/submitImageCaptchaSolution.js +75 -101
  41. package/dist/api/captcha/submitPoWCaptchaSolution.js +137 -207
  42. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +73 -105
  43. package/dist/api/captcha.js +76 -58
  44. package/dist/api/dnsEventUrl.js +20 -22
  45. package/dist/api/domainMiddleware.js +104 -115
  46. package/dist/api/forwardVerify.js +62 -48
  47. package/dist/api/handshakeTimingMiddleware.js +43 -62
  48. package/dist/api/hardBlockVerdictCache.js +114 -117
  49. package/dist/api/headerCheckMiddleware.js +34 -34
  50. package/dist/api/ignoreMiddleware.js +13 -15
  51. package/dist/api/ipInfoMiddleware.js +17 -19
  52. package/dist/api/ja4.js +149 -188
  53. package/dist/api/ja4Middleware.js +39 -54
  54. package/dist/api/metrics.js +245 -257
  55. package/dist/api/public.js +52 -54
  56. package/dist/api/robotsMiddleware.js +10 -10
  57. package/dist/api/startProviderApi.js +205 -232
  58. package/dist/api/testSiteKey.js +16 -16
  59. package/dist/api/validateAddress.js +23 -21
  60. package/dist/api/verify.js +334 -377
  61. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  62. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +40 -59
  63. package/dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs +63 -58
  64. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +82 -93
  65. package/dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs +46 -48
  66. package/dist/cjs/api/admin/apiGetDecisionMachineEndpoint.cjs +41 -41
  67. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +25 -24
  68. package/dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs +28 -32
  69. package/dist/cjs/api/admin/apiRemoveAllDecisionMachinesEndpoint.cjs +38 -40
  70. package/dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs +41 -41
  71. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +31 -33
  72. package/dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs +35 -31
  73. package/dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs +34 -33
  74. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +45 -35
  75. package/dist/cjs/api/admin/apiUpdateDecisionMachineEndpoint.cjs +45 -65
  76. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +38 -37
  77. package/dist/cjs/api/admin/createApiAdminRoutesProvider.cjs +7 -8
  78. package/dist/cjs/api/blacklistRequestInspector.cjs +288 -376
  79. package/dist/cjs/api/block.cjs +18 -30
  80. package/dist/cjs/api/captcha/checkSpamEmail.cjs +90 -100
  81. package/dist/cjs/api/captcha/contextAwareValidation.cjs +21 -14
  82. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +125 -140
  83. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +10 -10
  84. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +238 -301
  85. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.cjs +9 -12
  86. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +349 -473
  87. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.cjs +18 -14
  88. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.cjs +26 -26
  89. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +42 -63
  90. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +2 -3
  91. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +138 -208
  92. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +131 -200
  93. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +135 -203
  94. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +38 -44
  95. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +77 -102
  96. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +140 -209
  97. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +76 -107
  98. package/dist/cjs/api/captcha.cjs +79 -58
  99. package/dist/cjs/api/dnsEventUrl.cjs +20 -21
  100. package/dist/cjs/api/domainMiddleware.cjs +106 -117
  101. package/dist/cjs/api/forwardVerify.cjs +63 -49
  102. package/dist/cjs/api/handshakeTimingMiddleware.cjs +43 -61
  103. package/dist/cjs/api/hardBlockVerdictCache.cjs +114 -114
  104. package/dist/cjs/api/headerCheckMiddleware.cjs +34 -34
  105. package/dist/cjs/api/ignoreMiddleware.cjs +12 -14
  106. package/dist/cjs/api/ipInfoMiddleware.cjs +16 -18
  107. package/dist/cjs/api/ja4.cjs +149 -187
  108. package/dist/cjs/api/ja4Middleware.cjs +40 -53
  109. package/dist/cjs/api/metrics.cjs +229 -228
  110. package/dist/cjs/api/public.cjs +57 -57
  111. package/dist/cjs/api/robotsMiddleware.cjs +9 -9
  112. package/dist/cjs/api/startProviderApi.cjs +219 -237
  113. package/dist/cjs/api/testSiteKey.cjs +15 -14
  114. package/dist/cjs/api/validateAddress.cjs +24 -21
  115. package/dist/cjs/api/verify.cjs +338 -379
  116. package/dist/cjs/compositeIpAddress.cjs +40 -47
  117. package/dist/cjs/index.cjs +65 -71
  118. package/dist/cjs/pairs.cjs +31 -35
  119. package/dist/cjs/rules/lang.cjs +10 -14
  120. package/dist/cjs/schedulers/captchaScheduler.cjs +26 -32
  121. package/dist/cjs/schedulers/getClientList.cjs +35 -33
  122. package/dist/cjs/schedulers/setClientEntropy.cjs +35 -33
  123. package/dist/cjs/schedulers/updateSpamEmailDomains.cjs +39 -43
  124. package/dist/cjs/services/ipComparison.cjs +122 -119
  125. package/dist/cjs/tasks/captchaManager.cjs +407 -486
  126. package/dist/cjs/tasks/client/clientTasks.cjs +347 -470
  127. package/dist/cjs/tasks/dataset/datasetTasks.cjs +25 -29
  128. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +16 -32
  129. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +220 -307
  130. package/dist/cjs/tasks/detection/decodeBehavior.cjs +408 -317
  131. package/dist/cjs/tasks/detection/decodePayload.cjs +686 -468
  132. package/dist/cjs/tasks/detection/decodeSimd.cjs +462 -304
  133. package/dist/cjs/tasks/detection/getBotScore.cjs +37 -43
  134. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +88 -71
  135. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +348 -486
  136. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +13 -30
  137. package/dist/cjs/tasks/frictionless/routingMachine.cjs +71 -55
  138. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +555 -806
  139. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +22 -23
  140. package/dist/cjs/tasks/index.cjs +2 -4
  141. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +491 -687
  142. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +17 -29
  143. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +422 -591
  144. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasksUtils.cjs +8 -5
  145. package/dist/cjs/tasks/spam/checkSpamEmail.cjs +133 -141
  146. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +118 -76
  147. package/dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs +75 -84
  148. package/dist/cjs/tasks/spam/updateSpamEmailDomains.cjs +40 -56
  149. package/dist/cjs/tasks/tasks.cjs +107 -158
  150. package/dist/cjs/util/usageCounters.cjs +220 -211
  151. package/dist/cjs/util.cjs +329 -359
  152. package/dist/cjs/utils/devicePlatform.cjs +14 -8
  153. package/dist/cjs/utils/dns.cjs +68 -93
  154. package/dist/cjs/utils/hashUserAgent.cjs +14 -7
  155. package/dist/cjs/utils/hashUserIp.cjs +14 -6
  156. package/dist/cjs/utils/honeypot/encoders.cjs +74 -80
  157. package/dist/cjs/utils/honeypot/phraseBank.cjs +51 -44
  158. package/dist/cjs/utils/normalizeRequestIp.cjs +33 -25
  159. package/dist/compositeIpAddress.js +38 -46
  160. package/dist/index.js +12 -56
  161. package/dist/pairs.js +31 -37
  162. package/dist/rules/lang.js +11 -15
  163. package/dist/schedulers/captchaScheduler.js +25 -31
  164. package/dist/schedulers/getClientList.js +34 -32
  165. package/dist/schedulers/setClientEntropy.js +34 -32
  166. package/dist/schedulers/updateSpamEmailDomains.js +38 -42
  167. package/dist/services/ipComparison.js +122 -119
  168. package/dist/tasks/captchaManager.js +403 -483
  169. package/dist/tasks/client/clientTasks.js +343 -467
  170. package/dist/tasks/dataset/datasetTasks.js +24 -28
  171. package/dist/tasks/dataset/datasetTasksUtils.js +15 -31
  172. package/dist/tasks/decisionMachine/decisionMachineRunner.js +217 -306
  173. package/dist/tasks/detection/getBotScore.js +37 -43
  174. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -1
  175. package/dist/tasks/dnsEvent/enrichDnsEvent.js +88 -74
  176. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -1
  177. package/dist/tasks/frictionless/frictionlessTasks.js +342 -479
  178. package/dist/tasks/frictionless/frictionlessTasksUtils.js +14 -32
  179. package/dist/tasks/frictionless/routingMachine.js +72 -56
  180. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +550 -801
  181. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +21 -22
  182. package/dist/tasks/index.js +1 -3
  183. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  184. package/dist/tasks/powCaptcha/powTasks.js +486 -682
  185. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  186. package/dist/tasks/powCaptcha/powTasksUtils.js +15 -28
  187. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  188. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +417 -586
  189. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  190. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.js +9 -6
  191. package/dist/tasks/spam/checkSpamEmail.js +133 -141
  192. package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -0
  193. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  194. package/dist/tasks/spam/checkTrafficFilter.js +117 -77
  195. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  196. package/dist/tasks/spam/evaluateEmailSpamRules.js +75 -86
  197. package/dist/tasks/spam/updateSpamEmailDomains.js +36 -54
  198. package/dist/tasks/tasks.js +98 -150
  199. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +4 -1
  200. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -1
  201. package/dist/tests/unit/api/block.unit.test.js +8 -4
  202. package/dist/tests/unit/api/block.unit.test.js.map +1 -1
  203. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +8 -6
  204. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  205. package/dist/tests/unit/api/forwardVerify.unit.test.js +3 -1
  206. package/dist/tests/unit/api/forwardVerify.unit.test.js.map +1 -1
  207. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +15 -7
  208. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  209. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +24 -18
  210. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  211. package/dist/tests/unit/schedulers/getClientList.unit.test.js +19 -13
  212. package/dist/tests/unit/schedulers/getClientList.unit.test.js.map +1 -1
  213. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js +19 -13
  214. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js.map +1 -1
  215. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  216. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +22 -16
  217. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  218. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +140 -0
  219. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  220. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +7 -7
  221. package/dist/util/usageCounters.js +220 -212
  222. package/dist/util.d.ts.map +1 -1
  223. package/dist/util.js +327 -364
  224. package/dist/util.js.map +1 -1
  225. package/dist/utils/devicePlatform.js +15 -9
  226. package/dist/utils/dns.js +64 -77
  227. package/dist/utils/hashUserAgent.js +14 -7
  228. package/dist/utils/hashUserIp.js +14 -6
  229. package/dist/utils/honeypot/encoders.js +74 -80
  230. package/dist/utils/honeypot/phraseBank.js +49 -44
  231. package/dist/utils/normalizeRequestIp.js +34 -26
  232. package/package.json +24 -24
@@ -1,10 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const APPLE_UA_REGEX = /iPhone|iPad|iPod|Macintosh|Mac OS X/i;
4
- const MOBILE_UA_REGEX = /Mobile|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/i;
5
- const derivePlatform = (userAgent, webView, ipInfo) => ({
6
- isApple: APPLE_UA_REGEX.test(userAgent),
7
- isWebView: webView,
8
- isMobile: typeof ipInfo?.isMobile === "boolean" ? ipInfo.isMobile : MOBILE_UA_REGEX.test(userAgent)
1
+ //#region src/utils/devicePlatform.ts
2
+ var APPLE_UA_REGEX = /iPhone|iPad|iPod|Macintosh|Mac OS X/i;
3
+ var MOBILE_UA_REGEX = /Mobile|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/i;
4
+ /**
5
+ * Derive platform flags from server-visible signals. `isWebView` is supplied
6
+ * by the caller because that bit only comes from the encrypted bot-detection
7
+ * payload, not request headers. `isMobile` prefers IPInfo's network-classified
8
+ * mobile bit when present and falls back to UA parsing otherwise.
9
+ */
10
+ var derivePlatform = (userAgent, webView, ipInfo) => ({
11
+ isApple: APPLE_UA_REGEX.test(userAgent),
12
+ isWebView: webView,
13
+ isMobile: typeof ipInfo?.isMobile === "boolean" ? ipInfo.isMobile : MOBILE_UA_REGEX.test(userAgent)
9
14
  });
15
+ //#endregion
10
16
  exports.derivePlatform = derivePlatform;
@@ -1,101 +1,76 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const dns = require("node:dns");
4
- const https = require("node:https");
5
- const node_util = require("node:util");
6
- function _interopNamespaceDefault(e) {
7
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
- if (e) {
9
- for (const k in e) {
10
- if (k !== "default") {
11
- const d = Object.getOwnPropertyDescriptor(e, k);
12
- Object.defineProperty(n, k, d.get ? d : {
13
- enumerable: true,
14
- get: () => e[k]
15
- });
16
- }
17
- }
18
- }
19
- n.default = e;
20
- return Object.freeze(n);
21
- }
22
- const dns__namespace = /* @__PURE__ */ _interopNamespaceDefault(dns);
23
- const https__namespace = /* @__PURE__ */ _interopNamespaceDefault(https);
24
- const DEFAULT_DNS_SERVERS = ["8.8.8.8", "1.1.1.1"];
25
- const DEFAULT_HTTPS_TIMEOUT_MS = 1e3;
26
- const createResolver = (dnsServers) => {
27
- const resolver = new dns__namespace.Resolver();
28
- resolver.setServers(dnsServers ?? DEFAULT_DNS_SERVERS);
29
- return resolver;
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ let node_dns = require("node:dns");
3
+ node_dns = require_runtime.__toESM(node_dns, 1);
4
+ let node_https = require("node:https");
5
+ node_https = require_runtime.__toESM(node_https, 1);
6
+ let node_util = require("node:util");
7
+ //#region src/utils/dns.ts
8
+ /** Default DNS servers to use for lookups (Google and Cloudflare) */
9
+ var DEFAULT_DNS_SERVERS = ["8.8.8.8", "1.1.1.1"];
10
+ /** Default timeout for HTTPS requests in milliseconds */
11
+ var DEFAULT_HTTPS_TIMEOUT_MS = 1e3;
12
+ /**
13
+ * Creates an isolated DNS resolver instance that doesn't affect global DNS config.
14
+ * Uses custom DNS servers by default for reliable lookups.
15
+ */
16
+ var createResolver = (dnsServers) => {
17
+ const resolver = new node_dns.Resolver();
18
+ resolver.setServers(dnsServers ?? DEFAULT_DNS_SERVERS);
19
+ return resolver;
30
20
  };
31
- const checkForCname = async (domain, resolver) => {
32
- try {
33
- const res = resolver ?? createResolver();
34
- const resolveCname = node_util.promisify(res.resolveCname.bind(res));
35
- return await resolveCname(domain);
36
- } catch (err) {
37
- return null;
38
- }
21
+ var checkForCname = async (domain, resolver) => {
22
+ try {
23
+ const res = resolver ?? createResolver();
24
+ return await (0, node_util.promisify)(res.resolveCname.bind(res))(domain);
25
+ } catch (err) {
26
+ return null;
27
+ }
39
28
  };
40
- const checkForARecord = async (domain, resolver) => {
41
- try {
42
- const res = resolver ?? createResolver();
43
- const resolve4 = node_util.promisify(res.resolve4.bind(res));
44
- return await resolve4(domain);
45
- } catch (err) {
46
- return null;
47
- }
29
+ var checkForMXRecord = async (domain, resolver) => {
30
+ try {
31
+ const res = resolver ?? createResolver();
32
+ return await (0, node_util.promisify)(res.resolveMx.bind(res))(domain);
33
+ } catch (err) {
34
+ return null;
35
+ }
48
36
  };
49
- const checkForMXRecord = async (domain, resolver) => {
50
- try {
51
- const res = resolver ?? createResolver();
52
- const resolveMx = node_util.promisify(res.resolveMx.bind(res));
53
- return await resolveMx(domain);
54
- } catch (err) {
55
- return null;
56
- }
37
+ var checkForRedirect = (url, timeoutMs = DEFAULT_HTTPS_TIMEOUT_MS) => {
38
+ return new Promise((resolve) => {
39
+ const req = node_https.get(url, { timeout: timeoutMs }, (res) => {
40
+ res.resume();
41
+ if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) try {
42
+ const absoluteUrl = new URL(res.headers.location, url).href;
43
+ resolve({ redirectUrl: absoluteUrl });
44
+ } catch {
45
+ resolve({});
46
+ }
47
+ else resolve({});
48
+ }).on("timeout", () => {
49
+ req.destroy();
50
+ resolve({ timeout: true });
51
+ }).on("error", (e) => {
52
+ resolve({ tlsError: e.message.includes("CERT") || e.message.includes("SSL") || e.message.includes("TLS") || e.message.includes("certificate") || e.message.includes("EPROTO") });
53
+ });
54
+ });
57
55
  };
58
- const checkForRedirect = (url, timeoutMs = DEFAULT_HTTPS_TIMEOUT_MS) => {
59
- return new Promise((resolve) => {
60
- const req = https__namespace.get(url, { timeout: timeoutMs }, (res) => {
61
- res.resume();
62
- if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
63
- try {
64
- const absoluteUrl = new URL(res.headers.location, url).href;
65
- resolve({ redirectUrl: absoluteUrl });
66
- } catch {
67
- resolve({});
68
- }
69
- } else {
70
- resolve({});
71
- }
72
- }).on("timeout", () => {
73
- req.destroy();
74
- resolve({ timeout: true });
75
- }).on("error", (e) => {
76
- const isTlsError = e.message.includes("CERT") || e.message.includes("SSL") || e.message.includes("TLS") || e.message.includes("certificate") || e.message.includes("EPROTO");
77
- resolve({ tlsError: isTlsError });
78
- });
79
- });
56
+ var runDnsChecks = async (domain, options) => {
57
+ const resolver = createResolver(options?.dnsServers);
58
+ try {
59
+ const [cnameResult, mxRecordResult, redirectResult] = await Promise.all([
60
+ checkForCname(domain, resolver),
61
+ checkForMXRecord(domain, resolver),
62
+ checkForRedirect(`https://${domain}`)
63
+ ]);
64
+ return {
65
+ cnameResult,
66
+ mxRecordResult,
67
+ redirectResult
68
+ };
69
+ } catch (e) {
70
+ throw new Error(`Error during DNS checks: ${e.toString()}`);
71
+ }
80
72
  };
81
- const runDnsChecks = async (domain, options) => {
82
- const resolver = createResolver(options?.dnsServers);
83
- try {
84
- const [cnameResult, mxRecordResult, redirectResult] = await Promise.all([
85
- checkForCname(domain, resolver),
86
- checkForMXRecord(domain, resolver),
87
- checkForRedirect(`https://${domain}`)
88
- ]);
89
- return {
90
- cnameResult,
91
- mxRecordResult,
92
- redirectResult
93
- };
94
- } catch (e) {
95
- throw new Error(`Error during DNS checks: ${e.toString()}`);
96
- }
97
- };
98
- exports.checkForARecord = checkForARecord;
73
+ //#endregion
99
74
  exports.checkForCname = checkForCname;
100
75
  exports.checkForMXRecord = checkForMXRecord;
101
76
  exports.checkForRedirect = checkForRedirect;
@@ -1,10 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const node_crypto = require("node:crypto");
1
+ let node_crypto = require("node:crypto");
2
+ //#region src/utils/hashUserAgent.ts
3
+ /**
4
+ * Hash a user agent string to a fixed-length string to prevent RSA-OAEP encryption size limits
5
+ * Uses SHA-256 and returns first 32 characters of the hex digest (128 bits)
6
+ * This provides a good balance between uniqueness and size constraints
7
+ *
8
+ * @param userAgent - The user agent string to hash
9
+ * @returns A 32-character hex string representing the hash
10
+ */
4
11
  function hashUserAgent(userAgent) {
5
- const hash = node_crypto.createHash("sha256");
6
- hash.update(userAgent, "utf8");
7
- const hashHex = hash.digest("hex");
8
- return hashHex.substring(0, 32);
12
+ const hash = (0, node_crypto.createHash)("sha256");
13
+ hash.update(userAgent, "utf8");
14
+ return hash.digest("hex").substring(0, 32);
9
15
  }
16
+ //#endregion
10
17
  exports.hashUserAgent = hashUserAgent;
@@ -1,9 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const node_crypto = require("node:crypto");
1
+ let node_crypto = require("node:crypto");
2
+ //#region src/utils/hashUserIp.ts
3
+ /**
4
+ * Hash a user and IP address combination to create a unique session identifier
5
+ * SHA-256 hash of user:ip:sitekey combination
6
+ *
7
+ * @param user - The user identifier
8
+ * @param ip - The IP address
9
+ * @returns A 64-character hex string representing the hash
10
+ */
4
11
  function hashUserIp(user, ip, sitekey) {
5
- const hash = node_crypto.createHash("sha256");
6
- hash.update(`${user}:${ip}:${sitekey}`, "utf8");
7
- return hash.digest("hex");
12
+ const hash = (0, node_crypto.createHash)("sha256");
13
+ hash.update(`${user}:${ip}:${sitekey}`, "utf8");
14
+ return hash.digest("hex");
8
15
  }
16
+ //#endregion
9
17
  exports.hashUserIp = hashUserIp;
@@ -1,86 +1,80 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const types = require("@prosopo/types");
4
- const MORSE_MAP = {
5
- a: ".-",
6
- b: "-...",
7
- c: "-.-.",
8
- d: "-..",
9
- e: ".",
10
- f: "..-.",
11
- g: "--.",
12
- h: "....",
13
- i: "..",
14
- j: ".---",
15
- k: "-.-",
16
- l: ".-..",
17
- m: "--",
18
- n: "-.",
19
- o: "---",
20
- p: ".--.",
21
- q: "--.-",
22
- r: ".-.",
23
- s: "...",
24
- t: "-",
25
- u: "..-",
26
- v: "...-",
27
- w: ".--",
28
- x: "-..-",
29
- y: "-.--",
30
- z: "--..",
31
- "0": "-----",
32
- "1": ".----",
33
- "2": "..---",
34
- "3": "...--",
35
- "4": "....-",
36
- "5": ".....",
37
- "6": "-....",
38
- "7": "--...",
39
- "8": "---..",
40
- "9": "----."
1
+ let _prosopo_types = require("@prosopo/types");
2
+ //#region src/utils/honeypot/encoders.ts
3
+ var MORSE_MAP = {
4
+ a: ".-",
5
+ b: "-...",
6
+ c: "-.-.",
7
+ d: "-..",
8
+ e: ".",
9
+ f: "..-.",
10
+ g: "--.",
11
+ h: "....",
12
+ i: "..",
13
+ j: ".---",
14
+ k: "-.-",
15
+ l: ".-..",
16
+ m: "--",
17
+ n: "-.",
18
+ o: "---",
19
+ p: ".--.",
20
+ q: "--.-",
21
+ r: ".-.",
22
+ s: "...",
23
+ t: "-",
24
+ u: "..-",
25
+ v: "...-",
26
+ w: ".--",
27
+ x: "-..-",
28
+ y: "-.--",
29
+ z: "--..",
30
+ "0": "-----",
31
+ "1": ".----",
32
+ "2": "..---",
33
+ "3": "...--",
34
+ "4": "....-",
35
+ "5": ".....",
36
+ "6": "-....",
37
+ "7": "--...",
38
+ "8": "---..",
39
+ "9": "----."
41
40
  };
42
- const SEMAPHORE_MAP = {
43
- a: "↙↓",
44
- b: "←↓",
45
- c: "↖↓",
46
- d: "↑↓",
47
- e: "↓↘",
48
- f: "↓→",
49
- g: "↓↗",
50
- h: "↙←",
51
- i: "↙↖",
52
- j: "↓↑",
53
- k: "↑←",
54
- l: "↗←",
55
- m: "←↖",
56
- n: "←↑",
57
- o: "↖↑",
58
- p: "↑↗",
59
- q: "↗→",
60
- r: "→↘",
61
- s: "↘↓",
62
- t: "↓↙",
63
- u: "↘↗",
64
- v: "→↑",
65
- w: "↘↑",
66
- x: "↙↗",
67
- y: "→↗",
68
- z: "↘→"
41
+ var SEMAPHORE_MAP = {
42
+ a: "↙↓",
43
+ b: "←↓",
44
+ c: "↖↓",
45
+ d: "↑↓",
46
+ e: "↓↘",
47
+ f: "↓→",
48
+ g: "↓↗",
49
+ h: "↙←",
50
+ i: "↙↖",
51
+ j: "↓↑",
52
+ k: "↑←",
53
+ l: "↗←",
54
+ m: "←↖",
55
+ n: "←↑",
56
+ o: "↖↑",
57
+ p: "↑↗",
58
+ q: "↗→",
59
+ r: "→↘",
60
+ s: "↘↓",
61
+ t: "↓↙",
62
+ u: "↘↗",
63
+ v: "→↑",
64
+ w: "↘↑",
65
+ x: "↙↗",
66
+ y: "→↗",
67
+ z: "↘→"
69
68
  };
70
- const encodeMorse = (text) => {
71
- const words = text.toLowerCase().split(/\s+/).filter(Boolean);
72
- return words.map(
73
- (word) => [...word].map((ch) => MORSE_MAP[ch]).filter((code) => Boolean(code)).join(" ")
74
- ).filter(Boolean).join(" / ");
69
+ var encodeMorse = (text) => {
70
+ return text.toLowerCase().split(/\s+/).filter(Boolean).map((word) => [...word].map((ch) => MORSE_MAP[ch]).filter((code) => Boolean(code)).join(" ")).filter(Boolean).join(" / ");
75
71
  };
76
- const encodeSemaphore = (text) => {
77
- const words = text.toLowerCase().split(/\s+/).filter(Boolean);
78
- return words.map(
79
- (word) => [...word].map((ch) => SEMAPHORE_MAP[ch]).filter((code) => Boolean(code)).join(" ")
80
- ).filter(Boolean).join(" / ");
72
+ var encodeSemaphore = (text) => {
73
+ return text.toLowerCase().split(/\s+/).filter(Boolean).map((word) => [...word].map((ch) => SEMAPHORE_MAP[ch]).filter((code) => Boolean(code)).join(" ")).filter(Boolean).join(" / ");
81
74
  };
82
- const encodeHoneypotQuestion = (text, encoding) => {
83
- const encoded = encoding === types.EncodingType.morse ? encodeMorse(text) : encodeSemaphore(text);
84
- return Buffer.from(encoded, "utf-8").toString("base64");
75
+ var encodeHoneypotQuestion = (text, encoding) => {
76
+ const encoded = encoding === _prosopo_types.EncodingType.morse ? encodeMorse(text) : encodeSemaphore(text);
77
+ return Buffer.from(encoded, "utf-8").toString("base64");
85
78
  };
79
+ //#endregion
86
80
  exports.encodeHoneypotQuestion = encodeHoneypotQuestion;
@@ -1,47 +1,54 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const fs = require("node:fs");
4
- const logger$1 = require("@prosopo/logger");
5
- const DEFAULT_PHRASE_BANK_PATH = "/app/data/honeypot-phrases.json";
6
- const logger = logger$1.getLogger("info", "honeypot-phrase-bank");
7
- let cachedPhrases = null;
8
- const resolvePath = () => process.env.PROSOPO_HONEYPOT_PHRASE_BANK_PATH ?? DEFAULT_PHRASE_BANK_PATH;
9
- const loadPhrases = () => {
10
- const path = resolvePath();
11
- try {
12
- const raw = fs.readFileSync(path, "utf-8");
13
- const parsed = JSON.parse(raw);
14
- if (parsed && typeof parsed === "object" && "phrases" in parsed && Array.isArray(parsed.phrases)) {
15
- const phrases = parsed.phrases.filter(
16
- (p) => typeof p === "string" && p.trim().length > 0
17
- );
18
- logger.info(() => ({
19
- msg: "Loaded honeypot phrase bank",
20
- data: { path, count: phrases.length }
21
- }));
22
- return phrases;
23
- }
24
- logger.warn(() => ({
25
- msg: "Honeypot phrase bank missing `phrases` array",
26
- data: { path }
27
- }));
28
- return [];
29
- } catch (err) {
30
- logger.warn(() => ({
31
- msg: "Failed to load honeypot phrase bank — fallback questions disabled",
32
- data: { path, err: err instanceof Error ? err.message : String(err) }
33
- }));
34
- return [];
35
- }
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ let _prosopo_logger = require("@prosopo/logger");
3
+ let node_fs = require("node:fs");
4
+ node_fs = require_runtime.__toESM(node_fs, 1);
5
+ //#region src/utils/honeypot/phraseBank.ts
6
+ var DEFAULT_PHRASE_BANK_PATH = "/app/data/honeypot-phrases.json";
7
+ var logger = (0, _prosopo_logger.getLogger)("info", "honeypot-phrase-bank");
8
+ var cachedPhrases = null;
9
+ var resolvePath = () => process.env.PROSOPO_HONEYPOT_PHRASE_BANK_PATH ?? DEFAULT_PHRASE_BANK_PATH;
10
+ var loadPhrases = () => {
11
+ const path = resolvePath();
12
+ try {
13
+ const raw = node_fs.default.readFileSync(path, "utf-8");
14
+ const parsed = JSON.parse(raw);
15
+ if (parsed && typeof parsed === "object" && "phrases" in parsed && Array.isArray(parsed.phrases)) {
16
+ const phrases = parsed.phrases.filter((p) => typeof p === "string" && p.trim().length > 0);
17
+ logger.info(() => ({
18
+ msg: "Loaded honeypot phrase bank",
19
+ data: {
20
+ path,
21
+ count: phrases.length
22
+ }
23
+ }));
24
+ return phrases;
25
+ }
26
+ logger.warn(() => ({
27
+ msg: "Honeypot phrase bank missing `phrases` array",
28
+ data: { path }
29
+ }));
30
+ return [];
31
+ } catch (err) {
32
+ logger.warn(() => ({
33
+ msg: "Failed to load honeypot phrase bank — fallback questions disabled",
34
+ data: {
35
+ path,
36
+ err: err instanceof Error ? err.message : String(err)
37
+ }
38
+ }));
39
+ return [];
40
+ }
36
41
  };
37
- const getRandomPhrase = () => {
38
- if (cachedPhrases === null) cachedPhrases = loadPhrases();
39
- if (cachedPhrases.length === 0) return void 0;
40
- const idx = Math.floor(Math.random() * cachedPhrases.length);
41
- return cachedPhrases[idx];
42
- };
43
- const resetPhraseBankCache = () => {
44
- cachedPhrases = null;
42
+ /**
43
+ * Returns a random phrase from the loaded bank, or `undefined` if the bank
44
+ * is empty / unloadable. Loads lazily on first call so startup ordering
45
+ * doesn't matter and tests can swap the env var before first use.
46
+ */
47
+ var getRandomPhrase = () => {
48
+ if (cachedPhrases === null) cachedPhrases = loadPhrases();
49
+ if (cachedPhrases.length === 0) return void 0;
50
+ const idx = Math.floor(Math.random() * cachedPhrases.length);
51
+ return cachedPhrases[idx];
45
52
  };
53
+ //#endregion
46
54
  exports.getRandomPhrase = getRandomPhrase;
47
- exports.resetPhraseBankCache = resetPhraseBankCache;
@@ -1,27 +1,35 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const normalizeRequestIp = (rawIp, logger) => {
4
- let normalizedIp = "";
5
- const rawType = typeof rawIp;
6
- const rawCtor = rawIp && rawType === "object" ? rawIp.constructor?.name : void 0;
7
- const addressProp = rawIp && rawType === "object" ? rawIp.address : void 0;
8
- if (rawType === "string") {
9
- normalizedIp = rawIp;
10
- } else if (typeof addressProp === "string") {
11
- normalizedIp = addressProp;
12
- } else if (rawIp != null) {
13
- normalizedIp = String(rawIp);
14
- }
15
- logger.debug(() => ({
16
- msg: "Normalized request IP",
17
- data: {
18
- rawIpType: rawType,
19
- rawIpCtor: rawCtor,
20
- rawIpString: rawType === "string" ? rawIp : void 0,
21
- addressPropType: typeof addressProp,
22
- normalizedIp
23
- }
24
- }));
25
- return normalizedIp;
1
+ //#region src/utils/normalizeRequestIp.ts
2
+ /**
3
+ * Normalizes a request IP address from various formats to a string
4
+ *
5
+ * Handles different IP formats:
6
+ * - Direct string
7
+ * - Object with address property (e.g., IPv6 format)
8
+ * - Other objects by converting to string
9
+ *
10
+ * @param rawIp - The raw IP value from the request
11
+ * @param logger - Logger instance for debugging
12
+ * @returns Normalized IP address as a string
13
+ */
14
+ var normalizeRequestIp = (rawIp, logger) => {
15
+ let normalizedIp = "";
16
+ const rawType = typeof rawIp;
17
+ const rawCtor = rawIp && rawType === "object" ? rawIp.constructor?.name : void 0;
18
+ const addressProp = rawIp && rawType === "object" ? rawIp.address : void 0;
19
+ if (rawType === "string") normalizedIp = rawIp;
20
+ else if (typeof addressProp === "string") normalizedIp = addressProp;
21
+ else if (rawIp != null) normalizedIp = String(rawIp);
22
+ logger.debug(() => ({
23
+ msg: "Normalized request IP",
24
+ data: {
25
+ rawIpType: rawType,
26
+ rawIpCtor: rawCtor,
27
+ rawIpString: rawType === "string" ? rawIp : void 0,
28
+ addressPropType: typeof addressProp,
29
+ normalizedIp
30
+ }
31
+ }));
32
+ return normalizedIp;
26
33
  };
34
+ //#endregion
27
35
  exports.normalizeRequestIp = normalizeRequestIp;