@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,92 +1,81 @@
1
1
  import { ResultReason } from "@prosopo/types";
2
- const GMAIL_DOMAINS = /* @__PURE__ */ new Set(["gmail.com", "googlemail.com"]);
3
- const DEFAULT_EMAIL_SPAM_PATTERNS = [
4
- // More than 3 dots in the local part of any address (very common
5
- // evasion against systems that don't normalise gmail addresses).
6
- {
7
- name: "many-dots-local-part",
8
- pattern: /^[^@]*\.[^@]*\.[^@]*\.[^@]*\.[^@]*@/
9
- },
10
- // Random alphanumeric suffix tags on gmail (e.g. +vkd38uoukd5).
11
- {
12
- name: "gmail-random-plus-tag",
13
- pattern: /^[^@+]+\+[a-z0-9]{6,}@(gmail|googlemail)\.com$/i
14
- }
15
- ];
16
- const splitEmail = (email) => {
17
- const trimmed = email.trim().toLowerCase();
18
- const at = trimmed.lastIndexOf("@");
19
- if (at <= 0 || at === trimmed.length - 1) {
20
- return null;
21
- }
22
- return { local: trimmed.slice(0, at), domain: trimmed.slice(at + 1) };
2
+ //#region src/tasks/spam/evaluateEmailSpamRules.ts
3
+ var GMAIL_DOMAINS = /* @__PURE__ */ new Set(["gmail.com", "googlemail.com"]);
4
+ var DEFAULT_EMAIL_SPAM_PATTERNS = [{
5
+ name: "many-dots-local-part",
6
+ pattern: /^[^@]*\.[^@]*\.[^@]*\.[^@]*\.[^@]*@/
7
+ }, {
8
+ name: "gmail-random-plus-tag",
9
+ pattern: /^[^@+]+\+[a-z0-9]{6,}@(gmail|googlemail)\.com$/i
10
+ }];
11
+ var splitEmail = (email) => {
12
+ const trimmed = email.trim().toLowerCase();
13
+ const at = trimmed.lastIndexOf("@");
14
+ if (at <= 0 || at === trimmed.length - 1) return null;
15
+ return {
16
+ local: trimmed.slice(0, at),
17
+ domain: trimmed.slice(at + 1)
18
+ };
23
19
  };
24
- const normaliseGmailAddress = (email) => {
25
- const parts = splitEmail(email);
26
- if (!parts) return email.trim().toLowerCase();
27
- if (!GMAIL_DOMAINS.has(parts.domain)) {
28
- return `${parts.local}@${parts.domain}`;
29
- }
30
- const stripped = parts.local.replace(/\./g, "").split("+")[0] ?? "";
31
- return `${stripped}@gmail.com`;
20
+ /**
21
+ * Removes dots and +tag suffixes from a gmail/googlemail local part.
22
+ * Useful for treating x.y@gmail.com, xy@gmail.com, x.y+tag@gmail.com as the
23
+ * same underlying account.
24
+ */
25
+ var normaliseGmailAddress = (email) => {
26
+ const parts = splitEmail(email);
27
+ if (!parts) return email.trim().toLowerCase();
28
+ if (!GMAIL_DOMAINS.has(parts.domain)) return `${parts.local}@${parts.domain}`;
29
+ return `${parts.local.replace(/\./g, "").split("+")[0] ?? ""}@gmail.com`;
32
30
  };
33
- const countDots = (s) => {
34
- let n = 0;
35
- for (const c of s) if (c === ".") n += 1;
36
- return n;
31
+ var countDots = (s) => {
32
+ let n = 0;
33
+ for (const c of s) if (c === ".") n += 1;
34
+ return n;
37
35
  };
38
- const regexCache = /* @__PURE__ */ new Map();
39
- const getCompiledRegex = (raw) => {
40
- const cached = regexCache.get(raw);
41
- if (cached !== void 0) {
42
- return cached;
43
- }
44
- let compiled;
45
- try {
46
- compiled = new RegExp(raw, "i");
47
- } catch {
48
- compiled = null;
49
- }
50
- regexCache.set(raw, compiled);
51
- return compiled;
36
+ var regexCache = /* @__PURE__ */ new Map();
37
+ var getCompiledRegex = (raw) => {
38
+ const cached = regexCache.get(raw);
39
+ if (cached !== void 0) return cached;
40
+ let compiled;
41
+ try {
42
+ compiled = new RegExp(raw, "i");
43
+ } catch {
44
+ compiled = null;
45
+ }
46
+ regexCache.set(raw, compiled);
47
+ return compiled;
52
48
  };
53
- const evaluateEmailSpamRules = (email, rules) => {
54
- if (!rules || !rules.enabled || !email) {
55
- return { isSpam: false };
56
- }
57
- const parts = splitEmail(email);
58
- if (!parts) {
59
- return { isSpam: true, reason: ResultReason.EMAIL_INVALID };
60
- }
61
- if (typeof rules.maxLocalPartDots === "number" && countDots(parts.local) > rules.maxLocalPartDots) {
62
- return { isSpam: true, reason: ResultReason.EMAIL_TOO_MANY_DOTS };
63
- }
64
- const target = rules.normaliseGmail ? normaliseGmailAddress(`${parts.local}@${parts.domain}`) : `${parts.local}@${parts.domain}`;
65
- if (rules.useDefaultPatterns) {
66
- for (const { name, pattern } of DEFAULT_EMAIL_SPAM_PATTERNS) {
67
- if (pattern.test(`${parts.local}@${parts.domain}`)) {
68
- return {
69
- isSpam: true,
70
- reason: ResultReason.EMAIL_MATCHED_DEFAULT_PATTERN,
71
- pattern: name
72
- };
73
- }
74
- }
75
- }
76
- for (const raw of rules.customRegexBlocklist ?? []) {
77
- const regex = getCompiledRegex(raw);
78
- if (regex?.test(target)) {
79
- return {
80
- isSpam: true,
81
- reason: ResultReason.EMAIL_MATCHED_CUSTOM_PATTERN,
82
- pattern: raw
83
- };
84
- }
85
- }
86
- return { isSpam: false };
87
- };
88
- export {
89
- DEFAULT_EMAIL_SPAM_PATTERNS,
90
- evaluateEmailSpamRules,
91
- normaliseGmailAddress
49
+ /**
50
+ * Synchronously evaluates an email against a site's email spam rules.
51
+ * Returns { isSpam: false } if the rules are disabled, no email is supplied,
52
+ * or no rule matched.
53
+ */
54
+ var evaluateEmailSpamRules = (email, rules) => {
55
+ if (!rules || !rules.enabled || !email) return { isSpam: false };
56
+ const parts = splitEmail(email);
57
+ if (!parts) return {
58
+ isSpam: true,
59
+ reason: ResultReason.EMAIL_INVALID
60
+ };
61
+ if (typeof rules.maxLocalPartDots === "number" && countDots(parts.local) > rules.maxLocalPartDots) return {
62
+ isSpam: true,
63
+ reason: ResultReason.EMAIL_TOO_MANY_DOTS
64
+ };
65
+ const target = rules.normaliseGmail ? normaliseGmailAddress(`${parts.local}@${parts.domain}`) : `${parts.local}@${parts.domain}`;
66
+ if (rules.useDefaultPatterns) {
67
+ for (const { name, pattern } of DEFAULT_EMAIL_SPAM_PATTERNS) if (pattern.test(`${parts.local}@${parts.domain}`)) return {
68
+ isSpam: true,
69
+ reason: ResultReason.EMAIL_MATCHED_DEFAULT_PATTERN,
70
+ pattern: name
71
+ };
72
+ }
73
+ for (const raw of rules.customRegexBlocklist ?? []) if (getCompiledRegex(raw)?.test(target)) return {
74
+ isSpam: true,
75
+ reason: ResultReason.EMAIL_MATCHED_CUSTOM_PATTERN,
76
+ pattern: raw
77
+ };
78
+ return { isSpam: false };
92
79
  };
80
+ //#endregion
81
+ export { DEFAULT_EMAIL_SPAM_PATTERNS, evaluateEmailSpamRules, normaliseGmailAddress };
@@ -1,58 +1,40 @@
1
- import fs from "node:fs";
2
1
  import { ScheduledTaskNames, ScheduledTaskStatus } from "@prosopo/types";
3
2
  import { validateDomain } from "@prosopo/util";
3
+ import fs from "node:fs";
4
4
  import { cacheFile } from "@prosopo/util/node";
5
- const CACHE_FILE_PREFIX = "spam-email-domains";
6
- const CACHE_FILE_TYPE = ".txt";
7
- const updateSpamEmailDomains = async (db, logger, spamEmailDomainsUrls, cacheDir = "./spam-cache") => {
8
- const taskID = await db.createScheduledTaskStatus(
9
- ScheduledTaskNames.UpdateSpamEmailDomains,
10
- ScheduledTaskStatus.Running
11
- );
12
- try {
13
- const domainsSet = /* @__PURE__ */ new Set();
14
- for (const [index, url] of spamEmailDomainsUrls.entries()) {
15
- const filePath = await cacheFile(
16
- cacheDir,
17
- url,
18
- logger,
19
- `${CACHE_FILE_PREFIX}-${index.toString()}-`,
20
- CACHE_FILE_TYPE
21
- );
22
- const text = fs.readFileSync(filePath, "utf-8");
23
- const domains = text.trim().split("\n");
24
- for (const domain of domains) {
25
- const trimmedDomain = domain.trim().toLowerCase();
26
- if (trimmedDomain && !trimmedDomain.startsWith("#") && !trimmedDomain.startsWith("//") && validateDomain(trimmedDomain)) {
27
- domainsSet.add(trimmedDomain);
28
- }
29
- }
30
- }
31
- const ops = Array.from(domainsSet).map((domain) => ({
32
- filter: { domain: domain.trim() },
33
- update: { domain: domain.trim() }
34
- }));
35
- await db.bulkUpdateSpamEmailDomains(ops, true);
36
- await db.updateScheduledTaskStatus(taskID, ScheduledTaskStatus.Completed, {
37
- data: {
38
- domainsProcessed: domainsSet.size
39
- }
40
- });
41
- logger.info(() => ({
42
- msg: "Successfully updated spam email domains.",
43
- data: { domainsProcessed: domainsSet.size }
44
- }));
45
- } catch (error) {
46
- logger.error(() => ({
47
- msg: "Error updating spam email domains.",
48
- error
49
- }));
50
- await db.updateScheduledTaskStatus(taskID, ScheduledTaskStatus.Failed, {
51
- error: error instanceof Error ? error.message : String(error)
52
- });
53
- throw error;
54
- }
55
- };
56
- export {
57
- updateSpamEmailDomains
5
+ //#region src/tasks/spam/updateSpamEmailDomains.ts
6
+ var CACHE_FILE_PREFIX = "spam-email-domains";
7
+ var CACHE_FILE_TYPE = ".txt";
8
+ var updateSpamEmailDomains = async (db, logger, spamEmailDomainsUrls, cacheDir = "./spam-cache") => {
9
+ const taskID = await db.createScheduledTaskStatus(ScheduledTaskNames.UpdateSpamEmailDomains, ScheduledTaskStatus.Running);
10
+ try {
11
+ const domainsSet = /* @__PURE__ */ new Set();
12
+ for (const [index, url] of spamEmailDomainsUrls.entries()) {
13
+ const filePath = await cacheFile(cacheDir, url, logger, `${CACHE_FILE_PREFIX}-${index.toString()}-`, CACHE_FILE_TYPE);
14
+ const domains = fs.readFileSync(filePath, "utf-8").trim().split("\n");
15
+ for (const domain of domains) {
16
+ const trimmedDomain = domain.trim().toLowerCase();
17
+ if (trimmedDomain && !trimmedDomain.startsWith("#") && !trimmedDomain.startsWith("//") && validateDomain(trimmedDomain)) domainsSet.add(trimmedDomain);
18
+ }
19
+ }
20
+ const ops = Array.from(domainsSet).map((domain) => ({
21
+ filter: { domain: domain.trim() },
22
+ update: { domain: domain.trim() }
23
+ }));
24
+ await db.bulkUpdateSpamEmailDomains(ops, true);
25
+ await db.updateScheduledTaskStatus(taskID, ScheduledTaskStatus.Completed, { data: { domainsProcessed: domainsSet.size } });
26
+ logger.info(() => ({
27
+ msg: "Successfully updated spam email domains.",
28
+ data: { domainsProcessed: domainsSet.size }
29
+ }));
30
+ } catch (error) {
31
+ logger.error(() => ({
32
+ msg: "Error updating spam email domains.",
33
+ error
34
+ }));
35
+ await db.updateScheduledTaskStatus(taskID, ScheduledTaskStatus.Failed, { error: error instanceof Error ? error.message : String(error) });
36
+ throw error;
37
+ }
58
38
  };
39
+ //#endregion
40
+ export { updateSpamEmailDomains };
@@ -1,6 +1,3 @@
1
- import { ProsopoEnvError } from "@prosopo/common";
2
- import { ProviderDatabase, CentralDbStreamer, RedisWriteQueue } from "@prosopo/database";
3
- import { getLogger, parseLogLevel } from "@prosopo/logger";
4
1
  import { UsageCounters } from "../util/usageCounters.js";
5
2
  import { ClientTaskManager } from "./client/clientTasks.js";
6
3
  import { DatasetManager } from "./dataset/datasetTasks.js";
@@ -9,151 +6,102 @@ import { FrictionlessManager } from "./frictionless/frictionlessTasks.js";
9
6
  import { ImgCaptchaManager } from "./imgCaptcha/imgCaptchaTasks.js";
10
7
  import { PowCaptchaManager } from "./powCaptcha/powTasks.js";
11
8
  import { PuzzleCaptchaManager } from "./puzzleCaptcha/puzzleTasks.js";
12
- let globalWriteQueue = null;
13
- let flushStarted = false;
14
- class Tasks {
15
- constructor(env, logger) {
16
- this.env = env;
17
- this.config = env.config;
18
- this.db = env.getDb();
19
- this.captchaConfig = env.config.captchas;
20
- this.logger = logger || getLogger(parseLogLevel(env.config.logLevel), "Tasks");
21
- if (!env.pair) {
22
- throw new ProsopoEnvError("DEVELOPER.MISSING_PROVIDER_PAIR", {
23
- context: { failedFuncName: "Tasks.constructor" }
24
- });
25
- }
26
- this.pair = env.pair;
27
- if (this.config.mongoCaptchaUri && this.db instanceof ProviderDatabase && !this.db.hasCentralDbStreamer()) {
28
- const streamer = new CentralDbStreamer(
29
- this.config.mongoCaptchaUri,
30
- this.logger
31
- );
32
- this.db.setCentralDbStreamer(streamer);
33
- this.logger.info(() => ({
34
- msg: "Central DB streamer initialized for real-time captcha data streaming"
35
- }));
36
- }
37
- this.writeQueue = this.initWriteQueue();
38
- this.decisionMachineRunner = new DecisionMachineRunner(this.db);
39
- this.usageCounters = this.initUsageCounters();
40
- this.powCaptchaManager = new PowCaptchaManager(
41
- this.db,
42
- this.pair,
43
- this.config,
44
- this.logger,
45
- this.writeQueue,
46
- this.usageCounters
47
- );
48
- this.puzzleCaptchaManager = new PuzzleCaptchaManager(
49
- this.db,
50
- this.pair,
51
- this.config,
52
- this.logger,
53
- this.usageCounters
54
- );
55
- this.datasetManager = new DatasetManager(
56
- this.config,
57
- this.logger,
58
- this.captchaConfig,
59
- this.db
60
- );
61
- this.imgCaptchaManager = new ImgCaptchaManager(
62
- this.db,
63
- this.pair,
64
- this.config,
65
- this.logger,
66
- this.writeQueue,
67
- this.usageCounters
68
- );
69
- this.clientTaskManager = new ClientTaskManager(
70
- this.config,
71
- this.logger,
72
- this.db
73
- );
74
- this.frictionlessManager = new FrictionlessManager(
75
- this.db,
76
- this.pair,
77
- this.config,
78
- this.logger,
79
- this.writeQueue,
80
- this.decisionMachineRunner,
81
- this.usageCounters
82
- );
83
- }
84
- initUsageCounters() {
85
- if (!(this.db instanceof ProviderDatabase)) return null;
86
- try {
87
- return new UsageCounters(this.db.getRedisConnection(), this.logger);
88
- } catch {
89
- return null;
90
- }
91
- }
92
- initWriteQueue() {
93
- if (globalWriteQueue) {
94
- return globalWriteQueue;
95
- }
96
- if (!(this.db instanceof ProviderDatabase)) {
97
- return null;
98
- }
99
- try {
100
- const redisConnection = this.db.getRedisConnection();
101
- globalWriteQueue = new RedisWriteQueue(redisConnection, this.logger);
102
- if (!flushStarted) {
103
- flushStarted = true;
104
- const db = this.db;
105
- const logger = this.logger;
106
- globalWriteQueue.startPeriodicFlush(async (queue) => {
107
- await Tasks.flushWriteQueue(queue, db, logger);
108
- }, 1e4);
109
- }
110
- return globalWriteQueue;
111
- } catch {
112
- this.logger.debug(() => ({
113
- msg: "Redis not available for write queue - falling back to direct writes"
114
- }));
115
- return null;
116
- }
117
- }
118
- /**
119
- * Flush queued session records from Redis to MongoDB in bulk.
120
- * Called periodically by the write queue timer.
121
- *
122
- * Note: PoW challenge and pending image commitment records are written
123
- * directly to MongoDB (not queued) because verification endpoints need
124
- * to read them immediately after creation. Session records are safe to
125
- * queue because they are not read in the immediate request path.
126
- */
127
- static async flushWriteQueue(queue, db, logger) {
128
- const sessionRecords = await queue.drainSessionRecords();
129
- if (sessionRecords.length > 0) {
130
- logger.info(() => ({
131
- msg: `Flushing ${sessionRecords.length} queued session records to MongoDB`
132
- }));
133
- for (const { record } of sessionRecords) {
134
- try {
135
- await db.storeSessionRecord(
136
- record
137
- );
138
- } catch (error) {
139
- logger.error(() => ({
140
- msg: "Failed to flush queued session record",
141
- err: error
142
- }));
143
- }
144
- }
145
- }
146
- }
147
- setLogger(logger) {
148
- this.logger = logger;
149
- this.powCaptchaManager.logger = logger;
150
- this.puzzleCaptchaManager.logger = logger;
151
- this.datasetManager.logger = logger;
152
- this.imgCaptchaManager.logger = logger;
153
- this.clientTaskManager.logger = logger;
154
- this.frictionlessManager.logger = logger;
155
- }
156
- }
157
- export {
158
- Tasks
9
+ import { ProsopoEnvError } from "@prosopo/common";
10
+ import { CentralDbStreamer, ProviderDatabase, RedisWriteQueue } from "@prosopo/database";
11
+ import { getLogger, parseLogLevel } from "@prosopo/logger";
12
+ //#region src/tasks/tasks.ts
13
+ /**
14
+ * Singleton write queue manager.
15
+ * Ensures only one flush timer exists across all Tasks instances.
16
+ */
17
+ var globalWriteQueue = null;
18
+ var flushStarted = false;
19
+ /**
20
+ * @description Tasks that are shared by the API and CLI
21
+ */
22
+ var Tasks = class Tasks {
23
+ constructor(env, logger) {
24
+ this.env = env;
25
+ this.config = env.config;
26
+ this.db = env.getDb();
27
+ this.captchaConfig = env.config.captchas;
28
+ this.logger = logger || getLogger(parseLogLevel(env.config.logLevel), "Tasks");
29
+ if (!env.pair) throw new ProsopoEnvError("DEVELOPER.MISSING_PROVIDER_PAIR", { context: { failedFuncName: "Tasks.constructor" } });
30
+ this.pair = env.pair;
31
+ if (this.config.mongoCaptchaUri && this.db instanceof ProviderDatabase && !this.db.hasCentralDbStreamer()) {
32
+ const streamer = new CentralDbStreamer(this.config.mongoCaptchaUri, this.logger);
33
+ this.db.setCentralDbStreamer(streamer);
34
+ this.logger.info(() => ({ msg: "Central DB streamer initialized for real-time captcha data streaming" }));
35
+ }
36
+ this.writeQueue = this.initWriteQueue();
37
+ this.decisionMachineRunner = new DecisionMachineRunner(this.db);
38
+ this.usageCounters = this.initUsageCounters();
39
+ this.powCaptchaManager = new PowCaptchaManager(this.db, this.pair, this.config, this.logger, this.writeQueue, this.usageCounters);
40
+ this.puzzleCaptchaManager = new PuzzleCaptchaManager(this.db, this.pair, this.config, this.logger, this.usageCounters);
41
+ this.datasetManager = new DatasetManager(this.config, this.logger, this.captchaConfig, this.db);
42
+ this.imgCaptchaManager = new ImgCaptchaManager(this.db, this.pair, this.config, this.logger, this.writeQueue, this.usageCounters);
43
+ this.clientTaskManager = new ClientTaskManager(this.config, this.logger, this.db);
44
+ this.frictionlessManager = new FrictionlessManager(this.db, this.pair, this.config, this.logger, this.writeQueue, this.decisionMachineRunner, this.usageCounters);
45
+ }
46
+ initUsageCounters() {
47
+ if (!(this.db instanceof ProviderDatabase)) return null;
48
+ try {
49
+ return new UsageCounters(this.db.getRedisConnection(), this.logger);
50
+ } catch {
51
+ return null;
52
+ }
53
+ }
54
+ initWriteQueue() {
55
+ if (globalWriteQueue) return globalWriteQueue;
56
+ if (!(this.db instanceof ProviderDatabase)) return null;
57
+ try {
58
+ globalWriteQueue = new RedisWriteQueue(this.db.getRedisConnection(), this.logger);
59
+ if (!flushStarted) {
60
+ flushStarted = true;
61
+ const db = this.db;
62
+ const logger = this.logger;
63
+ globalWriteQueue.startPeriodicFlush(async (queue) => {
64
+ await Tasks.flushWriteQueue(queue, db, logger);
65
+ }, 1e4);
66
+ }
67
+ return globalWriteQueue;
68
+ } catch {
69
+ this.logger.debug(() => ({ msg: "Redis not available for write queue - falling back to direct writes" }));
70
+ return null;
71
+ }
72
+ }
73
+ /**
74
+ * Flush queued session records from Redis to MongoDB in bulk.
75
+ * Called periodically by the write queue timer.
76
+ *
77
+ * Note: PoW challenge and pending image commitment records are written
78
+ * directly to MongoDB (not queued) because verification endpoints need
79
+ * to read them immediately after creation. Session records are safe to
80
+ * queue because they are not read in the immediate request path.
81
+ */
82
+ static async flushWriteQueue(queue, db, logger) {
83
+ const sessionRecords = await queue.drainSessionRecords();
84
+ if (sessionRecords.length > 0) {
85
+ logger.info(() => ({ msg: `Flushing ${sessionRecords.length} queued session records to MongoDB` }));
86
+ for (const { record } of sessionRecords) try {
87
+ await db.storeSessionRecord(record);
88
+ } catch (error) {
89
+ logger.error(() => ({
90
+ msg: "Failed to flush queued session record",
91
+ err: error
92
+ }));
93
+ }
94
+ }
95
+ }
96
+ setLogger(logger) {
97
+ this.logger = logger;
98
+ this.powCaptchaManager.logger = logger;
99
+ this.puzzleCaptchaManager.logger = logger;
100
+ this.datasetManager.logger = logger;
101
+ this.imgCaptchaManager.logger = logger;
102
+ this.clientTaskManager.logger = logger;
103
+ this.frictionlessManager.logger = logger;
104
+ }
159
105
  };
106
+ //#endregion
107
+ export { Tasks };
@@ -5,7 +5,7 @@ import { AccessPolicyType, FilterScopeMatch, accessRuleInput, userScopeInput, }
5
5
  import { getIPAddressFromBigInt } from "@prosopo/util";
6
6
  import { randomAsHex } from "@prosopo/util-crypto";
7
7
  import { GenericContainer } from "testcontainers";
8
- import { afterAll, beforeAll, beforeEach, describe, expect, it, vi, } from "vitest";
8
+ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi, } from "vitest";
9
9
  import { getPrioritisedAccessRule, getVerdictCache, } from "../../../api/blacklistRequestInspector.js";
10
10
  describe("blacklistRequestInspector Integration Tests", () => {
11
11
  describe("getPrioritisedAccessRule", () => {
@@ -82,6 +82,9 @@ describe("blacklistRequestInspector Integration Tests", () => {
82
82
  await accessRulesStorage.deleteAllRules();
83
83
  getVerdictCache().clear();
84
84
  });
85
+ afterEach(() => {
86
+ vi.restoreAllMocks();
87
+ });
85
88
  it("should return a rule when a JA4-UserAgent rule exists and the user matches the User Agent and the JA4", async () => {
86
89
  const accessRule = accessRuleInput.parse({
87
90
  type: AccessPolicyType.Restrict,
@@ -1 +1 @@
1
- {"version":3,"file":"blacklistRequestInspector.integration.test.js","sourceRoot":"","sources":["../../../../src/tests/integration/api/blacklistRequestInspector.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blacklistRequestInspector.integration.test.js","sourceRoot":"","sources":["../../../../src/tests/integration/api/blacklistRequestInspector.integration.test.ts"],"names":[],"mappings":"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"}
@@ -28,8 +28,10 @@ describe("blockMiddleware", () => {
28
28
  it("constructs BlacklistRequestInspector lazily on first request", async () => {
29
29
  const { env, mockDb } = buildMockEnv();
30
30
  const mockAbort = vi.fn();
31
- vi.mocked(BlacklistRequestInspector).mockReturnValue({
32
- abortRequestForBlockedUsers: mockAbort,
31
+ vi.mocked(BlacklistRequestInspector).mockImplementation(function () {
32
+ return {
33
+ abortRequestForBlockedUsers: mockAbort,
34
+ };
33
35
  });
34
36
  const middleware = blockMiddleware(env);
35
37
  expect(BlacklistRequestInspector).not.toHaveBeenCalled();
@@ -61,8 +63,10 @@ describe("blockMiddleware", () => {
61
63
  it("caches the inspector across requests", async () => {
62
64
  const { env } = buildMockEnv();
63
65
  const mockAbort = vi.fn();
64
- vi.mocked(BlacklistRequestInspector).mockReturnValue({
65
- abortRequestForBlockedUsers: mockAbort,
66
+ vi.mocked(BlacklistRequestInspector).mockImplementation(function () {
67
+ return {
68
+ abortRequestForBlockedUsers: mockAbort,
69
+ };
66
70
  });
67
71
  const middleware = blockMiddleware(env);
68
72
  await middleware({}, {}, vi.fn());