@prosopo/provider 5.19.4 → 5.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +40 -36
  2. package/.turbo/turbo-build$colon$tsc.log +28 -28
  3. package/.turbo/turbo-build.log +43 -36
  4. package/CHANGELOG.md +155 -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 +20 -25
  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/interactiveCaptchaChallenge.d.ts.map +1 -1
  37. package/dist/api/captcha/interactiveCaptchaChallenge.js +27 -32
  38. package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -1
  39. package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -1
  40. package/dist/api/captcha/interactiveCaptchaSolution.js +18 -24
  41. package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -1
  42. package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
  43. package/dist/api/captcha/submitImageCaptchaSolution.js +18 -24
  44. package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
  45. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  46. package/dist/api/captcha/submitPoWCaptchaSolution.js +23 -25
  47. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  48. package/dist/api/domainMiddleware.d.ts.map +1 -1
  49. package/dist/api/domainMiddleware.js +39 -47
  50. package/dist/api/domainMiddleware.js.map +1 -1
  51. package/dist/api/errorCodeForReason.d.ts +3 -0
  52. package/dist/api/errorCodeForReason.d.ts.map +1 -0
  53. package/dist/api/errorCodeForReason.js +22 -0
  54. package/dist/api/errorCodeForReason.js.map +1 -0
  55. package/dist/api/headerCheckMiddleware.d.ts.map +1 -1
  56. package/dist/api/headerCheckMiddleware.js +14 -9
  57. package/dist/api/headerCheckMiddleware.js.map +1 -1
  58. package/dist/api/ipInfoMiddleware.d.ts +1 -1
  59. package/dist/api/ipInfoMiddleware.d.ts.map +1 -1
  60. package/dist/api/ipInfoMiddleware.js +5 -1
  61. package/dist/api/ipInfoMiddleware.js.map +1 -1
  62. package/dist/api/metrics.d.ts.map +1 -1
  63. package/dist/api/metrics.js +9 -1
  64. package/dist/api/metrics.js.map +1 -1
  65. package/dist/api/public.d.ts.map +1 -1
  66. package/dist/api/public.js +6 -2
  67. package/dist/api/public.js.map +1 -1
  68. package/dist/api/rateLimitHandler.d.ts +4 -0
  69. package/dist/api/rateLimitHandler.d.ts.map +1 -0
  70. package/dist/api/rateLimitHandler.js +20 -0
  71. package/dist/api/rateLimitHandler.js.map +1 -0
  72. package/dist/api/startProviderApi.d.ts +1 -0
  73. package/dist/api/startProviderApi.d.ts.map +1 -1
  74. package/dist/api/startProviderApi.js +8 -17
  75. package/dist/api/startProviderApi.js.map +1 -1
  76. package/dist/api/validateAddress.d.ts +3 -4
  77. package/dist/api/validateAddress.d.ts.map +1 -1
  78. package/dist/api/validateAddress.js +13 -19
  79. package/dist/api/validateAddress.js.map +1 -1
  80. package/dist/api/verify.d.ts.map +1 -1
  81. package/dist/api/verify.js +73 -96
  82. package/dist/api/verify.js.map +1 -1
  83. package/dist/cjs/api/blacklistRequestInspector.cjs +9 -8
  84. package/dist/cjs/api/captcha/checkSpamEmail.cjs +18 -25
  85. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +11 -2
  86. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +6 -1
  87. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +19 -24
  88. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +31 -42
  89. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +26 -31
  90. package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +26 -31
  91. package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +17 -23
  92. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +17 -23
  93. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +22 -24
  94. package/dist/cjs/api/domainMiddleware.cjs +38 -46
  95. package/dist/cjs/api/errorCodeForReason.cjs +22 -0
  96. package/dist/cjs/api/headerCheckMiddleware.cjs +13 -8
  97. package/dist/cjs/api/ipInfoMiddleware.cjs +5 -1
  98. package/dist/cjs/api/metrics.cjs +9 -1
  99. package/dist/cjs/api/public.cjs +5 -1
  100. package/dist/cjs/api/rateLimitHandler.cjs +20 -0
  101. package/dist/cjs/api/startProviderApi.cjs +8 -16
  102. package/dist/cjs/api/validateAddress.cjs +12 -18
  103. package/dist/cjs/api/verify.cjs +72 -95
  104. package/dist/cjs/index.cjs +1 -0
  105. package/dist/cjs/tasks/captchaManager.cjs +6 -8
  106. package/dist/cjs/tasks/client/clientTasks.cjs +26 -13
  107. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +28 -8
  108. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +21 -19
  109. package/dist/cjs/tasks/frictionless/routingMachine.cjs +13 -4
  110. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +89 -40
  111. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +18 -8
  112. package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +21 -13
  113. package/dist/cjs/tasks/powCaptcha/backgroundWrites.cjs +24 -0
  114. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +44 -19
  115. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +14 -10
  116. package/dist/cjs/tasks/signatureCheck.cjs +12 -0
  117. package/dist/cjs/tasks/tasks.cjs +6 -1
  118. package/dist/cjs/util/usageCounters.cjs +26 -3
  119. package/dist/cjs/util.cjs +14 -3
  120. package/dist/errorSites.d.ts +98 -0
  121. package/dist/errorSites.d.ts.map +1 -0
  122. package/dist/errorSites.js +2 -0
  123. package/dist/errorSites.js.map +1 -0
  124. package/dist/fingerprint/dist/merkle.js +69 -0
  125. package/dist/fingerprint/dist/proof.js +95 -0
  126. package/dist/fingerprint/dist/summary.js +73 -0
  127. package/dist/index.js +2 -2
  128. package/dist/tasks/captchaManager.d.ts +2 -3
  129. package/dist/tasks/captchaManager.d.ts.map +1 -1
  130. package/dist/tasks/captchaManager.js +6 -7
  131. package/dist/tasks/captchaManager.js.map +1 -1
  132. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  133. package/dist/tasks/client/clientTasks.js +27 -14
  134. package/dist/tasks/client/clientTasks.js.map +1 -1
  135. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -1
  136. package/dist/tasks/dataset/datasetTasksUtils.js +29 -9
  137. package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
  138. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +1 -3
  139. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
  140. package/dist/tasks/decisionMachine/decisionMachineRunner.js +21 -19
  141. package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
  142. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
  143. package/dist/tasks/frictionless/routingMachine.js +13 -4
  144. package/dist/tasks/frictionless/routingMachine.js.map +1 -1
  145. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  146. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +91 -42
  147. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  148. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +19 -9
  149. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
  150. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -1
  151. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +22 -14
  152. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -1
  153. package/dist/tasks/powCaptcha/backgroundWrites.d.ts +7 -0
  154. package/dist/tasks/powCaptcha/backgroundWrites.d.ts.map +1 -0
  155. package/dist/tasks/powCaptcha/backgroundWrites.js +24 -0
  156. package/dist/tasks/powCaptcha/backgroundWrites.js.map +1 -0
  157. package/dist/tasks/powCaptcha/powTasks.d.ts +3 -3
  158. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  159. package/dist/tasks/powCaptcha/powTasks.js +45 -20
  160. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  161. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  162. package/dist/tasks/powCaptcha/powTasksUtils.js +15 -11
  163. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  164. package/dist/tasks/signatureCheck.d.ts +2 -0
  165. package/dist/tasks/signatureCheck.d.ts.map +1 -0
  166. package/dist/tasks/signatureCheck.js +12 -0
  167. package/dist/tasks/signatureCheck.js.map +1 -0
  168. package/dist/tasks/tasks.d.ts.map +1 -1
  169. package/dist/tasks/tasks.js +7 -2
  170. package/dist/tasks/tasks.js.map +1 -1
  171. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +3 -1
  172. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  173. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +6 -2
  174. package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -1
  175. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +1 -1
  176. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
  177. package/dist/tests/integration/imgCaptcha.integration.test.js +6 -5
  178. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  179. package/dist/tests/integration/ipValidation.integration.test.js +1 -1
  180. package/dist/tests/integration/ipValidation.integration.test.js.map +1 -1
  181. package/dist/tests/integration/powCaptcha.integration.test.js +2 -2
  182. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  183. package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
  184. package/dist/tests/integration/testUtils.d.ts +2 -2
  185. package/dist/tests/integration/testUtils.d.ts.map +1 -1
  186. package/dist/tests/integration/testUtils.js +1 -1
  187. package/dist/tests/integration/testUtils.js.map +1 -1
  188. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js +3 -1
  189. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js.map +1 -1
  190. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +26 -10
  191. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
  192. package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js +4 -4
  193. package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js.map +1 -1
  194. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts +2 -0
  195. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts.map +1 -0
  196. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js +153 -0
  197. package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js.map +1 -0
  198. package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js +6 -2
  199. package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js.map +1 -1
  200. package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts +2 -0
  201. package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts.map +1 -0
  202. package/dist/tests/unit/api/errorCodeForReason.unit.test.js +23 -0
  203. package/dist/tests/unit/api/errorCodeForReason.unit.test.js.map +1 -0
  204. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +6 -1
  205. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  206. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js +16 -7
  207. package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js.map +1 -1
  208. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts +2 -0
  209. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts.map +1 -0
  210. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js +46 -0
  211. package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js.map +1 -0
  212. package/dist/tests/unit/api/public.unit.test.js +45 -10
  213. package/dist/tests/unit/api/public.unit.test.js.map +1 -1
  214. package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts +2 -0
  215. package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts.map +1 -0
  216. package/dist/tests/unit/api/rateLimitHandler.unit.test.js +39 -0
  217. package/dist/tests/unit/api/rateLimitHandler.unit.test.js.map +1 -0
  218. package/dist/tests/unit/api/validateAddress.unit.test.js +41 -115
  219. package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -1
  220. package/dist/tests/unit/api/verifyMalformedToken.unit.test.js +3 -3
  221. package/dist/tests/unit/api/verifyMalformedToken.unit.test.js.map +1 -1
  222. package/dist/tests/unit/tasks/captchaManager.unit.test.js +22 -18
  223. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  224. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +25 -0
  225. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  226. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +25 -20
  227. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
  228. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +31 -0
  229. package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
  230. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts +2 -0
  231. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts.map +1 -0
  232. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js +80 -0
  233. package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js.map +1 -0
  234. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +48 -0
  235. package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -1
  236. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +20 -28
  237. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  238. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +2 -2
  239. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  240. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts +2 -0
  241. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts.map +1 -0
  242. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js +44 -0
  243. package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js.map +1 -0
  244. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -43
  245. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  246. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +7 -6
  247. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  248. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +2 -2
  249. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
  250. package/dist/tests/unit/util/usageCounters.unit.test.js +20 -0
  251. package/dist/tests/unit/util/usageCounters.unit.test.js.map +1 -1
  252. package/dist/tests/unit/util.unit.test.js +7 -7
  253. package/dist/tests/unit/util.unit.test.js.map +1 -1
  254. package/dist/util/usageCounters.d.ts +1 -1
  255. package/dist/util/usageCounters.d.ts.map +1 -1
  256. package/dist/util/usageCounters.js +26 -3
  257. package/dist/util/usageCounters.js.map +1 -1
  258. package/dist/util.d.ts.map +1 -1
  259. package/dist/util.js +15 -4
  260. package/dist/util.js.map +1 -1
  261. package/package.json +44 -43
