@prosopo/provider 5.19.4 → 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 (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 +135 -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
@@ -1,6 +1,7 @@
1
1
  const require_rawTlsSignalsMiddleware = require("../../rawTlsSignalsMiddleware.cjs");
2
2
  const require_compositeIpAddress = require("../../../compositeIpAddress.cjs");
3
3
  const require_devicePlatform = require("../../../utils/devicePlatform.cjs");
4
+ const require_errorCodeForReason = require("../../errorCodeForReason.cjs");
4
5
  const require_metrics = require("../../metrics.cjs");
5
6
  const require_blacklistRequestInspector = require("../../blacklistRequestInspector.cjs");
6
7
  const require_audioAlternative = require("../../../tasks/audioAlternative.cjs");
@@ -93,23 +94,20 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
93
94
  token: existingToken,
94
95
  msg: "Token has already been used"
95
96
  }));
96
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
97
+ return next(new _prosopo_common.ProsopoError({
98
+ code: "INVALID_REQUEST",
99
+ errorSite: "PROV-5",
100
+ message: "BadRequest",
97
101
  context: {
98
- code: 400,
99
102
  siteKey: dapp,
100
103
  user
101
- },
102
- i18n: req.i18n,
103
- logger: req.logger
104
+ }
104
105
  }));
105
106
  }
106
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
107
- context: {
108
- code: 400,
109
- siteKey: dapp
110
- },
111
- i18n: req.i18n,
112
- logger: req.logger
107
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
108
+ code: "SITE_KEY_NOT_REGISTERED",
109
+ errorSite: "PROV-6",
110
+ context: { siteKey: dapp }
113
111
  }));
114
112
  const audioAlternativeEnabled = require_audioAlternative.isAudioAlternativeEnabled(clientRecord.settings);
115
113
  tasks.frictionlessManager.setAudioAlternativeEnabled(audioAlternativeEnabled);
@@ -352,14 +350,13 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
352
350
  }));
353
351
  let botScore = baseBotScore + lScore;
354
352
  const { valid, reason } = validation;
355
- if (!valid) return next(new _prosopo_common.ProsopoApiError(reason || "API.BAD_REQUEST", {
353
+ if (!valid) return next(new _prosopo_common.ProsopoError({
354
+ code: require_errorCodeForReason.errorCodeForReason(reason),
355
+ errorSite: "PROV-80",
356
356
  context: {
357
- code: 400,
358
357
  siteKey: dapp,
359
358
  user
360
- },
361
- i18n: req.i18n,
362
- logger: req.logger
359
+ }
363
360
  }));
364
361
  require_metrics.recordBotScore(botScore);
365
362
  if (triggeredDetectors && triggeredDetectors.length > 0) require_metrics.recordDetectorTriggered(triggeredDetectors);
@@ -492,13 +489,11 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
492
489
  err,
493
490
  msg: "Error in frictionless captcha challenge"
494
491
  }));
495
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
496
- context: {
497
- code: 400,
498
- error: err
499
- },
500
- i18n: req.i18n,
501
- logger: req.logger
492
+ return next(new _prosopo_common.ProsopoError({
493
+ code: "INVALID_REQUEST",
494
+ errorSite: "PROV-7",
495
+ message: "BadRequest",
496
+ cause: err
502
497
  }));
503
498
  }
504
499
  };
@@ -1,3 +1,4 @@
1
+ const require_errorCodeForReason = require("../errorCodeForReason.cjs");
1
2
  const require_metrics = require("../metrics.cjs");
2
3
  const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
3
4
  const require_validateAddress = require("../validateAddress.cjs");
@@ -13,42 +14,36 @@ const require_signedAssetsResolver = require("./signedAssetsResolver.cjs");
13
14
  let _prosopo_common = require("@prosopo/common");
14
15
  let _prosopo_types = require("@prosopo/types");
15
16
  let _prosopo_util = require("@prosopo/util");
16
- let _prosopo_locale = require("@prosopo/locale");
17
17
  let _prosopo_datasets = require("@prosopo/datasets");
