@prosopo/provider 5.19.3 → 5.20.0

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 (295) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +45 -40
  2. package/.turbo/turbo-build$colon$tsc.log +28 -28
  3. package/.turbo/turbo-build.log +48 -40
  4. package/CHANGELOG.md +167 -0
  5. package/dist/api/admin/apiClearAllCountersEndpoint.js.map +1 -1
  6. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js.map +1 -1
  7. package/dist/api/admin/apiGetDecisionMachineEndpoint.js.map +1 -1
  8. package/dist/api/admin/apiGetSessionEndpoint.js.map +1 -1
  9. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js.map +1 -1
  10. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js.map +1 -1
  11. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js.map +1 -1
  12. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js.map +1 -1
  13. package/dist/api/admin/apiReplaceDetectorPoolEndpoint.js.map +1 -1
  14. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js.map +1 -1
  15. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  16. package/dist/api/blacklistRequestInspector.js +9 -8
  17. package/dist/api/blacklistRequestInspector.js.map +1 -1
  18. package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -1
  19. package/dist/api/captcha/checkSpamEmail.js +19 -26
  20. package/dist/api/captcha/checkSpamEmail.js.map +1 -1
  21. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -1
  22. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +11 -2
  23. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -1
  24. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
  25. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +6 -1
  26. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +30 -27
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  30. package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
  31. package/dist/api/captcha/getImageCaptchaChallenge.js +32 -43
  32. package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
  33. package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
  34. package/dist/api/captcha/getPoWCaptchaChallenge.js +27 -32
  35. package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
  36. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +3 -0
  37. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +23 -5
  39. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  40. package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -1
  41. package/dist/api/captcha/interactiveCaptchaChallenge.js +27 -32
  42. package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -1
  43. package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -1
  44. package/dist/api/captcha/interactiveCaptchaSolution.js +18 -24
  45. package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -1
  46. package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
  47. package/dist/api/captcha/submitImageCaptchaSolution.js +18 -24
  48. package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
  49. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  50. package/dist/api/captcha/submitPoWCaptchaSolution.js +35 -27
  51. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  52. package/dist/api/domainMiddleware.d.ts.map +1 -1
  53. package/dist/api/domainMiddleware.js +39 -47
  54. package/dist/api/domainMiddleware.js.map +1 -1
  55. package/dist/api/errorCodeForReason.d.ts +3 -0
  56. package/dist/api/errorCodeForReason.d.ts.map +1 -0
  57. package/dist/api/errorCodeForReason.js +22 -0
  58. package/dist/api/errorCodeForReason.js.map +1 -0
  59. package/dist/api/headerCheckMiddleware.d.ts.map +1 -1
  60. package/dist/api/headerCheckMiddleware.js +14 -9
  61. package/dist/api/headerCheckMiddleware.js.map +1 -1
  62. package/dist/api/ipInfoMiddleware.d.ts +1 -1
  63. package/dist/api/ipInfoMiddleware.d.ts.map +1 -1
  64. package/dist/api/ipInfoMiddleware.js +5 -1
  65. package/dist/api/ipInfoMiddleware.js.map +1 -1
  66. package/dist/api/metrics.d.ts.map +1 -1
  67. package/dist/api/metrics.js +9 -1
  68. package/dist/api/metrics.js.map +1 -1
  69. package/dist/api/public.d.ts.map +1 -1
  70. package/dist/api/public.js +6 -2
  71. package/dist/api/public.js.map +1 -1
  72. package/dist/api/rateLimitHandler.d.ts +4 -0
  73. package/dist/api/rateLimitHandler.d.ts.map +1 -0
  74. package/dist/api/rateLimitHandler.js +20 -0
  75. package/dist/api/rateLimitHandler.js.map +1 -0
  76. package/dist/api/startProviderApi.d.ts +1 -0
  77. package/dist/api/startProviderApi.d.ts.map +1 -1
  78. package/dist/api/startProviderApi.js +8 -17
  79. package/dist/api/startProviderApi.js.map +1 -1
  80. package/dist/api/validateAddress.d.ts +3 -4
  81. package/dist/api/validateAddress.d.ts.map +1 -1
  82. package/dist/api/validateAddress.js +13 -19
  83. package/dist/api/validateAddress.js.map +1 -1
  84. package/dist/api/verify.d.ts.map +1 -1
  85. package/dist/api/verify.js +73 -96
  86. package/dist/api/verify.js.map +1 -1
  87. package/dist/cjs/api/blacklistRequestInspector.cjs +9 -8
  88. package/dist/cjs/api/captcha/checkSpamEmail.cjs +18 -25
  89. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +11 -2
  90. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +6 -1
  91. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +29 -26
  92. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +31 -42
  93. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +26 -31
  94. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +22 -3
  95. package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +26 -31
  96. package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +17 -23
  97. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +17 -23
  98. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +34 -26
  99. package/dist/cjs/api/domainMiddleware.cjs +38 -46
  100. package/dist/cjs/api/errorCodeForReason.cjs +22 -0
  101. package/dist/cjs/api/headerCheckMiddleware.cjs +13 -8
  102. package/dist/cjs/api/ipInfoMiddleware.cjs +5 -1
  103. package/dist/cjs/api/metrics.cjs +9 -1
  104. package/dist/cjs/api/public.cjs +5 -1
  105. package/dist/cjs/api/rateLimitHandler.cjs +20 -0
  106. package/dist/cjs/api/startProviderApi.cjs +8 -16
  107. package/dist/cjs/api/validateAddress.cjs +12 -18
  108. package/dist/cjs/api/verify.cjs +72 -95
  109. package/dist/cjs/index.cjs +1 -0
  110. package/dist/cjs/tasks/captchaManager.cjs +6 -8
  111. package/dist/cjs/tasks/client/clientTasks.cjs +26 -13
  112. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +28 -8
  113. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +21 -19
  114. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +1 -1
  115. package/dist/cjs/tasks/frictionless/routingMachine.cjs +13 -4
  116. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +89 -40
  117. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +18 -8
  118. package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +21 -13
  119. package/dist/cjs/tasks/powCaptcha/backgroundWrites.cjs +24 -0
  120. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +44 -19
  121. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +14 -10
  122. package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +17 -8
  123. package/dist/cjs/tasks/signatureCheck.cjs +12 -0
  124. package/dist/cjs/tasks/tasks.cjs +6 -1
  125. package/dist/cjs/util/usageCounters.cjs +26 -3
  126. package/dist/cjs/util.cjs +14 -3
  127. package/dist/cjs/utils/devicePlatform.cjs +9 -5
  128. package/dist/cjs/utils/mobileSignals.cjs +69 -0
  129. package/dist/errorSites.d.ts +98 -0
  130. package/dist/errorSites.d.ts.map +1 -0
  131. package/dist/errorSites.js +2 -0
  132. package/dist/errorSites.js.map +1 -0
  133. package/dist/fingerprint/dist/merkle.js +69 -0
  134. package/dist/fingerprint/dist/proof.js +95 -0
  135. package/dist/fingerprint/dist/summary.js +73 -0
  136. package/dist/index.js +2 -2
  137. package/dist/tasks/captchaManager.d.ts +2 -3
  138. package/dist/tasks/captchaManager.d.ts.map +1 -1
  139. package/dist/tasks/captchaManager.js +6 -7
  140. package/dist/tasks/captchaManager.js.map +1 -1
  141. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  142. package/dist/tasks/client/clientTasks.js +27 -14
  143. package/dist/tasks/client/clientTasks.js.map +1 -1
  144. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -1
  145. package/dist/tasks/dataset/datasetTasksUtils.js +29 -9
  146. package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
  147. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +1 -3
  148. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
  149. package/dist/tasks/decisionMachine/decisionMachineRunner.js +21 -19
  150. package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
  151. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  152. package/dist/tasks/frictionless/frictionlessTasks.js +1 -1
  153. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  154. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
  155. package/dist/tasks/frictionless/routingMachine.js +13 -4
  156. package/dist/tasks/frictionless/routingMachine.js.map +1 -1
  157. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  158. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +91 -42
  159. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  160. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +19 -9
  161. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
  162. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -1
  163. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +22 -14
  164. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -1
  165. package/dist/tasks/powCaptcha/backgroundWrites.d.ts +7 -0
  166. package/dist/tasks/powCaptcha/backgroundWrites.d.ts.map +1 -0
  167. package/dist/tasks/powCaptcha/backgroundWrites.js +24 -0
  168. package/dist/tasks/powCaptcha/backgroundWrites.js.map +1 -0
  169. package/dist/tasks/powCaptcha/powTasks.d.ts +3 -3
  170. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  171. package/dist/tasks/powCaptcha/powTasks.js +45 -20
  172. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  173. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  174. package/dist/tasks/powCaptcha/powTasksUtils.js +15 -11
  175. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  176. package/dist/tasks/puzzle/puzzleRenderer.d.ts +8 -1
  177. package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
  178. package/dist/tasks/puzzle/puzzleRenderer.js +16 -8
  179. package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
  180. package/dist/tasks/signatureCheck.d.ts +2 -0
  181. package/dist/tasks/signatureCheck.d.ts.map +1 -0
  182. package/dist/tasks/signatureCheck.js +12 -0
  183. package/dist/tasks/signatureCheck.js.map +1 -0
  184. package/dist/tasks/tasks.d.ts.map +1 -1
  185. package/dist/tasks/tasks.js +7 -2
  186. package/dist/tasks/tasks.js.map +1 -1
  187. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +3 -1
  188. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  189. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +6 -2
  190. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -1
  191. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +1 -1
  192. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
  193. package/dist/tests/integration/imgCaptcha.integration.test.js +6 -5
  194. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  195. package/dist/tests/integration/ipValidation.integration.test.js +1 -1
  196. package/dist/tests/integration/ipValidation.integration.test.js.map +1 -1
  197. package/dist/tests/integration/powCaptcha.integration.test.js +2 -2
  198. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  199. package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
  200. package/dist/tests/integration/testUtils.d.ts +2 -2
  201. package/dist/tests/integration/testUtils.d.ts.map +1 -1
  202. package/dist/tests/integration/testUtils.js +1 -1
  203. package/dist/tests/integration/testUtils.js.map +1 -1
  204. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js +3 -1
  205. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js.map +1 -1
  206. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +26 -10
  207. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
  208. package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js +4 -4
  209. package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js.map +1 -1
  210. package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.d.ts +2 -0
  211. package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.d.ts.map +1 -0
  212. package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.js +210 -0
  213. package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.js.map +1 -0
  214. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts +2 -0
  215. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts.map +1 -0
  216. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js +153 -0
  217. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js.map +1 -0
  218. package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js +6 -2
  219. package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js.map +1 -1
  220. package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts +2 -0
  221. package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts.map +1 -0
  222. package/dist/tests/unit/api/errorCodeForReason.unit.test.js +23 -0
  223. package/dist/tests/unit/api/errorCodeForReason.unit.test.js.map +1 -0
  224. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +6 -1
  225. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  226. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js +16 -7
  227. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js.map +1 -1
  228. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts +2 -0
  229. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts.map +1 -0
  230. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js +46 -0
  231. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js.map +1 -0
  232. package/dist/tests/unit/api/public.unit.test.js +45 -10
  233. package/dist/tests/unit/api/public.unit.test.js.map +1 -1
  234. package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts +2 -0
  235. package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts.map +1 -0
  236. package/dist/tests/unit/api/rateLimitHandler.unit.test.js +39 -0
  237. package/dist/tests/unit/api/rateLimitHandler.unit.test.js.map +1 -0
  238. package/dist/tests/unit/api/validateAddress.unit.test.js +41 -115
  239. package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -1
  240. package/dist/tests/unit/api/verifyMalformedToken.unit.test.js +3 -3
  241. package/dist/tests/unit/api/verifyMalformedToken.unit.test.js.map +1 -1
  242. package/dist/tests/unit/tasks/captchaManager.unit.test.js +22 -18
  243. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  244. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +25 -0
  245. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  246. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +25 -20
  247. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
  248. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +31 -0
  249. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
  250. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts +2 -0
  251. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts.map +1 -0
  252. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js +80 -0
  253. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js.map +1 -0
  254. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +48 -0
  255. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -1
  256. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +20 -28
  257. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  258. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +2 -2
  259. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  260. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts +2 -0
  261. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts.map +1 -0
  262. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js +44 -0
  263. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js.map +1 -0
  264. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -43
  265. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  266. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +7 -6
  267. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  268. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +2 -2
  269. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
  270. package/dist/tests/unit/util/usageCounters.unit.test.js +20 -0
  271. package/dist/tests/unit/util/usageCounters.unit.test.js.map +1 -1
  272. package/dist/tests/unit/util.unit.test.js +7 -7
  273. package/dist/tests/unit/util.unit.test.js.map +1 -1
  274. package/dist/tests/unit/utils/devicePlatform.unit.test.js +9 -8
  275. package/dist/tests/unit/utils/devicePlatform.unit.test.js.map +1 -1
  276. package/dist/tests/unit/utils/mobileSignals.unit.test.d.ts +2 -0
  277. package/dist/tests/unit/utils/mobileSignals.unit.test.d.ts.map +1 -0
  278. package/dist/tests/unit/utils/mobileSignals.unit.test.js +161 -0
  279. package/dist/tests/unit/utils/mobileSignals.unit.test.js.map +1 -0
  280. package/dist/util/usageCounters.d.ts +1 -1
  281. package/dist/util/usageCounters.d.ts.map +1 -1
  282. package/dist/util/usageCounters.js +26 -3
  283. package/dist/util/usageCounters.js.map +1 -1
  284. package/dist/util.d.ts.map +1 -1
  285. package/dist/util.js +15 -4
  286. package/dist/util.js.map +1 -1
  287. package/dist/utils/devicePlatform.d.ts +3 -3
  288. package/dist/utils/devicePlatform.d.ts.map +1 -1
  289. package/dist/utils/devicePlatform.js +9 -5
  290. package/dist/utils/devicePlatform.js.map +1 -1
  291. package/dist/utils/mobileSignals.d.ts +32 -0
  292. package/dist/utils/mobileSignals.d.ts.map +1 -0
  293. package/dist/utils/mobileSignals.js +68 -0
  294. package/dist/utils/mobileSignals.js.map +1 -0
  295. package/package.json +44 -43
