@prosopo/provider 3.3.0 → 3.12.14

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 (377) hide show
  1. package/CHANGELOG.md +718 -0
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/clover.xml +4278 -0
  5. package/coverage/coverage-final.json +42 -0
  6. package/coverage/favicon.png +0 -0
  7. package/coverage/index.html +311 -0
  8. package/coverage/prettify.css +1 -0
  9. package/coverage/prettify.js +2 -0
  10. package/coverage/sort-arrow-sprite.png +0 -0
  11. package/coverage/sorter.js +210 -0
  12. package/coverage/src/api/admin/apiAdminRoutesProvider.ts.html +214 -0
  13. package/coverage/src/api/admin/apiRegisterSiteKeyEndpoint.ts.html +259 -0
  14. package/coverage/src/api/admin/apiRemoveDetectorKeyEndpoint.ts.html +283 -0
  15. package/coverage/src/api/admin/apiToggleMaintenanceModeEndpoint.ts.html +334 -0
  16. package/coverage/src/api/admin/apiUpdateDetectorKeyEndpoint.ts.html +298 -0
  17. package/coverage/src/api/admin/createApiAdminRoutesProvider.ts.html +163 -0
  18. package/coverage/src/api/admin/index.html +191 -0
  19. package/coverage/src/api/blacklistRequestInspector.ts.html +751 -0
  20. package/coverage/src/api/block.ts.html +187 -0
  21. package/coverage/src/api/captcha.ts.html +2803 -0
  22. package/coverage/src/api/domainMiddleware.ts.html +493 -0
  23. package/coverage/src/api/headerCheckMiddleware.ts.html +256 -0
  24. package/coverage/src/api/ignoreMiddleware.ts.html +181 -0
  25. package/coverage/src/api/index.html +266 -0
  26. package/coverage/src/api/ja4Middleware.ts.html +400 -0
  27. package/coverage/src/api/public.ts.html +343 -0
  28. package/coverage/src/api/robotsMiddleware.ts.html +157 -0
  29. package/coverage/src/api/validateAddress.ts.html +214 -0
  30. package/coverage/src/api/verify.ts.html +871 -0
  31. package/coverage/src/compositeIpAddress.ts.html +340 -0
  32. package/coverage/src/index.html +161 -0
  33. package/coverage/src/index.ts.html +175 -0
  34. package/coverage/src/pairs.ts.html +238 -0
  35. package/coverage/src/rules/index.html +116 -0
  36. package/coverage/src/rules/lang.ts.html +187 -0
  37. package/coverage/src/schedulers/captchaScheduler.ts.html +250 -0
  38. package/coverage/src/schedulers/getClientList.ts.html +271 -0
  39. package/coverage/src/schedulers/index.html +131 -0
  40. package/coverage/src/services/index.html +131 -0
  41. package/coverage/src/services/ipComparison.ts.html +685 -0
  42. package/coverage/src/services/ipInfo.ts.html +490 -0
  43. package/coverage/src/tasks/captchaManager.ts.html +865 -0
  44. package/coverage/src/tasks/client/clientTasks.ts.html +1381 -0
  45. package/coverage/src/tasks/client/index.html +116 -0
  46. package/coverage/src/tasks/dataset/datasetTasks.ts.html +268 -0
  47. package/coverage/src/tasks/dataset/datasetTasksUtils.ts.html +271 -0
  48. package/coverage/src/tasks/dataset/index.html +131 -0
  49. package/coverage/src/tasks/detection/decodePayload.js.html +127 -0
  50. package/coverage/src/tasks/detection/getBotScore.ts.html +244 -0
  51. package/coverage/src/tasks/detection/index.html +131 -0
  52. package/coverage/src/tasks/frictionless/frictionlessTasks.ts.html +1216 -0
  53. package/coverage/src/tasks/frictionless/frictionlessTasksUtils.ts.html +247 -0
  54. package/coverage/src/tasks/frictionless/index.html +131 -0
  55. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasks.ts.html +1972 -0
  56. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts.html +232 -0
  57. package/coverage/src/tasks/imgCaptcha/index.html +131 -0
  58. package/coverage/src/tasks/index.html +146 -0
  59. package/coverage/src/tasks/index.ts.html +127 -0
  60. package/coverage/src/tasks/powCaptcha/index.html +131 -0
  61. package/coverage/src/tasks/powCaptcha/powTasks.ts.html +961 -0
  62. package/coverage/src/tasks/powCaptcha/powTasksUtils.ts.html +244 -0
  63. package/coverage/src/tasks/tasks.ts.html +388 -0
  64. package/coverage/src/util.ts.html +1627 -0
  65. package/coverage/src/utils/hashUserAgent.ts.html +184 -0
  66. package/coverage/src/utils/index.html +116 -0
  67. package/dist/api/admin/apiAdminRoutesProvider.d.ts +9 -0
  68. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -0
  69. package/dist/api/admin/apiAdminRoutesProvider.js +13 -18
  70. package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -0
  71. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts +14 -0
  72. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +1 -0
  73. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +1 -0
  74. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +23 -0
  75. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -0
  76. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +7 -4
  77. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +1 -0
  78. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +13 -0
  79. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +1 -0
  80. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +40 -0
  81. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +1 -0
  82. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +14 -0
  83. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +1 -0
  84. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +1 -0
  85. package/dist/api/admin/createApiAdminRoutesProvider.d.ts +4 -0
  86. package/dist/api/admin/createApiAdminRoutesProvider.d.ts.map +1 -0
  87. package/dist/api/admin/createApiAdminRoutesProvider.js.map +1 -0
  88. package/dist/api/blacklistRequestInspector.d.ts +19 -0
  89. package/dist/api/blacklistRequestInspector.d.ts.map +1 -0
  90. package/dist/api/blacklistRequestInspector.js +14 -12
  91. package/dist/api/blacklistRequestInspector.js.map +1 -0
  92. package/dist/api/block.d.ts +3 -0
  93. package/dist/api/block.d.ts.map +1 -0
  94. package/dist/api/block.js.map +1 -0
  95. package/dist/api/captcha.d.ts +4 -0
  96. package/dist/api/captcha.d.ts.map +1 -0
  97. package/dist/api/captcha.js +226 -48
  98. package/dist/api/captcha.js.map +1 -0
  99. package/dist/api/domainMiddleware.d.ts +4 -0
  100. package/dist/api/domainMiddleware.d.ts.map +1 -0
  101. package/dist/api/domainMiddleware.js +8 -8
  102. package/dist/api/domainMiddleware.js.map +1 -0
  103. package/dist/api/headerCheckMiddleware.d.ts +4 -0
  104. package/dist/api/headerCheckMiddleware.d.ts.map +1 -0
  105. package/dist/api/headerCheckMiddleware.js +4 -0
  106. package/dist/api/headerCheckMiddleware.js.map +1 -0
  107. package/dist/api/ignoreMiddleware.d.ts +3 -0
  108. package/dist/api/ignoreMiddleware.d.ts.map +1 -0
  109. package/dist/api/ignoreMiddleware.js +4 -1
  110. package/dist/api/ignoreMiddleware.js.map +1 -0
  111. package/dist/api/ja4Middleware.d.ts +10 -0
  112. package/dist/api/ja4Middleware.d.ts.map +1 -0
  113. package/dist/api/ja4Middleware.js +5 -23
  114. package/dist/api/ja4Middleware.js.map +1 -0
  115. package/dist/api/public.d.ts +4 -0
  116. package/dist/api/public.d.ts.map +1 -0
  117. package/dist/api/public.js +26 -3
  118. package/dist/api/public.js.map +1 -0
  119. package/dist/api/robotsMiddleware.d.ts +3 -0
  120. package/dist/api/robotsMiddleware.d.ts.map +1 -0
  121. package/dist/api/robotsMiddleware.js.map +1 -0
  122. package/dist/api/validateAddress.d.ts +5 -0
  123. package/dist/api/validateAddress.d.ts.map +1 -0
  124. package/dist/api/validateAddress.js.map +1 -0
  125. package/dist/api/verify.d.ts +4 -0
  126. package/dist/api/verify.d.ts.map +1 -0
  127. package/dist/api/verify.js +27 -3
  128. package/dist/api/verify.js.map +1 -0
  129. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +13 -18
  130. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +2 -1
  131. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +9 -5
  132. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +41 -0
  133. package/dist/cjs/api/blacklistRequestInspector.cjs +13 -11
  134. package/dist/cjs/api/captcha.cjs +226 -48
  135. package/dist/cjs/api/domainMiddleware.cjs +8 -8
  136. package/dist/cjs/api/headerCheckMiddleware.cjs +4 -0
  137. package/dist/cjs/api/ignoreMiddleware.cjs +3 -0
  138. package/dist/cjs/api/ja4Middleware.cjs +6 -23
  139. package/dist/cjs/api/public.cjs +26 -3
  140. package/dist/cjs/api/verify.cjs +27 -3
  141. package/dist/cjs/compositeIpAddress.cjs +53 -0
  142. package/dist/cjs/index.cjs +7 -0
  143. package/dist/cjs/pairs.cjs +27 -0
  144. package/dist/cjs/services/ipComparison.cjs +123 -0
  145. package/dist/cjs/services/ipInfo.cjs +87 -0
  146. package/dist/cjs/tasks/captchaManager.cjs +41 -10
  147. package/dist/cjs/tasks/client/clientTasks.cjs +31 -43
  148. package/dist/cjs/tasks/detection/decodePayload.cjs +616 -281
  149. package/dist/cjs/tasks/detection/getBotScore.cjs +28 -4
  150. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +227 -36
  151. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +17 -0
  152. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +78 -30
  153. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +49 -21
  154. package/dist/cjs/util.cjs +262 -17
  155. package/dist/cjs/utils/hashUserAgent.cjs +10 -0
  156. package/dist/compositeIpAddress.d.ts +5 -0
  157. package/dist/compositeIpAddress.d.ts.map +1 -0
  158. package/dist/compositeIpAddress.js +53 -0
  159. package/dist/compositeIpAddress.js.map +1 -0
  160. package/dist/index.d.ts +17 -0
  161. package/dist/index.d.ts.map +1 -0
  162. package/dist/index.js +8 -1
  163. package/dist/index.js.map +1 -0
  164. package/dist/pairs.d.ts +3 -0
  165. package/dist/pairs.d.ts.map +1 -0
  166. package/dist/pairs.js +27 -0
  167. package/dist/pairs.js.map +1 -0
  168. package/dist/rules/lang.d.ts +3 -0
  169. package/dist/rules/lang.d.ts.map +1 -0
  170. package/dist/rules/lang.js.map +1 -0
  171. package/dist/schedulers/captchaScheduler.d.ts +4 -0
  172. package/dist/schedulers/captchaScheduler.d.ts.map +1 -0
  173. package/dist/schedulers/captchaScheduler.js.map +1 -0
  174. package/dist/schedulers/getClientList.d.ts +4 -0
  175. package/dist/schedulers/getClientList.d.ts.map +1 -0
  176. package/dist/schedulers/getClientList.js.map +1 -0
  177. package/dist/schedulers/setClientEntropy.d.ts +4 -0
  178. package/dist/schedulers/setClientEntropy.d.ts.map +1 -0
  179. package/dist/schedulers/setClientEntropy.js +31 -0
  180. package/dist/schedulers/setClientEntropy.js.map +1 -0
  181. package/dist/services/ipComparison.d.ts +3 -0
  182. package/dist/services/ipComparison.d.ts.map +1 -0
  183. package/dist/services/ipComparison.js +123 -0
  184. package/dist/services/ipComparison.js.map +1 -0
  185. package/dist/services/ipInfo.d.ts +3 -0
  186. package/dist/services/ipInfo.d.ts.map +1 -0
  187. package/dist/services/ipInfo.js +87 -0
  188. package/dist/services/ipInfo.js.map +1 -0
  189. package/dist/tasks/captchaManager.d.ts +34 -0
  190. package/dist/tasks/captchaManager.d.ts.map +1 -0
  191. package/dist/tasks/captchaManager.js +39 -9
  192. package/dist/tasks/captchaManager.js.map +1 -0
  193. package/dist/tasks/client/clientTasks.d.ts +21 -0
  194. package/dist/tasks/client/clientTasks.d.ts.map +1 -0
  195. package/dist/tasks/client/clientTasks.js +31 -43
  196. package/dist/tasks/client/clientTasks.js.map +1 -0
  197. package/dist/tasks/dataset/datasetTasks.d.ts +13 -0
  198. package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -0
  199. package/dist/tasks/dataset/datasetTasks.js.map +1 -0
  200. package/dist/tasks/dataset/datasetTasksUtils.d.ts +3 -0
  201. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -0
  202. package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -0
  203. package/dist/tasks/detection/decodePayload.d.ts +5 -0
  204. package/dist/tasks/detection/decodePayload.d.ts.map +1 -0
  205. package/dist/tasks/detection/decodePayload.js +616 -281
  206. package/dist/tasks/detection/decodePayload.js.map +1 -0
  207. package/dist/tasks/detection/getBotScore.d.ts +20 -0
  208. package/dist/tasks/detection/getBotScore.d.ts.map +1 -0
  209. package/dist/tasks/detection/getBotScore.js +29 -5
  210. package/dist/tasks/detection/getBotScore.js.map +1 -0
  211. package/dist/tasks/frictionless/frictionlessTasks.d.ts +67 -0
  212. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -0
  213. package/dist/tasks/frictionless/frictionlessTasks.js +227 -36
  214. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -0
  215. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +6 -0
  216. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +1 -0
  217. package/dist/tasks/frictionless/frictionlessTasksUtils.js +18 -1
  218. package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +1 -0
  219. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +30 -0
  220. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -0
  221. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +80 -32
  222. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -0
  223. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +7 -0
  224. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -0
  225. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -0
  226. package/dist/tasks/index.d.ts +2 -0
  227. package/dist/tasks/index.d.ts.map +1 -0
  228. package/dist/tasks/index.js.map +1 -0
  229. package/dist/tasks/powCaptcha/powTasks.d.ts +17 -0
  230. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -0
  231. package/dist/tasks/powCaptcha/powTasks.js +50 -22
  232. package/dist/tasks/powCaptcha/powTasks.js.map +1 -0
  233. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +3 -0
  234. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -0
  235. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -0
  236. package/dist/tasks/tasks.d.ts +25 -0
  237. package/dist/tasks/tasks.d.ts.map +1 -0
  238. package/dist/tasks/tasks.js.map +1 -0
  239. package/dist/tests/index.d.ts +2 -0
  240. package/dist/tests/index.d.ts.map +1 -0
  241. package/dist/tests/index.js +2 -0
  242. package/dist/tests/index.js.map +1 -0
  243. package/dist/tests/integration/accessRules.integration.test.d.ts +2 -0
  244. package/dist/tests/integration/accessRules.integration.test.d.ts.map +1 -0
  245. package/dist/tests/integration/accessRules.integration.test.js +588 -0
  246. package/dist/tests/integration/accessRules.integration.test.js.map +1 -0
  247. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts +2 -0
  248. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts.map +1 -0
  249. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +60 -0
  250. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -0
  251. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts +2 -0
  252. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts.map +1 -0
  253. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +368 -0
  254. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -0
  255. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +2 -0
  256. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +1 -0
  257. package/dist/tests/integration/imgCaptcha.integration.test.js +272 -0
  258. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -0
  259. package/dist/tests/integration/ipValidation.integration.test.d.ts +2 -0
  260. package/dist/tests/integration/ipValidation.integration.test.d.ts.map +1 -0
  261. package/dist/tests/integration/ipValidation.integration.test.js +75 -0
  262. package/dist/tests/integration/ipValidation.integration.test.js.map +1 -0
  263. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +32 -0
  264. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +1 -0
  265. package/dist/tests/integration/mocks/solvedTestCaptchas.js +1046 -0
  266. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -0
  267. package/dist/tests/integration/powCaptcha.integration.test.d.ts +2 -0
  268. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +1 -0
  269. package/dist/tests/integration/powCaptcha.integration.test.js +308 -0
  270. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -0
  271. package/dist/tests/integration/registerSitekey.d.ts +3 -0
  272. package/dist/tests/integration/registerSitekey.d.ts.map +1 -0
  273. package/dist/tests/integration/registerSitekey.js +24 -0
  274. package/dist/tests/integration/registerSitekey.js.map +1 -0
  275. package/dist/tests/integration/userAccessPolicy.d.ts +2 -0
  276. package/dist/tests/integration/userAccessPolicy.d.ts.map +1 -0
  277. package/dist/tests/integration/userAccessPolicy.js +2 -0
  278. package/dist/tests/integration/userAccessPolicy.js.map +1 -0
  279. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts +2 -0
  280. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts.map +1 -0
  281. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +60 -0
  282. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -0
  283. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +2 -0
  284. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +1 -0
  285. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +43 -0
  286. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +1 -0
  287. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts +2 -0
  288. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts.map +1 -0
  289. package/dist/tests/unit/api/ja4Middleware.unit.test.js +57 -0
  290. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +1 -0
  291. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts +2 -0
  292. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts.map +1 -0
  293. package/dist/tests/unit/compositeIpAddress.unit.test.js +86 -0
  294. package/dist/tests/unit/compositeIpAddress.unit.test.js.map +1 -0
  295. package/dist/tests/unit/pairs.unit.test.d.ts +2 -0
  296. package/dist/tests/unit/pairs.unit.test.d.ts.map +1 -0
  297. package/dist/tests/unit/pairs.unit.test.js +83 -0
  298. package/dist/tests/unit/pairs.unit.test.js.map +1 -0
  299. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +2 -0
  300. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +1 -0
  301. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +75 -0
  302. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -0
  303. package/dist/tests/unit/services/ipComparison.unit.test.d.ts +2 -0
  304. package/dist/tests/unit/services/ipComparison.unit.test.d.ts.map +1 -0
  305. package/dist/tests/unit/services/ipComparison.unit.test.js +258 -0
  306. package/dist/tests/unit/services/ipComparison.unit.test.js.map +1 -0
  307. package/dist/tests/unit/services/ipInfo.unit.test.d.ts +2 -0
  308. package/dist/tests/unit/services/ipInfo.unit.test.d.ts.map +1 -0
  309. package/dist/tests/unit/services/ipInfo.unit.test.js +210 -0
  310. package/dist/tests/unit/services/ipInfo.unit.test.js.map +1 -0
  311. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts +2 -0
  312. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts.map +1 -0
  313. package/dist/tests/unit/tasks/captchaManager.unit.test.js +311 -0
  314. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -0
  315. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +2 -0
  316. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +1 -0
  317. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +289 -0
  318. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -0
  319. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +2 -0
  320. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +1 -0
  321. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +92 -0
  322. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -0
  323. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +2 -0
  324. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +1 -0
  325. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +75 -0
  326. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -0
  327. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts +2 -0
  328. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts.map +1 -0
  329. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +143 -0
  330. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -0
  331. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts +2 -0
  332. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts.map +1 -0
  333. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +145 -0
  334. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -0
  335. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts +2 -0
  336. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts.map +1 -0
  337. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +64 -0
  338. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +1 -0
  339. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +2 -0
  340. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +1 -0
  341. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +388 -0
  342. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -0
  343. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +2 -0
  344. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +1 -0
  345. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +46 -0
  346. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -0
  347. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +2 -0
  348. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +1 -0
  349. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +216 -0
  350. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -0
  351. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +2 -0
  352. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +1 -0
  353. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +69 -0
  354. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -0
  355. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts +2 -0
  356. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts.map +1 -0
  357. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +505 -0
  358. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +1 -0
  359. package/dist/tests/unit/util.ipDistance.unit.test.d.ts +2 -0
  360. package/dist/tests/unit/util.ipDistance.unit.test.d.ts.map +1 -0
  361. package/dist/tests/unit/util.ipDistance.unit.test.js +93 -0
  362. package/dist/tests/unit/util.ipDistance.unit.test.js.map +1 -0
  363. package/dist/tests/unit/util.unit.test.d.ts +2 -0
  364. package/dist/tests/unit/util.unit.test.d.ts.map +1 -0
  365. package/dist/tests/unit/util.unit.test.js +170 -0
  366. package/dist/tests/unit/util.unit.test.js.map +1 -0
  367. package/dist/util.d.ts +24 -0
  368. package/dist/util.d.ts.map +1 -0
  369. package/dist/util.js +263 -18
  370. package/dist/util.js.map +1 -0
  371. package/dist/utils/hashUserAgent.d.ts +2 -0
  372. package/dist/utils/hashUserAgent.d.ts.map +1 -0
  373. package/dist/utils/hashUserAgent.js +10 -0
  374. package/dist/utils/hashUserAgent.js.map +1 -0
  375. package/package.json +31 -29
  376. package/vite.test.config.ts +3 -2
  377. package/vite.threads.test.config.ts +33 -0