18
+ let _prosopo_locale = require("@prosopo/locale");
18
19
  //#region src/api/captcha/getImageCaptchaChallenge.ts
19
20
  var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req, res, next) => {
20
21
  let parsed;
21
22
  const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
22
- if (!normalizedIp) return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
23
- context: {
24
- code: 400,
25
- error: "IP address not found"
26
- },
27
- i18n: req.i18n,
28
- logger: req.logger
23
+ if (!normalizedIp) return next(new _prosopo_common.ProsopoError({
24
+ code: "INVALID_REQUEST",
25
+ errorSite: "PROV-8",
26
+ message: "BadRequest",
27
+ context: { error: "IP address not found" }
29
28
  }));
30
29
  const ipAddress = (0, _prosopo_util.getIPAddress)(normalizedIp);
31
30
  try {
32
31
  parsed = _prosopo_types.CaptchaRequestBody.parse(req.body);
33
32
  } catch (err) {
34
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
35
- context: {
36
- code: 400,
37
- error: err
38
- },
39
- i18n: req.i18n,
40
- logger: req.logger
33
+ return next(new _prosopo_common.ProsopoError({
34
+ code: "INVALID_REQUEST",
35
+ errorSite: "PROV-9",
36
+ message: "Error parsing captcha",
37
+ cause: err
41
38
  }));
42
39
  }
43
40
  const { datasetId: clientDatasetId, user, dapp, sessionId, simdReadings } = parsed;
44
41
  const datasetId = clientDatasetId ?? env.datasetId;
45
- if (!datasetId) return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
46
- context: {
47
- code: 400,
48
- error: "No dataset available. Please upload a dataset first."
49
- },
50
- i18n: req.i18n,
51
- logger: req.logger
42
+ if (!datasetId) return next(new _prosopo_common.ProsopoError({
43
+ code: "INVALID_REQUEST",
44
+ errorSite: "PROV-10",
45
+ message: "BadRequest",
46
+ context: { error: "No dataset available. Please upload a dataset first." }
52
47
  }));
53
48
  require_validateAddress.validateSiteKey(dapp);
54
49
  require_validateAddress.validateAddr(user);
@@ -77,13 +72,10 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
77
72
  const tasks = new require_tasks.Tasks(env, req.logger);
78
73
  try {
79
74
  const clientRecord = await tasks.db.getClientRecord(dapp);
80
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
81
- context: {
82
- code: 400,
83
- siteKey: dapp
84
- },
85
- i18n: req.i18n,
86
- logger: req.logger
75
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
76
+ code: "SITE_KEY_NOT_REGISTERED",
77
+ errorSite: "PROV-11",
78
+ context: { siteKey: dapp }
87
79
  }));
88
80
  const countryCode = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.countryCode : void 0;
89
81
  const asn = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.asnNumber : void 0;
@@ -93,14 +85,13 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
93
85
  const userAccessPolicy = accessPolicies.find((p) => !p.deferToVerify);
94
86
  const deferredParamsPolicy = accessPolicies.find((p) => p.deferToVerify === true);
95
87
  const { valid, reason, sessionId: validSessionId, solvedImagesCount } = await tasks.imgCaptchaManager.isValidRequest(clientRecord, _prosopo_types.CaptchaType.image, env, sessionId, userAccessPolicy, normalizedIp);
96
- if (!valid) return next(new _prosopo_common.ProsopoApiError(reason || "API.BAD_REQUEST", {
88
+ if (!valid) return next(new _prosopo_common.ProsopoError({
89
+ code: require_errorCodeForReason.errorCodeForReason(reason),
90
+ errorSite: "PROV-81",
97
91
  context: {
98
- code: 400,
99
92
  siteKey: dapp,
100
93
  user
101
- },
102
- i18n: req.i18n,
103
- logger: req.logger
94
+ }
104
95
  }));
105
96
  const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientRecord.settings?.trafficFilter, req.logger);
106
97
  const trafficSolvedImagesCount = trafficVerdict.kind === "challenge" ? trafficVerdict.solvedImagesCount : void 0;
@@ -150,14 +141,12 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
150
141
  data: req.params,
151
142
  msg: "Error in image captcha challenge request"
152
143
  }));
