@prosopo/provider 3.15.0 → 4.7.2

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 +1328 -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 +316 -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 +315 -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 +6 -2
  222. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +149 -43
  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 +4 -0
  288. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  289. package/dist/tasks/detection/getBotScore.js +8 -4
  290. package/dist/tasks/detection/getBotScore.js.map +1 -1
  291. package/dist/tasks/frictionless/frictionlessTasks.d.ts +20 -13
  292. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  293. package/dist/tasks/frictionless/frictionlessTasks.js +147 -43
  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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,1333 @@
1
1
  # @prosopo/provider
2
2
 
3
+ ## 4.7.2
4
+ ### Patch Changes
5
+
6
+ - b03dad1: Thread `shadowDomPenalty: boolean` from the catcher's encrypted detection payload through `decryptPayload` and persist it on `Session.scoreComponents` so the flag is queryable in Mongo without inferring it from `baseScore=1 ∧ ¬triggeredDetectors`. Field is optional on the wire (position 6); older catcher bundles omit it and `shadowDomPenalty` stays undefined.
7
+ - Updated dependencies [b03dad1]
8
+ - @prosopo/types@4.3.1
9
+ - @prosopo/types-database@4.8.1
10
+ - @prosopo/env@3.5.8
11
+ - @prosopo/api@3.4.9
12
+ - @prosopo/api-express-router@3.1.18
13
+ - @prosopo/database@3.13.8
14
+ - @prosopo/datasets@3.1.29
15
+ - @prosopo/keyring@2.9.35
16
+ - @prosopo/load-balancer@2.9.11
17
+ - @prosopo/types-env@2.9.17
18
+ - @prosopo/user-access-policy@3.7.12
19
+
20
+ ## 4.7.1
21
+ ### Patch Changes
22
+
23
+ - 936e987: Republish under npm trusted publishing.
24
+
25
+ No runtime change. The v3.6.30 publish landed only a partial slice of the workspace before npm rejected the rest (provenance verification + repository-field mismatch). Cutting a fresh version so every package gets a clean publish under the new OIDC-based workflow with provenance attestations attached.
26
+
27
+ ## 4.7.0
28
+ ### Minor Changes
29
+
30
+ - 2392aaf: Integrate the prosopo/dns sidecar against the procaptcha provider.
31
+
32
+ - New admin endpoint `POST /v1/prosopo/provider/admin/dns/event` ingests batched DNS observation events from the sidecar (auth: admin sr25519 JWT) and merges resolver / peer IPs onto the matching Session record under a new `Session.dnsEvent` field.
33
+ - Frictionless response carries a per-session `dns_url` when the pronode has `DNS_EVENT_SUBZONE` + `DNS_EVENT_HMAC_SECRET` set. The HMAC path mirrors the sidecar's Rust implementation so both sides agree without shared per-request state.
34
+ - The frictionless bundle fires one no-cors GET to `dns_url` on detection completion (fire-and-forget; failures never affect the captcha flow).
35
+ - `dns_url` is included on the `reuse_session` short-circuit path too, not only the new-session path — otherwise repeat visits from the same user/IP/sitekey combination silently dropped the observation hop.
36
+ - Deploy compose entry for the sidecar plus a Caddy `layer4` SNI-passthrough block so the sidecar terminates TLS itself (no Cloudflare token needed). Caddy image must be rebuilt with the `caddy-l4` plugin.
37
+
38
+ ### Patch Changes
39
+
40
+ - 896243a: Document three known spec deviations in `read-tls-client-hello`'s JA4 implementation.
41
+
42
+ Adds inline comments to `ja4Middleware.ts` explaining how `calculateJa4FromHelloData`
43
+ differs from the Rust/AWS-Lambda reference: TLS 1.3 detection via extension presence
44
+ rather than content, single-byte ALPN first-char duplication, and ASCII decoding of
45
+ non-alphanumeric ALPN bytes instead of hex encoding.
46
+ - Updated dependencies [a1d60db]
47
+ - Updated dependencies [2392aaf]
48
+ - Updated dependencies [97cf7bd]
49
+ - Updated dependencies [6ca1125]
50
+ - Updated dependencies [32a591b]
51
+ - @prosopo/types@4.3.0
52
+ - @prosopo/types-database@4.8.0
53
+ - @prosopo/logger@1.0.2
54
+ - @prosopo/util@3.2.15
55
+ - @prosopo/api@3.4.8
56
+ - @prosopo/api-express-router@3.1.17
57
+ - @prosopo/common@3.1.38
58
+ - @prosopo/database@3.13.7
59
+ - @prosopo/datasets@3.1.28
60
+ - @prosopo/env@3.5.7
61
+ - @prosopo/keyring@2.9.34
62
+ - @prosopo/load-balancer@2.9.10
63
+ - @prosopo/types-env@2.9.16
64
+ - @prosopo/user-access-policy@3.7.11
65
+ - @prosopo/api-route@2.6.46
66
+ - @prosopo/redis-client@1.0.23
67
+
68
+ ## 4.6.3
69
+ ### Patch Changes
70
+
71
+ - e7b77e9: fix(provider): replace the honeypot semaphore encoder's lossy flag-emoji cycle with a bijective arrow-pair mapping and morse-style letter/word separators, so the encoded label is recoverable instead of an opaque glyph blob
72
+ - 65a7384: test(provider): add a unit test asserting an incorrectly solved image captcha is disapproved (`verified: false`), closing the unit-level gap previously only covered by the integration test
73
+
74
+ ## 4.6.2
75
+ ### Patch Changes
76
+
77
+ - d62eb70: Fix provider crash-loop on startup in maintenance mode.
78
+
79
+ `domainMiddleware` constructed `new Tasks(env)` eagerly at wire-up time, which
80
+ calls `env.getDb()`. In `MAINTENANCE_MODE=true` the DB is intentionally never
81
+ connected (`isReady()` skips the connect), so `getDb()` throws
82
+ `"db not setup! Please call isReady() first"`. That error was unguarded and
83
+ propagated out of `startProviderApi`, crashing the process on every boot and
84
+ leaving the provider in a Docker restart loop.
85
+
86
+ `Tasks` is now resolved lazily on the first request that actually needs domain
87
+ validation — i.e. only once maintenance mode is off — mirroring the existing
88
+ lazy pattern in `blockMiddleware`. The request handler already short-circuits
89
+ on `getMaintenanceMode()` before touching the DB, so no request path depends on
90
+ the eager construction.
91
+ - 6c26669: Add per-site honeypot trap. When enabled, the provider attaches an encoded question (morse or semaphore, base64-wrapped) in the `x-prosopo-meta` response header on frictionless responses. The widget renders the value into an off-screen hidden input with `name="email_confirm"`; bots that auto-fill text inputs populate it and the value rides back on the solution submit as `clientMetaData.hp`, which is persisted on the `StoredCaptcha` record. Falls back to a random phrase from `PROSOPO_HONEYPOT_PHRASE_BANK_PATH` when no custom question is configured.
92
+ - f7f9ec5: feat(provider,widget): reserved always-pass / always-fail test site keys
93
+
94
+ Add two fixed, well-known reserved site keys (`ALWAYS_PASS_SITE_KEY` /
95
+ `ALWAYS_FAIL_SITE_KEY`) that force a deterministic captcha verdict for CI/CD and
96
+ integration testing, constant across production, staging and development.
97
+
98
+ - `@prosopo/types`: shared constants + `getTestSiteKeyMode`, imported by both the
99
+ provider and the widget.
100
+ - `@prosopo/provider`: short-circuits the `submit*` and `verify` endpoints (verify
101
+ runs before the signature check, so no dapp secret is needed), serves an
102
+ invisible PoW session from the frictionless handler, and bypasses domain
103
+ middleware. Works in every environment with no DB record.
104
+ - `@prosopo/procaptcha-common` / `-react` / `-frictionless`: render a prominent
105
+ `TestModeBanner` warning (always pass/fail) plus a console warning so a test key
106
+ can never ship to production unnoticed.
107
+
108
+ always-pass verifies at both the submit and verify layers; always-fail fails at
109
+ both. Safe in production by design: the override only weakens protection for a
110
+ dapp that deliberately opts in, mirroring reCAPTCHA's public test keys.
111
+ - Updated dependencies [6c26669]
112
+ - Updated dependencies [f7f9ec5]
113
+ - @prosopo/types@4.2.1
114
+ - @prosopo/types-database@4.7.8
115
+ - @prosopo/api@3.4.7
116
+ - @prosopo/api-express-router@3.1.16
117
+ - @prosopo/database@3.13.6
118
+ - @prosopo/datasets@3.1.27
119
+ - @prosopo/env@3.5.6
120
+ - @prosopo/keyring@2.9.33
121
+ - @prosopo/load-balancer@2.9.9
122
+ - @prosopo/types-env@2.9.15
123
+ - @prosopo/user-access-policy@3.7.10
124
+
125
+ ## 4.6.1
126
+ ### Patch Changes
127
+
128
+ - 0fd81af: Extract the logger into its own `@prosopo/logger` package, out of `@prosopo/common`. Consumers now import logger symbols from `@prosopo/logger`; `@prosopo/common` no longer re-exports them. Unused `@prosopo/common` dependencies pruned where the only usage was the logger.
129
+ - Updated dependencies [0fd81af]
130
+ - @prosopo/api-express-router@3.1.15
131
+ - @prosopo/api-route@2.6.45
132
+ - @prosopo/common@3.1.37
133
+ - @prosopo/database@3.13.5
134
+ - @prosopo/datasets@3.1.26
135
+ - @prosopo/env@3.5.5
136
+ - @prosopo/logger@1.0.1
137
+ - @prosopo/redis-client@1.0.22
138
+ - @prosopo/types-database@4.7.7
139
+ - @prosopo/types-env@2.9.14
140
+ - @prosopo/user-access-policy@3.7.9
141
+ - @prosopo/keyring@2.9.32
142
+ - @prosopo/load-balancer@2.9.8
143
+
144
+ ## 4.6.0
145
+ ### Minor Changes
146
+
147
+ - 20cae63: feat(provider): re-route after PoW using decrypted behavioural data
148
+
149
+ PoW solutions are now re-evaluated by the routing machine after submission.
150
+ Previously the routing decision was made up-front on a thin set of signals;
151
+ behavioural data only becomes available (decrypted server-side) once the
152
+ user submits their PoW solution, so a user with weak behavioural signals
153
+ could still earn a token by solving PoW alone.
154
+
155
+ The submit endpoint now runs the routing machine a second time in a new
156
+ `postPow` phase, feeding in the decrypted behavioural data, the originating
157
+ session's score, request headers, JA4, and IP info. If the router escalates,
158
+ the provider mints a fresh session (carrying the original session's risk
159
+ profile) and returns `escalation: { captchaType, sessionId }` on the
160
+ `PowCaptchaSolutionResponse`. The `verified` flag is forced to `false` on
161
+ escalation — the user isn't done until they clear the follow-up.
162
+
163
+ On the client, `ProcaptchaFrictionless` accepts the escalation via a new
164
+ internal `onEscalate` prop on the PoW widget and mounts the chosen image
165
+ or puzzle widget in place, splicing the new sessionId into the
166
+ `FrictionlessState`. The handoff is internal to the frictionless → pow
167
+ flow — dapps integrating Procaptcha see no API change.
168
+
169
+ `RoutingMachineInputBase.phase` widens from `"route"` to
170
+ `"route" | "postPow"` so decision-machine configs can distinguish the two
171
+ passes.
172
+
173
+ ### Patch Changes
174
+
175
+ - 4d9923e: test(provider): integration test asserting every IUserSettings field round-trips through Mongo
176
+
177
+ Registers a site key with a fully-populated `IUserSettings` (every field set, including the new `storeMetadata` and the existing nested `contextAware` / `ipValidationRules` / `spamFilter` / `trafficFilter` sub-documents), reads the record back from Mongo via the real Mongoose write/read path, and asserts each top-level and nested field survived. This is the regression test class that would have caught the `autoBanScoreThreshold` Mongoose-strict-mode drop on the original PR.
178
+
179
+ While adding the test it caught another field that was in zod `ClientSettingsSchema` but missing from the Mongoose `UserSettingsSchema`: `puzzleTolerance`. The fix is bundled here — adds `puzzleTolerance: { type: Number, required: false }` to `UserSettingsSchema` so it actually persists.
180
+ - b2e1a5d: fix(database/provider): don't flag image-captcha placeholder records as `pendingStage`
181
+
182
+ #2596 set `pendingStage: true` on every commitment write, including
183
+ `storePendingImageCommitment` which inserts placeholder records with
184
+ `id: ""` while waiting for the user to submit a solution. The sweep
185
+ then picked those up via `pendingStage_partial` (fast) and called
186
+ `markDappUserCommitmentsStored(["", "", ...], ts)` (slow) — Mongo
187
+ dedupes the `$in` array to a single empty-string bound and the
188
+ `IXSCAN { id: -1 }` walks every empty-id document on the node (~102K
189
+ on production). On pronode11 that meant 2–8 s per sweep cycle of
190
+ unnecessary index scan on `usercommitments`, replacing the old
191
+ WT-cache-thrash with a different one.
192
+
193
+ Two-part fix:
194
+
195
+ - `storePendingImageCommitment` no longer sets `pendingStage`. The
196
+ real commitment record only gets the flag once `approve` /
197
+ `disapprove` runs, at which point `id` is populated and staging is
198
+ meaningful.
199
+ - `storeCommitmentsExternal` defensively skips any batch entry whose
200
+ `id` is empty before calling `markDappUserCommitmentsStored`, so a
201
+ stray placeholder slipping into the partial index can never
202
+ re-introduce the bug.
203
+
204
+ For nodes already running #2596, the existing flagged placeholders
205
+ need clearing once (otherwise they sit at `pendingStage: true`
206
+ forever, since `markDappUserCommitmentsStored`'s
207
+ `lastUpdatedTimestamp <= ts` guard never matches them after their
208
+ last update). One-shot per node:
209
+
210
+ ```js
211
+ db.usercommitments.updateMany(
212
+ { pendingStage: true, id: "" },
213
+ { $unset: { pendingStage: 1 } }
214
+ );
215
+ ```
216
+ - 4d9923e: feat: optional `storeMetadata` site setting persists `/verify` metadata
217
+
218
+ Adds a per-site-key boolean `storeMetadata` (default `false`) to
219
+ `ClientSettingsSchema` / `UserSettingsSchema`. When enabled, the provider
220
+ writes the dapp-server-forwarded metadata that arrives on the image, PoW
221
+ and puzzle `/verify` endpoints onto the corresponding captcha record under
222
+ a new `metadata` sub-document (`{ email?: string }` today; more fields
223
+ will be added here as the verify payload grows).
224
+
225
+ `providedIp` stays top-level — existing data and indexes already use it,
226
+ and it predates this setting.
227
+
228
+ Off by default. Existing spam-email checks still inspect the submitted
229
+ email unconditionally — this setting only gates **storage** of metadata
230
+ so the submitted values can be sampled later to judge whether traffic is
231
+ mostly spam.
232
+ - Updated dependencies [cdbc5ed]
233
+ - Updated dependencies [4d9923e]
234
+ - Updated dependencies [20cae63]
235
+ - Updated dependencies [b2e1a5d]
236
+ - Updated dependencies [4d9923e]
237
+ - @prosopo/types-database@4.7.6
238
+ - @prosopo/types@4.2.0
239
+ - @prosopo/database@3.13.4
240
+ - @prosopo/types-env@2.9.13
241
+ - @prosopo/api@3.4.6
242
+ - @prosopo/api-express-router@3.1.14
243
+ - @prosopo/datasets@3.1.25
244
+ - @prosopo/env@3.5.4
245
+ - @prosopo/keyring@2.9.31
246
+ - @prosopo/load-balancer@2.9.7
247
+ - @prosopo/user-access-policy@3.7.8
248
+
249
+ ## 4.5.3
250
+ ### Patch Changes
251
+
252
+ - d351362: fix: replace `$or + $expr` unstored-records sweep with a `pendingStage` sentinel
253
+
254
+ The `StoreCommitmentsExternal` background job fetches "records that still
255
+ need to be shipped to the central DB" via
256
+ `{ $or: [ { storedAtTimestamp: { $exists: false } }, { $expr: { $lt: [$storedAtTimestamp, $lastUpdatedTimestamp] } } ] }`.
257
+ `$expr` is unindexable (per-doc computation) and combined with `$or`
258
+ defeats the planner entirely — production was running this every sweep
259
+ as a `IXSCAN { _id: 1 }` collection scan, examining ~673K powcaptcha
260
+ docs, ~240K usercommitments docs, and ~60K sessions docs per pass. On
261
+ the worst-affected nodes this thrashed the WiredTiger cache (10h of
262
+ cumulative app-thread blocking on disk reads in 43h of uptime) and made
263
+ every other Mongo lookup (including the frictionless session dedup
264
+ queries) slow by eviction — manifesting as traffic-correlated provider
265
+ latency starting 2026-05-26.
266
+
267
+ Replace the query semantics with a `pendingStage: true` sentinel:
268
+
269
+ - New optional `pendingStage` field on `StoredCaptcha` and `Session`
270
+ (Zod + TS + Mongoose schemas).
271
+ - New tiny partial index per collection:
272
+ `{ pendingStage: 1 }` with `partialFilterExpression: { pendingStage: true }`.
273
+ Indexes only the rows that need staging — typically a tiny rolling set,
274
+ ~20 KB for a 700K-row collection with 100 pending rows in local tests.
275
+ - Write paths (`storeXxx`, `updateXxx`, `markXxxChecked`, approve /
276
+ disapprove, `checkAndRemoveSession`, `recordSessionSimdReadingsIfAbsent`,
277
+ `storePendingImageCommitment`) set `pendingStage: true` alongside the
278
+ existing `lastUpdatedTimestamp` bump.
279
+ - `markXxxStored` and the per-record streamer mark-stored callbacks
280
+ `$unset: { pendingStage: 1 }` alongside the `storedAtTimestamp` write,
281
+ guarded by `lastUpdatedTimestamp: { $lte: ts }` so an in-flight update
282
+ doesn't get its pending flag cleared by an older stage completion.
283
+ - `markXxxStored` bulk methods accept an `asOfTimestamp` argument; the
284
+ sweep passes the time it fetched the batch so the guard is correct
285
+ across the full ship-then-mark round trip.
286
+ - `getUnstoredXxx` queries become `{ pendingStage: true }` sorted by
287
+ `_id` — uses the new partial index, examines only pending docs.
288
+
289
+ Local verification on a 700,100-doc test collection: old query ~549 ms
290
+ examining 700,100 docs; new query 0 ms examining 100 docs. Index storage
291
+ ~20 KB.
292
+ - Updated dependencies [d351362]
293
+ - @prosopo/types@4.1.4
294
+ - @prosopo/types-database@4.7.5
295
+ - @prosopo/database@3.13.3
296
+ - @prosopo/api@3.4.5
297
+ - @prosopo/api-express-router@3.1.13
298
+ - @prosopo/datasets@3.1.24
299
+ - @prosopo/env@3.5.3
300
+ - @prosopo/keyring@2.9.30
301
+ - @prosopo/load-balancer@2.9.6
302
+ - @prosopo/types-env@2.9.12
303
+ - @prosopo/user-access-policy@3.7.7
304
+
305
+ ## 4.5.2
306
+ ### Patch Changes
307
+
308
+ - 6567ce0: feat(provider): allow Google Translate proxy domains through the domain check middleware
309
+
310
+ Google Translate proxies a site under `<encoded>.translate.goog` (e.g.
311
+ `prosopo-io.translate.goog`), encoding `.` as `-` and `-` as `--`. With the
312
+ previous implementation the proxied host never matched a site's allowed
313
+ domains and the captcha widget broke on translated pages.
314
+
315
+ Add `decodeGoogleTranslateHost` to `@prosopo/util` which reverses the
316
+ encoding, and update the provider's `domainMiddleware` so that when the
317
+ request origin is a `*.translate.goog` URL it also tries the decoded
318
+ origin against the site's allowed domains.
319
+
320
+ Closes #2585.
321
+ - e2711ae: feat(provider): add `autoBanScoreThreshold` client setting and frictionless auto-ban
322
+
323
+ Adds an optional `autoBanScoreThreshold` to `ClientSettingsSchema`. When set,
324
+ the frictionless decision machine blocks any request whose detector score is
325
+ at or above the threshold with HTTP 401 instead of issuing an image or PoW
326
+ challenge — useful for clients receiving floods of image solves from sessions
327
+ scoring at or above 1.
328
+
329
+ The check runs first in `runDecisionMachine`, before the existing
330
+ user-agent / context-aware / webview / timestamp / threshold gates, so score
331
+ bumps applied by those gates cannot bypass it. Blocked sessions are persisted
332
+ via `registerBlockedSession` with the new `FrictionlessReason.AUTO_BAN_SCORE`
333
+ reason.
334
+
335
+ Undefined threshold = disabled; existing clients are unaffected.
336
+ - 5786629: fix(provider): persist DISALLOWED_WEBVIEW outcome and broaden detection in image captcha verify
337
+
338
+ The webview check in `verifyImageCaptchaSolution` did an early return that
339
+ left the commitment stuck at `Approved` in the database and never marked
340
+ the session as `serverChecked` / `disapproved`, even though the API
341
+ correctly returned `verified: false`. This made the DB state misleading
342
+ and broke any downstream consumer reading commitment status directly.
343
+
344
+ The check also only fired when `scoreComponents.webView > 0`, which is
345
+ only set when the frictionless flow took the webview branch. Webview
346
+ users who reached the image captcha via another branch (UA mismatch,
347
+ context-aware failure, timestamp, bot score) had `session.webView: true`
348
+ but no `scoreComponents.webView`, so the verify-time block missed them.
349
+
350
+ - Convert the early return to the same `failStatus` /
351
+ `commitmentUpdates.result` pattern used by every other check in the
352
+ function, so the commitment and session are properly persisted as
353
+ disapproved with reason `DISALLOWED_WEBVIEW`.
354
+ - Trigger on `session.webView === true` OR `scoreComponents.webView > 0`.
355
+ - Add `ResultReason.DISALLOWED_WEBVIEW` and the English locale entry.
356
+ - Add unit tests for score-based detection, boolean-only detection, and
357
+ the `disallowWebView=false` passthrough.
358
+
359
+ Closes #3396.
360
+ - Updated dependencies [6567ce0]
361
+ - Updated dependencies [e2711ae]
362
+ - Updated dependencies [5786629]
363
+ - Updated dependencies [7e8cbb7]
364
+ - @prosopo/util@3.2.14
365
+ - @prosopo/types@4.1.3
366
+ - @prosopo/locale@3.2.4
367
+ - @prosopo/types-database@4.7.4
368
+ - @prosopo/database@3.13.2
369
+ - @prosopo/datasets@3.1.23
370
+ - @prosopo/keyring@2.9.29
371
+ - @prosopo/user-access-policy@3.7.6
372
+ - @prosopo/api@3.4.4
373
+ - @prosopo/api-express-router@3.1.12
374
+ - @prosopo/common@3.1.36
375
+ - @prosopo/env@3.5.2
376
+ - @prosopo/load-balancer@2.9.5
377
+ - @prosopo/types-env@2.9.11
378
+ - @prosopo/api-route@2.6.44
379
+ - @prosopo/redis-client@1.0.21
380
+
381
+ ## 4.5.1
382
+ ### Patch Changes
383
+
384
+ - a780f1c: Stop logging an error per request when a decision machine has no `route` export.
385
+
386
+ PR #2543 added a routing pre-phase that calls `route()` on whichever decision
387
+ machine is selected for the dapp. The runner's export lookup only treats
388
+ `module.exports = fn` as a default for `decide`/`default`, so decide-only
389
+ machines (the in-prod shape: a bare default function) caused `route()` to
390
+ throw `Decision machine must export one of: route` on every verify request.
391
+
392
+ Behaviour was already correct — the caller catches and falls back to the
393
+ baseline — but the per-request error log was noisy. Pass `optional: true`
394
+ when looking up the `route` export so a missing one returns `undefined`
395
+ silently, matching how `requiredCounters` is already handled. Schema
396
+ validation failures, throws, and timeouts continue to log an error.
397
+ - Updated dependencies [72a1218]
398
+ - @prosopo/util@3.2.13
399
+ - @prosopo/database@3.13.1
400
+ - @prosopo/datasets@3.1.22
401
+ - @prosopo/keyring@2.9.28
402
+ - @prosopo/types@4.1.2
403
+ - @prosopo/user-access-policy@3.7.5
404
+ - @prosopo/env@3.5.1
405
+ - @prosopo/types-env@2.9.10
406
+ - @prosopo/api@3.4.3
407
+ - @prosopo/api-express-router@3.1.11
408
+ - @prosopo/load-balancer@2.9.4
409
+ - @prosopo/types-database@4.7.3
410
+
411
+ ## 4.5.0
412
+ ### Minor Changes
413
+
414
+ - 91958da: Puzzle captcha + maintenance mode hardening, plus a refactor of the
415
+ frictionless handler into focused modules.
416
+
417
+ - **Puzzle captcha now records checkbox-click coordinates like POW.** Adds an
418
+ optional `salt` field to `SubmitPuzzleCaptchaSolutionBody`; the puzzle
419
+ widget hashes the click coords into the salt and the server decodes them
420
+ into the puzzle record's `coords` field on submit. New `start(x, y)`
421
+ parameters on `procaptcha-puzzle` Manager + widget.
422
+ - **Fix puzzle "No session found" caused by stale Redis dedup.** The
423
+ `/frictionless` dedup path is now Mongo-authoritative — Redis is no
424
+ longer consulted as a session source. A concurrent `/captcha/{type}`
425
+ invalidation could previously race a fire-and-forget Redis repopulation
426
+ in the `/frictionless` dedup branch, leaving Redis pointing at a
427
+ Mongo-deleted session for the full 1-hour TTL. Stale pointers are now
428
+ evicted lazily.
429
+ - **Maintenance mode operates without MongoDB.** `/frictionless` and
430
+ `/captcha/{pow,puzzle}` short-circuit to dummy responses before any DB
431
+ call, and `Environment.isReady()` tolerates a Mongo connect failure when
432
+ `MAINTENANCE_MODE=true` so the provider can start with Mongo down.
433
+ - **Refactor `getFrictionlessCaptchaChallenge.ts` into focused modules** under
434
+ `getFrictionlessCaptchaChallenge/` (handler, sessionDedup, shortCircuit,
435
+ accessPolicy, decisionMachine, decryptSimdReadings, constants). Original
436
+ import path preserved via a re-export shim.
437
+ - **Move `RedisWriteQueue` from `@prosopo/provider` to `@prosopo/database`**
438
+ (where the Redis connection itself lives), and clear residual Redis
439
+ session keys at provider startup via `Environment.cleanup()` so a
440
+ previously-crashed run can't leak stale dedup pointers.
441
+ - Adds puzzle-type branch to access-policy handling in `/frictionless`.
442
+
443
+ ### Patch Changes
444
+
445
+ - Updated dependencies [53bfd45]
446
+ - Updated dependencies [91958da]
447
+ - @prosopo/locale@3.2.3
448
+ - @prosopo/env@3.5.0
449
+ - @prosopo/database@3.13.0
450
+ - @prosopo/api@3.4.2
451
+ - @prosopo/types@4.1.1
452
+ - @prosopo/api-express-router@3.1.10
453
+ - @prosopo/common@3.1.35
454
+ - @prosopo/types-database@4.7.2
455
+ - @prosopo/user-access-policy@3.7.4
456
+ - @prosopo/datasets@3.1.21
457
+ - @prosopo/keyring@2.9.27
458
+ - @prosopo/load-balancer@2.9.3
459
+ - @prosopo/types-env@2.9.9
460
+ - @prosopo/api-route@2.6.43
461
+ - @prosopo/redis-client@1.0.20
462
+
463
+ ## 4.4.2
464
+ ### Patch Changes
465
+
466
+ - f4001e8: Fix `/captcha/{type}` endpoints looping with "No session found" after a
467
+ session has been consumed: the hash → sessionId mapping
468
+ (`cache:session:hash:{userSitekeyIpHash}`) is now invalidated alongside
469
+ the sessionId cache, and both invalidations are awaited so a concurrent
470
+ `patchCachedSession` (e.g. puzzle solution submission) can no longer
471
+ re-populate the cache between consume and response. Previously the
472
+ hash mapping outlived the session for up to its 1-hour TTL, so
473
+ `/frictionless` kept handing the dead sessionId back to the client.
474
+
475
+ Fix the configured-image short-circuit in `/frictionless` to use the
476
+ normal solved count capped by `imageMaxRounds`, matching every other
477
+ image branch in the file. Previously it used `imageMaxRounds`
478
+ (default 32) as the count rather than as a cap, so any site key
479
+ configured with `captchaType: image` punished every visitor with 32
480
+ rounds regardless of bot signals.
481
+ - 6a741ce: Move `FrictionlessReason` into `@prosopo/types` and add a new
482
+ `ResultReason` enum covering the values previously inlined as string
483
+ literals on `result.reason` (API.CAPTCHA_PASSED, API.VPN_BLOCKED,
484
+ EMAIL_INVALID, etc.). Provider task code now references the enums so the
485
+ canonical list of selection/result reasons lives in one place and can be
486
+ imported by non-server packages (portal, audit tooling) without pulling
487
+ in `@prosopo/provider`. The previous `FrictionlessReason` export from
488
+ `@prosopo/provider` is preserved as a re-export for backwards
489
+ compatibility.
490
+
491
+ `CaptchaResult.reason`, `StoredCaptcha.result.reason`, `Session.result.reason`
492
+ are now typed `ResultReason | undefined`; `Session.reason` is typed
493
+ `FrictionlessReason | undefined`. The runtime zod schema stays permissive
494
+ (`string().optional().transform(v => v as ResultReason | undefined)`) so
495
+ operator-authored decision-machine output and old MongoDB records still
496
+ parse without throwing; the strict enum is preserved on the TS surface
497
+ via the transform.
498
+ - 0832606: Add integration test asserting an incorrectly solved image captcha is marked as disapproved
499
+ - Updated dependencies [6a741ce]
500
+ - @prosopo/types@4.1.0
501
+ - @prosopo/database@3.12.1
502
+ - @prosopo/api@3.4.1
503
+ - @prosopo/api-express-router@3.1.9
504
+ - @prosopo/datasets@3.1.20
505
+ - @prosopo/env@3.4.9
506
+ - @prosopo/keyring@2.9.26
507
+ - @prosopo/load-balancer@2.9.2
508
+ - @prosopo/types-database@4.7.1
509
+ - @prosopo/types-env@2.9.8
510
+ - @prosopo/user-access-policy@3.7.3
511
+
512
+ ## 4.4.1
513
+ ### Patch Changes
514
+
515
+ - bd9f284: Add an integration test asserting that a correct image captcha solution
516
+ submitted after the time limit is disapproved by the provider and verified as
517
+ disapproved by the dapp.
518
+
519
+ ## 4.4.0
520
+ ### Minor Changes
521
+
522
+ - d865319: Add puzzle captcha (drag-to-target challenge) as a new captcha type:
523
+ provider endpoints, manager + widget package, types, demo pages, and
524
+ a `puzzleTolerance` site setting.
525
+ - 753304b: Extend the existing decision-machine artifact with a new `route` phase that
526
+ selects the concrete captcha type during the frictionless flow. Per-sitekey
527
+ JS sources (Dapp > Global priority) can now override the ladder's image/pow
528
+ baseline based on Redis-backed usage counters keyed by IP and userAccount.
529
+
530
+ Adds:
531
+
532
+ - `RoutingMachineInput`, `RoutingMachineOutput`, `CounterSpec`,
533
+ `CounterWindow` etc. in `@prosopo/types`.
534
+ - A `usageCounters` primitive in the provider (Lua INCR + TTL-on-first;
535
+ bulk MGET) and fire-and-forget served/solved counter writes at the
536
+ three captcha types.
537
+ - `DecisionMachineRunner.route()` and `.getRequiredCounters()` alongside
538
+ the existing `decide()` veto. Artifact cache is now shared across all
539
+ runner instances and busted on admin PUT for immediate propagation.
540
+ - `applyRouter` helper in the frictionless flow which falls back to the
541
+ ladder baseline on any machine/Redis failure.
542
+
543
+ Back-compat: existing post-PoW verify-phase machines keep working
544
+ unchanged. A single artifact can export both `route` and `verify` /
545
+ `decide`.
546
+ - 8bb7286: Move `captchaType` from client (`data-captcha-type` / render-options prop)
547
+ to a server-side site-key setting; the bundle now calls `/frictionless`
548
+ for all flows. Renames the bundle's universal mount component from
549
+ `FrictionlessCaptcha` to `BundleCaptcha` to reflect that it is no longer
550
+ frictionless-specific — the server decides which concrete challenge type
551
+ to render.
552
+
553
+ ### Patch Changes
554
+
555
+ - f9ea09d: Stop re-looking up the IP in `checkTrafficFilter` — read `record.ipInfo` instead
556
+
557
+ Now that every captcha record carries the full `IPInfoResponse` (written by `ipInfoMiddleware` at request time), `checkTrafficFilter` no longer needs to call `ipInfoService.lookup(ip)` on the verify path. The function takes an `IPInfoResponse | undefined` directly and is no longer async — one fewer sidecar round-trip per verify call.
558
+
559
+ - `checkTrafficFilter(ip, trafficFilter, ipInfoService, logger)` → `checkTrafficFilter(ipInfo, trafficFilter)`.
560
+ - `serverVerifyPowCaptchaSolution`, `verifyImageCaptchaSolution`, and `serverVerifyPuzzleCaptchaSolution` (newly given a `trafficFilter` parameter to bring it to parity with the other two) read `challengeRecord.ipInfo` / `solution.ipInfo` by default, and only do a fresh `env.ipInfoService.lookup(ip)` when the dapp passed up the end user's current IP via the verify call — that's the "now" IP for filtering, and may differ from the IP that originally requested the captcha.
561
+ - Existing unit tests (`checkTrafficFilter.unit.test.ts`) updated to the new shape; new MongoMemory roundtrip tests in `packages/database/src/tests/integration/ipInfoPersistence.integration.test.ts` prove the three captcha schemas (PoW / Puzzle / UserCommitment) actually persist + retrieve a full IPInfoResponse, and that the `{ ipInfo: { $exists: false } }` backfill query matches records missing the field.
562
+
563
+ Paired with [captcha-private#3339](https://github.com/prosopo/captcha-private/pull/3339).
564
+ - 3c0be68: Add a new admin-only endpoint `POST /v1/prosopo/provider/admin/counters/clear-all`
565
+ for deleting per-sitekey usage counters from Redis. Intended for manual
566
+ testing of routing decision machines and staging-environment resets — not
567
+ part of the hot path.
568
+
569
+ - `ClearAllCountersBody` (optional `dapp`) and `ClearAllCountersResponse`
570
+ (`success`, `deletedCount`, `scope`) zod schemas in `@prosopo/types`,
571
+ plus `AdminApiPaths.ClearAllCounters` and a 10/60s rate limit.
572
+ - `UsageCounters.clearAll(dappAccount?)` in the provider, using Redis
573
+ `SCAN` + `DEL` in 500-key batches. Returns null on Redis failure so
574
+ callers can surface the underlying error.
575
+ - `ApiClearAllCountersEndpoint` wired through `ApiAdminRoutesProvider`.
576
+ - `ProviderApi.clearAllCounters(jwt, dappAccount?)` client method.
577
+ - 4aae4e6: refactor/provider: dedupe SIMD-readings decrypt+attach boilerplate
578
+
579
+ The same 20–25-line "decrypt the SIMD readings ciphertext with the
580
+ provider detector keys, strip the timestamp, and persist them to the
581
+ session record" block was repeated six times across the challenge-GET
582
+ endpoints and the submit verifiers. Pulled it into two layered methods
583
+ on `CaptchaManager`:
584
+
585
+ - `decryptSimdReadingsForAttach(ciphertext)` returns the decoded
586
+ readings or `undefined`. Used by the image-submit path which decodes
587
+ once and reuses the result across several session writes.
588
+
589
+ - `decryptAndAttachSimdReadingsIfAbsent(sessionId, ciphertext, stage)`
590
+ is a thin wrapper for the common decrypt-then-record case used by the
591
+ three challenge-GETs and the PoW/Puzzle submit verifiers.
592
+
593
+ Net −69 lines across the 6 callsites (+53 of helper). Behaviour is
594
+ unchanged.
595
+ - f9ea09d: Drop flat ipinfo fields (`vpn`, `countryCode`, `tor`, `proxy`, `datacenter`, `abuser`, `geolocation`) from captcha records — persist the full `IPInfoResponse` payload as `ipInfo` instead
596
+
597
+ The provider's `ipInfoMiddleware` already calls `ipInfoService.lookup()` on every captcha request and attaches the result to `req.ipInfo`. Persisting that whole payload on every captcha record means the portal sees the *exact* response the traffic filter consulted, with no cherry-picked-field translation layer in between. Adding a new flag in the future (e.g. `isMobile`) requires zero schema changes — it's already in the payload.
598
+
599
+ - `StoredCaptcha` interface: removed `vpn`, `countryCode`, `geolocation`. Keeps `ipInfo?: IPInfoResponse`.
600
+ - `PoWCaptchaStoredSchema` zod validator: same removals, adds `ipInfo` (validated as `any()` since `IPInfoResponse` is a discriminated union narrowed at read time).
601
+ - PoW, Puzzle, UserCommitment mongoose schemas in `@prosopo/types-database`: same removals. UserCommitment now also has `ipInfo` (previously only PoW + Puzzle did). Replaced `{ countryCode: 1 }` index with `{ "ipInfo.countryCode": 1 }` + `{ "ipInfo.isVPN": 1 }`.
602
+ - `IProviderDatabase` interface: `storePowCaptchaRecord` / `storePuzzleCaptchaRecord` / `storePendingImageCommitment` now take `ipInfo?: IPInfoResponse` in place of `countryCode?: string`.
603
+ - Provider call sites (`getPoWCaptchaChallenge.ts`, `getPuzzleCaptchaChallenge.ts`, `getImageCaptchaChallenge.ts`, `submitImageCaptchaSolution.ts`) pass `req.ipInfo` directly. The earlier "prefer session.countryCode, fallback to req's countryCode" branching is gone — record `ipInfo` reflects what was true at challenge-issuance time.
604
+ - Provider read sites (`powTasks.ts`, `puzzleTasks.ts`, `imgCaptchaTasks.ts`) narrow `record.ipInfo?.isValid` then read `.countryCode` for access-policy / decision-machine input — same effective value, derived from the persisted payload.
605
+ - Lean projections in `provider.ts` switched from `countryCode: 1` to `ipInfo: 1`.
606
+
607
+ Paired with [captcha-private#3339](https://github.com/prosopo/captcha-private/pull/3339), which updates the CHECK_IP_INFO backfill job (now writes the full payload, query becomes `{ ipInfo: { $exists: false } }`), the portal search models / aggregation pipeline (read nested `ipInfo.*`), and the anomaly detectors.
608
+ - a9a40e9: Always check an IP in traffic filter
609
+ - 273926d: Fix `/captcha/{type}` endpoints looping with "No session found" when the
610
+ Redis session cache and Mongo diverge: on a session lookup miss the cache
611
+ entry is now invalidated, so the next `/frictionless` falls through and
612
+ creates a fresh session instead of resurrecting the dead one.
613
+
614
+ Add invisible-mode support to the puzzle captcha widget: the
615
+ execute-event handler now drives the full phase transition
616
+ (`start` → `setChallengeData` → `dragging`), and the puzzle overlay is
617
+ rendered in invisible mode so the user can still solve the (inherently
618
+ interactive) drag challenge — only the checkbox UI is hidden.
619
+
620
+ Add `invisible-puzzle-implicit.html` / `invisible-puzzle-explicit.html`
621
+ demo pages, and surface both standard and invisible puzzle entries in
622
+ the client-bundle-example navbar.
623
+ - f9ea09d: Drop flat `countryCode` / `geolocation` fields from Session records — persist the full `IPInfoResponse` payload as `session.ipInfo` instead
624
+
625
+ Brings sessions in line with captcha records (PoW / Puzzle / UserCommitment), which already store the full payload. The provider's `ipInfoMiddleware` populates `req.ipInfo` at session-creation time; that whole payload now lives on the session, so consumers narrow on `session.ipInfo?.isValid` and read whichever sub-field they need (countryCode, isVPN, isMobile, isTor, ...).
626
+
627
+ - `Session` interface + `SessionSchema` zod (`@prosopo/types`): replace `countryCode?: string` / `geolocation?: string` with `ipInfo?: IPInfoResponse`.
628
+ - `SessionRecordSchema` mongoose (`@prosopo/types-database`): same.
629
+ - `FrictionlessManager.setSessionParams` / `createSession`: accept `ipInfo` instead of `countryCode`.
630
+ - `getFrictionlessCaptchaChallenge.ts` call sites (10 of them — `sendImageCaptcha`, `sendPowCaptcha`, `registerBlockedSession`, etc.) pass `req.ipInfo` instead of `countryCode`.
631
+ - `CaptchaManager.isValidRequest()` return: drop dead `countryCode: sessionRecord.countryCode` field (no caller was destructuring it after the earlier refactor), surface `ipInfo: sessionRecord.ipInfo` instead for callers that want it.
632
+ - Two new MongoMemory roundtrip tests in `ipInfoPersistence.integration.test.ts` cover Session.ipInfo (valid response + error response). `routingDecisionMachines.integration.test.ts` fixture updated to write the full payload.
633
+
634
+ `RoutingContext.countryCode` is unchanged — that's a transient runtime struct fed into the routing machine, not a stored record. Callers of `setRoutingContext` already derive `countryCode` from `req.ipInfo.countryCode` at the API boundary.
635
+
636
+ Paired with [captcha-private#3339](https://github.com/prosopo/captcha-private/pull/3339).
637
+ - 4aae4e6: Plumb the WASM SIMD CPU fingerprint readings (collected by the catcher
638
+ client per https://blog.azerpas.com/writing/wasm-simd-fingerprinting/)
639
+ through the captcha flow and onto the linked `Session` record.
640
+ Collection-only — no scoring or classification yet.
641
+
642
+ The readings are sent at the earliest moment they're available so the
643
+ signal lands on the session as soon as possible:
644
+
645
+ 1. **Captcha-challenge GET** (PoW / Puzzle / Image) — the procaptcha
646
+ Manager calls `frictionlessState.getSimdReadings(0)` (non-blocking
647
+ cache check) and attaches it to the challenge-request body. The
648
+ provider handler decodes and patches the linked session via
649
+ `updateSessionRecord`.
650
+ 2. **Solution submission** (PoW / Puzzle / Image) — same non-blocking
651
+ check on the submit body. Acts as a backup if the benchmark wasn't
652
+ ready in time for the challenge GET.
653
+
654
+ Frictionless init itself stays SIMD-free (benchmark is too slow to gate
655
+ the first hop).
656
+
657
+ Surface area:
658
+
659
+ - `SimdReadings` discriminated union + `SimdOpReadingRecord` /
660
+ `SimdOpCategory` in `@prosopo/types`, plus `simdReadingsCodec` shared
661
+ encode/decode helpers so the browser SDK and the provider use the same
662
+ pipe-safe wire format.
663
+ - Optional `simdReadings: string()` on `CaptchaRequestBody`,
664
+ `GetPowCaptchaChallengeRequestBody`, `GetPuzzleCaptchaChallengeRequestBody`,
665
+ `CaptchaSolutionBody`, `SubmitPowCaptchaSolutionBody`, and
666
+ `SubmitPuzzleCaptchaSolutionBody`.
667
+ - `FrictionlessState.getSimdReadings` + `BotDetectionFunctionResult.getSimdReadings`
668
+ so the catcher's prefetched benchmark is consumed at the request sites.
669
+ - `ProcaptchaApiInterface.{getCaptchaChallenge, submitCaptchaSolution}` and
670
+ the `ProviderApi.{getCaptchaChallenge, getPowCaptchaChallenge, getPuzzleCaptchaChallenge,
671
+ submitCaptchaSolution, submitPowCaptchaSolution, submitPuzzleCaptchaSolution}`
672
+ client methods accept the field.
673
+ - Provider challenge + solution handlers decode via `decodeSimdReadings`
674
+ and `updateSessionRecord` (Mongoose `Mixed`, Zod discriminated-union
675
+ validation at the edge). The challenge-GET patch is fire-and-forget.
676
+
677
+ Backward-compatible: older catcher clients omit the field at every layer;
678
+ the session record omits it in turn.
679
+ - 4993813: Standardise provider error logging so every error is queryable via a single
680
+ top-level `err` field, and so the logged value is the locale-stable
681
+ translation key (e.g. `CAPTCHA.NO_SESSION_FOUND`) rather than the translated
682
+ message text (`"No session found"`, `"Aucune session trouvée"`, etc.).
683
+
684
+ - `ProsopoBaseError.logError()` now emits `{ err: translationKey, data: { errorType, context } }` instead of `{ data: { errorType, errorParams: { error, context } } }`. OpenObserve queries can drop `data_errorparams_error` and `data_errorparams_context_translationmessage`.
685
+ - The redundant `translationMessage` injection into wrapped-error context is removed (it was the source of the locale-variant strings).
686
+ - `NativeLogger.unpackError()` prefers `e.translationKey` over `e.message` when surfacing an error via `logger.error(() => ({ err }))`, so catch-and-log sites are standardised automatically.
687
+ - Removed two `console.error` calls in `verify.ts` and an accidental debug `console.log(JSON.stringify(effectiveRules, null, 2))` in `util.ts` that were both bypassing `req.logger` (no `requestId`, and in the JSON dump case exploding into ~20 separate log entries per call).
688
+ - HTTP response shape is unchanged: `unwrapError()` still uses `i18n.t(err.message)` for the response body, and `jsonError.key` still carries the translation key for clients.
689
+ - Updated dependencies [f9ea09d]
690
+ - Updated dependencies [3c0be68]
691
+ - Updated dependencies [f9ea09d]
692
+ - Updated dependencies [4aae4e6]
693
+ - Updated dependencies [4aae4e6]
694
+ - Updated dependencies [d865319]
695
+ - Updated dependencies [753304b]
696
+ - Updated dependencies [8bb7286]
697
+ - Updated dependencies [f9ea09d]
698
+ - Updated dependencies [4aae4e6]
699
+ - Updated dependencies [4993813]
700
+ - Updated dependencies [72a0483]
701
+ - @prosopo/database@3.12.0
702
+ - @prosopo/types@4.0.0
703
+ - @prosopo/api@3.4.0
704
+ - @prosopo/types-database@4.7.0
705
+ - @prosopo/load-balancer@2.9.1
706
+ - @prosopo/locale@3.2.2
707
+ - @prosopo/util@3.2.12
708
+ - @prosopo/keyring@2.9.25
709
+ - @prosopo/common@3.1.34
710
+ - @prosopo/user-access-policy@3.7.2
711
+ - @prosopo/env@3.4.8
712
+ - @prosopo/api-express-router@3.1.8
713
+ - @prosopo/datasets@3.1.19
714
+ - @prosopo/types-env@2.9.7
715
+ - @prosopo/api-route@2.6.42
716
+ - @prosopo/redis-client@1.0.19
717
+
718
+ ## 4.3.0
719
+ ### Minor Changes
720
+
721
+ - 33a6c57: Provider speed ups
722
+
723
+ ### Patch Changes
724
+
725
+ - 819ed95: Adding invisible mode to session data
726
+ - 1b35548: Adding maintenance mode check at start of domain middleware
727
+ - Updated dependencies [819ed95]
728
+ - Updated dependencies [33a6c57]
729
+ - @prosopo/types-database@4.6.2
730
+ - @prosopo/types@3.16.1
731
+ - @prosopo/api@3.3.2
732
+ - @prosopo/load-balancer@2.9.0
733
+ - @prosopo/database@3.11.0
734
+ - @prosopo/types-env@2.9.6
735
+ - @prosopo/api-express-router@3.1.7
736
+ - @prosopo/datasets@3.1.18
737
+ - @prosopo/env@3.4.7
738
+ - @prosopo/keyring@2.9.24
739
+ - @prosopo/user-access-policy@3.7.1
740
+
741
+ ## 4.2.1
742
+ ### Patch Changes
743
+
744
+ - Updated dependencies [60ba3b1]
745
+ - @prosopo/user-access-policy@3.7.0
746
+ - @prosopo/database@3.10.2
747
+ - @prosopo/types-database@4.6.1
748
+ - @prosopo/env@3.4.6
749
+ - @prosopo/types-env@2.9.5
750
+ - @prosopo/api-express-router@3.1.6
751
+
752
+ ## 4.2.0
753
+ ### Minor Changes
754
+
755
+ - 780dcb0: Clear sessions from cache when deleted from db
756
+
757
+ ### Patch Changes
758
+
759
+ - Updated dependencies [942701b]
760
+ - @prosopo/database@3.10.1
761
+ - @prosopo/env@3.4.5
762
+ - @prosopo/api-express-router@3.1.5
763
+
764
+ ## 4.1.0
765
+ ### Minor Changes
766
+
767
+ - 558bc6d: Make sure redis cache works with bigint
768
+
769
+ ## 4.0.0
770
+ ### Major Changes
771
+
772
+ - 41c54b0: Redis cache to avoid hitting the database multiple times per API request
773
+
774
+ ### Minor Changes
775
+
776
+ - f14d645: Fix to catch NaN being passed in as score in sessions
777
+ - 74092d0: Stream data back to central for decisions
778
+
779
+ ### Patch Changes
780
+
781
+ - Updated dependencies [74092d0]
782
+ - @prosopo/types-database@4.6.0
783
+ - @prosopo/database@3.10.0
784
+ - @prosopo/types-env@2.9.4
785
+ - @prosopo/env@3.4.4
786
+ - @prosopo/api-express-router@3.1.4
787
+
788
+ ## 3.24.0
789
+ ### Minor Changes
790
+
791
+ - 99dfb44: Pass back reason via verify calls
792
+
793
+ ### Patch Changes
794
+
795
+ - f6a4402: API endpoint for removing site keys
796
+ - Updated dependencies [f6a4402]
797
+ - Updated dependencies [99dfb44]
798
+ - @prosopo/types-database@4.5.3
799
+ - @prosopo/database@3.9.18
800
+ - @prosopo/types@3.16.0
801
+ - @prosopo/api@3.3.1
802
+ - @prosopo/types-env@2.9.3
803
+ - @prosopo/env@3.4.3
804
+ - @prosopo/api-express-router@3.1.3
805
+ - @prosopo/datasets@3.1.17
806
+ - @prosopo/keyring@2.9.23
807
+ - @prosopo/load-balancer@2.8.40
808
+ - @prosopo/user-access-policy@3.6.24
809
+
810
+ ## 3.23.2
811
+ ### Patch Changes
812
+
813
+ - Updated dependencies [3e54c0a]
814
+ - @prosopo/types@3.15.0
815
+ - @prosopo/api@3.3.0
816
+ - @prosopo/api-express-router@3.1.2
817
+ - @prosopo/database@3.9.17
818
+ - @prosopo/datasets@3.1.16
819
+ - @prosopo/env@3.4.2
820
+ - @prosopo/keyring@2.9.22
821
+ - @prosopo/load-balancer@2.8.39
822
+ - @prosopo/types-database@4.5.2
823
+ - @prosopo/types-env@2.9.2
824
+ - @prosopo/user-access-policy@3.6.23
825
+
826
+ ## 3.23.1
827
+ ### Patch Changes
828
+
829
+ - 946a8ba: Abuser score threshold
830
+ - 5614814: Small config changes
831
+ - Updated dependencies [946a8ba]
832
+ - Updated dependencies [5614814]
833
+ - Updated dependencies [b94890c]
834
+ - @prosopo/types-database@4.5.1
835
+ - @prosopo/types@3.14.1
836
+ - @prosopo/locale@3.2.1
837
+ - @prosopo/database@3.9.16
838
+ - @prosopo/types-env@2.9.1
839
+ - @prosopo/api@3.2.11
840
+ - @prosopo/api-express-router@3.1.1
841
+ - @prosopo/common@3.1.33
842
+ - @prosopo/datasets@3.1.15
843
+ - @prosopo/env@3.4.1
844
+ - @prosopo/keyring@2.9.21
845
+ - @prosopo/load-balancer@2.8.38
846
+ - @prosopo/user-access-policy@3.6.22
847
+ - @prosopo/api-route@2.6.41
848
+
849
+ ## 3.23.0
850
+ ### Minor Changes
851
+
852
+ - 42650db: Add better spam rules and move ipinfo service to local instead of external
853
+
854
+ ### Patch Changes
855
+
856
+ - fc514dd: ability to block different types of traffic
857
+ - Updated dependencies [fc514dd]
858
+ - Updated dependencies [7be39c4]
859
+ - Updated dependencies [42650db]
860
+ - @prosopo/types-database@4.5.0
861
+ - @prosopo/locale@3.2.0
862
+ - @prosopo/types@3.14.0
863
+ - @prosopo/api@3.2.10
864
+ - @prosopo/api-express-router@3.1.0
865
+ - @prosopo/types-env@2.9.0
866
+ - @prosopo/env@3.4.0
867
+ - @prosopo/database@3.9.15
868
+ - @prosopo/common@3.1.32
869
+ - @prosopo/datasets@3.1.14
870
+ - @prosopo/keyring@2.9.20
871
+ - @prosopo/load-balancer@2.8.37
872
+ - @prosopo/user-access-policy@3.6.21
873
+ - @prosopo/api-route@2.6.40
874
+
875
+ ## 3.22.4
876
+ ### Patch Changes
877
+
878
+ - fe5f0f9: Fixing flaky image captcha test
879
+ - Updated dependencies [4a9c518]
880
+ - @prosopo/common@3.1.31
881
+ - @prosopo/api-express-router@3.0.70
882
+ - @prosopo/api-route@2.6.39
883
+ - @prosopo/database@3.9.14
884
+ - @prosopo/datasets@3.1.13
885
+ - @prosopo/env@3.3.15
886
+ - @prosopo/keyring@2.9.19
887
+ - @prosopo/load-balancer@2.8.36
888
+ - @prosopo/types-database@4.4.14
889
+ - @prosopo/types-env@2.8.15
890
+ - @prosopo/user-access-policy@3.6.20
891
+
892
+ ## 3.22.3
893
+ ### Patch Changes
894
+
895
+ - Updated dependencies [a25dffa]
896
+ - @prosopo/util@3.2.11
897
+ - @prosopo/database@3.9.13
898
+ - @prosopo/datasets@3.1.12
899
+ - @prosopo/keyring@2.9.18
900
+ - @prosopo/types@3.13.3
901
+ - @prosopo/user-access-policy@3.6.19
902
+ - @prosopo/env@3.3.14
903
+ - @prosopo/types-env@2.8.14
904
+ - @prosopo/api@3.2.9
905
+ - @prosopo/api-express-router@3.0.69
906
+ - @prosopo/load-balancer@2.8.35
907
+ - @prosopo/types-database@4.4.13
908
+
909
+ ## 3.22.2
910
+ ### Patch Changes
911
+
912
+ - 346edd7: Fix exports for browser
913
+ - Updated dependencies [346edd7]
914
+ - @prosopo/util@3.2.10
915
+ - @prosopo/database@3.9.12
916
+ - @prosopo/datasets@3.1.11
917
+ - @prosopo/keyring@2.9.17
918
+ - @prosopo/types@3.13.2
919
+ - @prosopo/user-access-policy@3.6.18
920
+ - @prosopo/env@3.3.13
921
+ - @prosopo/types-env@2.8.13
922
+ - @prosopo/api@3.2.8
923
+ - @prosopo/api-express-router@3.0.68
924
+ - @prosopo/load-balancer@2.8.34
925
+ - @prosopo/types-database@4.4.12
926
+
927
+ ## 3.22.1
928
+ ### Patch Changes
929
+
930
+ - Updated dependencies [22bfee7]
931
+ - @prosopo/util@3.2.9
932
+ - @prosopo/database@3.9.11
933
+ - @prosopo/datasets@3.1.10
934
+ - @prosopo/keyring@2.9.16
935
+ - @prosopo/types@3.13.1
936
+ - @prosopo/user-access-policy@3.6.17
937
+ - @prosopo/env@3.3.12
938
+ - @prosopo/types-env@2.8.12
939
+ - @prosopo/api@3.2.7
940
+ - @prosopo/api-express-router@3.0.67
941
+ - @prosopo/load-balancer@2.8.33
942
+ - @prosopo/types-database@4.4.11
943
+
944
+ ## 3.22.0
945
+ ### Minor Changes
946
+
947
+ - e6d9553: Add `registerSiteKeys` bulk endpoint (`POST /v1/prosopo/provider/admin/sitekeys/register`) that accepts an array of site key records, allowing multiple client records to be registered in a single request.
948
+
949
+ ### Patch Changes
950
+
951
+ - Updated dependencies [e0fb3d6]
952
+ - Updated dependencies [e6d9553]
953
+ - Updated dependencies [f3f23e3]
954
+ - @prosopo/util@3.2.8
955
+ - @prosopo/types@3.13.0
956
+ - @prosopo/database@3.9.10
957
+ - @prosopo/datasets@3.1.9
958
+ - @prosopo/keyring@2.9.15
959
+ - @prosopo/user-access-policy@3.6.16
960
+ - @prosopo/api@3.2.6
961
+ - @prosopo/api-express-router@3.0.66
962
+ - @prosopo/env@3.3.11
963
+ - @prosopo/load-balancer@2.8.32
964
+ - @prosopo/types-database@4.4.10
965
+ - @prosopo/types-env@2.8.11
966
+
967
+ ## 3.21.4
968
+ ### Patch Changes
969
+
970
+ - 730c61e: Speed up captcha
971
+ - e1ea65f: Better spam email domain checking
972
+ - c316257: Adding sync fo sessions wrt captcha status
973
+ - Updated dependencies [730c61e]
974
+ - Updated dependencies [d5082a9]
975
+ - Updated dependencies [e1ea65f]
976
+ - Updated dependencies [c316257]
977
+ - @prosopo/load-balancer@2.8.31
978
+ - @prosopo/types@3.12.3
979
+ - @prosopo/types-database@4.4.9
980
+ - @prosopo/database@3.9.9
981
+ - @prosopo/util@3.2.7
982
+ - @prosopo/api@3.2.5
983
+ - @prosopo/api-express-router@3.0.65
984
+ - @prosopo/datasets@3.1.8
985
+ - @prosopo/env@3.3.10
986
+ - @prosopo/keyring@2.9.14
987
+ - @prosopo/types-env@2.8.10
988
+ - @prosopo/user-access-policy@3.6.15
989
+
990
+ ## 3.21.3
991
+ ### Patch Changes
992
+
993
+ - dbcd098: Fix bug with chrome on ios
994
+ - adb89a6: Disposable email checking
995
+ - Updated dependencies [adb89a6]
996
+ - @prosopo/types-database@4.4.8
997
+ - @prosopo/database@3.9.8
998
+ - @prosopo/locale@3.1.29
999
+ - @prosopo/types@3.12.2
1000
+ - @prosopo/util@3.2.6
1001
+ - @prosopo/api@3.2.4
1002
+ - @prosopo/types-env@2.8.9
1003
+ - @prosopo/env@3.3.9
1004
+ - @prosopo/api-express-router@3.0.64
1005
+ - @prosopo/common@3.1.30
1006
+ - @prosopo/datasets@3.1.7
1007
+ - @prosopo/keyring@2.9.13
1008
+ - @prosopo/load-balancer@2.8.30
1009
+ - @prosopo/user-access-policy@3.6.14
1010
+ - @prosopo/api-route@2.6.38
1011
+
1012
+ ## 3.21.2
1013
+ ### Patch Changes
1014
+
1015
+ - f5c8725: Fix bug with chrome on ios
1016
+
1017
+ ## 3.21.1
1018
+ ### Patch Changes
1019
+
1020
+ - a90eb54: We know WHAT happens but we don't know WHY happens
1021
+ - Updated dependencies [c5ee492]
1022
+ - Updated dependencies [a90eb54]
1023
+ - @prosopo/common@3.1.29
1024
+ - @prosopo/types-database@4.4.7
1025
+ - @prosopo/types@3.12.1
1026
+ - @prosopo/api-express-router@3.0.63
1027
+ - @prosopo/api-route@2.6.37
1028
+ - @prosopo/database@3.9.7
1029
+ - @prosopo/datasets@3.1.6
1030
+ - @prosopo/env@3.3.8
1031
+ - @prosopo/keyring@2.9.12
1032
+ - @prosopo/load-balancer@2.8.29
1033
+ - @prosopo/types-env@2.8.8
1034
+ - @prosopo/user-access-policy@3.6.13
1035
+ - @prosopo/api@3.2.3
1036
+
1037
+ ## 3.21.0
1038
+ ### Minor Changes
1039
+
1040
+ - feaca02: Max image rounds
1041
+
1042
+ ### Patch Changes
1043
+
1044
+ - 759d4e6: Dynamic server secrets for client example server
1045
+ - 676c5f2: Use HTTPS in developmentwq
1046
+ - Updated dependencies [676c5f2]
1047
+ - Updated dependencies [feaca02]
1048
+ - @prosopo/load-balancer@2.8.28
1049
+ - @prosopo/keyring@2.9.11
1050
+ - @prosopo/types@3.12.0
1051
+ - @prosopo/env@3.3.7
1052
+ - @prosopo/types-env@2.8.7
1053
+ - @prosopo/api@3.2.2
1054
+ - @prosopo/api-express-router@3.0.62
1055
+ - @prosopo/database@3.9.6
1056
+ - @prosopo/datasets@3.1.5
1057
+ - @prosopo/types-database@4.4.6
1058
+ - @prosopo/user-access-policy@3.6.12
1059
+
1060
+ ## 3.20.4
1061
+ ### Patch Changes
1062
+
1063
+ - 8148587: Clustering
1064
+ - Updated dependencies [8148587]
1065
+ - @prosopo/types-database@4.4.5
1066
+ - @prosopo/types@3.11.1
1067
+ - @prosopo/database@3.9.5
1068
+ - @prosopo/types-env@2.8.6
1069
+ - @prosopo/api@3.2.1
1070
+ - @prosopo/api-express-router@3.0.61
1071
+ - @prosopo/datasets@3.1.4
1072
+ - @prosopo/env@3.3.6
1073
+ - @prosopo/keyring@2.9.10
1074
+ - @prosopo/load-balancer@2.8.27
1075
+ - @prosopo/user-access-policy@3.6.11
1076
+
1077
+ ## 3.20.3
1078
+ ### Patch Changes
1079
+
1080
+ - 5444635: New ob code
1081
+
1082
+ ## 3.20.2
1083
+ ### Patch Changes
1084
+
1085
+ - 31af9cf: Use correct country code var
1086
+
1087
+ ## 3.20.1
1088
+ ### Patch Changes
1089
+
1090
+ - Updated dependencies [90033e9]
1091
+ - @prosopo/types-database@4.4.4
1092
+ - @prosopo/database@3.9.4
1093
+ - @prosopo/types-env@2.8.5
1094
+ - @prosopo/env@3.3.5
1095
+ - @prosopo/api-express-router@3.0.60
1096
+
1097
+ ## 3.20.0
1098
+ ### Minor Changes
1099
+
1100
+ - 7f6ffc5: Store behavioural for image challenges
1101
+
1102
+ ### Patch Changes
1103
+
1104
+ - ca7f4ad: Attach site key and user to logger earlier
1105
+ - Updated dependencies [ca7f4ad]
1106
+ - Updated dependencies [7f6ffc5]
1107
+ - @prosopo/api-express-router@3.0.59
1108
+ - @prosopo/types@3.11.0
1109
+ - @prosopo/api@3.2.0
1110
+ - @prosopo/database@3.9.3
1111
+ - @prosopo/datasets@3.1.3
1112
+ - @prosopo/env@3.3.4
1113
+ - @prosopo/keyring@2.9.9
1114
+ - @prosopo/load-balancer@2.8.26
1115
+ - @prosopo/types-database@4.4.3
1116
+ - @prosopo/types-env@2.8.4
1117
+ - @prosopo/user-access-policy@3.6.10
1118
+
1119
+ ## 3.19.3
1120
+ ### Patch Changes
1121
+
1122
+ - bca43e5: catcher updates
1123
+
1124
+ ## 3.19.2
1125
+ ### Patch Changes
1126
+
1127
+ - ce4f831: patch for some mobile devices
1128
+ - 93fa086: Add decision engine endpoints
1129
+ - 4de47f5: Catcher update
1130
+ - Updated dependencies [93fa086]
1131
+ - @prosopo/types-database@4.4.2
1132
+ - @prosopo/database@3.9.2
1133
+ - @prosopo/types@3.10.2
1134
+ - @prosopo/api@3.1.49
1135
+ - @prosopo/types-env@2.8.3
1136
+ - @prosopo/env@3.3.3
1137
+ - @prosopo/api-express-router@3.0.58
1138
+ - @prosopo/datasets@3.1.2
1139
+ - @prosopo/keyring@2.9.8
1140
+ - @prosopo/load-balancer@2.8.25
1141
+ - @prosopo/user-access-policy@3.6.9
1142
+
1143
+ ## 3.19.1
1144
+ ### Patch Changes
1145
+
1146
+ - cde7550: enhance/frictionless-headers-db-field
1147
+ - Updated dependencies [cde7550]
1148
+ - @prosopo/types-database@4.4.1
1149
+ - @prosopo/types@3.10.1
1150
+ - @prosopo/database@3.9.1
1151
+ - @prosopo/types-env@2.8.2
1152
+ - @prosopo/api@3.1.48
1153
+ - @prosopo/api-express-router@3.0.57
1154
+ - @prosopo/datasets@3.1.1
1155
+ - @prosopo/env@3.3.2
1156
+ - @prosopo/keyring@2.9.7
1157
+ - @prosopo/load-balancer@2.8.24
1158
+ - @prosopo/user-access-policy@3.6.8
1159
+
1160
+ ## 3.19.0
1161
+ ### Minor Changes
1162
+
1163
+ - ad6d622: Separate types from mongoose schemas to avoid bundling mongoose in frontend
1164
+
1165
+ ### Patch Changes
1166
+
1167
+ - fa95c5f: zod types for db records
1168
+ - Updated dependencies [ad6d622]
1169
+ - Updated dependencies [ced9f41]
1170
+ - Updated dependencies [fa95c5f]
1171
+ - @prosopo/types-database@4.4.0
1172
+ - @prosopo/database@3.9.0
1173
+ - @prosopo/datasets@3.1.0
1174
+ - @prosopo/types@3.10.0
1175
+ - @prosopo/types-env@2.8.1
1176
+ - @prosopo/env@3.3.1
1177
+ - @prosopo/api@3.1.47
1178
+ - @prosopo/api-express-router@3.0.56
1179
+ - @prosopo/keyring@2.9.6
1180
+ - @prosopo/load-balancer@2.8.23
1181
+ - @prosopo/user-access-policy@3.6.7
1182
+
1183
+ ## 3.18.0
1184
+ ### Minor Changes
1185
+
1186
+ - ff58a70: Load the geolocation service at startup only
1187
+
1188
+ ### Patch Changes
1189
+
1190
+ - Updated dependencies [ff58a70]
1191
+ - Updated dependencies [d329e63]
1192
+ - @prosopo/types-env@2.8.0
1193
+ - @prosopo/types@3.9.0
1194
+ - @prosopo/env@3.3.0
1195
+ - @prosopo/database@3.8.0
1196
+ - @prosopo/api@3.1.46
1197
+ - @prosopo/api-express-router@3.0.55
1198
+ - @prosopo/datasets@3.0.63
1199
+ - @prosopo/keyring@2.9.5
1200
+ - @prosopo/load-balancer@2.8.22
1201
+ - @prosopo/types-database@4.3.1
1202
+ - @prosopo/user-access-policy@3.6.6
1203
+
1204
+ ## 3.17.0
1205
+ ### Minor Changes
1206
+
1207
+ - 3feeea4: Store geolocation. Remove pending image captcha collection
1208
+
1209
+ ### Patch Changes
1210
+
1211
+ - Updated dependencies [3feeea4]
1212
+ - @prosopo/types-database@4.3.0
1213
+ - @prosopo/database@3.7.0
1214
+ - @prosopo/datasets@3.0.62
1215
+ - @prosopo/types-env@2.7.66
1216
+ - @prosopo/env@3.2.42
1217
+ - @prosopo/api-express-router@3.0.54
1218
+
1219
+ ## 3.16.5
1220
+ ### Patch Changes
1221
+
1222
+ - 4c08158: Skip ip validation unit tests
1223
+ - d2431cd: Allow IP validation rules to be disabled
1224
+ - Updated dependencies [4c08158]
1225
+ - Updated dependencies [d2431cd]
1226
+ - @prosopo/types-database@4.2.4
1227
+ - @prosopo/types@3.8.4
1228
+ - @prosopo/database@3.6.12
1229
+ - @prosopo/datasets@3.0.61
1230
+ - @prosopo/types-env@2.7.65
1231
+ - @prosopo/api@3.1.45
1232
+ - @prosopo/api-express-router@3.0.53
1233
+ - @prosopo/env@3.2.41
1234
+ - @prosopo/keyring@2.9.4
1235
+ - @prosopo/load-balancer@2.8.21
1236
+ - @prosopo/user-access-policy@3.6.5
1237
+
1238
+ ## 3.16.4
1239
+ ### Patch Changes
1240
+
1241
+ - 3a58d06: Don't fail on IP comparison fail
1242
+
1243
+ ## 3.16.3
1244
+ ### Patch Changes
1245
+
1246
+ - 8dad7f3: Implement frictionless blocks
1247
+ - Updated dependencies [8dad7f3]
1248
+ - @prosopo/types-database@4.2.3
1249
+ - @prosopo/database@3.6.11
1250
+ - @prosopo/datasets@3.0.60
1251
+ - @prosopo/types-env@2.7.64
1252
+ - @prosopo/env@3.2.40
1253
+ - @prosopo/api-express-router@3.0.52
1254
+
1255
+ ## 3.16.2
1256
+ ### Patch Changes
1257
+
1258
+ - 664e5bd: add unit tests
1259
+ - b19da6d: Shared CLI start fn
1260
+ - bd6995b: Adding UAP based geoblocking rules
1261
+ - Updated dependencies [bd6995b]
1262
+ - @prosopo/user-access-policy@3.6.4
1263
+ - @prosopo/types@3.8.3
1264
+ - @prosopo/database@3.6.10
1265
+ - @prosopo/types-database@4.2.2
1266
+ - @prosopo/api@3.1.44
1267
+ - @prosopo/api-express-router@3.0.51
1268
+ - @prosopo/datasets@3.0.59
1269
+ - @prosopo/env@3.2.39
1270
+ - @prosopo/keyring@2.9.3
1271
+ - @prosopo/load-balancer@2.8.20
1272
+ - @prosopo/types-env@2.7.63
1273
+
1274
+ ## 3.16.1
1275
+ ### Patch Changes
1276
+
1277
+ - 9633e58: Add captcha type to decision machine and run on image verification"
1278
+ - Updated dependencies [9633e58]
1279
+ - @prosopo/types-database@4.2.1
1280
+ - @prosopo/types@3.8.2
1281
+ - @prosopo/api@3.1.43
1282
+ - @prosopo/database@3.6.9
1283
+ - @prosopo/datasets@3.0.58
1284
+ - @prosopo/types-env@2.7.62
1285
+ - @prosopo/api-express-router@3.0.50
1286
+ - @prosopo/env@3.2.38
1287
+ - @prosopo/keyring@2.9.2
1288
+ - @prosopo/load-balancer@2.8.19
1289
+ - @prosopo/user-access-policy@3.6.3
1290
+
1291
+ ## 3.16.0
1292
+ ### Minor Changes
1293
+
1294
+ - 4299cae: Adding site key to session records
1295
+
1296
+ ### Patch Changes
1297
+
1298
+ - 261f89f: Actually set the site key
1299
+ - f52a5c1: Adding decision machine to provider for behavior detection
1300
+ - Updated dependencies [f52a5c1]
1301
+ - Updated dependencies [4299cae]
1302
+ - @prosopo/types-database@4.2.0
1303
+ - @prosopo/database@3.6.8
1304
+ - @prosopo/types@3.8.1
1305
+ - @prosopo/api@3.1.42
1306
+ - @prosopo/datasets@3.0.57
1307
+ - @prosopo/types-env@2.7.61
1308
+ - @prosopo/env@3.2.37
1309
+ - @prosopo/api-express-router@3.0.49
1310
+ - @prosopo/keyring@2.9.1
1311
+ - @prosopo/load-balancer@2.8.18
1312
+ - @prosopo/user-access-policy@3.6.2
1313
+
1314
+ ## 3.15.2
1315
+ ### Patch Changes
1316
+
1317
+ - Updated dependencies [ed87b6f]
1318
+ - @prosopo/user-access-policy@3.6.1
1319
+ - @prosopo/database@3.6.7
1320
+ - @prosopo/types-database@4.1.6
1321
+ - @prosopo/env@3.2.36
1322
+ - @prosopo/datasets@3.0.56
1323
+ - @prosopo/types-env@2.7.60
1324
+ - @prosopo/api-express-router@3.0.48
1325
+
1326
+ ## 3.15.1
1327
+ ### Patch Changes
1328
+
1329
+ - 15254a3: Key cycle
1330
+
3
1331
  ## 3.15.0
4
1332
  ### Minor Changes
5
1333