@prosopo/provider 3.15.0 → 4.7.1

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 (623) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +104 -57
  2. package/.turbo/turbo-build$colon$tsc.log +30 -24
  3. package/.turbo/turbo-build.log +104 -58
  4. package/CHANGELOG.md +1311 -0
  5. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -1
  6. package/dist/api/admin/apiAdminRoutesProvider.js +31 -1
  7. package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -1
  8. package/dist/api/admin/apiClearAllCountersEndpoint.d.ts +14 -0
  9. package/dist/api/admin/apiClearAllCountersEndpoint.d.ts.map +1 -0
  10. package/dist/api/admin/apiClearAllCountersEndpoint.js +59 -0
  11. package/dist/api/admin/apiClearAllCountersEndpoint.js.map +1 -0
  12. package/dist/api/admin/apiDnsEventEndpoint.d.ts +15 -0
  13. package/dist/api/admin/apiDnsEventEndpoint.d.ts.map +1 -0
  14. package/dist/api/admin/apiDnsEventEndpoint.js +64 -0
  15. package/dist/api/admin/apiDnsEventEndpoint.js.map +1 -0
  16. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.d.ts +13 -0
  17. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.d.ts.map +1 -0
  18. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js +49 -0
  19. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js.map +1 -0
  20. package/dist/api/admin/apiGetDecisionMachineEndpoint.d.ts +14 -0
  21. package/dist/api/admin/apiGetDecisionMachineEndpoint.d.ts.map +1 -0
  22. package/dist/api/admin/apiGetDecisionMachineEndpoint.js +42 -0
  23. package/dist/api/admin/apiGetDecisionMachineEndpoint.js.map +1 -0
  24. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts +1 -1
  25. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +1 -1
  26. package/dist/api/admin/apiRegisterSiteKeysEndpoint.d.ts +14 -0
  27. package/dist/api/admin/apiRegisterSiteKeysEndpoint.d.ts.map +1 -0
  28. package/dist/api/admin/apiRegisterSiteKeysEndpoint.js +33 -0
  29. package/dist/api/admin/apiRegisterSiteKeysEndpoint.js.map +1 -0
  30. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.d.ts +13 -0
  31. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.d.ts.map +1 -0
  32. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js +41 -0
  33. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js.map +1 -0
  34. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.d.ts +14 -0
  35. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.d.ts.map +1 -0
  36. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js +42 -0
  37. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js.map +1 -0
  38. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +2 -2
  39. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  40. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +1 -1
  41. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +1 -1
  42. package/dist/api/admin/apiRemoveSiteKeyEndpoint.d.ts +14 -0
  43. package/dist/api/admin/apiRemoveSiteKeyEndpoint.d.ts.map +1 -0
  44. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js +32 -0
  45. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js.map +1 -0
  46. package/dist/api/admin/apiRemoveSiteKeysEndpoint.d.ts +14 -0
  47. package/dist/api/admin/apiRemoveSiteKeysEndpoint.d.ts.map +1 -0
  48. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js +34 -0
  49. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js.map +1 -0
  50. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +1 -1
  51. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +1 -1
  52. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.d.ts +14 -0
  53. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.d.ts.map +1 -0
  54. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js +60 -0
  55. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js.map +1 -0
  56. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +1 -1
  57. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +1 -1
  58. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +1 -1
  59. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +1 -1
  60. package/dist/api/blacklistRequestInspector.d.ts +4 -3
  61. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  62. package/dist/api/blacklistRequestInspector.js +18 -5
  63. package/dist/api/blacklistRequestInspector.js.map +1 -1
  64. package/dist/api/block.d.ts +2 -1
  65. package/dist/api/block.d.ts.map +1 -1
  66. package/dist/api/block.js +19 -8
  67. package/dist/api/block.js.map +1 -1
  68. package/dist/api/captcha/checkSpamEmail.d.ts +6 -0
  69. package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -0
  70. package/dist/api/captcha/checkSpamEmail.js +80 -0
  71. package/dist/api/captcha/checkSpamEmail.js.map +1 -0
  72. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts +31 -0
  73. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -0
  74. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +123 -0
  75. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -0
  76. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts +3 -0
  77. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts.map +1 -0
  78. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +13 -0
  79. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js.map +1 -0
  80. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts +36 -0
  81. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -0
  82. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +287 -0
  83. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -0
  84. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.d.ts +4 -0
  85. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.d.ts.map +1 -0
  86. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js +14 -0
  87. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js.map +1 -0
  88. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts +7 -0
  89. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -0
  90. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +314 -0
  91. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -0
  92. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.d.ts +5 -0
  93. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.d.ts.map +1 -0
  94. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js +17 -0
  95. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js.map +1 -0
  96. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.d.ts +14 -0
  97. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.d.ts.map +1 -0
  98. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js +28 -0
  99. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js.map +1 -0
  100. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts +23 -0
  101. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -0
  102. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +61 -0
  103. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -0
  104. package/dist/api/captcha/getFrictionlessCaptchaChallenge.d.ts +1 -7
  105. package/dist/api/captcha/getFrictionlessCaptchaChallenge.d.ts.map +1 -1
  106. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +2 -364
  107. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js.map +1 -1
  108. package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
  109. package/dist/api/captcha/getImageCaptchaChallenge.js +36 -9
  110. package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
  111. package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
  112. package/dist/api/captcha/getPoWCaptchaChallenge.js +49 -7
  113. package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
  114. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +7 -0
  115. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -0
  116. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +201 -0
  117. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -0
  118. package/dist/api/captcha/maintenanceModeResponses.d.ts +5 -0
  119. package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -0
  120. package/dist/api/captcha/maintenanceModeResponses.js +42 -0
  121. package/dist/api/captcha/maintenanceModeResponses.js.map +1 -0
  122. package/dist/api/captcha/submitImageCaptchaSolution.d.ts +1 -2
  123. package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
  124. package/dist/api/captcha/submitImageCaptchaSolution.js +19 -2
  125. package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
  126. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  127. package/dist/api/captcha/submitPoWCaptchaSolution.js +84 -7
  128. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  129. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts +6 -0
  130. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -0
  131. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +108 -0
  132. package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -0
  133. package/dist/api/captcha.d.ts.map +1 -1
  134. package/dist/api/captcha.js +28 -3
  135. package/dist/api/captcha.js.map +1 -1
  136. package/dist/api/dnsEventUrl.d.ts +3 -0
  137. package/dist/api/dnsEventUrl.d.ts.map +1 -0
  138. package/dist/api/dnsEventUrl.js +25 -0
  139. package/dist/api/dnsEventUrl.js.map +1 -0
  140. package/dist/api/domainMiddleware.d.ts.map +1 -1
  141. package/dist/api/domainMiddleware.js +36 -5
  142. package/dist/api/domainMiddleware.js.map +1 -1
  143. package/dist/api/ipInfoMiddleware.d.ts +4 -0
  144. package/dist/api/ipInfoMiddleware.d.ts.map +1 -0
  145. package/dist/api/ipInfoMiddleware.js +20 -0
  146. package/dist/api/ipInfoMiddleware.js.map +1 -0
  147. package/dist/api/ja4Middleware.d.ts +1 -1
  148. package/dist/api/ja4Middleware.d.ts.map +1 -1
  149. package/dist/api/ja4Middleware.js +1 -1
  150. package/dist/api/ja4Middleware.js.map +1 -1
  151. package/dist/api/startProviderApi.d.ts +9 -0
  152. package/dist/api/startProviderApi.d.ts.map +1 -0
  153. package/dist/api/startProviderApi.js +217 -0
  154. package/dist/api/startProviderApi.js.map +1 -0
  155. package/dist/api/testSiteKey.d.ts +4 -0
  156. package/dist/api/testSiteKey.d.ts.map +1 -0
  157. package/dist/api/testSiteKey.js +17 -0
  158. package/dist/api/testSiteKey.js.map +1 -0
  159. package/dist/api/validateAddress.d.ts +1 -1
  160. package/dist/api/validateAddress.d.ts.map +1 -1
  161. package/dist/api/validateAddress.js.map +1 -1
  162. package/dist/api/verify.d.ts.map +1 -1
  163. package/dist/api/verify.js +145 -10
  164. package/dist/api/verify.js.map +1 -1
  165. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +31 -1
  166. package/dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs +59 -0
  167. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +65 -0
  168. package/dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs +49 -0
  169. package/dist/cjs/api/admin/apiGetDecisionMachineEndpoint.cjs +42 -0
  170. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +5 -5
  171. package/dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs +34 -0
  172. package/dist/cjs/api/admin/apiRemoveAllDecisionMachinesEndpoint.cjs +41 -0
  173. package/dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs +42 -0
  174. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +6 -6
  175. package/dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs +33 -0
  176. package/dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs +35 -0
  177. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +5 -5
  178. package/dist/cjs/api/admin/apiUpdateDecisionMachineEndpoint.cjs +60 -0
  179. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +7 -7
  180. package/dist/cjs/api/blacklistRequestInspector.cjs +18 -5
  181. package/dist/cjs/api/block.cjs +19 -8
  182. package/dist/cjs/api/captcha/checkSpamEmail.cjs +79 -0
  183. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +123 -0
  184. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +13 -0
  185. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +287 -0
  186. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.cjs +14 -0
  187. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +313 -0
  188. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.cjs +17 -0
  189. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.cjs +28 -0
  190. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +61 -0
  191. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +2 -364
  192. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +35 -8
  193. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +48 -6
  194. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +200 -0
  195. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +42 -0
  196. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +19 -2
  197. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +82 -5
  198. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +107 -0
  199. package/dist/cjs/api/captcha.cjs +29 -4
  200. package/dist/cjs/api/dnsEventUrl.cjs +25 -0
  201. package/dist/cjs/api/domainMiddleware.cjs +36 -5
  202. package/dist/cjs/api/ipInfoMiddleware.cjs +20 -0
  203. package/dist/cjs/api/ja4Middleware.cjs +7 -7
  204. package/dist/cjs/api/startProviderApi.cjs +240 -0
  205. package/dist/cjs/api/testSiteKey.cjs +17 -0
  206. package/dist/cjs/api/verify.cjs +144 -9
  207. package/dist/cjs/compositeIpAddress.cjs +6 -6
  208. package/dist/cjs/index.cjs +15 -0
  209. package/dist/cjs/rules/lang.cjs +1 -1
  210. package/dist/cjs/schedulers/updateSpamEmailDomains.cjs +46 -0
  211. package/dist/cjs/services/ipComparison.cjs +9 -10
  212. package/dist/cjs/tasks/captchaManager.cjs +338 -66
  213. package/dist/cjs/tasks/client/clientTasks.cjs +115 -4
  214. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +285 -0
  215. package/dist/cjs/tasks/detection/decodeBehavior.cjs +225 -228
  216. package/dist/cjs/tasks/detection/decodeBehavior.js +1 -1
  217. package/dist/cjs/tasks/detection/decodePayload.cjs +707 -635
  218. package/dist/cjs/tasks/detection/decodePayload.js +1 -1
  219. package/dist/cjs/tasks/detection/decodeSimd.cjs +348 -0
  220. package/dist/cjs/tasks/detection/decodeSimd.js +15 -0
  221. package/dist/cjs/tasks/detection/getBotScore.cjs +4 -2
  222. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +142 -42
  223. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +10 -7
  224. package/dist/cjs/tasks/frictionless/routingMachine.cjs +58 -0
  225. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +371 -57
  226. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +357 -167
  227. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +525 -0
  228. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasksUtils.cjs +7 -0
  229. package/dist/cjs/tasks/spam/checkSpamEmail.cjs +147 -0
  230. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +41 -0
  231. package/dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs +92 -0
  232. package/dist/cjs/tasks/spam/updateSpamEmailDomains.cjs +58 -0
  233. package/dist/cjs/tasks/tasks.cjs +111 -13
  234. package/dist/cjs/util/usageCounters.cjs +201 -0
  235. package/dist/cjs/util.cjs +3 -4
  236. package/dist/cjs/utils/devicePlatform.cjs +10 -0
  237. package/dist/cjs/utils/dns.cjs +102 -0
  238. package/dist/cjs/utils/honeypot/encoders.cjs +86 -0
  239. package/dist/cjs/utils/honeypot/phraseBank.cjs +47 -0
  240. package/dist/cjs/utils/normalizeRequestIp.cjs +27 -0
  241. package/dist/compositeIpAddress.d.ts +1 -1
  242. package/dist/compositeIpAddress.d.ts.map +1 -1
  243. package/dist/compositeIpAddress.js +1 -1
  244. package/dist/compositeIpAddress.js.map +1 -1
  245. package/dist/index.d.ts +4 -0
  246. package/dist/index.d.ts.map +1 -1
  247. package/dist/index.js +12 -0
  248. package/dist/index.js.map +1 -1
  249. package/dist/rules/lang.js +1 -1
  250. package/dist/rules/lang.js.map +1 -1
  251. package/dist/schedulers/updateSpamEmailDomains.d.ts +4 -0
  252. package/dist/schedulers/updateSpamEmailDomains.d.ts.map +1 -0
  253. package/dist/schedulers/updateSpamEmailDomains.js +46 -0
  254. package/dist/schedulers/updateSpamEmailDomains.js.map +1 -0
  255. package/dist/services/ipComparison.d.ts +2 -1
  256. package/dist/services/ipComparison.d.ts.map +1 -1
  257. package/dist/services/ipComparison.js +3 -4
  258. package/dist/services/ipComparison.js.map +1 -1
  259. package/dist/tasks/captchaManager.d.ts +24 -6
  260. package/dist/tasks/captchaManager.d.ts.map +1 -1
  261. package/dist/tasks/captchaManager.js +336 -64
  262. package/dist/tasks/captchaManager.js.map +1 -1
  263. package/dist/tasks/client/clientTasks.d.ts +49 -2
  264. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  265. package/dist/tasks/client/clientTasks.js +116 -5
  266. package/dist/tasks/client/clientTasks.js.map +1 -1
  267. package/dist/tasks/dataset/datasetTasks.d.ts +1 -1
  268. package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -1
  269. package/dist/tasks/dataset/datasetTasks.js.map +1 -1
  270. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +20 -0
  271. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -0
  272. package/dist/tasks/decisionMachine/decisionMachineRunner.js +285 -0
  273. package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -0
  274. package/dist/tasks/detection/decodeBehavior.d.ts +2 -2
  275. package/dist/tasks/detection/decodeBehavior.d.ts.map +1 -1
  276. package/dist/tasks/detection/decodeBehavior.js +1 -1
  277. package/dist/tasks/detection/decodeBehavior.js.map +1 -1
  278. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  279. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  280. package/dist/tasks/detection/decodePayload.js +1 -1
  281. package/dist/tasks/detection/decodePayload.js.map +1 -1
  282. package/dist/tasks/detection/decodeSimd.d.ts +3 -0
  283. package/dist/tasks/detection/decodeSimd.d.ts.map +1 -0
  284. package/dist/tasks/detection/decodeSimd.js +15 -0
  285. package/dist/tasks/detection/decodeSimd.js.map +1 -0
  286. package/dist/tasks/detection/getBehavioralData.d.ts +1 -1
  287. package/dist/tasks/detection/getBotScore.d.ts +2 -0
  288. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  289. package/dist/tasks/detection/getBotScore.js +6 -4
  290. package/dist/tasks/detection/getBotScore.js.map +1 -1
  291. package/dist/tasks/frictionless/frictionlessTasks.d.ts +19 -13
  292. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  293. package/dist/tasks/frictionless/frictionlessTasks.js +140 -42
  294. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  295. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +2 -2
  296. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +1 -1
  297. package/dist/tasks/frictionless/frictionlessTasksUtils.js +10 -7
  298. package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +1 -1
  299. package/dist/tasks/frictionless/routingMachine.d.ts +15 -0
  300. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -0
  301. package/dist/tasks/frictionless/routingMachine.js +58 -0
  302. package/dist/tasks/frictionless/routingMachine.js.map +1 -0
  303. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +14 -10
  304. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  305. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +371 -57
  306. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  307. package/dist/tasks/powCaptcha/powTasks.d.ts +24 -8
  308. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  309. package/dist/tasks/powCaptcha/powTasks.js +358 -168
  310. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  311. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts +32 -0
  312. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -0
  313. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +525 -0
  314. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -0
  315. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.d.ts +2 -0
  316. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.d.ts.map +1 -0
  317. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.js +7 -0
  318. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.js.map +1 -0
  319. package/dist/tasks/spam/checkSpamEmail.d.ts +5 -0
  320. package/dist/tasks/spam/checkSpamEmail.d.ts.map +1 -0
  321. package/dist/tasks/spam/checkSpamEmail.js +147 -0
  322. package/dist/tasks/spam/checkSpamEmail.js.map +1 -0
  323. package/dist/tasks/spam/checkTrafficFilter.d.ts +10 -0
  324. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -0
  325. package/dist/tasks/spam/checkTrafficFilter.js +41 -0
  326. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -0
  327. package/dist/tasks/spam/evaluateEmailSpamRules.d.ts +16 -0
  328. package/dist/tasks/spam/evaluateEmailSpamRules.d.ts.map +1 -0
  329. package/dist/tasks/spam/evaluateEmailSpamRules.js +92 -0
  330. package/dist/tasks/spam/evaluateEmailSpamRules.js.map +1 -0
  331. package/dist/tasks/spam/updateSpamEmailDomains.d.ts +4 -0
  332. package/dist/tasks/spam/updateSpamEmailDomains.d.ts.map +1 -0
  333. package/dist/tasks/spam/updateSpamEmailDomains.js +58 -0
  334. package/dist/tasks/spam/updateSpamEmailDomains.js.map +1 -0
  335. package/dist/tasks/tasks.d.ts +12 -1
  336. package/dist/tasks/tasks.d.ts.map +1 -1
  337. package/dist/tasks/tasks.js +102 -4
  338. package/dist/tasks/tasks.js.map +1 -1
  339. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +4 -0
  340. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  341. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.d.ts +2 -0
  342. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.d.ts.map +1 -0
  343. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +107 -0
  344. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -0
  345. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +45 -6
  346. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -1
  347. package/dist/tests/integration/clientSettingsPersistence.integration.test.d.ts +2 -0
  348. package/dist/tests/integration/clientSettingsPersistence.integration.test.d.ts.map +1 -0
  349. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +165 -0
  350. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -0
  351. package/dist/tests/integration/decisionMachines.integration.test.d.ts +2 -0
  352. package/dist/tests/integration/decisionMachines.integration.test.d.ts.map +1 -0
  353. package/dist/tests/integration/decisionMachines.integration.test.js +511 -0
  354. package/dist/tests/integration/decisionMachines.integration.test.js.map +1 -0
  355. package/dist/tests/integration/imgCaptcha.integration.test.js +418 -44
  356. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  357. package/dist/tests/integration/ipValidation.integration.test.js +10 -4
  358. package/dist/tests/integration/ipValidation.integration.test.js.map +1 -1
  359. package/dist/tests/integration/mocks/solvedTestCaptchas.js +16 -16
  360. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -1
  361. package/dist/tests/integration/powCaptcha.integration.test.js +218 -23
  362. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  363. package/dist/tests/integration/registerSitekey.d.ts.map +1 -1
  364. package/dist/tests/integration/registerSitekey.js +2 -0
  365. package/dist/tests/integration/registerSitekey.js.map +1 -1
  366. package/dist/tests/integration/routingDecisionMachines.integration.test.d.ts +2 -0
  367. package/dist/tests/integration/routingDecisionMachines.integration.test.d.ts.map +1 -0
  368. package/dist/tests/integration/routingDecisionMachines.integration.test.js +276 -0
  369. package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -0
  370. package/dist/tests/integration/testUtils.d.ts +4 -0
  371. package/dist/tests/integration/testUtils.d.ts.map +1 -0
  372. package/dist/tests/integration/testUtils.js +15 -0
  373. package/dist/tests/integration/testUtils.js.map +1 -0
  374. package/dist/tests/integration/usageCounters.integration.test.d.ts +2 -0
  375. package/dist/tests/integration/usageCounters.integration.test.d.ts.map +1 -0
  376. package/dist/tests/integration/usageCounters.integration.test.js +103 -0
  377. package/dist/tests/integration/usageCounters.integration.test.js.map +1 -0
  378. package/dist/tests/unit/api/admin/apiClearAllCountersEndpoint.unit.test.d.ts +2 -0
  379. package/dist/tests/unit/api/admin/apiClearAllCountersEndpoint.unit.test.d.ts.map +1 -0
  380. package/dist/tests/unit/api/admin/apiClearAllCountersEndpoint.unit.test.js +63 -0
  381. package/dist/tests/unit/api/admin/apiClearAllCountersEndpoint.unit.test.js.map +1 -0
  382. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.d.ts +2 -0
  383. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.d.ts.map +1 -0
  384. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +55 -0
  385. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -0
  386. package/dist/tests/unit/api/admin/apiRegisterSiteKeysEndpoint.unit.test.d.ts +2 -0
  387. package/dist/tests/unit/api/admin/apiRegisterSiteKeysEndpoint.unit.test.d.ts.map +1 -0
  388. package/dist/tests/unit/api/admin/apiRegisterSiteKeysEndpoint.unit.test.js +67 -0
  389. package/dist/tests/unit/api/admin/apiRegisterSiteKeysEndpoint.unit.test.js.map +1 -0
  390. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.d.ts +2 -0
  391. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.d.ts.map +1 -0
  392. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.js +56 -0
  393. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.js.map +1 -0
  394. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.d.ts +2 -0
  395. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.d.ts.map +1 -0
  396. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js +90 -0
  397. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js.map +1 -0
  398. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.d.ts +2 -0
  399. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.d.ts.map +1 -0
  400. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.js +59 -0
  401. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.js.map +1 -0
  402. package/dist/tests/unit/api/adminRoutes.unit.test.d.ts +2 -0
  403. package/dist/tests/unit/api/adminRoutes.unit.test.d.ts.map +1 -0
  404. package/dist/tests/unit/api/adminRoutes.unit.test.js +131 -0
  405. package/dist/tests/unit/api/adminRoutes.unit.test.js.map +1 -0
  406. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +79 -2
  407. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
  408. package/dist/tests/unit/api/block.unit.test.d.ts +2 -0
  409. package/dist/tests/unit/api/block.unit.test.d.ts.map +1 -0
  410. package/dist/tests/unit/api/block.unit.test.js +60 -0
  411. package/dist/tests/unit/api/block.unit.test.js.map +1 -0
  412. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.d.ts +2 -0
  413. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.d.ts.map +1 -0
  414. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.js +118 -0
  415. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.js.map +1 -0
  416. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.d.ts +2 -0
  417. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.d.ts.map +1 -0
  418. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js +37 -0
  419. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js.map +1 -0
  420. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.d.ts +2 -0
  421. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.d.ts.map +1 -0
  422. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.js +154 -0
  423. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.js.map +1 -0
  424. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.d.ts +2 -0
  425. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.d.ts.map +1 -0
  426. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.js +46 -0
  427. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.js.map +1 -0
  428. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.unit.test.d.ts +2 -0
  429. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.unit.test.d.ts.map +1 -0
  430. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.unit.test.js +69 -0
  431. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.unit.test.js.map +1 -0
  432. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.d.ts +2 -0
  433. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.d.ts.map +1 -0
  434. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js +98 -0
  435. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js.map +1 -0
  436. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.d.ts +2 -0
  437. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.d.ts.map +1 -0
  438. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js +60 -0
  439. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js.map +1 -0
  440. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.d.ts +2 -0
  441. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.d.ts.map +1 -0
  442. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +134 -0
  443. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -0
  444. package/dist/tests/unit/api/captcha.unit.test.d.ts +2 -0
  445. package/dist/tests/unit/api/captcha.unit.test.d.ts.map +1 -0
  446. package/dist/tests/unit/api/captcha.unit.test.js +39 -0
  447. package/dist/tests/unit/api/captcha.unit.test.js.map +1 -0
  448. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +195 -2
  449. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  450. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.d.ts +2 -0
  451. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.d.ts.map +1 -0
  452. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js +126 -0
  453. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js.map +1 -0
  454. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +103 -33
  455. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +1 -1
  456. package/dist/tests/unit/api/ja4Middleware.unit.test.js +130 -49
  457. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +1 -1
  458. package/dist/tests/unit/api/public.unit.test.d.ts +2 -0
  459. package/dist/tests/unit/api/public.unit.test.d.ts.map +1 -0
  460. package/dist/tests/unit/api/public.unit.test.js +198 -0
  461. package/dist/tests/unit/api/public.unit.test.js.map +1 -0
  462. package/dist/tests/unit/api/robotsMiddleware.unit.test.d.ts +2 -0
  463. package/dist/tests/unit/api/robotsMiddleware.unit.test.d.ts.map +1 -0
  464. package/dist/tests/unit/api/robotsMiddleware.unit.test.js +50 -0
  465. package/dist/tests/unit/api/robotsMiddleware.unit.test.js.map +1 -0
  466. package/dist/tests/unit/api/testSiteKey.unit.test.d.ts +2 -0
  467. package/dist/tests/unit/api/testSiteKey.unit.test.d.ts.map +1 -0
  468. package/dist/tests/unit/api/testSiteKey.unit.test.js +51 -0
  469. package/dist/tests/unit/api/testSiteKey.unit.test.js.map +1 -0
  470. package/dist/tests/unit/api/validateAddress.unit.test.d.ts +2 -0
  471. package/dist/tests/unit/api/validateAddress.unit.test.d.ts.map +1 -0
  472. package/dist/tests/unit/api/validateAddress.unit.test.js +141 -0
  473. package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -0
  474. package/dist/tests/unit/compositeIpAddress.unit.test.js +132 -60
  475. package/dist/tests/unit/compositeIpAddress.unit.test.js.map +1 -1
  476. package/dist/tests/unit/pairs.unit.test.js +174 -28
  477. package/dist/tests/unit/pairs.unit.test.js.map +1 -1
  478. package/dist/tests/unit/rules/lang.unit.test.d.ts +2 -0
  479. package/dist/tests/unit/rules/lang.unit.test.d.ts.map +1 -0
  480. package/dist/tests/unit/rules/lang.unit.test.js +207 -0
  481. package/dist/tests/unit/rules/lang.unit.test.js.map +1 -0
  482. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +2 -2
  483. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  484. package/dist/tests/unit/schedulers/getClientList.unit.test.d.ts +2 -0
  485. package/dist/tests/unit/schedulers/getClientList.unit.test.d.ts.map +1 -0
  486. package/dist/tests/unit/schedulers/getClientList.unit.test.js +114 -0
  487. package/dist/tests/unit/schedulers/getClientList.unit.test.js.map +1 -0
  488. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.d.ts +2 -0
  489. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.d.ts.map +1 -0
  490. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js +114 -0
  491. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js.map +1 -0
  492. package/dist/tests/unit/services/ipComparison.unit.test.js +49 -35
  493. package/dist/tests/unit/services/ipComparison.unit.test.js.map +1 -1
  494. package/dist/tests/unit/tasks/captchaManager.unit.test.js +260 -5
  495. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  496. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +16 -5
  497. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  498. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +1 -1
  499. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
  500. package/dist/tests/unit/tasks/decisionMachine/decisionMachineCustomHeaders.unit.test.d.ts +2 -0
  501. package/dist/tests/unit/tasks/decisionMachine/decisionMachineCustomHeaders.unit.test.d.ts.map +1 -0
  502. package/dist/tests/unit/tasks/decisionMachine/decisionMachineCustomHeaders.unit.test.js +213 -0
  503. package/dist/tests/unit/tasks/decisionMachine/decisionMachineCustomHeaders.unit.test.js.map +1 -0
  504. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.d.ts +2 -0
  505. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.d.ts.map +1 -0
  506. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +304 -0
  507. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -0
  508. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.d.ts +2 -0
  509. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.d.ts.map +1 -0
  510. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +115 -0
  511. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -0
  512. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +207 -2
  513. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  514. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +83 -48
  515. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +1 -1
  516. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.d.ts +2 -0
  517. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.d.ts.map +1 -0
  518. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +169 -0
  519. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -0
  520. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +719 -9
  521. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  522. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +9 -3
  523. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  524. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +1284 -68
  525. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  526. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +152 -52
  527. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  528. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.d.ts +2 -0
  529. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.d.ts.map +1 -0
  530. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +313 -0
  531. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -0
  532. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasksUtils.unit.test.d.ts +2 -0
  533. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasksUtils.unit.test.d.ts.map +1 -0
  534. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasksUtils.unit.test.js +29 -0
  535. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasksUtils.unit.test.js.map +1 -0
  536. package/dist/tests/unit/tasks/spam/checkSpamEmail.unit.test.d.ts +2 -0
  537. package/dist/tests/unit/tasks/spam/checkSpamEmail.unit.test.d.ts.map +1 -0
  538. package/dist/tests/unit/tasks/spam/checkSpamEmail.unit.test.js +434 -0
  539. package/dist/tests/unit/tasks/spam/checkSpamEmail.unit.test.js.map +1 -0
  540. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.d.ts +2 -0
  541. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.d.ts.map +1 -0
  542. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +112 -0
  543. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -0
  544. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.d.ts +2 -0
  545. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.d.ts.map +1 -0
  546. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.js +94 -0
  547. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.js.map +1 -0
  548. package/dist/tests/unit/tasks/streaming/providerDbStreaming.unit.test.d.ts +2 -0
  549. package/dist/tests/unit/tasks/streaming/providerDbStreaming.unit.test.d.ts.map +1 -0
  550. package/dist/tests/unit/tasks/streaming/providerDbStreaming.unit.test.js +94 -0
  551. package/dist/tests/unit/tasks/streaming/providerDbStreaming.unit.test.js.map +1 -0
  552. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.d.ts +2 -0
  553. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.d.ts.map +1 -0
  554. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js +208 -0
  555. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js.map +1 -0
  556. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +26 -0
  557. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts.map +1 -0
  558. package/dist/tests/unit/testUtils/mockProviderEnv.js +149 -0
  559. package/dist/tests/unit/testUtils/mockProviderEnv.js.map +1 -0
  560. package/dist/tests/unit/util/redisCache.unit.test.d.ts +2 -0
  561. package/dist/tests/unit/util/redisCache.unit.test.d.ts.map +1 -0
  562. package/dist/tests/unit/util/redisCache.unit.test.js +257 -0
  563. package/dist/tests/unit/util/redisCache.unit.test.js.map +1 -0
  564. package/dist/tests/unit/util/usageCounters.unit.test.d.ts +2 -0
  565. package/dist/tests/unit/util/usageCounters.unit.test.d.ts.map +1 -0
  566. package/dist/tests/unit/util/usageCounters.unit.test.js +242 -0
  567. package/dist/tests/unit/util/usageCounters.unit.test.js.map +1 -0
  568. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +2 -0
  569. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +1 -1
  570. package/dist/tests/unit/util.ipDistance.unit.test.js +9 -3
  571. package/dist/tests/unit/util.ipDistance.unit.test.js.map +1 -1
  572. package/dist/tests/unit/util.unit.test.js +152 -155
  573. package/dist/tests/unit/util.unit.test.js.map +1 -1
  574. package/dist/tests/unit/utils/devicePlatform.unit.test.d.ts +2 -0
  575. package/dist/tests/unit/utils/devicePlatform.unit.test.d.ts.map +1 -0
  576. package/dist/tests/unit/utils/devicePlatform.unit.test.js +58 -0
  577. package/dist/tests/unit/utils/devicePlatform.unit.test.js.map +1 -0
  578. package/dist/tests/unit/utils/hashUserAgent.unit.test.d.ts +2 -0
  579. package/dist/tests/unit/utils/hashUserAgent.unit.test.d.ts.map +1 -0
  580. package/dist/tests/unit/utils/hashUserAgent.unit.test.js +52 -0
  581. package/dist/tests/unit/utils/hashUserAgent.unit.test.js.map +1 -0
  582. package/dist/tests/unit/utils/hashUserIp.unit.test.d.ts +2 -0
  583. package/dist/tests/unit/utils/hashUserIp.unit.test.d.ts.map +1 -0
  584. package/dist/tests/unit/utils/hashUserIp.unit.test.js +81 -0
  585. package/dist/tests/unit/utils/hashUserIp.unit.test.js.map +1 -0
  586. package/dist/util/usageCounters.d.ts +22 -0
  587. package/dist/util/usageCounters.d.ts.map +1 -0
  588. package/dist/util/usageCounters.js +201 -0
  589. package/dist/util/usageCounters.js.map +1 -0
  590. package/dist/util.d.ts +3 -2
  591. package/dist/util.d.ts.map +1 -1
  592. package/dist/util.js +3 -4
  593. package/dist/util.js.map +1 -1
  594. package/dist/utils/devicePlatform.d.ts +5 -0
  595. package/dist/utils/devicePlatform.d.ts.map +1 -0
  596. package/dist/utils/devicePlatform.js +10 -0
  597. package/dist/utils/devicePlatform.js.map +1 -0
  598. package/dist/utils/dns.d.ts +22 -0
  599. package/dist/utils/dns.d.ts.map +1 -0
  600. package/dist/utils/dns.js +84 -0
  601. package/dist/utils/dns.js.map +1 -0
  602. package/dist/utils/honeypot/encoders.d.ts +3 -0
  603. package/dist/utils/honeypot/encoders.d.ts.map +1 -0
  604. package/dist/utils/honeypot/encoders.js +86 -0
  605. package/dist/utils/honeypot/encoders.js.map +1 -0
  606. package/dist/utils/honeypot/phraseBank.d.ts +3 -0
  607. package/dist/utils/honeypot/phraseBank.d.ts.map +1 -0
  608. package/dist/utils/honeypot/phraseBank.js +47 -0
  609. package/dist/utils/honeypot/phraseBank.js.map +1 -0
  610. package/dist/utils/normalizeRequestIp.d.ts +3 -0
  611. package/dist/utils/normalizeRequestIp.d.ts.map +1 -0
  612. package/dist/utils/normalizeRequestIp.js +27 -0
  613. package/dist/utils/normalizeRequestIp.js.map +1 -0
  614. package/package.json +27 -19
  615. package/dist/cjs/services/ipInfo.cjs +0 -87
  616. package/dist/services/ipInfo.d.ts +0 -3
  617. package/dist/services/ipInfo.d.ts.map +0 -1
  618. package/dist/services/ipInfo.js +0 -87
  619. package/dist/services/ipInfo.js.map +0 -1
  620. package/dist/tests/unit/services/ipInfo.unit.test.d.ts +0 -2
  621. package/dist/tests/unit/services/ipInfo.unit.test.d.ts.map +0 -1
  622. package/dist/tests/unit/services/ipInfo.unit.test.js +0 -210
  623. package/dist/tests/unit/services/ipInfo.unit.test.js.map +0 -1