153
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
154
- context: {
155
- error: err,
156
- code: 500,
157
- params: req.params
158
- },
159
- i18n: req.i18n,
160
- logger: req.logger
144
+ return next(new _prosopo_common.ProsopoError({
145
+ code: "UNEXPECTED",
146
+ errorSite: "PROV-12",
147
+ message: "BadRequest",
148
+ cause: err,
149
+ context: { params: req.params }
161
150
  }));
162
151
  }
163
152
  };
@@ -1,4 +1,5 @@
1
1
  const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
2
+ const require_errorCodeForReason = require("../errorCodeForReason.cjs");
2
3
  const require_metrics = require("../metrics.cjs");
3
4
  const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
4
5
  const require_validateAddress = require("../validateAddress.cjs");
@@ -18,13 +19,11 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
18
19
  try {
19
20
  parsed = _prosopo_types.GetPowCaptchaChallengeRequestBody.parse(req.body);
20
21
  } catch (err) {
21
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
22
- context: {
23
- code: 400,
24
- error: err
25
- },
26
- i18n: req.i18n,
27
- logger: req.logger
22
+ return next(new _prosopo_common.ProsopoError({
23
+ code: "INVALID_REQUEST",
24
+ errorSite: "PROV-13",
25
+ message: "Error parsing captcha",
26
+ cause: err
28
27
  }));
29
28
  }
30
29
  const { user, dapp, sessionId, simdReadings } = parsed;
@@ -55,13 +54,10 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
55
54
  const tasks = new require_tasks.Tasks(env, req.logger);
56
55
  try {
57
56
  const clientSettings = await tasks.db.getClientRecord(dapp);
58
- if (!clientSettings) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
59
- context: {
60
- code: 400,
61
- siteKey: dapp
62
- },
63
- i18n: req.i18n,
64
- logger: req.logger
57
+ if (!clientSettings) return next(new _prosopo_common.ProsopoError({
58
+ code: "SITE_KEY_NOT_REGISTERED",
59
+ errorSite: "PROV-14",
60
+ context: { siteKey: dapp }
65
61
  }));
66
62
  const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
67
63
  if (!normalizedIp) req.logger.warn(() => ({ msg: "Request missing IP; geoblocking will be skipped" }));
@@ -73,25 +69,24 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
73
69
  const userAccessPolicy = accessPolicies.find((p) => !p.deferToVerify);
74
70
  const deferredParamsPolicy = accessPolicies.find((p) => p.deferToVerify === true);
75
71
  const { valid, reason, sessionId: validSessionId, powDifficulty } = await tasks.powCaptchaManager.isValidRequest(clientSettings, _prosopo_types.CaptchaType.pow, env, sessionId, userAccessPolicy, normalizedIp);
76
- if (!valid) return next(new _prosopo_common.ProsopoApiError(reason || "API.BAD_REQUEST", {
72
+ if (!valid) return next(new _prosopo_common.ProsopoError({
73
+ code: require_errorCodeForReason.errorCodeForReason(reason),
74
+ errorSite: "PROV-82",
77
75
  context: {
78
- code: 400,
79
76
  siteKey: dapp,
80
77
  user
81
- },
82
- i18n: req.i18n,
83
- logger: req.logger
78
+ }
84
79
  }));
85
80
  const origin = req.headers.origin;
86
- if (!origin) return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
81
+ if (!origin) return next(new _prosopo_common.ProsopoError({
82
+ code: "INVALID_REQUEST",
83
+ errorSite: "PROV-15",
84
+ message: "BadRequest",
87
85
  context: {
88
86
  error: "Origin header not found",
89
- code: 400,
90
87
  siteKey: dapp,
91
88
  user
92
- },
93
- i18n: req.i18n,
94
- logger: req.logger
89
+ }
95
90
  }));
96
91
  const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
97
92
  const difficulty = (trafficVerdict.kind === "challenge" ? trafficVerdict.powDifficulty : void 0) || powDifficulty || userAccessPolicy?.powDifficulty || deferredParamsPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty;
@@ -136,15 +131,15 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
136
131
  body: require_requestBodySummary.summariseRequestBody(req),
137
132
  msg: "Error in PoW captcha challenge request"
138
133
  }));
