@prosopo/provider 3.12.14 → 3.13.6

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 (358) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +345 -0
  3. package/dist/api/captcha/getImageCaptchaChallenge.js +150 -0
  4. package/dist/api/captcha/getPoWCaptchaChallenge.js +156 -0
  5. package/dist/api/captcha/submitImageCaptchaSolution.js +87 -0
  6. package/dist/api/captcha/submitPoWCaptchaSolution.js +77 -0
  7. package/dist/api/captcha.js +18 -696
  8. package/dist/api/verify.js +2 -1
  9. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +344 -0
  10. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +149 -0
  11. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +155 -0
  12. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +86 -0
  13. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +76 -0
  14. package/dist/cjs/api/captcha.cjs +17 -695
  15. package/dist/cjs/api/verify.cjs +2 -1
  16. package/dist/cjs/index.cjs +2 -0
  17. package/dist/cjs/schedulers/setClientEntropy.cjs +36 -0
  18. package/dist/cjs/tasks/captchaManager.cjs +2 -1
  19. package/dist/cjs/tasks/client/clientTasks.cjs +54 -1
  20. package/dist/cjs/tasks/detection/decodePayload.cjs +379 -609
  21. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +35 -11
  22. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +4 -1
  23. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +8 -2
  24. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +2 -2
  25. package/dist/cjs/tasks/tasks.cjs +1 -0
  26. package/dist/cjs/utils/hashUserIp.cjs +9 -0
  27. package/dist/index.js +2 -0
  28. package/dist/schedulers/setClientEntropy.js +29 -24
  29. package/dist/tasks/captchaManager.js +2 -1
  30. package/dist/tasks/client/clientTasks.js +55 -2
  31. package/dist/tasks/detection/decodePayload.js +379 -609
  32. package/dist/tasks/detection/getBotScore.js +2 -2
  33. package/dist/tasks/frictionless/frictionlessTasks.js +36 -12
  34. package/dist/tasks/frictionless/frictionlessTasksUtils.js +4 -1
  35. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +8 -2
  36. package/dist/tasks/powCaptcha/powTasks.js +2 -2
  37. package/dist/tasks/tasks.js +1 -0
  38. package/dist/utils/hashUserIp.js +9 -0
  39. package/package.json +20 -20
  40. package/coverage/base.css +0 -224
  41. package/coverage/block-navigation.js +0 -87
  42. package/coverage/clover.xml +0 -4278
  43. package/coverage/coverage-final.json +0 -42
  44. package/coverage/favicon.png +0 -0
  45. package/coverage/index.html +0 -311
  46. package/coverage/prettify.css +0 -1
  47. package/coverage/prettify.js +0 -2
  48. package/coverage/sort-arrow-sprite.png +0 -0
  49. package/coverage/sorter.js +0 -210
  50. package/coverage/src/api/admin/apiAdminRoutesProvider.ts.html +0 -214
  51. package/coverage/src/api/admin/apiRegisterSiteKeyEndpoint.ts.html +0 -259
  52. package/coverage/src/api/admin/apiRemoveDetectorKeyEndpoint.ts.html +0 -283
  53. package/coverage/src/api/admin/apiToggleMaintenanceModeEndpoint.ts.html +0 -334
  54. package/coverage/src/api/admin/apiUpdateDetectorKeyEndpoint.ts.html +0 -298
  55. package/coverage/src/api/admin/createApiAdminRoutesProvider.ts.html +0 -163
  56. package/coverage/src/api/admin/index.html +0 -191
  57. package/coverage/src/api/blacklistRequestInspector.ts.html +0 -751
  58. package/coverage/src/api/block.ts.html +0 -187
  59. package/coverage/src/api/captcha.ts.html +0 -2803
  60. package/coverage/src/api/domainMiddleware.ts.html +0 -493
  61. package/coverage/src/api/headerCheckMiddleware.ts.html +0 -256
  62. package/coverage/src/api/ignoreMiddleware.ts.html +0 -181
  63. package/coverage/src/api/index.html +0 -266
  64. package/coverage/src/api/ja4Middleware.ts.html +0 -400
  65. package/coverage/src/api/public.ts.html +0 -343
  66. package/coverage/src/api/robotsMiddleware.ts.html +0 -157
  67. package/coverage/src/api/validateAddress.ts.html +0 -214
  68. package/coverage/src/api/verify.ts.html +0 -871
  69. package/coverage/src/compositeIpAddress.ts.html +0 -340
  70. package/coverage/src/index.html +0 -161
  71. package/coverage/src/index.ts.html +0 -175
  72. package/coverage/src/pairs.ts.html +0 -238
  73. package/coverage/src/rules/index.html +0 -116
  74. package/coverage/src/rules/lang.ts.html +0 -187
  75. package/coverage/src/schedulers/captchaScheduler.ts.html +0 -250
  76. package/coverage/src/schedulers/getClientList.ts.html +0 -271
  77. package/coverage/src/schedulers/index.html +0 -131
  78. package/coverage/src/services/index.html +0 -131
  79. package/coverage/src/services/ipComparison.ts.html +0 -685
  80. package/coverage/src/services/ipInfo.ts.html +0 -490
  81. package/coverage/src/tasks/captchaManager.ts.html +0 -865
  82. package/coverage/src/tasks/client/clientTasks.ts.html +0 -1381
  83. package/coverage/src/tasks/client/index.html +0 -116
  84. package/coverage/src/tasks/dataset/datasetTasks.ts.html +0 -268
  85. package/coverage/src/tasks/dataset/datasetTasksUtils.ts.html +0 -271
  86. package/coverage/src/tasks/dataset/index.html +0 -131
  87. package/coverage/src/tasks/detection/decodePayload.js.html +0 -127
  88. package/coverage/src/tasks/detection/getBotScore.ts.html +0 -244
  89. package/coverage/src/tasks/detection/index.html +0 -131
  90. package/coverage/src/tasks/frictionless/frictionlessTasks.ts.html +0 -1216
  91. package/coverage/src/tasks/frictionless/frictionlessTasksUtils.ts.html +0 -247
  92. package/coverage/src/tasks/frictionless/index.html +0 -131
  93. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasks.ts.html +0 -1972
  94. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts.html +0 -232
  95. package/coverage/src/tasks/imgCaptcha/index.html +0 -131
  96. package/coverage/src/tasks/index.html +0 -146
  97. package/coverage/src/tasks/index.ts.html +0 -127
  98. package/coverage/src/tasks/powCaptcha/index.html +0 -131
  99. package/coverage/src/tasks/powCaptcha/powTasks.ts.html +0 -961
  100. package/coverage/src/tasks/powCaptcha/powTasksUtils.ts.html +0 -244
  101. package/coverage/src/tasks/tasks.ts.html +0 -388
  102. package/coverage/src/util.ts.html +0 -1627
  103. package/coverage/src/utils/hashUserAgent.ts.html +0 -184
  104. package/coverage/src/utils/index.html +0 -116
  105. package/dist/api/admin/apiAdminRoutesProvider.d.ts +0 -9
  106. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +0 -1
  107. package/dist/api/admin/apiAdminRoutesProvider.js.map +0 -1
  108. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts +0 -14
  109. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +0 -1
  110. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +0 -1
  111. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +0 -23
  112. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +0 -1
  113. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +0 -1
  114. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +0 -13
  115. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +0 -1
  116. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +0 -1
  117. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +0 -14
  118. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +0 -1
  119. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +0 -1
  120. package/dist/api/admin/createApiAdminRoutesProvider.d.ts +0 -4
  121. package/dist/api/admin/createApiAdminRoutesProvider.d.ts.map +0 -1
  122. package/dist/api/admin/createApiAdminRoutesProvider.js.map +0 -1
  123. package/dist/api/blacklistRequestInspector.d.ts +0 -19
  124. package/dist/api/blacklistRequestInspector.d.ts.map +0 -1
  125. package/dist/api/blacklistRequestInspector.js.map +0 -1
  126. package/dist/api/block.d.ts +0 -3
  127. package/dist/api/block.d.ts.map +0 -1
  128. package/dist/api/block.js.map +0 -1
  129. package/dist/api/captcha.d.ts +0 -4
  130. package/dist/api/captcha.d.ts.map +0 -1
  131. package/dist/api/captcha.js.map +0 -1
  132. package/dist/api/domainMiddleware.d.ts +0 -4
  133. package/dist/api/domainMiddleware.d.ts.map +0 -1
  134. package/dist/api/domainMiddleware.js.map +0 -1
  135. package/dist/api/headerCheckMiddleware.d.ts +0 -4
  136. package/dist/api/headerCheckMiddleware.d.ts.map +0 -1
  137. package/dist/api/headerCheckMiddleware.js.map +0 -1
  138. package/dist/api/ignoreMiddleware.d.ts +0 -3
  139. package/dist/api/ignoreMiddleware.d.ts.map +0 -1
  140. package/dist/api/ignoreMiddleware.js.map +0 -1
  141. package/dist/api/ja4Middleware.d.ts +0 -10
  142. package/dist/api/ja4Middleware.d.ts.map +0 -1
  143. package/dist/api/ja4Middleware.js.map +0 -1
  144. package/dist/api/public.d.ts +0 -4
  145. package/dist/api/public.d.ts.map +0 -1
  146. package/dist/api/public.js.map +0 -1
  147. package/dist/api/robotsMiddleware.d.ts +0 -3
  148. package/dist/api/robotsMiddleware.d.ts.map +0 -1
  149. package/dist/api/robotsMiddleware.js.map +0 -1
  150. package/dist/api/validateAddress.d.ts +0 -5
  151. package/dist/api/validateAddress.d.ts.map +0 -1
  152. package/dist/api/validateAddress.js.map +0 -1
  153. package/dist/api/verify.d.ts +0 -4
  154. package/dist/api/verify.d.ts.map +0 -1
  155. package/dist/api/verify.js.map +0 -1
  156. package/dist/compositeIpAddress.d.ts +0 -5
  157. package/dist/compositeIpAddress.d.ts.map +0 -1
  158. package/dist/compositeIpAddress.js.map +0 -1
  159. package/dist/index.d.ts +0 -17
  160. package/dist/index.d.ts.map +0 -1
  161. package/dist/index.js.map +0 -1
  162. package/dist/pairs.d.ts +0 -3
  163. package/dist/pairs.d.ts.map +0 -1
  164. package/dist/pairs.js.map +0 -1
  165. package/dist/rules/lang.d.ts +0 -3
  166. package/dist/rules/lang.d.ts.map +0 -1
  167. package/dist/rules/lang.js.map +0 -1
  168. package/dist/schedulers/captchaScheduler.d.ts +0 -4
  169. package/dist/schedulers/captchaScheduler.d.ts.map +0 -1
  170. package/dist/schedulers/captchaScheduler.js.map +0 -1
  171. package/dist/schedulers/getClientList.d.ts +0 -4
  172. package/dist/schedulers/getClientList.d.ts.map +0 -1
  173. package/dist/schedulers/getClientList.js.map +0 -1
  174. package/dist/schedulers/setClientEntropy.d.ts +0 -4
  175. package/dist/schedulers/setClientEntropy.d.ts.map +0 -1
  176. package/dist/schedulers/setClientEntropy.js.map +0 -1
  177. package/dist/services/ipComparison.d.ts +0 -3
  178. package/dist/services/ipComparison.d.ts.map +0 -1
  179. package/dist/services/ipComparison.js.map +0 -1
  180. package/dist/services/ipInfo.d.ts +0 -3
  181. package/dist/services/ipInfo.d.ts.map +0 -1
  182. package/dist/services/ipInfo.js.map +0 -1
  183. package/dist/tasks/captchaManager.d.ts +0 -34
  184. package/dist/tasks/captchaManager.d.ts.map +0 -1
  185. package/dist/tasks/captchaManager.js.map +0 -1
  186. package/dist/tasks/client/clientTasks.d.ts +0 -21
  187. package/dist/tasks/client/clientTasks.d.ts.map +0 -1
  188. package/dist/tasks/client/clientTasks.js.map +0 -1
  189. package/dist/tasks/dataset/datasetTasks.d.ts +0 -13
  190. package/dist/tasks/dataset/datasetTasks.d.ts.map +0 -1
  191. package/dist/tasks/dataset/datasetTasks.js.map +0 -1
  192. package/dist/tasks/dataset/datasetTasksUtils.d.ts +0 -3
  193. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +0 -1
  194. package/dist/tasks/dataset/datasetTasksUtils.js.map +0 -1
  195. package/dist/tasks/detection/decodePayload.d.ts +0 -5
  196. package/dist/tasks/detection/decodePayload.d.ts.map +0 -1
  197. package/dist/tasks/detection/decodePayload.js.map +0 -1
  198. package/dist/tasks/detection/getBotScore.d.ts +0 -20
  199. package/dist/tasks/detection/getBotScore.d.ts.map +0 -1
  200. package/dist/tasks/detection/getBotScore.js.map +0 -1
  201. package/dist/tasks/frictionless/frictionlessTasks.d.ts +0 -67
  202. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +0 -1
  203. package/dist/tasks/frictionless/frictionlessTasks.js.map +0 -1
  204. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +0 -6
  205. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +0 -1
  206. package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +0 -1
  207. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +0 -30
  208. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +0 -1
  209. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +0 -1
  210. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +0 -7
  211. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +0 -1
  212. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +0 -1
  213. package/dist/tasks/index.d.ts +0 -2
  214. package/dist/tasks/index.d.ts.map +0 -1
  215. package/dist/tasks/index.js.map +0 -1
  216. package/dist/tasks/powCaptcha/powTasks.d.ts +0 -17
  217. package/dist/tasks/powCaptcha/powTasks.d.ts.map +0 -1
  218. package/dist/tasks/powCaptcha/powTasks.js.map +0 -1
  219. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +0 -3
  220. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +0 -1
  221. package/dist/tasks/powCaptcha/powTasksUtils.js.map +0 -1
  222. package/dist/tasks/tasks.d.ts +0 -25
  223. package/dist/tasks/tasks.d.ts.map +0 -1
  224. package/dist/tasks/tasks.js.map +0 -1
  225. package/dist/tests/index.d.ts +0 -2
  226. package/dist/tests/index.d.ts.map +0 -1
  227. package/dist/tests/index.js +0 -2
  228. package/dist/tests/index.js.map +0 -1
  229. package/dist/tests/integration/accessRules.integration.test.d.ts +0 -2
  230. package/dist/tests/integration/accessRules.integration.test.d.ts.map +0 -1
  231. package/dist/tests/integration/accessRules.integration.test.js +0 -588
  232. package/dist/tests/integration/accessRules.integration.test.js.map +0 -1
  233. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts +0 -2
  234. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts.map +0 -1
  235. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +0 -60
  236. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +0 -1
  237. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts +0 -2
  238. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts.map +0 -1
  239. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +0 -368
  240. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +0 -1
  241. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +0 -2
  242. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +0 -1
  243. package/dist/tests/integration/imgCaptcha.integration.test.js +0 -272
  244. package/dist/tests/integration/imgCaptcha.integration.test.js.map +0 -1
  245. package/dist/tests/integration/ipValidation.integration.test.d.ts +0 -2
  246. package/dist/tests/integration/ipValidation.integration.test.d.ts.map +0 -1
  247. package/dist/tests/integration/ipValidation.integration.test.js +0 -75
  248. package/dist/tests/integration/ipValidation.integration.test.js.map +0 -1
  249. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +0 -32
  250. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +0 -1
  251. package/dist/tests/integration/mocks/solvedTestCaptchas.js +0 -1046
  252. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +0 -1
  253. package/dist/tests/integration/powCaptcha.integration.test.d.ts +0 -2
  254. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +0 -1
  255. package/dist/tests/integration/powCaptcha.integration.test.js +0 -308
  256. package/dist/tests/integration/powCaptcha.integration.test.js.map +0 -1
  257. package/dist/tests/integration/registerSitekey.d.ts +0 -3
  258. package/dist/tests/integration/registerSitekey.d.ts.map +0 -1
  259. package/dist/tests/integration/registerSitekey.js +0 -24
  260. package/dist/tests/integration/registerSitekey.js.map +0 -1
  261. package/dist/tests/integration/userAccessPolicy.d.ts +0 -2
  262. package/dist/tests/integration/userAccessPolicy.d.ts.map +0 -1
  263. package/dist/tests/integration/userAccessPolicy.js +0 -2
  264. package/dist/tests/integration/userAccessPolicy.js.map +0 -1
  265. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts +0 -2
  266. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts.map +0 -1
  267. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +0 -60
  268. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +0 -1
  269. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +0 -2
  270. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +0 -1
  271. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +0 -43
  272. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +0 -1
  273. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts +0 -2
  274. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts.map +0 -1
  275. package/dist/tests/unit/api/ja4Middleware.unit.test.js +0 -57
  276. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +0 -1
  277. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts +0 -2
  278. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts.map +0 -1
  279. package/dist/tests/unit/compositeIpAddress.unit.test.js +0 -86
  280. package/dist/tests/unit/compositeIpAddress.unit.test.js.map +0 -1
  281. package/dist/tests/unit/pairs.unit.test.d.ts +0 -2
  282. package/dist/tests/unit/pairs.unit.test.d.ts.map +0 -1
  283. package/dist/tests/unit/pairs.unit.test.js +0 -83
  284. package/dist/tests/unit/pairs.unit.test.js.map +0 -1
  285. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +0 -2
  286. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +0 -1
  287. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +0 -75
  288. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +0 -1
  289. package/dist/tests/unit/services/ipComparison.unit.test.d.ts +0 -2
  290. package/dist/tests/unit/services/ipComparison.unit.test.d.ts.map +0 -1
  291. package/dist/tests/unit/services/ipComparison.unit.test.js +0 -258
  292. package/dist/tests/unit/services/ipComparison.unit.test.js.map +0 -1
  293. package/dist/tests/unit/services/ipInfo.unit.test.d.ts +0 -2
  294. package/dist/tests/unit/services/ipInfo.unit.test.d.ts.map +0 -1
  295. package/dist/tests/unit/services/ipInfo.unit.test.js +0 -210
  296. package/dist/tests/unit/services/ipInfo.unit.test.js.map +0 -1
  297. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts +0 -2
  298. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts.map +0 -1
  299. package/dist/tests/unit/tasks/captchaManager.unit.test.js +0 -311
  300. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +0 -1
  301. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +0 -2
  302. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +0 -1
  303. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +0 -289
  304. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +0 -1
  305. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +0 -2
  306. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +0 -1
  307. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +0 -92
  308. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +0 -1
  309. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +0 -2
  310. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +0 -1
  311. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +0 -75
  312. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +0 -1
  313. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts +0 -2
  314. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts.map +0 -1
  315. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +0 -143
  316. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +0 -1
  317. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts +0 -2
  318. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts.map +0 -1
  319. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +0 -145
  320. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +0 -1
  321. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts +0 -2
  322. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts.map +0 -1
  323. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +0 -64
  324. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +0 -1
  325. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +0 -2
  326. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +0 -1
  327. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +0 -388
  328. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +0 -1
  329. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +0 -2
  330. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +0 -1
  331. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +0 -46
  332. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +0 -1
  333. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +0 -2
  334. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +0 -1
  335. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +0 -216
  336. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +0 -1
  337. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +0 -2
  338. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +0 -1
  339. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +0 -69
  340. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +0 -1
  341. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts +0 -2
  342. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts.map +0 -1
  343. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +0 -505
  344. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +0 -1
  345. package/dist/tests/unit/util.ipDistance.unit.test.d.ts +0 -2
  346. package/dist/tests/unit/util.ipDistance.unit.test.d.ts.map +0 -1
  347. package/dist/tests/unit/util.ipDistance.unit.test.js +0 -93
  348. package/dist/tests/unit/util.ipDistance.unit.test.js.map +0 -1
  349. package/dist/tests/unit/util.unit.test.d.ts +0 -2
  350. package/dist/tests/unit/util.unit.test.d.ts.map +0 -1
  351. package/dist/tests/unit/util.unit.test.js +0 -170
  352. package/dist/tests/unit/util.unit.test.js.map +0 -1
  353. package/dist/util.d.ts +0 -24
  354. package/dist/util.d.ts.map +0 -1
  355. package/dist/util.js.map +0 -1
  356. package/dist/utils/hashUserAgent.d.ts +0 -2
  357. package/dist/utils/hashUserAgent.d.ts.map +0 -1
  358. package/dist/utils/hashUserAgent.js.map +0 -1