@@ -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;
@@ -36,13 +36,11 @@ var decodeTokenOr400 = (token, i18n, logger, next) => {
36
36
  try {
37
37
  return (0, _prosopo_types.decodeProcaptchaOutput)(token);
38
38
  } catch (error) {
39
- next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
40
- context: {
41
- code: 400,
42
- error
43
- },
44
- i18n,
45
- logger
39
+ next(new _prosopo_common.ProsopoError({
40
+ code: "INVALID_REQUEST",
41
+ errorSite: "PROV-37",
42
+ message: "Error parsing captcha",
43
+ cause: error
46
44
  }));
47
45
  return null;
48
46
  }
@@ -52,13 +50,12 @@ var dappSignatureError = (signature, message, pair, req) => {
52
50
  (0, _prosopo_api_express_router.verifySignature)(signature, message, pair);
53
51
  return;
54
52
  } catch {
55
- return new _prosopo_common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
56
- context: {
57
- code: 400,
58
- siteKey: pair.address
59
- },
60
- i18n: req.i18n,
61
- logger: req.logger
53
+ return new _prosopo_common.ProsopoError({
54
+ code: "UNAUTHORIZED",
55
+ errorSite: "PROV-38",
56
+ message: "Invalid signature",
57
+ status: 400,
58
+ context: { siteKey: pair.address }
62
59
  });
63
60
  }
64
61
  };