@@ -12,6 +12,7 @@ let _prosopo_types = require("@prosopo/types");
12
12
  let _prosopo_util = require("@prosopo/util");
13
13
  let _prosopo_captcha_severity = require("@prosopo/captcha-severity");
14
14
  let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
15
+ let _prosopo_fingerprint_summary = require("@prosopo/fingerprint/summary");
15
16
  //#region src/api/captcha/submitPoWCaptchaSolution.ts
16
17
  var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
17
18
  if (require_apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
@@ -26,14 +27,12 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
26
27
  try {
27
28
  parsed = _prosopo_types.SubmitPowCaptchaSolutionBody.parse(req.body);
28
29
  } catch (err) {
29
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
30
- context: {
31
- code: 400,
32
- error: err,
33
- body: require_requestBodySummary.summariseRequestBody(req)
34
- },
35
- i18n: req.i18n,
36
- logger: req.logger
30
+ return next(new _prosopo_common.ProsopoError({
31
+ code: "INVALID_REQUEST",
32
+ errorSite: "PROV-27",
33
+ message: "Error parsing captcha",
34
+ cause: err,
35
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
37
36
  }));
38
37
  }
39
38
  const { challenge, signature, nonce, dapp, user, behavioralData, salt, simdReadings, clientMetaData, fingerprintProof } = parsed;
@@ -49,22 +48,21 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
49
48
  }