@@ -1,717 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const apiExpressRouter = require("@prosopo/api-express-router");
4
- const common = require("@prosopo/common");
5
- const datasets = require("@prosopo/datasets");
6
4
  const types = require("@prosopo/types");
7
- const util = require("@prosopo/util");
8
5
  const express = require("express");
9
- const compositeIpAddress = require("../compositeIpAddress.cjs");
10
- const frictionlessTasks = require("../tasks/frictionless/frictionlessTasks.cjs");
11
- const frictionlessTasksUtils = require("../tasks/frictionless/frictionlessTasksUtils.cjs");
12
- const tasks = require("../tasks/tasks.cjs");
13
- const hashUserAgent = require("../utils/hashUserAgent.cjs");
14
- const apiToggleMaintenanceModeEndpoint = require("./admin/apiToggleMaintenanceModeEndpoint.cjs");
15
- const blacklistRequestInspector = require("./blacklistRequestInspector.cjs");
16
- const validateAddress = require("./validateAddress.cjs");
17
- const DEFAULT_FRICTIONLESS_THRESHOLD = 0.5;
6
+ const getFrictionlessCaptchaChallenge = require("./captcha/getFrictionlessCaptchaChallenge.cjs");
7
+ const getImageCaptchaChallenge = require("./captcha/getImageCaptchaChallenge.cjs");
8
+ const getPoWCaptchaChallenge = require("./captcha/getPoWCaptchaChallenge.cjs");
9
+ const submitImageCaptchaSolution = require("./captcha/submitImageCaptchaSolution.cjs");
10
+ const submitPoWCaptchaSolution = require("./captcha/submitPoWCaptchaSolution.cjs");
18
11
  function prosopoRouter(env) {
19
12
  const router = express.Router();
20
13
  const userAccessRulesStorage = env.getDb().getUserAccessRulesStorage();
21
14
  router.post(
22
15
  types.ClientApiPaths.GetImageCaptchaChallenge,
23
- async (req, res, next) => {
24
- const tasks$1 = new tasks.Tasks(env, req.logger);
25
- let parsed;
26
- if (!req.ip) {
27
- return next(
28
- new common.ProsopoApiError("API.BAD_REQUEST", {
29
- context: { code: 400, error: "IP address not found" },
30
- i18n: req.i18n,
31
- logger: req.logger
32
- })
33
- );
34
- }
35
- const ipAddress = util.getIPAddress(req.ip || "");
36
- try {
37
- parsed = types.CaptchaRequestBody.parse(req.body);
38
- } catch (err) {
39
- return next(
40
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
41
- context: { code: 400, error: err },
42
- i18n: req.i18n,
43
- logger: req.logger
44
- })
45
- );
46
- }
47
- const { datasetId, user, dapp, sessionId } = parsed;
48
- validateAddress.validateSiteKey(dapp);
49
- validateAddress.validateAddr(user);
50
- try {
51
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
52
- if (!clientRecord) {
53
- return next(
54
- new common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
55
- context: { code: 400, siteKey: dapp },
56
- i18n: req.i18n,
57
- logger: req.logger
58
- })
59
- );
60
- }
61
- const userScope = blacklistRequestInspector.getRequestUserScope(
62
- util.flatten(req.headers),
63
- req.ja4,
64
- req.ip,
65
- user
66
- );
67
- const userAccessPolicy = (await tasks$1.imgCaptchaManager.getPrioritisedAccessPolicies(
68
- userAccessRulesStorage,
69
- dapp,
70
- userScope
71
- ))[0];
72
- const {
73
- valid,
74
- reason,
75
- sessionId: validSessionId,
76
- solvedImagesCount
77
- } = await tasks$1.imgCaptchaManager.isValidRequest(
78
- clientRecord,
79
- types.CaptchaType.image,
80
- env,
81
- sessionId,
82
- userAccessPolicy,
83
- req.ip
84
- );
85
- if (!valid) {
86
- return next(
87
- new common.ProsopoApiError(reason || "API.BAD_REQUEST", {
88
- context: {
89
- code: 400,
90
- siteKey: dapp,
91
- user
92
- },
93
- i18n: req.i18n,
94
- logger: req.logger
95
- })
96
- );
97
- }
98
- const captchaConfig = {
99
- solved: {
100
- count: solvedImagesCount || userAccessPolicy?.solvedImagesCount || env.config.captchas.solved.count
101
- },
102
- unsolved: {
103
- count: userAccessPolicy?.unsolvedImagesCount || env.config.captchas.unsolved.count
104
- }
105
- };
106
- const taskData = await tasks$1.imgCaptchaManager.getRandomCaptchasAndRequestHash(
107
- datasetId,
108
- user,
109
- ipAddress,
110
- captchaConfig,
111
- clientRecord.settings.imageThreshold ?? 0.8,
112
- validSessionId
113
- );
114
- const captchaResponse = {
115
- [types.ApiParams.status]: "ok",
116
- [types.ApiParams.captchas]: taskData.captchas.map((captcha) => ({
117
- ...captcha,
118
- target: req.t(`TARGET.${captcha.target}`),
119
- items: captcha.items.map(
120
- (item) => datasets.parseCaptchaAssets(item, env.assetsResolver)
121
- )
122
- })),
123
- [types.ApiParams.requestHash]: taskData.requestHash,
124
- [types.ApiParams.timestamp]: taskData.timestamp.toString(),
125
- [types.ApiParams.signature]: {
126
- [types.ApiParams.provider]: {
127
- [types.ApiParams.requestHash]: taskData.signedRequestHash
128
- }
129
- }
130
- };
131
- req.logger.info(() => ({
132
- msg: "Image captcha challenge issued",
133
- data: {
134
- captchaType: types.CaptchaType.image,
135
- requestHash: taskData.requestHash,
136
- solvedImagesCount: captchaConfig.solved.count,
137
- user,
138
- dapp,
139
- sessionId
140
- }
141
- }));
142
- return res.json(captchaResponse);
143
- } catch (err) {
144
- req.logger.error(() => ({
145
- err,
146
- data: req.params,
147
- msg: "Error in image captcha challenge request"
148
- }));
149
- return next(
150
- new common.ProsopoApiError("API.BAD_REQUEST", {
151
- context: {
152
- error: err,
153
- code: 500,
154
- params: req.params,
155
- context: err
156
- },
157
- i18n: req.i18n,
158
- logger: req.logger
159
- })
160
- );
161
- }
162
- }
16
+ (req, res, next) => getImageCaptchaChallenge(env, userAccessRulesStorage)(req, res, next)
163
17
  );