@@ -77,14 +74,12 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
77
74
  try {
78
75
  parsed = _prosopo_types.ServerPuzzleCaptchaVerifyRequestBody.parse(req.body);
79
76
  } catch (err) {
80
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
81
- context: {
82
- code: 400,
83
- error: err,
84
- body: require_requestBodySummary.summariseRequestBody(req)
85
- },
86
- i18n: req.i18n,
87
- logger: req.logger
77
+ return next(new _prosopo_common.ProsopoError({
78
+ code: "INVALID_REQUEST",
79
+ errorSite: "PROV-39",
80
+ message: "Error parsing captcha",
81
+ cause: err,
82
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
88
83
  }));
89
84
  }
90
85
  try {
@@ -115,13 +110,10 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
115
110
  (0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
116
111
  (0, _prosopo_util_crypto.validateAddress)(user, false, 42);
117
112
  const clientRecord = await tasks.db.getClientRecord(dapp);
118
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
119
- context: {
120
- code: 400,
121
- siteKey: dapp
122
- },
123
- i18n: req.i18n,
124
- logger: req.logger
113
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
114
+ code: "SITE_KEY_NOT_REGISTERED",
115
+ errorSite: "PROV-40",
116
+ context: { siteKey: dapp }
125
117
  }));
126
118
  if (!challenge) {
127
119
  const unverifiedResponse = {
@@ -151,13 +143,11 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
151
143
  err,
152
144
  data: { body: require_requestBodySummary.summariseRequestBody(req) }
153
145
  }));