@@ -3,57 +3,31 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const util = require("@polkadot/util");
4
4
  const common = require("@prosopo/common");
5
5
  const types = require("@prosopo/types");
6
- const userAccessPolicy = require("@prosopo/user-access-policy");
7
6
  const util$1 = require("@prosopo/util");
8
- const blacklistRequestInspector = require("../../api/blacklistRequestInspector.cjs");
9
7
  const compositeIpAddress = require("../../compositeIpAddress.cjs");
10
8
  const util$2 = require("../../util.cjs");
9
+ const usageCounters = require("../../util/usageCounters.cjs");
11
10
  const captchaManager = require("../captchaManager.cjs");
11
+ const decisionMachineRunner = require("../decisionMachine/decisionMachineRunner.cjs");
12
12
  const frictionlessTasksUtils = require("../frictionless/frictionlessTasksUtils.cjs");
13
+ const routingMachine = require("../frictionless/routingMachine.cjs");
14
+ const evaluateEmailSpamRules = require("../spam/evaluateEmailSpamRules.cjs");
13
15
  const powTasksUtils = require("./powTasksUtils.cjs");
14
- const findHardBlockPolicy = (accessPolicies) => {
15
- return accessPolicies.find(
16
- (policy) => policy.type === userAccessPolicy.AccessPolicyType.Block && !policy.captchaType
17
- );
18
- };
19
16
  const DEFAULT_POW_DIFFICULTY = 4;