50
49
  try {
51
50
  const clientRecord = await tasks.db.getClientRecord(dapp);
52
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
53
- context: {
54
- code: 400,
55
- siteKey: dapp
56
- },
57
- i18n: req.i18n,
58
- logger: req.logger
51
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
52
+ code: "SITE_KEY_NOT_REGISTERED",
53
+ errorSite: "PROV-28",
54
+ context: { siteKey: dapp }
59
55
  }));
60
56
  const flatHeaders = (0, _prosopo_util.flatten)(req.headers);
61
57
  const userAgent = req.headers["user-agent"] ?? "";
62
58
  const countryCode = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.countryCode : void 0;
59
+ const fingerprintSummary = (0, _prosopo_fingerprint_summary.summariseFingerprintProof)(fingerprintProof);
63
60
  req.logger.info(() => ({
64
61
  msg: fingerprintProof ? "fingerprintProof detected" : "no fingerprintProof on PoW submission",
65
62
  data: {
66
63
  fingerprintProofPresent: fingerprintProof !== void 0,
67
64
  fingerprintProofBytes: fingerprintProof?.length ?? 0,
65
+ fingerprintSummarised: fingerprintSummary !== void 0,
68
66
  challenge
69
67
  }
70
68
  }));
@@ -72,12 +70,17 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
72
70
  tasks.powCaptchaManager.setPostPowContext({
73
71
  ip: req.ip || "",
74
72
  countryCode,
75
- platform: require_devicePlatform.derivePlatform(userAgent, false),
73
+ platform: require_devicePlatform.derivePlatform(userAgent, false, {
74
+ headers: flatHeaders,
75
+ ...req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid && { carrierNetwork: req.ipInfo.isMobile },
76
+ ...req.tcpMss !== void 0 && { tcpMss: req.tcpMss }
77
+ }),
76
78
  raw: {
77
79
  headers: flatHeaders,
78
80
  userAgent,
79
81
  ...req.ja4 && { ja4: req.ja4 },
80
82
  ...fingerprintProof && { fingerprintProof },
83
+ ...fingerprintSummary && { fingerprintSummary },
81
84
  ...req.tcpToChelloUs !== void 0 && { tcpToChelloUs: req.tcpToChelloUs },
82
85
  ...req.chelloToHandshakeUs !== void 0 && { chelloToHandshakeUs: req.chelloToHandshakeUs },
83
86
  ...require_rawTlsSignalsMiddleware.rawTlsSignalsForSession(req),
@@ -86,7 +89,7 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
86
89
  }
87
90
  });