154
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
155
- context: {
156
- code: 500,
157
- error: err
158
- },
159
- i18n: req.i18n,
160
- logger: req.logger
146
+ return next(new _prosopo_common.ProsopoError({
147
+ code: "UNEXPECTED",
148
+ errorSite: "PROV-41",
149
+ message: "BadRequest",
150
+ cause: err
161
151
  }));
162
152
  }
163
153
  };
@@ -217,14 +207,12 @@ function prosopoVerifyRouter(env) {
217
207
  try {
218
208
  parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
219
209
  } catch (err) {
220
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
221
- context: {
222
- code: 400,
223
- error: err,
224
- body: require_requestBodySummary.summariseRequestBody(req)
225
- },
226
- i18n: req.i18n,
227
- logger: req.logger
210
+ return next(new _prosopo_common.ProsopoError({
211
+ code: "INVALID_REQUEST",
212
+ errorSite: "PROV-42",
213
+ message: "Error parsing captcha",
214
+ cause: err,
215
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
228
216
  }));
229
217
  }
230
218
  const { dappSignature, token, ip, maxVerifiedTime, email, clientSessionId } = parsed;
@@ -255,14 +243,13 @@ function prosopoVerifyRouter(env) {
255
243
  (0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
256
244
  (0, _prosopo_util_crypto.validateAddress)(user, false, 42);
257
245
  const clientRecord = await tasks.db.getClientRecord(dapp);
258
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
246
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
247
+ code: "SITE_KEY_NOT_REGISTERED",
248
+ errorSite: "PROV-43",
259
249
  context: {
260
- code: 400,
261
250
  siteKey: dapp,
262
251
  user
263
- },
264
- i18n: req.i18n,
265
- logger: req.logger
252
+ }
266
253
  }));
267
254
  const keyPair = env.keyring.addFromAddress(dapp);
268
255
  const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
@@ -285,14 +272,14 @@ function prosopoVerifyRouter(env) {
285
272
  msg: "Error in verifyImageCaptchaSolution",
286
273
  data: { body: require_requestBodySummary.summariseRequestBody(req) }
287
274
  }));
288
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
275
+ return next(new _prosopo_common.ProsopoError({
276
+ code: "UNEXPECTED",
277
+ errorSite: "PROV-44",
278
+ message: "BadRequest",
289
279
  context: {
290
- code: 500,
291
280
  siteKey: req.body.dapp,
292
281
  user: req.body.user
293
- },
294
- i18n: req.i18n,
295
- logger: req.logger
282
+ }
296
283
  }));
297
284
  }
298
285
  });