20
17
  class PowCaptchaManager extends captchaManager.CaptchaManager {
21
- constructor(db, pair, config, logger) {
22
- super(db, pair, config, logger);
18
+ constructor(db, pair, config, logger, writeQueue, usageCounters2) {
19
+ super(db, pair, config, logger, writeQueue);
23
20
  this.POW_SEPARATOR = types.POW_SEPARATOR;
21
+ this.decisionMachineRunner = new decisionMachineRunner.DecisionMachineRunner(db);
22
+ this.usageCounters = usageCounters2 ?? null;
24
23
  }
25
24
  /**
26
- * Checks if a user should be hard blocked based on access policies
27
- * Only checks for Block policies without captchaType
28
- *
29
- * @returns The blocking policy if user should be blocked, undefined otherwise
25
+ * Provide the request-side data needed to run the post-pow routing pass
26
+ * inside `verifyPowCaptchaSolution`. When unset, the routing pass is
27
+ * skipped and verification behaves exactly as before.
30
28
  */
31
- async checkForHardBlock(userAccessRulesStorage, challengeRecord, userAccount, headers, coords) {
32
- let headHash;
33
- if (challengeRecord.sessionId) {
34
- const sessionRecord = await this.db.getSessionRecordBySessionId(
35
- challengeRecord.sessionId
36
- );
37
- headHash = sessionRecord?.decryptedHeadHash;
38
- }
39
- const coordsString = coords ? JSON.stringify(coords) : void 0;
40
- const ipAddressRecord = compositeIpAddress.getIpAddressFromComposite(
41
- challengeRecord.ipAddress
42
- );
43
- const userScope = blacklistRequestInspector.getRequestUserScope(
44
- headers,
45
- challengeRecord.ja4,
46
- ipAddressRecord.address,
47
- userAccount,
48
- headHash,
49
- coordsString
50
- );
51
- const accessPolicies = await this.getPrioritisedAccessPolicies(
52
- userAccessRulesStorage,
53
- challengeRecord.dappAccount,
54
- userScope
55
- );
56
- return findHardBlockPolicy(accessPolicies);
29
+ setPostPowContext(ctx) {
30
+ this.postPowContext = ctx;
57
31
  }
58
32
  /**
59
33
  * @description Generates a PoW Captcha for a given user and dapp
@@ -80,16 +54,16 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
80
54
  * @description Verifies a PoW Captcha for a given user and dapp
81
55
  *
82
56
  * @param {string} challenge - the starting string for the PoW challenge
83
- * @param {string} difficulty - how many leading zeroes the solution must have
84
57
  * @param {string} providerChallengeSignature - proof that the Provider provided the challenge
85
58
  * @param {string} nonce - the string that the user has found that satisfies the PoW challenge
86
59
  * @param {number} timeout - the time in milliseconds since the Provider was selected to provide the PoW captcha
87
60
  * @param {string} userTimestampSignature
88
61
  * @param ipAddress
89
62
  * @param headers
63
+ * @param behavioralData
90
64
  * @param salt
91
65
  */
92
- async verifyPowCaptchaSolution(challenge, providerChallengeSignature, nonce, timeout, userTimestampSignature, ipAddress, headers, behavioralData, salt) {
66
+ async verifyPowCaptchaSolution(challenge, providerChallengeSignature, nonce, timeout, userTimestampSignature, ipAddress, headers, behavioralData, salt, simdReadings, clientMetaData) {
93
67
  powTasksUtils.checkPowSignature(
94
68
  challenge,
95
69
  providerChallengeSignature,
@@ -110,7 +84,7 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
110
84
  this.logger.debug(() => ({
111
85
  msg: `No record of this challenge: ${challenge}`
112
86
  }));
113
- return false;
87
+ return { verified: false };
114
88
  }
115
89
  const difficulty = challengeRecord.difficulty;
116
90
  let coords;
@@ -129,37 +103,55 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
129
103
  }
130
104
  }
131
105
  if (!util$1.verifyRecency(challenge, timeout)) {
132
- await this.db.updatePowCaptchaRecordResult(
133
- challenge,
134
- {
135
- status: types.CaptchaStatus.disapproved,
136
- reason: "CAPTCHA.INVALID_TIMESTAMP"
137
- },
138
- false,
139
- //serverchecked
140
- true,
141
- // usersubmitted
142
- userTimestampSignature,
143
- coords
144
- );
145
- return false;
106
+ const timeoutResult = {
107
+ status: types.CaptchaStatus.disapproved,
108
+ reason: types.ResultReason.CAPTCHA_INVALID_TIMESTAMP
109
+ };
110
+ const writePromises2 = [
111
+ this.db.updatePowCaptchaRecordResult(
112
+ challenge,
113
+ timeoutResult,
114
+ false,
115
+ //serverchecked
116
+ true,
117
+ // usersubmitted
118
+ userTimestampSignature,
119
+ coords
120
+ )
121
+ ];
122
+ if (challengeRecord.sessionId) {
123
+ writePromises2.push(
124
+ this.updateSessionRecordWithCache(challengeRecord.sessionId, {
125
+ userSubmitted: true,
126
+ result: timeoutResult
127
+ })
128
+ );
129
+ }
130
+ await Promise.all(writePromises2);
131
+ return { verified: false };
146
132
  }
147
133
  const correct = powTasksUtils.validateSolution(nonce, challenge, difficulty);
148
134
  let result = { status: types.CaptchaStatus.approved };
149
135
  if (!correct) {
150
136
  result = {
151
137
  status: types.CaptchaStatus.disapproved,
152
- reason: "CAPTCHA.INVALID_SOLUTION"
138
+ reason: types.ResultReason.CAPTCHA_INVALID_SOLUTION
153
139
  };
154
140
  }
155
- await this.db.updatePowCaptchaRecordResult(
156
- challenge,
157
- result,
158
- false,
159
- true,
160
- userTimestampSignature,
161
- coords
162
- );
141
+ if (correct && this.usageCounters) {
142
+ const dappAccount = util$1.at(challengeSplit, 2);
143
+ this.usageCounters.incrManyAsync(
144
+ dappAccount,
145
+ usageCounters.buildAllWindowIncrements(
146
+ "solved",
147
+ types.CaptchaType.pow,
148
+ ipAddress.address,
149
+ userAccount
150
+ )
151
+ );
152
+ }
153
+ let behavioralUpdates = {};
154
+ let decryptedBehavioralDataPacked;
163
155
  if (behavioralData) {
164
156
  try {
165
157
  const decryptKeys = [
@@ -192,10 +184,11 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
192
184
  c3: decryptedData.collector3 || [],
193
185
  d: decryptedData.deviceCapability
194
186
  };
195
- await this.db.updatePowCaptchaRecord(challenge, {
187
+ behavioralUpdates = {
196
188
  behavioralDataPacked: packedData,
197
189
  deviceCapability: decryptedData.deviceCapability
198
- });
190
+ };
191
+ decryptedBehavioralDataPacked = packedData;
199
192
  }
200
193
  } catch (error) {
201
194
  this.logger?.error(() => ({
@@ -204,7 +197,108 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
204
197
  }));
205
198
  }
206
199
  }
207
- return correct;
200
+ const recordUpdates = { ...behavioralUpdates };
201
+ if (clientMetaData?.hp) {
202
+ recordUpdates.clientMetaData = { hp: clientMetaData.hp };
203
+ }
204
+ if (Object.keys(recordUpdates).length > 0) {
205
+ await this.db.updatePowCaptchaRecord(challenge, recordUpdates);
206
+ }
207
+ const writePromises = [
208
+ this.db.updatePowCaptchaRecordResult(
209
+ challenge,
210
+ result,
211
+ false,
212
+ true,
213
+ userTimestampSignature,
214
+ coords
215
+ )
216
+ ];
217
+ if (challengeRecord.sessionId) {
218
+ const linkedSessionId = challengeRecord.sessionId;
219
+ writePromises.push(
220
+ this.updateSessionRecordWithCache(linkedSessionId, {
221
+ userSubmitted: true,
222
+ result
223
+ })
224
+ );
225
+ if (simdReadings) {
226
+ writePromises.push(
227
+ this.decryptAndAttachSimdReadingsIfAbsent(
228
+ linkedSessionId,
229
+ simdReadings,
230
+ types.SimdReadingsStage.submit
231
+ )
232
+ );
233
+ }
234
+ }
235
+ await Promise.all(writePromises);
236
+ if (!correct || !this.postPowContext) {
237
+ return { verified: correct };
238
+ }
239
+ const routingOutput = await this.runPostPowRouting({
240
+ challengeRecord,
241
+ challengeSplit,
242
+ behavioralDataPacked: decryptedBehavioralDataPacked
243
+ });
244
+ return { verified: correct, routingOutput };
245
+ }
246
+ /**
247
+ * Resolve the originating session, build a full RoutingContext, and run the
248
+ * post-pow phase of the routing machine. Returns the machine's output, or
249
+ * undefined when prerequisites are missing (no session, no score) — in
250
+ * which case the caller treats the result as "no escalation".
251
+ */
252
+ async runPostPowRouting(args) {
253
+ if (!this.postPowContext) return void 0;
254
+ const { challengeRecord, challengeSplit, behavioralDataPacked } = args;
255
+ if (!challengeRecord.sessionId) {
256
+ this.logger.debug(() => ({
257
+ msg: "Skipping post-pow routing: PoW record has no linked session"
258
+ }));
259
+ return void 0;
260
+ }
261
+ const sessionRecord = await this.db.getSessionRecordBySessionId(
262
+ challengeRecord.sessionId
263
+ );
264
+ if (!sessionRecord) {
265
+ this.logger.debug(() => ({
266
+ msg: "Skipping post-pow routing: session record not found",
267
+ data: { sessionId: challengeRecord.sessionId }
268
+ }));
269
+ return void 0;
270
+ }
271
+ const score = frictionlessTasksUtils.computeFrictionlessScore(sessionRecord.scoreComponents);
272
+ const dappAccount = util$1.at(challengeSplit, 2);
273
+ const userAccount = util$1.at(challengeSplit, 1);
274
+ const platform = {
275
+ ...this.postPowContext.platform,
276
+ isWebView: sessionRecord.webView
277
+ };
278
+ const ctx = {
279
+ dappAccount,
280
+ userAccount,
281
+ ip: this.postPowContext.ip,
282
+ countryCode: this.postPowContext.countryCode,
283
+ score,
284
+ platform,
285
+ raw: {
286
+ ...this.postPowContext.raw,
287
+ ...behavioralDataPacked && { behavioralDataPacked }
288
+ }
289
+ };
290
+ const baseline = {
291
+ captchaType: types.CaptchaType.pow,
292
+ powDifficulty: challengeRecord.difficulty
293
+ };
294
+ return routingMachine.applyRouter(
295
+ this.decisionMachineRunner,
296
+ this.usageCounters,
297
+ baseline,
298
+ ctx,
299
+ this.logger,
300
+ "postPow"
301
+ );
208
302
  }
209
303
  /**
210
304
  * @description Verifies a PoW Captcha for a given user and dapp. This is called by the server to verify the user's solution
@@ -216,15 +310,25 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
216
310
  * @param env - provider environment
217
311
  * @param ip - optional IP address for validation
218
312
  * @param userAccessRulesStorage - storage for querying user access policies
313
+ * @param email
314
+ * @param spamEmailDomainCheckingEnabled
315
+ * @param spamFilter
316
+ * @param trafficFilter
317
+ * @param storeMetadata - when true, persists the dapp-server-provided
318
+ * `email` (and any future metadata fields) on the captcha record so
319
+ * it can be inspected for spam-rate analysis.
219
320
  */
220
- async serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, env, ip, userAccessRulesStorage) {
221
- const notVerifiedResponse = { verified: false };
321
+ async serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, env, ip, userAccessRulesStorage, email, spamEmailDomainCheckingEnabled = false, spamFilter, trafficFilter, storeMetadata = false) {
322
+ const notVerified = (reason) => ({
323
+ verified: false,
324
+ reason
325
+ });
222
326
  const challengeRecord = await this.db.getPowCaptchaRecordByChallenge(challenge);
223
327
  if (!challengeRecord) {
224
328
  this.logger.debug(() => ({
225
329
  msg: `No record of this challenge: ${challenge}`
226
330
  }));
227
- return notVerifiedResponse;
331
+ return notVerified("CAPTCHA.DAPP_USER_SOLUTION_NOT_FOUND");
228
332
  }
229
333
  if (challengeRecord.result.status !== types.CaptchaStatus.approved) {
230
334
  throw new common.ProsopoApiError("CAPTCHA.INVALID_SOLUTION", {
@@ -234,7 +338,8 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
234
338
  }
235
339
  });
236
340
  }