@@ -1,5 +1,5 @@
1
1
  import { ApiPrefix } from "@prosopo/types";
2
- import { userScopeInputSchema, ScopeMatch, AccessPolicyType } from "@prosopo/user-access-policy";
2
+ import { userScopeInput, FilterScopeMatch, AccessPolicyType } from "@prosopo/user-access-policy";
3
3
  import { uniqueSubsets } from "@prosopo/util";
4
4
  const getRequestUserScope = (requestHeaders, ja4, ip, user) => {
5
5
  const userAgent = requestHeaders["user-agent"] ? requestHeaders["user-agent"].toString() : void 0;
@@ -8,13 +8,12 @@ const getRequestUserScope = (requestHeaders, ja4, ip, user) => {
8
8
  ...ja4 && { ja4Hash: ja4 },
9
9
  ...userAgent && { userAgent },
10
10
  ...ip && { ip }
11
+ // TODO more things with headers
11
12
  };
12
13
  };
13
- const getPrioritisedAccessRule = async (userAccessRulesStorage, userScope, clientId) => {
14
- const userScopeKeys = Object.keys(userScope).filter(
15
- (key) => userScope[key] !== void 0
16
- );
17
- const prioritisedUserScopes = uniqueSubsets(userScopeKeys).map(
14
+ const getPrioritisedUserScopes = (userScope) => {
15
+ const userScopeKeys = Object.keys(userScope);
16
+ return uniqueSubsets(userScopeKeys).map(
18
17
  (subset) => subset.reduce(
19
18
  (acc, key) => {
20
19
  acc[key] = userScope[key];
@@ -22,26 +21,29 @@ const getPrioritisedAccessRule = async (userAccessRulesStorage, userScope, clien
22
21
  },
23
22
  {}
24
23
  )
25
- ).filter((us) => Object.keys(us).length > 0).filter((us) => Object.values(us).some((value) => value !== void 0));
24
+ );
25
+ };
26
+ const getPrioritisedAccessRule = async (userAccessRulesStorage, userScope, clientId) => {
27
+ const prioritisedUserScopes = getPrioritisedUserScopes(userScope);
26
28
  const policyPromises = [];
27
29
  const clientLoop = clientId ? [clientId, void 0] : [void 0];
28
30
  for (const clientOrUndefined of clientLoop) {
29
31
  for (const scope of prioritisedUserScopes) {
30
- const parsedUserScope = userScopeInputSchema.parse(scope);
31
- if (Object.values(parsedUserScope).every((value) => value === void 0)) {
32
+ if (Object.values(scope).every((value) => value === void 0)) {
32
33
  continue;
33
34
  }
35
+ const parsedUserScope = userScopeInput.parse(scope);
34
36
  const filter = {
35
37
  ...clientOrUndefined && {
36
38
  policyScope: {
37
39
  clientId: clientOrUndefined
38
40
  }
39
41
  },
40
- policyScopeMatch: ScopeMatch.Exact,
42
+ policyScopeMatch: FilterScopeMatch.Exact,
41
43
  userScope: parsedUserScope,
42
- userScopeMatch: ScopeMatch.Exact
44
+ userScopeMatch: FilterScopeMatch.Exact
43
45
  };
44
- policyPromises.push(userAccessRulesStorage.findRules(filter));
46
+ policyPromises.push(userAccessRulesStorage.findRules(filter, true, true));
45
47
  }
46
48
  }
47
49
  return (await Promise.all(policyPromises)).flat();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blacklistRequestInspector.js","sourceRoot":"","sources":["../../src/api/blacklistRequestInspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ export declare const blockMiddleware: (providerEnvironment: ProviderEnvironment) => (request: import("express").Request, res: import("express").Response, next: import("express").NextFunction) => Promise<void>;
3
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/api/block.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,eAAO,MAAM,eAAe,wBAAyB,mBAAmB,iIAgBvE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/api/block.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,mBAAwC,EAAE,EAAE;IAC3E,MAAM,sBAAsB,GAAG,mBAAmB;SAChD,KAAK,EAAE;SACP,yBAAyB,EAAE,CAAC;IAE9B,MAAM,0BAA0B,GAC/B,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEvD,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,CAC9D,sBAAsB,EACtB,0BAA0B,CAC1B,CAAC;IAEF,OAAO,yBAAyB,CAAC,2BAA2B,CAAC,IAAI,CAChE,yBAAyB,CACzB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ import { type Router } from "express";
3
+ export declare function prosopoRouter(env: ProviderEnvironment): Router;
4
+ //# sourceMappingURL=captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAkB/C,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAs1B9D"}
@@ -4,8 +4,12 @@ import { parseCaptchaAssets } from "@prosopo/datasets";
4
4
  import { ClientApiPaths, CaptchaRequestBody, CaptchaType, ApiParams, CaptchaSolutionBody, GetPowCaptchaChallengeRequestBody, SubmitPowCaptchaSolutionBody, GetFrictionlessCaptchaChallengeRequestBody } from "@prosopo/types";
5
5
  import { getIPAddress, flatten } from "@prosopo/util";
6
6
  import express from "express";
7
+ import { getCompositeIpAddress } from "../compositeIpAddress.js";
7
8
  import { FrictionlessManager } from "../tasks/frictionless/frictionlessTasks.js";
9
+ import { timestampDecayFunction } from "../tasks/frictionless/frictionlessTasksUtils.js";
8
10
  import { Tasks } from "../tasks/tasks.js";
11
+ import { hashUserAgent } from "../utils/hashUserAgent.js";
12
+ import { getMaintenanceMode } from "./admin/apiToggleMaintenanceModeEndpoint.js";
9
13
  import { getRequestUserScope } from "./blacklistRequestInspector.js";
10
14
  import { validateSiteKey, validateAddr } from "./validateAddress.js";
11
15
  const DEFAULT_FRICTIONLESS_THRESHOLD = 0.5;
@@ -63,11 +67,18 @@ function prosopoRouter(env) {
63
67
  dapp,
64
68
  userScope
65
69
  ))[0];
66
- const { valid, reason, frictionlessTokenId } = await tasks.imgCaptchaManager.isValidRequest(
70
+ const {
71
+ valid,
72
+ reason,
73
+ sessionId: validSessionId,
74
+ solvedImagesCount
75
+ } = await tasks.imgCaptchaManager.isValidRequest(
67
76
  clientRecord,
68
77
  CaptchaType.image,
78
+ env,
69
79
  sessionId,
70
- userAccessPolicy
80
+ userAccessPolicy,
81
+ req.ip
71
82
  );
72
83
  if (!valid) {
73
84
  return next(
@@ -84,7 +95,7 @@ function prosopoRouter(env) {
84
95
  }
85
96
  const captchaConfig = {
86
97
  solved: {
87
- count: userAccessPolicy?.solvedImagesCount || env.config.captchas.solved.count
98
+ count: solvedImagesCount || userAccessPolicy?.solvedImagesCount || env.config.captchas.solved.count
88
99
  },
89
100
  unsolved: {
90
101
  count: userAccessPolicy?.unsolvedImagesCount || env.config.captchas.unsolved.count
@@ -96,7 +107,7 @@ function prosopoRouter(env) {
96
107
  ipAddress,
97
108
  captchaConfig,
98
109
  clientRecord.settings.imageThreshold ?? 0.8,
99
- frictionlessTokenId
110
+ validSessionId
100
111
  );
101
112
  const captchaResponse = {
102
113
  [ApiParams.status]: "ok",
@@ -115,12 +126,23 @@ function prosopoRouter(env) {
115
126
  }
116
127
  }
117
128
  };
129
+ req.logger.info(() => ({
130
+ msg: "Image captcha challenge issued",
131
+ data: {
132
+ captchaType: CaptchaType.image,
133
+ requestHash: taskData.requestHash,
134
+ solvedImagesCount: captchaConfig.solved.count,
135
+ user,
136
+ dapp,
137
+ sessionId
138
+ }
139
+ }));
118
140
  return res.json(captchaResponse);
119
141
  } catch (err) {
120
142
  req.logger.error(() => ({
121
143
  err,
122
144
  data: req.params,
123
- msg: "Error in PoW captcha solution submission"
145
+ msg: "Error in image captcha challenge request"
124
146
  }));
125
147
  return next(
126
148
  new ProsopoApiError("API.BAD_REQUEST", {
@@ -141,6 +163,17 @@ function prosopoRouter(env) {
141
163
  ClientApiPaths.SubmitImageCaptchaSolution,
142
164
  async (req, res, next) => {
143
165
  const tasks = new Tasks(env, req.logger);
166
+ if (getMaintenanceMode()) {
167
+ req.logger.info(() => ({
168
+ msg: "Maintenance mode active - returning verified for image captcha"
169
+ }));
170
+ const result = {
171
+ status: "ok",
172
+ captchas: [],
173
+ verified: true
174
+ };
175
+ return res.json(result);
176
+ }
144
177
  let parsed;
145
178
  try {
146
179
  parsed = CaptchaSolutionBody.parse(req.body);
@@ -175,7 +208,7 @@ function prosopoRouter(env) {
175
208
  parsed[ApiParams.signature].user.timestamp,
176
209
  Number.parseInt(parsed[ApiParams.timestamp]),
177
210
  parsed[ApiParams.signature].provider.requestHash,
178
- getIPAddress(req.ip || "").bigInt(),
211
+ getIPAddress(req.ip || ""),
179
212
  flatten(req.headers),
180
213
  req.ja4
181
214
  );
@@ -190,7 +223,7 @@ function prosopoRouter(env) {
190
223
  req.logger.error(() => ({
191
224
  err,
192
225
  body: req.body,
193
- msg: "Error in PoW captcha solution submission"
226
+ msg: "Error in image captcha solution submission"
194
227
  }));
195
228
  return next(
196
229
  new ProsopoApiError("API.BAD_REQUEST", {
@@ -246,11 +279,18 @@ function prosopoRouter(env) {
246
279
  dapp,
247
280
  userScope
248
281
  ))[0];
249
- const { valid, reason, frictionlessTokenId } = await tasks.powCaptchaManager.isValidRequest(
282
+ const {
283
+ valid,
284
+ reason,
285
+ sessionId: validSessionId,
286
+ powDifficulty
287
+ } = await tasks.powCaptchaManager.isValidRequest(
250
288
  clientSettings,
251
289
  CaptchaType.pow,
290
+ env,
252
291
  sessionId,
253
- userAccessPolicy
292
+ userAccessPolicy,
293
+ req.ip
254
294
  );
255
295
  if (!valid) {
256
296
  return next(
@@ -280,11 +320,12 @@ function prosopoRouter(env) {
280
320
  })
281
321
  );
282
322
  }
323
+ const difficulty = powDifficulty || userAccessPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty;
283
324
  const challenge = await tasks.powCaptchaManager.getPowCaptchaChallenge(
284
325
  user,
285
326
  dapp,
286
327
  origin,
287
- userAccessPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty
328
+ difficulty
288
329
  );
289
330
  await tasks.db.storePowCaptchaRecord(
290
331
  challenge.challenge,
@@ -295,10 +336,10 @@ function prosopoRouter(env) {
295
336
  },
296
337
  challenge.difficulty,
297
338
  challenge.providerSignature,
298
- getIPAddress(req.ip || "").bigInt(),
339
+ getCompositeIpAddress(req.ip || ""),
299
340
  flatten(req.headers),
300
341
  req.ja4,
301
- frictionlessTokenId
342
+ validSessionId
302
343
  );
303
344
  const getPowCaptchaResponse = {
304
345
  [ApiParams.status]: "ok",
@@ -311,12 +352,23 @@ function prosopoRouter(env) {
311
352
  }
312
353
  }
313
354
  };
355
+ req.logger.info(() => ({
356
+ msg: "PoW captcha challenge issued",
357
+ data: {
358
+ captchaType: CaptchaType.pow,
359
+ challenge: challenge.challenge,
360
+ difficulty: challenge.difficulty,
361
+ user,
362
+ dapp,
363
+ session: sessionId
364
+ }
365
+ }));
314
366
  return res.json(getPowCaptchaResponse);
315
367
  } catch (err) {
316
368
  req.logger.error(() => ({
317
369
  err,
318
370
  body: req.body,
319
- msg: "Error in PoW captcha solution submission"
371
+ msg: "Error in PoW captcha challenge request"
320
372
  }));
321
373
  return next(
322
374
  new ProsopoApiError("API.BAD_REQUEST", {
@@ -337,6 +389,16 @@ function prosopoRouter(env) {
337
389
  async (req, res, next) => {
338
390
  let parsed;
339
391
  const tasks = new Tasks(env, req.logger);
392
+ if (getMaintenanceMode()) {
393
+ req.logger.info(() => ({
394
+ msg: "Maintenance mode active - returning verified"
395
+ }));
396
+ const response = {
397
+ status: "ok",
398
+ verified: true
399
+ };
400
+ return res.json(response);
401
+ }
340
402
  try {
341
403
  parsed = SubmitPowCaptchaSolutionBody.parse(req.body);
342
404
  } catch (err) {
@@ -348,15 +410,7 @@ function prosopoRouter(env) {
348
410
  })
349
411
  );
350
412
  }
351
- const {
352
- challenge,
353
- difficulty,
354
- signature,
355
- nonce,
356
- verifiedTimeout,
357
- dapp,
358
- user
359
- } = parsed;
413
+ const { challenge, signature, nonce, verifiedTimeout, dapp, user } = parsed;
360
414
  validateSiteKey(dapp);
361
415
  validateAddr(user);
362
416
  try {
@@ -372,7 +426,6 @@ function prosopoRouter(env) {
372
426
  }
373
427
  const verified = await tasks.powCaptchaManager.verifyPowCaptchaSolution(
374
428
  challenge,
375
- difficulty,
376
429
  signature.provider.challenge,
377
430
  nonce,
378
431
  verifiedTimeout,
@@ -407,24 +460,72 @@ function prosopoRouter(env) {
407
460
  async (req, res, next) => {
408
461
  try {
409
462
  const tasks = new Tasks(env, req.logger);
410
- const { token, dapp, user } = GetFrictionlessCaptchaChallengeRequestBody.parse(req.body);
411
- const existingToken = await tasks.db.getFrictionlessTokenRecordByToken(token);
463
+ const { token, headHash, dapp, user } = GetFrictionlessCaptchaChallengeRequestBody.parse(req.body);
464
+ if (getMaintenanceMode()) {
465
+ req.logger.info(() => ({
466
+ msg: "Maintenance mode active - storing dummy token and sending PoW captcha",
467
+ data: { dapp, user }
468
+ }));
469
+ return res.json(
470
+ await tasks.frictionlessManager.sendPowCaptcha({
471
+ token,
472
+ score: 0,
473
+ threshold: 0.5,
474
+ scoreComponents: {
475
+ baseScore: 0
476
+ },
477
+ providerSelectEntropy: 0,
478
+ ipAddress: getCompositeIpAddress(req.ip || ""),
479
+ powDifficulty: void 0,
480
+ webView: false,
481
+ iFrame: false,
482
+ decryptedHeadHash: ""
483
+ })
484
+ );
485
+ }
486
+ const existingToken = await tasks.db.getSessionRecordByToken(token);
412
487
  if (existingToken) {
413
488
  req.logger.info(() => ({
414
489
  token: existingToken,
415
490
  msg: "Token has already been used"
416
491
  }));
417
- return res.json(
418
- await tasks.frictionlessManager.sendImageCaptcha(
419
- existingToken._id
420
- )
492
+ return next(
493
+ new ProsopoApiError("API.BAD_REQUEST", {
494
+ context: {
495
+ code: 400,
496
+ siteKey: dapp,
497
+ user
498
+ },
499
+ i18n: req.i18n,
500
+ logger: req.logger
501
+ })
421
502
  );
422
503
  }
423
504
  const lScore = tasks.frictionlessManager.checkLangRules(
424
505
  req.headers["accept-language"] || ""
425
506
  );
426
- const { baseBotScore, timestamp } = await tasks.frictionlessManager.decryptPayload(token);
427
- const botScore = baseBotScore + lScore;
507
+ const {
508
+ baseBotScore,
509
+ timestamp,
510
+ providerSelectEntropy,
511
+ userId,
512
+ userAgent,
513
+ webView,
514
+ iFrame,
515
+ decryptedHeadHash
516
+ } = await tasks.frictionlessManager.decryptPayload(token, headHash);
517
+ req.logger.debug(() => ({
518
+ msg: "Decrypted payload",
519
+ data: {
520
+ baseBotScore,
521
+ timestamp,
522
+ providerSelectEntropy,
523
+ userId,
524
+ userAgent,
525
+ webView
526
+ }
527
+ }));
528
+ let botScore = baseBotScore + lScore;
428
529
  const clientRecord = await tasks.db.getClientRecord(dapp);
429
530
  if (!clientRecord) {
430
531
  return next(
@@ -437,7 +538,8 @@ function prosopoRouter(env) {
437
538
  }
438
539
  const { valid, reason } = await tasks.frictionlessManager.isValidRequest(
439
540
  clientRecord,
440
- CaptchaType.frictionless
541
+ CaptchaType.frictionless,
542
+ env
441
543
  );
442
544
  if (!valid) {
443
545
  return next(
@@ -453,14 +555,21 @@ function prosopoRouter(env) {
453
555
  );
454
556
  }
455
557
  const botThreshold = clientRecord.settings?.frictionlessThreshold || DEFAULT_FRICTIONLESS_THRESHOLD;
456
- const tokenId = await tasks.db.storeFrictionlessTokenRecord({
558
+ let scoreComponents = {
559
+ baseScore: baseBotScore,
560
+ ...lScore && { lScore }
561
+ };
562
+ const ipAddress = getCompositeIpAddress(req.ip || "");
563
+ tasks.frictionlessManager.setSessionParams({
457
564
  token,
458
565
  score: botScore,
459
566
  threshold: botThreshold,
460
- scoreComponents: {
461
- baseScore: baseBotScore,
462
- ...lScore && { lScore }
463
- }
567
+ scoreComponents,
568
+ providerSelectEntropy,
569
+ ipAddress,
570
+ webView,
571
+ iFrame,
572
+ decryptedHeadHash
464
573
  });
465
574
  const userScope = getRequestUserScope(
466
575
  flatten(req.headers),
@@ -473,50 +582,119 @@ function prosopoRouter(env) {
473
582
  dapp,
474
583
  userScope
475
584
  ))[0];
585
+ const headersUserAgent = req.headers["user-agent"];
586
+ const hashedHeadersUserAgent = headersUserAgent ? hashUserAgent(headersUserAgent) : "";
587
+ const headersProsopoUser = req.headers["prosopo-user"];
588
+ if (hashedHeadersUserAgent !== userAgent || headersProsopoUser !== userId) {
589
+ req.logger.info(() => ({
590
+ msg: "User agent or user id does not match",
591
+ data: {
592
+ headersUserAgent,
593
+ hashedHeadersUserAgent,
594
+ userAgent,
595
+ // This is the hashed user agent from the token
596
+ headersProsopoUser,
597
+ userId
598
+ }
599
+ }));
600
+ return res.json(
601
+ await tasks.frictionlessManager.sendImageCaptcha({
602
+ solvedImagesCount: timestampDecayFunction(timestamp)
603
+ })
604
+ );
605
+ }
476
606
  if (userAccessPolicy) {
477
- await tasks.frictionlessManager.scoreIncreaseAccessPolicy(
607
+ const scoreUpdate = tasks.frictionlessManager.scoreIncreaseAccessPolicy(
478
608
  userAccessPolicy,
479
609
  baseBotScore,
480
610
  botScore,
481
- tokenId
611
+ scoreComponents
482
612
  );
613
+ botScore = scoreUpdate.score;
614
+ scoreComponents = scoreUpdate.scoreComponents;
615
+ tasks.frictionlessManager.updateScore(botScore, scoreComponents);
483
616
  if (userAccessPolicy.captchaType === CaptchaType.image) {
484
617
  return res.json(
485
- await tasks.frictionlessManager.sendImageCaptcha(tokenId)
618
+ await tasks.frictionlessManager.sendImageCaptcha({
619
+ solvedImagesCount: userAccessPolicy.solvedImagesCount
620
+ })
486
621
  );
487
622
  }
488
623
  if (userAccessPolicy.captchaType === CaptchaType.pow) {
489
624
  return res.json(
490
- await tasks.frictionlessManager.sendPowCaptcha(tokenId)
625
+ await tasks.frictionlessManager.sendPowCaptcha({
626
+ powDifficulty: void 0
627
+ })
491
628
  );
492
629
  }
493
630
  }
631
+ if (clientRecord.settings.disallowWebView && webView) {
632
+ tasks.logger.info(() => ({
633
+ msg: "WebView detected"
634
+ }));
635
+ const scoreUpdate = tasks.frictionlessManager.scoreIncreaseWebView(
636
+ baseBotScore,
637
+ botScore,
638
+ scoreComponents
639
+ );
640
+ botScore = scoreUpdate.score;
641
+ scoreComponents = scoreUpdate.scoreComponents;
642
+ tasks.frictionlessManager.updateScore(botScore, scoreComponents);
643
+ return res.json(
644
+ await tasks.frictionlessManager.sendImageCaptcha({
645
+ solvedImagesCount: env.config.captchas.solved.count * 2
646
+ })
647
+ );
648
+ }
494
649
  if (FrictionlessManager.timestampTooOld(timestamp)) {
495
- await tasks.frictionlessManager.scoreIncreaseTimestamp(
650
+ const scoreUpdate = tasks.frictionlessManager.scoreIncreaseTimestamp(
496
651
  timestamp,
497
652
  baseBotScore,
498
653
  botScore,
499
- tokenId
654
+ scoreComponents
500
655
  );
656
+ botScore = scoreUpdate.score;
657
+ scoreComponents = scoreUpdate.scoreComponents;
658
+ tasks.frictionlessManager.updateScore(botScore, scoreComponents);
501
659
  return res.json(
502
- await tasks.frictionlessManager.sendImageCaptcha(tokenId)
660
+ await tasks.frictionlessManager.sendImageCaptcha({
661
+ solvedImagesCount: timestampDecayFunction(timestamp)
662
+ })
663
+ );
664
+ }
665
+ const hostVerified = await tasks.frictionlessManager.hostVerified(
666
+ providerSelectEntropy
667
+ );
668
+ if (!hostVerified.verified) {
669
+ const scoreUpdate = tasks.frictionlessManager.scoreIncreaseUnverifiedHost(
670
+ hostVerified.domain,
671
+ baseBotScore,
672
+ botScore,
673
+ scoreComponents
503
674
  );
675
+ botScore = scoreUpdate.score;
676
+ scoreComponents = scoreUpdate.scoreComponents;
677
+ tasks.frictionlessManager.updateScore(botScore, scoreComponents);
504
678
  }
505
679
  if (Number(botScore) > botThreshold) {
506
680
  req.logger.info(() => ({
507
- message: "Bot score is greater than threshold",
681
+ msg: "Bot score is greater than threshold",
508
682
  data: {
509
683
  botScore,
510
684
  botThreshold,
511
- tokenId
685
+ token
512
686
  }
513
687
  }));
514
688
  return res.json(
515
- await tasks.frictionlessManager.sendImageCaptcha(tokenId)
689
+ await tasks.frictionlessManager.sendImageCaptcha({
690
+ solvedImagesCount: env.config.captchas.solved.count
691
+ })
516
692
  );
517
693
  }
518
694
  return res.json(
519
- await tasks.frictionlessManager.sendPowCaptcha(tokenId)
695
+ await tasks.frictionlessManager.sendPowCaptcha({
696
+ powDifficulty: void 0
697
+ })
520
698
  );
521
699
  } catch (err) {
522
700
  req.logger.error(() => ({
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ import type { NextFunction, Request, Response } from "express";
3
+ export declare const domainMiddleware: (env: ProviderEnvironment) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
4
+ //# sourceMappingURL=domainMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainMiddleware.d.ts","sourceRoot":"","sources":["../../src/api/domainMiddleware.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK/D,eAAO,MAAM,gBAAgB,QAAS,mBAAmB,WAGrC,OAAO,OAAO,QAAQ,QAAQ,YAAY,kBAsD7D,CAAC"}
@@ -8,26 +8,26 @@ const domainMiddleware = (env) => {
8
8
  const tasks = new Tasks(env);
9
9
  return async (req, res, next) => {
10
10
  try {
11
- const dapp = req.headers["prosopo-site-key"];
12
- if (!dapp)
11
+ const siteKey = req.headers["prosopo-site-key"];
12
+ if (!siteKey)
13
13
  throw siteKeyNotRegisteredError(
14
14
  req.i18n,
15
15
  "No sitekey provided",
16
16
  req.logger
17
17
  );
18
18
  try {
19
- validateAddress(dapp, false, 42);
19
+ validateAddress(siteKey, false, 42);
20
20
  } catch (err) {
21
- throw invalidSiteKeyError(req.i18n, dapp, req.logger);
21
+ throw invalidSiteKeyError(req.i18n, siteKey, req.logger);
22
22
  }
23
- const clientSettings = await tasks.db.getClientRecord(dapp);
23
+ const clientSettings = await tasks.db.getClientRecord(siteKey);
24
24
  if (!clientSettings)
25
- throw siteKeyNotRegisteredError(req.i18n, dapp, req.logger);
25
+ throw siteKeyNotRegisteredError(req.i18n, siteKey, req.logger);
26
26
  const allowedDomains = clientSettings.settings?.domains;
27
27
  if (!allowedDomains)
28
28
  throw siteKeyInvalidDomainError(
29
29
  req.i18n,
30
- dapp,
30
+ siteKey,
31
31
  req.hostname,
32
32
  req.logger
33
33
  );
@@ -35,7 +35,7 @@ const domainMiddleware = (env) => {
35
35
  if (!origin)
36
36
  throw unauthorizedOriginError(req.i18n, void 0, req.logger);
37
37
  for (const domain of allowedDomains) {
38
- if (tasks.clientTaskManager.isSubdomainOrExactMatch(origin, domain)) {
38
+ if (tasks.clientTaskManager.domainPatternMatcher(origin, domain)) {
39
39
  next();
40
40
  return;
41
41
  }