139
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
134
+ return next(new _prosopo_common.ProsopoError({
135
+ code: "UNEXPECTED",
136
+ errorSite: "PROV-16",
137
+ message: "BadRequest",
138
+ cause: err,
140
139
  context: {
141
- code: 500,
142
140
  siteKey: req.body.dapp,
143
- user: req.body.user,
144
- error: err
145
- },
146
- i18n: req.i18n,
147
- logger: req.logger
141
+ user: req.body.user
142
+ }
148
143
  }));
149
144
  }
150
145
  };
@@ -1,4 +1,5 @@
1
1
  const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
2
+ const require_errorCodeForReason = require("../errorCodeForReason.cjs");
2
3
  const require_metrics = require("../metrics.cjs");
3
4
  const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
4
5
  const require_validateAddress = require("../validateAddress.cjs");
@@ -20,13 +21,11 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
20
21
  try {
21
22
  parsed = _prosopo_types.GetPuzzleCaptchaChallengeRequestBody.parse(req.body);
22
23
  } catch (err) {
23
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
24
- context: {
25
- code: 400,
26
- error: err
27
- },
28
- i18n: req.i18n,
29
- logger: req.logger
24
+ return next(new _prosopo_common.ProsopoError({
25
+ code: "INVALID_REQUEST",
26
+ errorSite: "PROV-17",
27
+ message: "Error parsing captcha",
28
+ cause: err
30
29
  }));
31
30
  }
32
31
  const { user, dapp, sessionId, simdReadings } = parsed;
@@ -58,13 +57,10 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
58
57
  const manager = spec.manager(tasks);
59
58
  try {
60
59
  const clientSettings = await tasks.db.getClientRecord(dapp);
61
- if (!clientSettings) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
62
- context: {
63
- code: 400,
64
- siteKey: dapp
65
- },
66
- i18n: req.i18n,
67
- logger: req.logger
60
+ if (!clientSettings) return next(new _prosopo_common.ProsopoError({
61
+ code: "SITE_KEY_NOT_REGISTERED",
62
+ errorSite: "PROV-18",
63
+ context: { siteKey: dapp }
68
64
  }));
69
65
  const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
70
66
  if (!normalizedIp) req.logger.warn(() => ({ msg: "Request missing IP; geoblocking will be skipped" }));
@@ -74,25 +70,24 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
74
70
  const userScope = require_blacklistRequestInspector.getRequestUserScope((0, _prosopo_util.flatten)(req.headers), req.ja4, normalizedIp, user, sessionRecord?.decryptedHeadHash, void 0, countryCode, asn);
75
71
  const userAccessPolicy = (await manager.getPrioritisedAccessPolicies(userAccessRulesStorage, dapp, userScope, require_blacklistRequestInspector.normalizeHeadersForMatching(req.headers))).find((p) => !p.deferToVerify);
76
72
  const { valid, reason, sessionId: validSessionId } = await manager.isValidRequest(clientSettings, captchaType, env, sessionId, userAccessPolicy, normalizedIp);
77
- if (!valid) return next(new _prosopo_common.ProsopoApiError(reason || "API.BAD_REQUEST", {
73
+ if (!valid) return next(new _prosopo_common.ProsopoError({
74
+ code: require_errorCodeForReason.errorCodeForReason(reason),
75
+ errorSite: "PROV-83",
78
76
  context: {
79
- code: 400,
80
77
  siteKey: dapp,
81
78
  user
82
- },
83
- i18n: req.i18n,
84
- logger: req.logger
79
+ }
85
80
  }));
86
81
  const origin = req.headers.origin;
87
- if (!origin) return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
82
+ if (!origin) return next(new _prosopo_common.ProsopoError({
83
+ code: "INVALID_REQUEST",
84
+ errorSite: "PROV-19",
85
+ message: "BadRequest",
88
86
  context: {
89
87
  error: "Origin header not found",
90
- code: 400,
91
88
  siteKey: dapp,
92
89
  user
93
- },
94
- i18n: req.i18n,
95
- logger: req.logger
90
+ }
96
91
  }));
97
92
  const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
98
93
  if (validSessionId && simdReadings) await tasks.frictionlessManager.decryptAndAttachSimdReadingsIfAbsent(validSessionId, simdReadings, _prosopo_types.SimdReadingsStage.challenge).catch((updateErr) => {
@@ -138,15 +133,15 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
138
133
  body: require_requestBodySummary.summariseRequestBody(req),
139
134
  msg: `Error in ${label} captcha challenge request`
140
135
  }));
141
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
136
+ return next(new _prosopo_common.ProsopoError({
137
+ code: "UNEXPECTED",
138
+ errorSite: "PROV-20",
139
+ message: "BadRequest",
140
+ cause: err,
142
141
  context: {
143
- code: 500,
144
142
  siteKey: req.body.dapp,
145
- user: req.body.user,
146
- error: err
147
- },
148
- i18n: req.i18n,
149
- logger: req.logger
143
+ user: req.body.user
144
+ }
150
145
  }));