237
- if (challengeRecord.serverChecked) return notVerifiedResponse;
341
+ if (challengeRecord.serverChecked)
342
+ return notVerified("API.USER_ALREADY_VERIFIED");
238
343
  const challengeDappAccount = challengeRecord.dappAccount;
239
344
  if (dappAccount !== challengeDappAccount) {
240
345
  throw new common.ProsopoEnvError("CAPTCHA.DAPP_USER_SOLUTION_NOT_FOUND", {
@@ -248,24 +353,26 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
248
353
  await this.db.markDappUserPoWCommitmentsChecked([
249
354
  challengeRecord.challenge
250
355
  ]);
356
+ const powRecordUpdates = {};
357
+ let failResult;
358
+ let failReason;
251
359
  const recent = util$1.verifyRecency(challenge, timeout);
252
360
  if (!recent) {
253
- await this.db.updatePowCaptchaRecord(challengeRecord.challenge, {
254
- result: {
255
- status: types.CaptchaStatus.disapproved,
256
- reason: "API.TIMESTAMP_TOO_OLD"
257
- }
258
- });
259
- return notVerifiedResponse;
361
+ failResult = {
362
+ status: types.CaptchaStatus.disapproved,
363
+ reason: types.ResultReason.TIMESTAMP_TOO_OLD
364
+ };
365
+ failReason = "API.TIMESTAMP_TOO_OLD";
260
366
  }
261
- if (userAccessRulesStorage) {
367
+ if (!failResult && userAccessRulesStorage) {
262
368
  try {
263
369
  const blockPolicy = await this.checkForHardBlock(
264
370
  userAccessRulesStorage,
265
371
  challengeRecord,
266
372
  challengeRecord.userAccount,
267
373
  challengeRecord.headers,
268
- challengeRecord.coords
374
+ challengeRecord.coords,
375
+ challengeRecord.ipInfo?.isValid ? challengeRecord.ipInfo.countryCode : void 0
269
376
  );
270
377
  if (blockPolicy) {
271
378
  this.logger.info(() => ({
@@ -277,13 +384,11 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
277
384
  policy: blockPolicy
278
385
  }
279
386
  }));
280
- await this.db.updatePowCaptchaRecord(challengeRecord.challenge, {
281
- result: {
282
- status: types.CaptchaStatus.disapproved,
283
- reason: "API.ACCESS_POLICY_BLOCK"
284
- }
285
- });
286
- return notVerifiedResponse;
387
+ failResult = {
388
+ status: types.CaptchaStatus.disapproved,
389
+ reason: types.ResultReason.ACCESS_POLICY_BLOCK
390
+ };
391
+ failReason = "API.ACCESS_POLICY_BLOCK";
287
392
  }
288
393
  } catch (error) {
289
394
  this.logger.warn(() => ({
@@ -292,40 +397,95 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
292
397
  }));
293
398
  }
294
399
  }
295
- if (ip) {
400
+ if (!failResult && email && spamEmailDomainCheckingEnabled) {
401
+ try {
402
+ const isSpam = await this.checkSpamEmail(email);
403
+ if (isSpam) {
404
+ const emailDomain = email.split("@")[1] || "unknown";
405
+ this.logger.info(() => ({
406
+ msg: "Spam email domain detected in server PoW verification",
407
+ data: { challenge, dappAccount, emailDomain }
408
+ }));
409
+ failResult = {
410
+ status: types.CaptchaStatus.disapproved,
411
+ reason: types.ResultReason.SPAM_EMAIL_DOMAIN
412
+ };
413
+ failReason = "API.SPAM_EMAIL_DOMAIN";
414
+ }
415
+ } catch (error) {
416
+ this.logger.warn(() => ({
417
+ msg: "Failed to check spam email domain in server PoW verification",
418
+ error
419
+ }));
420
+ }
421
+ }
422
+ if (!failResult && spamFilter?.enabled && spamFilter.emailRules?.enabled && email) {
423
+ const result = evaluateEmailSpamRules.evaluateEmailSpamRules(email, spamFilter.emailRules);
424
+ if (result.isSpam) {
425
+ this.logger.info(() => ({
426
+ msg: "Spam filter rejected email in PoW verification",
427
+ data: { challenge, dappAccount, reason: result.reason }
428
+ }));
429
+ failResult = {
430
+ status: types.CaptchaStatus.disapproved,
431
+ reason: types.ResultReason.SPAM_EMAIL_RULE
432
+ };
433
+ failReason = "API.SPAM_EMAIL_RULE";
434
+ }
435
+ }
436
+ if (!failResult) {
437
+ const check = await this.resolveTrafficFilterCheck(
438
+ env,
439
+ challengeRecord.ipInfo,
440
+ trafficFilter,
441
+ ip
442
+ );
443
+ if (check.isBlocked) {
444
+ this.logger.info(() => ({
445
+ msg: "Traffic filter rejected request in PoW verification",
446
+ data: { challenge, dappAccount, ip, reason: check.reason }
447
+ }));
448
+ failResult = {
449
+ status: types.CaptchaStatus.disapproved,
450
+ reason: check.reason
451
+ };
452
+ failReason = check.reason;
453
+ }
454
+ }
455
+ if (storeMetadata && email) {
456
+ powRecordUpdates.metadata = { email };
457
+ }
458
+ if (!failResult && ip) {
296
459
  const challengeIpAddress = compositeIpAddress.getIpAddressFromComposite(
297
460
  challengeRecord.ipAddress
298
461
  );
299
462
  const clientRecord = await this.db.getClientRecord(dappAccount);
300
463
  const ipValidationRules = clientRecord?.settings?.ipValidationRules;
301
- await this.db.updatePowCaptchaRecord(challengeRecord.challenge, {
302
- providedIp: compositeIpAddress.getCompositeIpAddress(ip)
303
- });
304
- const ipValidation = await util$2.deepValidateIpAddress(
305
- ip,
306
- challengeIpAddress,
307
- this.logger,
308
- env.config.ipApi.apiKey,
309
- env.config.ipApi.baseUrl,
310
- ipValidationRules
311
- );
312
- if (!ipValidation.isValid) {
313
- this.logger.error(() => ({
314
- msg: "IP validation failed for PoW captcha",
315
- data: {
316
- ip,
317
- challengeIp: challengeIpAddress.address,
318
- error: ipValidation.errorMessage,
319
- distanceKm: ipValidation.distanceKm
320
- }
321
- }));
322
- await this.db.updatePowCaptchaRecord(challengeRecord.challenge, {
323
- result: {
464
+ powRecordUpdates.providedIp = compositeIpAddress.getCompositeIpAddress(ip);
465
+ if (ipValidationRules?.enabled === true) {
466
+ const ipValidation = await util$2.deepValidateIpAddress(
467
+ ip,
468
+ challengeIpAddress,
469
+ this.logger,
470
+ env.ipInfoService,
471
+ ipValidationRules
472
+ );
473
+ if (!ipValidation.isValid) {
474
+ this.logger.error(() => ({
475
+ msg: "IP validation failed for PoW captcha",
476
+ data: {
477
+ ip,
478
+ challengeIp: challengeIpAddress.address,
479
+ error: ipValidation.errorMessage,
480
+ distanceKm: ipValidation.distanceKm
481
+ }
482
+ }));
483
+ failResult = {
324
484
  status: types.CaptchaStatus.disapproved,
325
- reason: "API.FAILED_IP_VALIDATION"
326
- }
327
- });
328
- return notVerifiedResponse;
485
+ reason: types.ResultReason.FAILED_IP_VALIDATION
486
+ };
487
+ failReason = "API.FAILED_IP_VALIDATION";
488
+ }
329
489
  }
330
490
  }
331
491
  let score;
@@ -343,62 +503,92 @@ class PowCaptchaManager extends captchaManager.CaptchaManager {
343
503
  }));
344
504
  }
345
505
  }
346
- return { verified: true, ...score ? { score } : {} };
347
- }
348
- /**
349
- * Decrypts behavioral data
350
- * @param encryptedData - The encrypted behavioral data
351
- * @param decryptKeys - Array of possible decryption keys to try
352
- * @returns Decrypted behavioral data in unpacked format, or null if decryption fails
353
- */
354
- async decryptBehavioralData(encryptedData, decryptKeys) {
355
- const decryptBehavioralData = (await Promise.resolve().then(() => require("../detection/decodeBehavior.cjs"))).default;
356
- const validKeys = decryptKeys.filter((k) => k);
357
- if (validKeys.length === 0) {
358
- this.logger?.error(() => ({
359
- msg: "No decryption keys provided for behavioral data"
360
- }));
361
- return null;
362
- }
363
- for (const [keyIndex, key] of validKeys.entries()) {
506
+ if (!failResult) {
364
507
  try {
365
- this.logger?.debug(() => ({
366
- msg: "Attempting to decrypt behavioral data",
367
- data: {
368
- keyIndex: keyIndex + 1,
369
- totalKeys: validKeys.length
370
- }
371
- }));
372
- const result = await decryptBehavioralData(encryptedData, key);
373
- this.logger?.info(() => ({
374
- msg: "Behavioral data decrypted successfully",
375
- data: {
376
- keyIndex: keyIndex + 1,
377
- c1Length: result.collector1?.length || 0,
378
- c2Length: result.collector2?.length || 0,
379
- c3Length: result.collector3?.length || 0,
380
- deviceCapability: result.deviceCapability
381
- }
382
- }));
383
- return result;
508
+ const decisionInput = {
509
+ userAccount: challengeRecord.userAccount,
510
+ dappAccount: challengeRecord.dappAccount,
511
+ captchaResult: "passed",
512
+ headers: challengeRecord.headers,
513
+ captchaType: types.CaptchaType.pow,
514
+ behavioralDataPacked: challengeRecord.behavioralDataPacked,
515
+ deviceCapability: challengeRecord.deviceCapability,
516
+ countryCode: challengeRecord.ipInfo?.isValid ? challengeRecord.ipInfo.countryCode : void 0
517
+ };
518
+ const decision = await this.decisionMachineRunner.decide(
519
+ decisionInput,
520
+ this.logger
521
+ );
522
+ if (decision.decision === types.DecisionMachineDecision.Deny) {
523
+ this.logger.info(() => ({
524
+ msg: "Decision machine denied PoW captcha in server verification",
525
+ data: {
526
+ challenge,
527
+ userAccount: challengeRecord.userAccount,
528
+ dappAccount,
529
+ reason: decision.reason,
530
+ score: decision.score,
531
+ tags: decision.tags
532
+ }
533
+ }));
534
+ const dmReason = decision.reason || types.ResultReason.CAPTCHA_DECISION_MACHINE_DENIED;
535
+ failResult = {
536
+ status: types.CaptchaStatus.disapproved,
537
+ reason: dmReason
538
+ };
539
+ failReason = dmReason;
540
+ } else {
541
+ this.logger.debug(() => ({
542
+ msg: "Decision machine allowed PoW captcha",
543
+ data: {
544
+ challenge,
545
+ reason: decision.reason,
546
+ score: decision.score,
547
+ tags: decision.tags
548
+ }
549
+ }));
550
+ }
384
551
  } catch (error) {
385
- this.logger?.debug(() => ({
386
- msg: "Failed to decrypt with key, trying next",
387
- data: {
388
- keyIndex: keyIndex + 1,
389
- totalKeys: validKeys.length,
390
- err: error
391
- }
552
+ this.logger?.error(() => ({
553
+ msg: "Failed to run decision machine in server PoW verification",
554
+ err: error
392
555
  }));
393
556
  }
394
557
  }
395
- this.logger?.error(() => ({
396
- msg: "Failed to decrypt behavioral data with all available keys",
397
- data: {
398
- totalKeysAttempted: validKeys.length
399
- }
400
- }));
401
- return null;
558
+ const finalResult = failResult || {
559
+ status: types.CaptchaStatus.approved
560
+ };
561
+ if (failResult) {
562
+ powRecordUpdates.result = failResult;
563
+ }
564
+ const writePromises = [];
565
+ if (Object.keys(powRecordUpdates).length > 0) {
566
+ writePromises.push(
567
+ this.db.updatePowCaptchaRecord(
568
+ challengeRecord.challenge,
569
+ powRecordUpdates
570
+ )
571
+ );
572
+ }
573
+ if (challengeRecord.sessionId) {
574
+ writePromises.push(
575
+ this.updateSessionRecordWithCache(
576
+ challengeRecord.sessionId,
577
+ {
578
+ serverChecked: true,
579
+ result: finalResult
580
+ },
581
+ true
582
+ )
583
+ );
584
+ }
585
+ if (writePromises.length > 0) {
586
+ await Promise.all(writePromises);
587
+ }
588
+ if (failReason) {
589
+ return notVerified(failReason);
590
+ }
591
+ return { verified: true, ...score ? { score } : {} };
402
592
  }
403
593
  }
404
594
  exports.PowCaptchaManager = PowCaptchaManager;