164
18
  router.post(
165
19
  types.ClientApiPaths.SubmitImageCaptchaSolution,
166
- async (req, res, next) => {
167
- const tasks$1 = new tasks.Tasks(env, req.logger);
168
- if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
169
- req.logger.info(() => ({
170
- msg: "Maintenance mode active - returning verified for image captcha"
171
- }));
172
- const result = {
173
- status: "ok",
174
- captchas: [],
175
- verified: true
176
- };
177
- return res.json(result);
178
- }
179
- let parsed;
180
- try {
181
- parsed = types.CaptchaSolutionBody.parse(req.body);
182
- } catch (err) {
183
- return next(
184
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
185
- context: { code: 400, error: err, body: req.body },
186
- i18n: req.i18n,
187
- logger: req.logger
188
- })
189
- );
190
- }
191
- const { user, dapp } = parsed;
192
- validateAddress.validateSiteKey(dapp);
193
- validateAddress.validateAddr(user);
194
- try {
195
- const clientRecord = await tasks$1.db.getClientRecord(parsed.dapp);
196
- if (!clientRecord) {
197
- return next(
198
- new common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
199
- context: { code: 400, siteKey: dapp },
200
- i18n: req.i18n,
201
- logger: req.logger
202
- })
203
- );
204
- }
205
- const result = await tasks$1.imgCaptchaManager.dappUserSolution(
206
- user,
207
- dapp,
208
- parsed[types.ApiParams.requestHash],
209
- parsed[types.ApiParams.captchas],
210
- parsed[types.ApiParams.signature].user.timestamp,
211
- Number.parseInt(parsed[types.ApiParams.timestamp]),
212
- parsed[types.ApiParams.signature].provider.requestHash,
213
- util.getIPAddress(req.ip || ""),
214
- util.flatten(req.headers),
215
- req.ja4
216
- );
217
- const returnValue = {
218
- status: req.i18n.t(
219
- result.verified ? "API.CAPTCHA_PASSED" : "API.CAPTCHA_FAILED"
220
- ),
221
- ...result
222
- };
223
- return res.json(returnValue);
224
- } catch (err) {
225
- req.logger.error(() => ({
226
- err,
227
- body: req.body,
228
- msg: "Error in image captcha solution submission"
229
- }));
230
- return next(
231
- new common.ProsopoApiError("API.BAD_REQUEST", {
232
- context: {
233
- code: 500,
234
- siteKey: req.body.dapp,
235
- error: err
236
- },
237
- i18n: req.i18n,
238
- logger: req.logger
239
- })
240
- );
241
- }
242
- }
20
+ (req, res, next) => submitImageCaptchaSolution(env, userAccessRulesStorage)(req, res, next)
21
+ );
22
+ router.post(
23
+ types.ClientApiPaths.GetPowCaptchaChallenge,
24
+ (req, res, next) => getPoWCaptchaChallenge(env, userAccessRulesStorage)(req, res, next)
243
25
  );