151
146
  }
152
147
  };
@@ -19,14 +19,12 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
19
19
  try {
20
20
  parsed = spec.parse(req.body);
21
21
  } catch (err) {
22
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
23
- context: {
24
- code: 400,
25
- error: err,
26
- body: require_requestBodySummary.summariseRequestBody(req)
27
- },
28
- i18n: req.i18n,
29
- logger: req.logger
22
+ return next(new _prosopo_common.ProsopoError({
23
+ code: "INVALID_REQUEST",
24
+ errorSite: "PROV-21",
25
+ message: "Error parsing captcha",
26
+ cause: err,
27
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
30
28
  }));
31
29
  }
32
30
  const { dapp, user } = parsed;
@@ -42,13 +40,10 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
42
40
  }
43
41
  try {
44
42
  const clientRecord = await tasks.db.getClientRecord(dapp);
45
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
46
- context: {
47
- code: 400,
48
- siteKey: dapp
49
- },
50
- i18n: req.i18n,
51
- logger: req.logger
43
+ if (!clientRecord) return next(new _prosopo_common.ProsopoError({
44
+ code: "SITE_KEY_NOT_REGISTERED",
45
+ errorSite: "PROV-22",
46
+ context: { siteKey: dapp }
52
47
  }));
53
48
  const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
54
49
  const response = {
@@ -57,19 +52,18 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
57
52
  };
58
53
  return res.json(response);
59
54
  } catch (err) {
55
+ if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
60
56
  req.logger.error(() => ({
61
57
  err,
62
58
  body: require_requestBodySummary.summariseRequestBody(req),
63
59
  msg: `Error in ${spec.label} captcha solution submission`
64
60
  }));
65
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
66
- context: {
67
- code: 500,
68
- siteKey: req.body.dapp,
69
- error: err
70
- },
71
- i18n: req.i18n,
72
- logger: req.logger
61
+ return next(new _prosopo_common.ProsopoError({
62
+ code: "UNEXPECTED",
63
+ errorSite: "PROV-23",
64
+ message: "BadRequest",
65
+ cause: err,
66
+ context: { siteKey: req.body.dapp }
73
67
  }));
74
68
  }
75
69
  };
@@ -21,14 +21,12 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
21
21
  try {
22
22
  parsed = _prosopo_types.CaptchaSolutionBody.parse(req.body);
23
23
  } catch (err) {
24
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
25
- context: {
26
- code: 400,
27
- error: err,
28
- body: require_requestBodySummary.summariseRequestBody(req)
29
- },
30
- i18n: req.i18n,
31
- logger: req.logger
24
+ return next(new _prosopo_common.ProsopoError({
25
+ code: "INVALID_REQUEST",
26
+ errorSite: "PROV-24",
27
+ message: "Error parsing captcha",
28
+ cause: err,
29
+ context: { body: require_requestBodySummary.summariseRequestBody(req) }
32
30
  }));
33
31
  }