88
91
  const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
89
- const result = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, signature.provider.challenge, nonce, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), flatHeaders, behavioralData, salt, simdReadings, clientMetaData);
92
+ const result = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, signature.provider.challenge, nonce, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), flatHeaders, behavioralData, salt, simdReadings, clientMetaData, fingerprintSummary);
90
93
  if (result.routingOutput) req.logger.info(() => ({
91
94
  msg: "post-PoW routing decision",
92
95
  data: {
@@ -111,19 +114,18 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
111
114
  };
112
115
  return res.json(response);
113
116
  } catch (err) {
117
+ if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
114
118
  req.logger.error(() => ({
115
119
  err,
116
120
  body: require_requestBodySummary.summariseRequestBody(req),
117
121
  msg: "Error in PoW captcha solution submission"
118
122
  }));
119
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
120
- context: {
121
- code: 500,
122
- siteKey: req.body.dapp,
123
- error: err
124
- },
125
- i18n: req.i18n,
126
- logger: req.logger
123
+ return next(new _prosopo_common.ProsopoError({
124
+ code: "UNEXPECTED",
125
+ errorSite: "PROV-29",
126
+ message: "BadRequest",
127
+ cause: err,
128
+ context: { siteKey: req.body.dapp }
127
129
  }));
128
130
  }
129
131
  };
@@ -150,7 +152,13 @@ var buildEscalation = async (tasks, result, challenge, perConnectionSignals, sit
150
152
  const imageMaxRounds = siteConstraints?.imageMaxRounds ?? _prosopo_types.imageMaxRoundsDefault;
151
153
  const escalationPuzzleOverrides = (() => {
152
154
  if (escalatedType !== _prosopo_types.CaptchaType.puzzle) return void 0;
153
- const { isMobile } = require_devicePlatform.derivePlatform(originSession.headers?.["user-agent"] ?? "", originSession.webView);
155
+ const { isMobile } = require_devicePlatform.derivePlatform(originSession.headers?.["user-agent"] ?? "", originSession.webView, {
156
+ ...originSession.headers && { headers: originSession.headers },
157
+ ...originSession.ipInfo?.isValid && { carrierNetwork: originSession.ipInfo.isMobile },
158
+ ...originSession.tcpMss !== void 0 && { tcpMss: originSession.tcpMss },
159
+ ...powRecord.deviceCapability !== void 0 && { deviceCapability: powRecord.deviceCapability },
160
+ ...powRecord.behavioralDataPacked?.c2 !== void 0 && { touchEventCount: powRecord.behavioralDataPacked.c2.length }
161
+ });
154
162
  const level = (0, _prosopo_captcha_severity.severityToPuzzleDifficulty)(routed.solvedImagesCount ?? originSession.solvedImagesCount, tasks.config.captchas.solved.count, (0, _prosopo_captcha_severity.resolveMaxEscalationLevel)(siteConstraints?.puzzleMaxDifficulty, isMobile));
155
163
  if (level === 0) return void 0;
156
164
  const difficulty = require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken);
@@ -20,11 +20,11 @@ var domainMiddleware = (env) => {
20
20
  if (!cachedTasks) cachedTasks = new require_tasks.Tasks(env);
21
21
  const tasks = cachedTasks;
22
22
  const siteKey = req.headers["prosopo-site-key"];
23
- if (!siteKey) throw siteKeyNotRegisteredError(req.i18n, "No sitekey provided", req.logger);
23
+ if (!siteKey) throw siteKeyNotRegisteredError("No sitekey provided");
24
24
  try {
25
25
  (0, _prosopo_util_crypto.validateAddress)(siteKey, false, 42);
26
26
  } catch (err) {
27
- throw invalidSiteKeyError(req.i18n, siteKey, req.logger);
27
+ throw invalidSiteKeyError(siteKey);
28
28
  }
29
29
  if (require_testSiteKey.isReservedTestSiteKey(siteKey)) {
30
30
  require_metrics.recordDomainValidation("test_key");
@@ -32,32 +32,34 @@ var domainMiddleware = (env) => {
32
32
  return;
33
33
  }
34
34
  const clientSettings = await tasks.db.getClientRecord(siteKey);
35
- if (!clientSettings) throw siteKeyNotRegisteredError(req.i18n, siteKey, req.logger);
35
+ if (!clientSettings) throw siteKeyNotRegisteredError(siteKey);
36
36
  const allowedDomains = clientSettings.settings?.domains;
37
- if (!allowedDomains) throw siteKeyInvalidDomainError(req.i18n, siteKey, req.hostname, req.logger);
37
+ if (!allowedDomains) throw siteKeyInvalidDomainError(siteKey, req.hostname);
38
38
  const origin = req.headers.origin;
39
- if (!origin) throw unauthorizedOriginError(req.i18n, void 0, req.logger);
39
+ if (!origin) throw unauthorizedOriginError(void 0);
40
40
  const candidateOrigins = [origin, ...googleTranslateOrigins(origin)];
41
41
  for (const candidate of candidateOrigins) for (const domain of allowedDomains) if (tasks.clientTaskManager.domainPatternMatcher(candidate, domain)) {
42
42
  require_metrics.recordDomainValidation("allowed");
43
43
  next();
44
44
  return;
45
45
  }
46
- throw unauthorizedOriginError(req.i18n, origin, req.logger);
46
+ throw unauthorizedOriginError(origin);
47
47
  } catch (err) {
48
48
  require_metrics.recordDomainValidation("rejected");
49
- if (err instanceof _prosopo_common.ProsopoApiError || err instanceof zod.ZodError || err instanceof SyntaxError) (0, _prosopo_api_express_router.handleErrors)(err, req, res, next);
50
- else {
51
- req.logger.error(() => ({
52
- err,
53
- msg: "Domain middleware error"
54
- }));
55
- res.status(401).json({
56
- error: "Unauthorized",
57
- message: "Unauthorized"
58
- });
49
+ if ((0, _prosopo_common.isProsopoError)(err) || err instanceof zod.ZodError || err instanceof SyntaxError) {
50
+ (0, _prosopo_api_express_router.handleErrors)(err, req, res, next);
59
51
  return;
60
52
  }
53
+ req.logger.error(() => ({
54
+ err,
55
+ msg: "Domain middleware error"
56
+ }));
57
+ const error = new _prosopo_common.ProsopoError({
58
+ code: "UNAUTHORIZED",
59
+ errorSite: "PROV-85",
60
+ cause: err
61
+ });
62
+ res.status(error.status).json({ error: (0, _prosopo_common.toPublicError)(error, "BACKEND_ERROR") });
61
63
  }
62
64
  };
63
65
  };
@@ -71,46 +73,36 @@ var googleTranslateOrigins = (origin) => {
71
73
  return [];
72
74
  }
73
75
  };
74
- var siteKeyNotRegisteredError = (i18n, dapp, logger) => {
75
- return new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
76
- context: {
77
- code: 400,
78
- siteKey: dapp
79
- },
80
- i18n,
81
- logger
76
+ var siteKeyNotRegisteredError = (dapp) => {
77
+ return new _prosopo_common.ProsopoError({
78
+ code: "SITE_KEY_NOT_REGISTERED",
79
+ errorSite: "PROV-30",
80
+ context: { siteKey: dapp }
82
81
  });
83
82
  };
84
- var invalidSiteKeyError = (i18n, siteKey, logger) => {
85
- return new _prosopo_common.ProsopoApiError("API.INVALID_SITE_KEY", {
86
- context: {
87
- code: 400,
88
- siteKey
89
- },
90
- i18n,
91
- logger
83
+ var invalidSiteKeyError = (siteKey) => {
84
+ return new _prosopo_common.ProsopoError({
85
+ code: "SITE_KEY_INVALID",
86
+ errorSite: "PROV-31",
87
+ context: { siteKey }
92
88
  });
93
89
  };
94
- var unauthorizedOriginError = (i18n, origin, logger) => {
95
- return new _prosopo_common.ProsopoApiError("API.UNAUTHORIZED_ORIGIN_URL", {
96
- context: {
97
- code: 400,
98
- origin
99
- },
100
- i18n,
101
- logger
90
+ var unauthorizedOriginError = (origin) => {
91
+ return new _prosopo_common.ProsopoError({
92
+ code: "ORIGIN_NOT_ALLOWED",
93
+ errorSite: "PROV-32",
94
+ context: { origin }
102
95
  });
103
96
  };
104
- var siteKeyInvalidDomainError = (i18n, dapp, domain, logger) => {
105
- return new _prosopo_common.ProsopoApiError("API.UNAUTHORIZED_ORIGIN_URL", {
97
+ var siteKeyInvalidDomainError = (dapp, domain) => {
98
+ return new _prosopo_common.ProsopoError({
99
+ code: "ORIGIN_NOT_ALLOWED",
100
+ errorSite: "PROV-33",
106
101
  context: {
107
- code: 400,
108
102
  message: "No domains are allowed for this site key. Please fix in the Procaptcha Portal",
109
103
  siteKey: dapp,
110
104
  domain
111
- },
112
- i18n,
113
- logger
105
+ }
114
106
  });
115
107
  };
116
108
  //#endregion
@@ -0,0 +1,22 @@
1
+ let _prosopo_common = require("@prosopo/common");
2
+ //#region src/api/errorCodeForReason.ts
3
+ var RENAMED = {
4
+ "API.INVALID_SITE_KEY": "SITE_KEY_INVALID",
5
+ "API.UNAUTHORIZED_ORIGIN_URL": "ORIGIN_NOT_ALLOWED",
6
+ "API.BAD_REQUEST": "INVALID_REQUEST"
7
+ };
8
+ /**
9
+ * A request validation outcome (a `ResultReason` or other translation key) as
10
+ * the error code the widget branches on: the key without its namespace, e.g.
11
+ * `API.VPN_BLOCKED` is `VPN_BLOCKED`. An outcome with no code of its own gets
12
+ * `fallback`.
13
+ */
14
+ var errorCodeForReason = (reason, fallback = "INVALID_REQUEST") => {
15
+ if (reason === void 0) return fallback;
16
+ const renamed = RENAMED[reason];
17
+ if (renamed) return renamed;
18
+ const unprefixed = reason.slice(reason.indexOf(".") + 1);
19
+ return (0, _prosopo_common.isErrorCode)(unprefixed) ? unprefixed : fallback;
20
+ };
21
+ //#endregion
22
+ exports.errorCodeForReason = errorCodeForReason;
@@ -1,4 +1,5 @@
1
1
  const require_validateAddress = require("./validateAddress.cjs");
2
+ let _prosopo_common = require("@prosopo/common");
2
3
  let _prosopo_api_express_router = require("@prosopo/api-express-router");
3
4
  //#region src/api/headerCheckMiddleware.ts
4
5
  var headerCheckMiddleware = (env) => {
@@ -7,15 +8,23 @@ var headerCheckMiddleware = (env) => {
7
8
  const user = req.headers["prosopo-user"];
8
9
  const siteKey = req.headers["prosopo-site-key"];
9
10
  if (!user) {
10
- unauthorised(res);
11
+ (0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
12
+ code: "UNAUTHORIZED",
13
+ errorSite: "PROV-86",
14
+ message: "Missing prosopo-user header"
15
+ }));
11
16
  return;
12
17
  }
13
18
  if (!siteKey) {
14
- unauthorised(res);
19
+ (0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
20
+ code: "UNAUTHORIZED",
21
+ errorSite: "PROV-87",
22
+ message: "Missing prosopo-site-key header"
23
+ }));
15
24
  return;
16
25
  }
17
- require_validateAddress.validateSiteKey(siteKey, req.logger);
18
- require_validateAddress.validateAddr(user, void 0, req.logger);
26
+ require_validateAddress.validateSiteKey(siteKey);
27
+ require_validateAddress.validateAddr(user);
19
28
  req.user = user;
20
29
  req.siteKey = siteKey;
21
30
  req.logger = req.logger.with({
@@ -28,9 +37,5 @@ var headerCheckMiddleware = (env) => {
28
37
  }
29
38
  };
30
39
  };
31
- var unauthorised = (res) => res.status(401).json({
32
- error: "Unauthorized",
33
- message: "Unauthorized"
34
- });
35
40
  //#endregion
36
41
  exports.headerCheckMiddleware = headerCheckMiddleware;
@@ -1,6 +1,10 @@
1
1
  //#region src/api/ipInfoMiddleware.ts
2
- var ipInfoMiddleware = (env) => {
2
+ var ipInfoMiddleware = (env, skipPaths = /* @__PURE__ */ new Set()) => {
3
3
  return async (req, _res, next) => {
4
+ if (skipPaths.has(req.path)) {
5
+ next();
6
+ return;
7
+ }
4
8
  try {
5
9
  const ip = req.ip;
6
10
  if (ip && env.ipInfoService.isAvailable()) req.ipInfo = await env.ipInfoService.lookup(ip);
@@ -1,4 +1,6 @@
1
+ let _prosopo_common = require("@prosopo/common");
1
2
  let _prosopo_types = require("@prosopo/types");
3
+ let _prosopo_api_express_router = require("@prosopo/api-express-router");
2
4
  let node_crypto = require("node:crypto");
3
5
  let node_net = require("node:net");
4
6
  let prom_client = require("prom-client");
@@ -386,7 +388,13 @@ var metricsHandler = (env) => {
386
388
  return async (req, res) => {
387
389
  const access = metricsAccess(req);
388
390
  if (access !== 200) {
389
- res.status(access).send(access === 401 ? "Unauthorized" : "Forbidden");
391
+ (0, _prosopo_api_express_router.sendProsopoError)(res, access === 401 ? new _prosopo_common.ProsopoError({
392
+ code: "UNAUTHORIZED",
393
+ errorSite: "PROV-91"
394
+ }) : new _prosopo_common.ProsopoError({
395
+ code: "FORBIDDEN",
396
+ errorSite: "PROV-92"
397
+ }));
390
398
  return;
391
399
  }
392
400
  const m = getMetrics();
@@ -62,7 +62,11 @@ function publicRouter(env) {
62
62
  data: { reqParams: req.params },
63
63
  msg: "Error getting provider details"
64
64
  }));
65
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", { context: { code: 500 } }));
65
+ return next(new _prosopo_common.ProsopoError({
66
+ code: "UNEXPECTED",
67
+ errorSite: "PROV-34",
68
+ message: "BadRequest"
69
+ }));
66
70
  }
67
71
  });
68
72
  router.use(require_assetDocument.assetDocumentRouter());
@@ -0,0 +1,20 @@
1
+ let _prosopo_common = require("@prosopo/common");
2
+ let _prosopo_api_express_router = require("@prosopo/api-express-router");
3
+ //#region src/api/rateLimitHandler.ts
4
+ var rateLimitHandler = (logger, path) => (req, res, _next, options) => {
5
+ logger.warn(() => ({
6
+ msg: "Rate limit exceeded",
7
+ data: {
8
+ path,
9
+ ip: req.ip,
10
+ siteKey: req.headers["prosopo-site-key"]
11
+ }
12
+ }));
13
+ (0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
14
+ code: "RATE_LIMITED",
15
+ errorSite: "PROV-93",
16
+ status: options.statusCode
17
+ }));
18
+ };
19
+ //#endregion
20
+ exports.rateLimitHandler = rateLimitHandler;
@@ -17,11 +17,11 @@ const require_detectorPoolBodyParser = require("./detectorPoolBodyParser.cjs");
17
17
  const require_headerCheckMiddleware = require("./headerCheckMiddleware.cjs");
18
18
  const require_ignoreMiddleware = require("./ignoreMiddleware.cjs");
19
19
  const require_ipInfoMiddleware = require("./ipInfoMiddleware.cjs");
20
+ const require_rateLimitHandler = require("./rateLimitHandler.cjs");
20
21
  const require_robotsMiddleware = require("./robotsMiddleware.cjs");
21
22
  let _prosopo_logger = require("@prosopo/logger");
22
23
  let _prosopo_types = require("@prosopo/types");
23
24
  let _prosopo_api_express_router = require("@prosopo/api-express-router");
24
- let _prosopo_locale = require("@prosopo/locale");
25
25
  let node_fs = require("node:fs");
26
26
  node_fs = require_runtime.__toESM(node_fs, 1);
27
27
  let node_path = require("node:path");
@@ -30,6 +30,7 @@ let node_https = require("node:https");
30
30
  node_https = require_runtime.__toESM(node_https, 1);
31
31
  let express = require("express");
32
32
  express = require_runtime.__toESM(express, 1);
33
+ let _prosopo_locale = require("@prosopo/locale");
33
34
  let node_url = require("node:url");
34
35
  let _prosopo_user_access_policy_api = require("@prosopo/user-access-policy/api");
35
36
  let cors = require("cors");
@@ -73,6 +74,7 @@ var providerCorsOptions = {
73
74
  var isTlsAvailable = () => {
74
75
  return node_fs.default.existsSync(keyPath) && node_fs.default.existsSync(crtPath);
75
76
  };
77
+ var getServerVerifyPaths = () => Object.values(_prosopo_types.ClientApiPaths).filter((path) => path.endsWith("/verify"));
76
78
  /**
77
79
  * Get client API paths that expect Prosopo headers (like site key) for validation, excluding verify and spam routes
78
80
  * @returns Array of ClientApiPaths excluding verify and spam routes
@@ -181,36 +183,25 @@ async function startProviderApi(env, admin = false, port) {
181
183
  ...(0, _prosopo_user_access_policy_api.getExpressApiRuleRateLimits)()
182
184
  };
183
185
  const adminPaths = Object.values(_prosopo_types.AdminApiPaths);
184
- const rateLimitHandler = (path) => (req, res, _next, options) => {
185
- env.logger.warn(() => ({
186
- msg: "Rate limit exceeded",
187
- data: {
188
- path,
189
- ip: req.ip,
190
- siteKey: req.headers["prosopo-site-key"]
191
- }
192
- }));
193
- res.status(options.statusCode).send(options.message);
194
- };
195
186
  for (const [path, limit] of Object.entries(rateLimits)) {
196
187
  const enumPath = path;
197
188
  if (adminPaths.includes(enumPath)) apiApp.use(enumPath, (0, express_rate_limit.default)({
198
189
  ...limit,
199
- handler: rateLimitHandler(enumPath),
190
+ handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath),
200
191
  keyGenerator: (req) => {
201
192
  return getUserFromJWT(req) || req.ip || "unknown";
202
193
  }
203
194
  }));
204
195
  else if (path === _prosopo_types.ClientApiPaths.VerifyImageCaptchaSolutionDapp || path === _prosopo_types.ClientApiPaths.VerifyPowCaptchaSolution) apiApp.use(enumPath, (0, express_rate_limit.default)({
205
196
  ...limit,
206
- handler: rateLimitHandler(enumPath),
197
+ handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath),
207
198
  keyGenerator: (req) => {
208
199
  return req.headers["prosopo-site-key"] || req.ip || "unknown";
209
200
  }
210
201
  }));
211
202
  else apiApp.use(enumPath, (0, express_rate_limit.default)({
212
203
  ...limit,
213
- handler: rateLimitHandler(enumPath)
204
+ handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath)
214
205
  }));
215
206
  }
216
207
  }
@@ -222,7 +213,7 @@ async function startProviderApi(env, admin = false, port) {
222
213
  apiApp.use(require_ja4Middleware.ja4Middleware(env));
223
214
  apiApp.use(require_handshakeTimingMiddleware.handshakeTimingMiddleware(env));
224
215
  apiApp.use(require_rawTlsSignalsMiddleware.rawTlsSignalsMiddleware(env));
225
- apiApp.use(require_ipInfoMiddleware.ipInfoMiddleware(env));
216
+ apiApp.use(require_ipInfoMiddleware.ipInfoMiddleware(env, new Set(getServerVerifyPaths())));
226
217
  apiApp.use(clientPathsExcludingVerify, require_headerCheckMiddleware.headerCheckMiddleware(env));
227
218
  apiApp.use(require_verify.prosopoVerifyRouter(env));
228
219
  env.logger.info(() => ({ msg: "Enabling admin auth middleware" }));
@@ -270,6 +261,7 @@ async function startProviderApi(env, admin = false, port) {
270
261
  }
271
262
  //#endregion
272
263
  exports.getClientApiPathsExpectingProsopoHeaders = getClientApiPathsExpectingProsopoHeaders;
264
+ exports.getServerVerifyPaths = getServerVerifyPaths;
273
265
  exports.getUserFromJWT = getUserFromJWT;
274
266
  exports.isTlsAvailable = isTlsAvailable;
275
267
  exports.providerCorsOptions = providerCorsOptions;
@@ -1,27 +1,21 @@
1
1
  let _prosopo_common = require("@prosopo/common");
2
2
  let _prosopo_util_crypto = require("@prosopo/util-crypto");
3
3
  //#region src/api/validateAddress.ts
4
- var validateSiteKey = (siteKey, logger) => {
5
- return validateAddr(siteKey, "API.INVALID_SITE_KEY", logger);
6
- };
7
- var validateAddr = (address, translationKey = "CONTRACT.INVALID_ADDRESS", logger) => {
4
+ var validateSiteKey = (siteKey) => validateAddr(siteKey, "SITE_KEY_INVALID");
5
+ var validateAddr = (address, code = "INVALID_REQUEST") => {
6
+ let valid = false;
7
+ let cause;
8
8
  try {
9
- if (!(0, _prosopo_util_crypto.validateAddress)(address, false, 42)) throw new _prosopo_common.ProsopoApiError(translationKey, {
10
- context: {
11
- code: 400,
12
- siteKey: address
13
- },
14
- logger
15
- });
9
+ valid = (0, _prosopo_util_crypto.validateAddress)(address, false, 42);
16
10
  } catch (err) {
17
- throw new _prosopo_common.ProsopoApiError(translationKey, {
18
- context: {
19
- code: 400,
20
- siteKey: address
21
- },
22
- logger
23
- });
11
+ cause = err;
24
12
  }
13
+ if (!valid) throw new _prosopo_common.ProsopoError({
14
+ code,
15
+ errorSite: "PROV-35",
16
+ cause,
17
+ context: { siteKey: address }
18
+ });
25
19
  };
26
20
  //#endregion
27
21
  exports.validateAddr = validateAddr;