244
- router.post(types.ClientApiPaths.GetPowCaptchaChallenge, async (req, res, next) => {
245
- let parsed;
246
- const tasks$1 = new tasks.Tasks(env);
247
- tasks$1.setLogger(req.logger);
248
- try {
249
- parsed = types.GetPowCaptchaChallengeRequestBody.parse(req.body);
250
- } catch (err) {
251
- return next(
252
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
253
- context: { code: 400, error: err },
254
- i18n: req.i18n,
255
- logger: req.logger
256
- })
257
- );
258
- }
259
- const { user, dapp, sessionId } = parsed;
260
- validateAddress.validateSiteKey(dapp);
261
- validateAddress.validateAddr(user);
262
- try {
263
- const clientSettings = await tasks$1.db.getClientRecord(dapp);
264
- if (!clientSettings) {
265
- return next(
266
- new common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
267
- context: { code: 400, siteKey: dapp },
268
- i18n: req.i18n,
269
- logger: req.logger
270
- })
271
- );
272
- }
273
- const userScope = blacklistRequestInspector.getRequestUserScope(
274
- util.flatten(req.headers),
275
- req.ja4,
276
- req.ip,
277
- user
278
- );
279
- const userAccessPolicy = (await tasks$1.powCaptchaManager.getPrioritisedAccessPolicies(
280
- userAccessRulesStorage,
281
- dapp,
282
- userScope
283
- ))[0];
284
- const {
285
- valid,
286
- reason,
287
- sessionId: validSessionId,
288
- powDifficulty
289
- } = await tasks$1.powCaptchaManager.isValidRequest(
290
- clientSettings,
291
- types.CaptchaType.pow,
292
- env,
293
- sessionId,
294
- userAccessPolicy,
295
- req.ip
296
- );
297
- if (!valid) {
298
- return next(
299
- new common.ProsopoApiError(reason || "API.BAD_REQUEST", {
300
- context: {
301
- code: 400,
302
- siteKey: dapp,
303
- user
304
- },
305
- i18n: req.i18n,
306
- logger: req.logger
307
- })
308
- );
309
- }
310
- const origin = req.headers.origin;
311
- if (!origin) {
312
- return next(
313
- new common.ProsopoApiError("API.BAD_REQUEST", {
314
- context: {
315
- error: "Origin header not found",
316
- code: 400,
317
- siteKey: dapp,
318
- user
319
- },
320
- i18n: req.i18n,
321
- logger: req.logger
322
- })
323
- );
324
- }
325
- const difficulty = powDifficulty || userAccessPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty;
326
- const challenge = await tasks$1.powCaptchaManager.getPowCaptchaChallenge(
327
- user,
328
- dapp,
329
- origin,
330
- difficulty
331
- );
332
- await tasks$1.db.storePowCaptchaRecord(
333
- challenge.challenge,
334
- {
335
- requestedAtTimestamp: challenge.requestedAtTimestamp,
336
- userAccount: user,
337
- dappAccount: dapp
338
- },
339
- challenge.difficulty,
340
- challenge.providerSignature,
341
- compositeIpAddress.getCompositeIpAddress(req.ip || ""),
342
- util.flatten(req.headers),
343
- req.ja4,
344
- validSessionId
345
- );
346
- const getPowCaptchaResponse = {
347
- [types.ApiParams.status]: "ok",
348
- [types.ApiParams.challenge]: challenge.challenge,
349
- [types.ApiParams.difficulty]: challenge.difficulty,
350
- [types.ApiParams.timestamp]: challenge.requestedAtTimestamp.toString(),
351
- [types.ApiParams.signature]: {
352
- [types.ApiParams.provider]: {
353
- [types.ApiParams.challenge]: challenge.providerSignature
354
- }
355
- }
356
- };
357
- req.logger.info(() => ({
358
- msg: "PoW captcha challenge issued",
359
- data: {
360
- captchaType: types.CaptchaType.pow,
361
- challenge: challenge.challenge,
362
- difficulty: challenge.difficulty,
363
- user,
364
- dapp,
365
- session: sessionId
366
- }
367
- }));
368
- return res.json(getPowCaptchaResponse);
369
- } catch (err) {
370
- req.logger.error(() => ({
371
- err,
372
- body: req.body,
373
- msg: "Error in PoW captcha challenge request"
374
- }));
375
- return next(
376
- new common.ProsopoApiError("API.BAD_REQUEST", {
377
- context: {
378
- code: 500,
379
- siteKey: req.body.dapp,
380
- user: req.body.user,
381
- error: err
382
- },
383
- i18n: req.i18n,
384
- logger: req.logger
385
- })
386
- );
387
- }
388
- });
389
26
  router.post(
390
27
  types.ClientApiPaths.SubmitPowCaptchaSolution,
391
- async (req, res, next) => {
392
- let parsed;
393
- const tasks$1 = new tasks.Tasks(env, req.logger);
394
- if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
395
- req.logger.info(() => ({
396
- msg: "Maintenance mode active - returning verified"
397
- }));
398
- const response = {
399
- status: "ok",
400
- verified: true
401
- };
402
- return res.json(response);
403
- }
404
- try {
405
- parsed = types.SubmitPowCaptchaSolutionBody.parse(req.body);
406
- } catch (err) {
407
- return next(
408
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
409
- context: { code: 400, error: err, body: req.body },
410
- i18n: req.i18n,
411
- logger: req.logger
412
- })
413
- );
414
- }
415
- const { challenge, signature, nonce, verifiedTimeout, dapp, user } = parsed;
416
- validateAddress.validateSiteKey(dapp);
417
- validateAddress.validateAddr(user);
418
- try {
419
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
420
- if (!clientRecord) {
421
- return next(
422
- new common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
423
- context: { code: 400, siteKey: dapp },
424
- i18n: req.i18n,
425
- logger: req.logger
426
- })
427
- );
428
- }
429
- const verified = await tasks$1.powCaptchaManager.verifyPowCaptchaSolution(
430
- challenge,
431
- signature.provider.challenge,
432
- nonce,
433
- verifiedTimeout,
434
- signature.user.timestamp,
435
- util.getIPAddress(req.ip || ""),
436
- util.flatten(req.headers)
437
- );
438
- const response = { status: "ok", verified };
439
- return res.json(response);
440
- } catch (err) {
441
- req.logger.error(() => ({
442
- err,
443
- body: req.body,
444
- msg: "Error in PoW captcha solution submission"
445
- }));
446
- return next(
447
- new common.ProsopoApiError("API.BAD_REQUEST", {
448
- context: {
449
- code: 500,
450
- siteKey: req.body.dapp,
451
- error: err
452
- },
453
- i18n: req.i18n,
454
- logger: req.logger
455
- })
456
- );
457
- }
458
- }
28
+ (req, res, next) => submitPoWCaptchaSolution(env)(req, res, next)
459
29
  );