34
32
  const { user, dapp } = parsed;
@@ -44,13 +42,10 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
44
42
  return res.json(result);
45
43
  }
46
44
  try {
47
- if (!await tasks.db.getClientRecord(parsed.dapp)) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
48
- context: {
49
- code: 400,
50
- siteKey: dapp
51
- },
52
- i18n: req.i18n,
53
- logger: req.logger
45
+ if (!await tasks.db.getClientRecord(parsed.dapp)) return next(new _prosopo_common.ProsopoError({
46
+ code: "SITE_KEY_NOT_REGISTERED",
47
+ errorSite: "PROV-25",
48
+ context: { siteKey: dapp }
54
49
  }));
55
50
  const result = await tasks.imgCaptchaManager.dappUserSolution(user, dapp, parsed[_prosopo_types.ApiParams.requestHash], parsed[_prosopo_types.ApiParams.captchas], parsed[_prosopo_types.ApiParams.signature].user.timestamp, Number.parseInt(parsed[_prosopo_types.ApiParams.timestamp]), parsed[_prosopo_types.ApiParams.signature].provider.requestHash, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), req.ja4, parsed[_prosopo_types.ApiParams.behavioralData], req.ipInfo, parsed[_prosopo_types.ApiParams.simdReadings], parsed[_prosopo_types.ApiParams.clientMetaData]);
56
51
  const returnValue = {
@@ -59,19 +54,18 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
59
54
  };
60
55
  return res.json(returnValue);
61
56
  } catch (err) {
57
+ if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
62
58
  req.logger.error(() => ({
63
59
  err,
64
60
  body: require_requestBodySummary.summariseRequestBody(req),
65
61
  msg: "Error in image captcha solution submission"
66
62
  }));
67
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
68
- context: {
69
- code: 500,
70
- siteKey: req.body.dapp,
71
- error: err
72
- },
73
- i18n: req.i18n,
74
- logger: req.logger
63
+ return next(new _prosopo_common.ProsopoError({
64
+ code: "UNEXPECTED",
65
+ errorSite: "PROV-26",
66
+ message: "BadRequest",
67
+ cause: err,
68
+ context: { siteKey: req.body.dapp }
75
69
  }));
76
70
  }
77
71
  };
@@ -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
  }));
@@ -82,6 +80,7 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
82
80
  userAgent,
83
81
  ...req.ja4 && { ja4: req.ja4 },
84
82
  ...fingerprintProof && { fingerprintProof },
83
+ ...fingerprintSummary && { fingerprintSummary },
85
84
  ...req.tcpToChelloUs !== void 0 && { tcpToChelloUs: req.tcpToChelloUs },
86
85
  ...req.chelloToHandshakeUs !== void 0 && { chelloToHandshakeUs: req.chelloToHandshakeUs },
87
86
  ...require_rawTlsSignalsMiddleware.rawTlsSignalsForSession(req),
@@ -90,7 +89,7 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
90
89
  }
91
90
  });
92
91
  const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
93
- 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);
94
93
  if (result.routingOutput) req.logger.info(() => ({
95
94
  msg: "post-PoW routing decision",
96
95
  data: {
@@ -115,19 +114,18 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
115
114
  };
116
115
  return res.json(response);
117
116
  } catch (err) {
117
+ if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
118
118
  req.logger.error(() => ({
119
119
  err,
120
120
  body: require_requestBodySummary.summariseRequestBody(req),
121
121
  msg: "Error in PoW captcha solution submission"
122
122
  }));
123
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
124
- context: {
125
- code: 500,
126
- siteKey: req.body.dapp,
127
- error: err
128
- },
129
- i18n: req.i18n,
130
- 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 }
131
129
  }));
132
130
  }
133
131
  };