@@ -313,14 +300,12 @@ function prosopoVerifyRouter(env) {
313
300
  try {
314
301
  parsed = _prosopo_types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
315
302
  } catch (err) {
316
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
317
- context: {
318
- code: 400,
319
- error: err,
320
- body: require_requestBodySummary.summariseRequestBody(req)
321
- },
322
- i18n: req.i18n,
323
- logger: req.logger
303
+ return next(new _prosopo_common.ProsopoError({
304
+ code: "INVALID_REQUEST",
305
+ errorSite: "PROV-45",
306
+ message: "Error parsing captcha",
307
+ cause: err,
308
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
324
309
  }));
325
310
  }
326
311
  try {
@@ -351,13 +336,10 @@ function prosopoVerifyRouter(env) {
351
336
  (0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
352
337
  (0, _prosopo_util_crypto.validateAddress)(user, false, 42);
353
338
  const clientRecord = await tasks.db.getClientRecord(dapp);
354
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
355
- context: {
356
- code: 400,
357
- siteKey: dapp
358
- },
359
- i18n: req.i18n,
360
- logger: req.logger
339
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
340
+ code: "SITE_KEY_NOT_REGISTERED",
341
+ errorSite: "PROV-46",
342
+ context: { siteKey: dapp }
361
343
  }));
362
344
  if (!challenge) {
363
345
  const unverifiedResponse = {
@@ -377,7 +359,7 @@ function prosopoVerifyRouter(env) {
377
359
  const maintenanceResponse = require_maintenanceModeResponses.buildMaintenanceVerificationResponse(req.i18n.t);
378
360
  return res.json(maintenanceResponse);
379
361
  }
380
- const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
362
+ const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId, clientRecord.settings.ipValidationRules);
381
363
  const verificationResponse = tasks.powCaptchaManager.getVerificationResponse(verified, clientRecord, req.i18n.t, score, reason, sessionId);
382
364
  return res.json(verificationResponse);
383
365
  } catch (err) {
@@ -386,13 +368,11 @@ function prosopoVerifyRouter(env) {
386
368
  err,
387
369
  data: { body: require_requestBodySummary.summariseRequestBody(req) }
388
370
  }));
389
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
390
- context: {
391
- code: 500,
392
- error: err
393
- },
394
- i18n: req.i18n,
395
- logger: req.logger
371
+ return next(new _prosopo_common.ProsopoError({
372
+ code: "UNEXPECTED",
373
+ errorSite: "PROV-47",
374
+ message: "BadRequest",
375
+ cause: err
396
376
  }));
397
377
  }
398
378
  });
@@ -437,14 +417,12 @@ function prosopoVerifyRouter(env) {
437
417
  try {
438
418
  parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
439
419
  } catch (err) {
440
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
441
- context: {
442
- code: 400,
443
- error: err,
444
- body: require_requestBodySummary.summariseRequestBody(req)
445
- },
446
- i18n: req.i18n,
447
- logger: req.logger
420
+ return next(new _prosopo_common.ProsopoError({
421
+ code: "INVALID_REQUEST",
422
+ errorSite: "PROV-48",
423
+ message: "Error parsing captcha",
424
+ cause: err,
425
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
448
426
  }));
449
427
  }
450
428
  const { dappSignature, token, ip, clientSessionId } = parsed;
@@ -471,14 +449,13 @@ function prosopoVerifyRouter(env) {
471
449
  const tasks = new require_tasks.Tasks(env, req.logger);
472
450
  (0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
473
451
  (0, _prosopo_util_crypto.validateAddress)(user, false, 42);
474
- if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
452
+ if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.ProsopoError({
453
+ code: "SITE_KEY_NOT_REGISTERED",
454
+ errorSite: "PROV-49",
475
455
  context: {
476
- code: 400,
477
456
  siteKey: dapp,
478
457
  user
479
- },
480
- i18n: req.i18n,
481
- logger: req.logger
458
+ }
482
459
  }));
483
460
  const keyPair = env.keyring.addFromAddress(dapp);
484
461
  const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
@@ -503,14 +480,14 @@ function prosopoVerifyRouter(env) {
503
480
  msg: "Error in verifyAuthenticatedSession",
504
481
  data: { body: require_requestBodySummary.summariseRequestBody(req) }
505
482
  }));
506
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
483
+ return next(new _prosopo_common.ProsopoError({
484
+ code: "UNEXPECTED",
485
+ errorSite: "PROV-50",
486
+ message: "BadRequest",
507
487
  context: {
508
- code: 500,
509
488
  siteKey: req.body.dapp,
510
489
  user: req.body.user
511
- },
512
- i18n: req.i18n,
513
- logger: req.logger
490
+ }
514
491
  }));
515
492
  }
516
493
  });