460
30
  router.post(
461
31
  types.ClientApiPaths.GetFrictionlessCaptchaChallenge,
462
- async (req, res, next) => {
463
- try {
464
- const tasks$1 = new tasks.Tasks(env, req.logger);
465
- const { token, headHash, dapp, user } = types.GetFrictionlessCaptchaChallengeRequestBody.parse(req.body);
466
- if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
467
- req.logger.info(() => ({
468
- msg: "Maintenance mode active - storing dummy token and sending PoW captcha",
469
- data: { dapp, user }
470
- }));
471
- return res.json(
472
- await tasks$1.frictionlessManager.sendPowCaptcha({
473
- token,
474
- score: 0,
475
- threshold: 0.5,
476
- scoreComponents: {
477
- baseScore: 0
478
- },
479
- providerSelectEntropy: 0,
480
- ipAddress: compositeIpAddress.getCompositeIpAddress(req.ip || ""),
481
- powDifficulty: void 0,
482
- webView: false,
483
- iFrame: false,
484
- decryptedHeadHash: ""
485
- })
486
- );
487
- }
488
- const existingToken = await tasks$1.db.getSessionRecordByToken(token);
489
- if (existingToken) {
490
- req.logger.info(() => ({
491
- token: existingToken,
492
- msg: "Token has already been used"
493
- }));
494
- return next(
495
- new common.ProsopoApiError("API.BAD_REQUEST", {
496
- context: {
497
- code: 400,
498
- siteKey: dapp,
499
- user
500
- },
501
- i18n: req.i18n,
502
- logger: req.logger
503
- })
504
- );
505
- }
506
- const lScore = tasks$1.frictionlessManager.checkLangRules(
507
- req.headers["accept-language"] || ""
508
- );
509
- const {
510
- baseBotScore,
511
- timestamp,
512
- providerSelectEntropy,
513
- userId,
514
- userAgent,
515
- webView,
516
- iFrame,
517
- decryptedHeadHash
518
- } = await tasks$1.frictionlessManager.decryptPayload(token, headHash);
519
- req.logger.debug(() => ({
520
- msg: "Decrypted payload",
521
- data: {
522
- baseBotScore,
523
- timestamp,
524
- providerSelectEntropy,
525
- userId,
526
- userAgent,
527
- webView
528
- }
529
- }));
530
- let botScore = baseBotScore + lScore;
531
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
532
- if (!clientRecord) {
533
- return next(
534
- new common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
535
- context: { code: 400, siteKey: dapp },
536
- i18n: req.i18n,
537
- logger: req.logger
538
- })
539
- );
540
- }
541
- const { valid, reason } = await tasks$1.frictionlessManager.isValidRequest(
542
- clientRecord,
543
- types.CaptchaType.frictionless,
544
- env
545
- );
546
- if (!valid) {
547
- return next(
548
- new common.ProsopoApiError(reason || "API.BAD_REQUEST", {
549
- context: {
550
- code: 400,
551
- siteKey: dapp,
552
- user
553
- },
554
- i18n: req.i18n,
555
- logger: req.logger
556
- })
557
- );
558
- }
559
- const botThreshold = clientRecord.settings?.frictionlessThreshold || DEFAULT_FRICTIONLESS_THRESHOLD;
560
- let scoreComponents = {
561
- baseScore: baseBotScore,
562
- ...lScore && { lScore }
563
- };
564
- const ipAddress = compositeIpAddress.getCompositeIpAddress(req.ip || "");
565
- tasks$1.frictionlessManager.setSessionParams({
566
- token,
567
- score: botScore,
568
- threshold: botThreshold,
569
- scoreComponents,
570
- providerSelectEntropy,
571
- ipAddress,
572
- webView,
573
- iFrame,
574
- decryptedHeadHash
575
- });
576
- const userScope = blacklistRequestInspector.getRequestUserScope(
577
- util.flatten(req.headers),
578
- req.ja4,
579
- req.ip,
580
- user
581
- );
582
- const userAccessPolicy = (await tasks$1.frictionlessManager.getPrioritisedAccessPolicies(
583
- userAccessRulesStorage,
584
- dapp,
585
- userScope
586
- ))[0];
587
- const headersUserAgent = req.headers["user-agent"];
588
- const hashedHeadersUserAgent = headersUserAgent ? hashUserAgent.hashUserAgent(headersUserAgent) : "";
589
- const headersProsopoUser = req.headers["prosopo-user"];
590
- if (hashedHeadersUserAgent !== userAgent || headersProsopoUser !== userId) {
591
- req.logger.info(() => ({
592
- msg: "User agent or user id does not match",
593
- data: {
594
- headersUserAgent,
595
- hashedHeadersUserAgent,
596
- userAgent,
597
- // This is the hashed user agent from the token
598
- headersProsopoUser,
599
- userId
600
- }
601
- }));
602
- return res.json(
603
- await tasks$1.frictionlessManager.sendImageCaptcha({
604
- solvedImagesCount: frictionlessTasksUtils.timestampDecayFunction(timestamp)
605
- })
606
- );
607
- }
608
- if (userAccessPolicy) {
609
- const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseAccessPolicy(
610
- userAccessPolicy,
611
- baseBotScore,
612
- botScore,
613
- scoreComponents
614
- );
615
- botScore = scoreUpdate.score;
616
- scoreComponents = scoreUpdate.scoreComponents;
617
- tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
618
- if (userAccessPolicy.captchaType === types.CaptchaType.image) {
619
- return res.json(
620
- await tasks$1.frictionlessManager.sendImageCaptcha({
621
- solvedImagesCount: userAccessPolicy.solvedImagesCount
622
- })
623
- );
624
- }
625
- if (userAccessPolicy.captchaType === types.CaptchaType.pow) {
626
- return res.json(
627
- await tasks$1.frictionlessManager.sendPowCaptcha({
628
- powDifficulty: void 0
629
- })
630
- );
631
- }
632
- }
633
- if (clientRecord.settings.disallowWebView && webView) {
634
- tasks$1.logger.info(() => ({
635
- msg: "WebView detected"
636
- }));
637
- const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseWebView(
638
- baseBotScore,
639
- botScore,
640
- scoreComponents
641
- );
642
- botScore = scoreUpdate.score;
643
- scoreComponents = scoreUpdate.scoreComponents;
644
- tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
645
- return res.json(
646
- await tasks$1.frictionlessManager.sendImageCaptcha({
647
- solvedImagesCount: env.config.captchas.solved.count * 2
648
- })
649
- );
650
- }
651
- if (frictionlessTasks.FrictionlessManager.timestampTooOld(timestamp)) {
652
- const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseTimestamp(
653
- timestamp,
654
- baseBotScore,
655
- botScore,
656
- scoreComponents
657
- );
658
- botScore = scoreUpdate.score;
659
- scoreComponents = scoreUpdate.scoreComponents;
660
- tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
661
- return res.json(
662
- await tasks$1.frictionlessManager.sendImageCaptcha({
663
- solvedImagesCount: frictionlessTasksUtils.timestampDecayFunction(timestamp)
664
- })
665
- );
666
- }
667
- const hostVerified = await tasks$1.frictionlessManager.hostVerified(
668
- providerSelectEntropy
669
- );
670
- if (!hostVerified.verified) {
671
- const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseUnverifiedHost(
672
- hostVerified.domain,
673
- baseBotScore,
674
- botScore,
675
- scoreComponents
676
- );
677
- botScore = scoreUpdate.score;
678
- scoreComponents = scoreUpdate.scoreComponents;
679
- tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
680
- }
681
- if (Number(botScore) > botThreshold) {
682
- req.logger.info(() => ({
683
- msg: "Bot score is greater than threshold",
684
- data: {
685
- botScore,
686
- botThreshold,
687
- token
688
- }
689
- }));
690
- return res.json(
691
- await tasks$1.frictionlessManager.sendImageCaptcha({
692
- solvedImagesCount: env.config.captchas.solved.count
693
- })
694
- );
695
- }
696
- return res.json(
697
- await tasks$1.frictionlessManager.sendPowCaptcha({
698
- powDifficulty: void 0
699
- })
700
- );
701
- } catch (err) {
702
- req.logger.error(() => ({
703
- err,
704
- msg: "Error in frictionless captcha challenge"
705
- }));
706
- return next(
707
- new common.ProsopoApiError("API.BAD_REQUEST", {
708
- context: { code: 400, error: err },
709
- i18n: req.i18n,
710
- logger: req.logger
711
- })
712
- );
713
- }
714
- }
32
+ (req, res, next) => getFrictionlessCaptchaChallenge(env, userAccessRulesStorage)(
33
+ req,
34
+ res,
35
+ next
36
+ )
715
37
  );
716
38
  router.use(apiExpressRouter.handleErrors);
717
39
  return router;