@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.
- package/CHANGELOG.md +718 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +4278 -0
- package/coverage/coverage-final.json +42 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +311 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/api/admin/apiAdminRoutesProvider.ts.html +214 -0
- package/coverage/src/api/admin/apiRegisterSiteKeyEndpoint.ts.html +259 -0
- package/coverage/src/api/admin/apiRemoveDetectorKeyEndpoint.ts.html +283 -0
- package/coverage/src/api/admin/apiToggleMaintenanceModeEndpoint.ts.html +334 -0
- package/coverage/src/api/admin/apiUpdateDetectorKeyEndpoint.ts.html +298 -0
- package/coverage/src/api/admin/createApiAdminRoutesProvider.ts.html +163 -0
- package/coverage/src/api/admin/index.html +191 -0
- package/coverage/src/api/blacklistRequestInspector.ts.html +751 -0
- package/coverage/src/api/block.ts.html +187 -0
- package/coverage/src/api/captcha.ts.html +2803 -0
- package/coverage/src/api/domainMiddleware.ts.html +493 -0
- package/coverage/src/api/headerCheckMiddleware.ts.html +256 -0
- package/coverage/src/api/ignoreMiddleware.ts.html +181 -0
- package/coverage/src/api/index.html +266 -0
- package/coverage/src/api/ja4Middleware.ts.html +400 -0
- package/coverage/src/api/public.ts.html +343 -0
- package/coverage/src/api/robotsMiddleware.ts.html +157 -0
- package/coverage/src/api/validateAddress.ts.html +214 -0
- package/coverage/src/api/verify.ts.html +871 -0
- package/coverage/src/compositeIpAddress.ts.html +340 -0
- package/coverage/src/index.html +161 -0
- package/coverage/src/index.ts.html +175 -0
- package/coverage/src/pairs.ts.html +238 -0
- package/coverage/src/rules/index.html +116 -0
- package/coverage/src/rules/lang.ts.html +187 -0
- package/coverage/src/schedulers/captchaScheduler.ts.html +250 -0
- package/coverage/src/schedulers/getClientList.ts.html +271 -0
- package/coverage/src/schedulers/index.html +131 -0
- package/coverage/src/services/index.html +131 -0
- package/coverage/src/services/ipComparison.ts.html +685 -0
- package/coverage/src/services/ipInfo.ts.html +490 -0
- package/coverage/src/tasks/captchaManager.ts.html +865 -0
- package/coverage/src/tasks/client/clientTasks.ts.html +1381 -0
- package/coverage/src/tasks/client/index.html +116 -0
- package/coverage/src/tasks/dataset/datasetTasks.ts.html +268 -0
- package/coverage/src/tasks/dataset/datasetTasksUtils.ts.html +271 -0
- package/coverage/src/tasks/dataset/index.html +131 -0
- package/coverage/src/tasks/detection/decodePayload.js.html +127 -0
- package/coverage/src/tasks/detection/getBotScore.ts.html +244 -0
- package/coverage/src/tasks/detection/index.html +131 -0
- package/coverage/src/tasks/frictionless/frictionlessTasks.ts.html +1216 -0
- package/coverage/src/tasks/frictionless/frictionlessTasksUtils.ts.html +247 -0
- package/coverage/src/tasks/frictionless/index.html +131 -0
- package/coverage/src/tasks/imgCaptcha/imgCaptchaTasks.ts.html +1972 -0
- package/coverage/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts.html +232 -0
- package/coverage/src/tasks/imgCaptcha/index.html +131 -0
- package/coverage/src/tasks/index.html +146 -0
- package/coverage/src/tasks/index.ts.html +127 -0
- package/coverage/src/tasks/powCaptcha/index.html +131 -0
- package/coverage/src/tasks/powCaptcha/powTasks.ts.html +961 -0
- package/coverage/src/tasks/powCaptcha/powTasksUtils.ts.html +244 -0
- package/coverage/src/tasks/tasks.ts.html +388 -0
- package/coverage/src/util.ts.html +1627 -0
- package/coverage/src/utils/hashUserAgent.ts.html +184 -0
- package/coverage/src/utils/index.html +116 -0
- package/dist/api/admin/apiAdminRoutesProvider.d.ts +9 -0
- package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -0
- package/dist/api/admin/apiAdminRoutesProvider.js +13 -18
- package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -0
- package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts +14 -0
- package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +1 -0
- package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +1 -0
- package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +23 -0
- package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -0
- package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +7 -4
- package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +1 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +13 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +1 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +40 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +1 -0
- package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +14 -0
- package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +1 -0
- package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +1 -0
- package/dist/api/admin/createApiAdminRoutesProvider.d.ts +4 -0
- package/dist/api/admin/createApiAdminRoutesProvider.d.ts.map +1 -0
- package/dist/api/admin/createApiAdminRoutesProvider.js.map +1 -0
- package/dist/api/blacklistRequestInspector.d.ts +19 -0
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -0
- package/dist/api/blacklistRequestInspector.js +14 -12
- package/dist/api/blacklistRequestInspector.js.map +1 -0
- package/dist/api/block.d.ts +3 -0
- package/dist/api/block.d.ts.map +1 -0
- package/dist/api/block.js.map +1 -0
- package/dist/api/captcha.d.ts +4 -0
- package/dist/api/captcha.d.ts.map +1 -0
- package/dist/api/captcha.js +226 -48
- package/dist/api/captcha.js.map +1 -0
- package/dist/api/domainMiddleware.d.ts +4 -0
- package/dist/api/domainMiddleware.d.ts.map +1 -0
- package/dist/api/domainMiddleware.js +8 -8
- package/dist/api/domainMiddleware.js.map +1 -0
- package/dist/api/headerCheckMiddleware.d.ts +4 -0
- package/dist/api/headerCheckMiddleware.d.ts.map +1 -0
- package/dist/api/headerCheckMiddleware.js +4 -0
- package/dist/api/headerCheckMiddleware.js.map +1 -0
- package/dist/api/ignoreMiddleware.d.ts +3 -0
- package/dist/api/ignoreMiddleware.d.ts.map +1 -0
- package/dist/api/ignoreMiddleware.js +4 -1
- package/dist/api/ignoreMiddleware.js.map +1 -0
- package/dist/api/ja4Middleware.d.ts +10 -0
- package/dist/api/ja4Middleware.d.ts.map +1 -0
- package/dist/api/ja4Middleware.js +5 -23
- package/dist/api/ja4Middleware.js.map +1 -0
- package/dist/api/public.d.ts +4 -0
- package/dist/api/public.d.ts.map +1 -0
- package/dist/api/public.js +26 -3
- package/dist/api/public.js.map +1 -0
- package/dist/api/robotsMiddleware.d.ts +3 -0
- package/dist/api/robotsMiddleware.d.ts.map +1 -0
- package/dist/api/robotsMiddleware.js.map +1 -0
- package/dist/api/validateAddress.d.ts +5 -0
- package/dist/api/validateAddress.d.ts.map +1 -0
- package/dist/api/validateAddress.js.map +1 -0
- package/dist/api/verify.d.ts +4 -0
- package/dist/api/verify.d.ts.map +1 -0
- package/dist/api/verify.js +27 -3
- package/dist/api/verify.js.map +1 -0
- package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +13 -18
- package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +2 -1
- package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +9 -5
- package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +41 -0
- package/dist/cjs/api/blacklistRequestInspector.cjs +13 -11
- package/dist/cjs/api/captcha.cjs +226 -48
- package/dist/cjs/api/domainMiddleware.cjs +8 -8
- package/dist/cjs/api/headerCheckMiddleware.cjs +4 -0
- package/dist/cjs/api/ignoreMiddleware.cjs +3 -0
- package/dist/cjs/api/ja4Middleware.cjs +6 -23
- package/dist/cjs/api/public.cjs +26 -3
- package/dist/cjs/api/verify.cjs +27 -3
- package/dist/cjs/compositeIpAddress.cjs +53 -0
- package/dist/cjs/index.cjs +7 -0
- package/dist/cjs/pairs.cjs +27 -0
- package/dist/cjs/services/ipComparison.cjs +123 -0
- package/dist/cjs/services/ipInfo.cjs +87 -0
- package/dist/cjs/tasks/captchaManager.cjs +41 -10
- package/dist/cjs/tasks/client/clientTasks.cjs +31 -43
- package/dist/cjs/tasks/detection/decodePayload.cjs +616 -281
- package/dist/cjs/tasks/detection/getBotScore.cjs +28 -4
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +227 -36
- package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +17 -0
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +78 -30
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +49 -21
- package/dist/cjs/util.cjs +262 -17
- package/dist/cjs/utils/hashUserAgent.cjs +10 -0
- package/dist/compositeIpAddress.d.ts +5 -0
- package/dist/compositeIpAddress.d.ts.map +1 -0
- package/dist/compositeIpAddress.js +53 -0
- package/dist/compositeIpAddress.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -0
- package/dist/pairs.d.ts +3 -0
- package/dist/pairs.d.ts.map +1 -0
- package/dist/pairs.js +27 -0
- package/dist/pairs.js.map +1 -0
- package/dist/rules/lang.d.ts +3 -0
- package/dist/rules/lang.d.ts.map +1 -0
- package/dist/rules/lang.js.map +1 -0
- package/dist/schedulers/captchaScheduler.d.ts +4 -0
- package/dist/schedulers/captchaScheduler.d.ts.map +1 -0
- package/dist/schedulers/captchaScheduler.js.map +1 -0
- package/dist/schedulers/getClientList.d.ts +4 -0
- package/dist/schedulers/getClientList.d.ts.map +1 -0
- package/dist/schedulers/getClientList.js.map +1 -0
- package/dist/schedulers/setClientEntropy.d.ts +4 -0
- package/dist/schedulers/setClientEntropy.d.ts.map +1 -0
- package/dist/schedulers/setClientEntropy.js +31 -0
- package/dist/schedulers/setClientEntropy.js.map +1 -0
- package/dist/services/ipComparison.d.ts +3 -0
- package/dist/services/ipComparison.d.ts.map +1 -0
- package/dist/services/ipComparison.js +123 -0
- package/dist/services/ipComparison.js.map +1 -0
- package/dist/services/ipInfo.d.ts +3 -0
- package/dist/services/ipInfo.d.ts.map +1 -0
- package/dist/services/ipInfo.js +87 -0
- package/dist/services/ipInfo.js.map +1 -0
- package/dist/tasks/captchaManager.d.ts +34 -0
- package/dist/tasks/captchaManager.d.ts.map +1 -0
- package/dist/tasks/captchaManager.js +39 -9
- package/dist/tasks/captchaManager.js.map +1 -0
- package/dist/tasks/client/clientTasks.d.ts +21 -0
- package/dist/tasks/client/clientTasks.d.ts.map +1 -0
- package/dist/tasks/client/clientTasks.js +31 -43
- package/dist/tasks/client/clientTasks.js.map +1 -0
- package/dist/tasks/dataset/datasetTasks.d.ts +13 -0
- package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -0
- package/dist/tasks/dataset/datasetTasks.js.map +1 -0
- package/dist/tasks/dataset/datasetTasksUtils.d.ts +3 -0
- package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -0
- package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -0
- package/dist/tasks/detection/decodePayload.d.ts +5 -0
- package/dist/tasks/detection/decodePayload.d.ts.map +1 -0
- package/dist/tasks/detection/decodePayload.js +616 -281
- package/dist/tasks/detection/decodePayload.js.map +1 -0
- package/dist/tasks/detection/getBotScore.d.ts +20 -0
- package/dist/tasks/detection/getBotScore.d.ts.map +1 -0
- package/dist/tasks/detection/getBotScore.js +29 -5
- package/dist/tasks/detection/getBotScore.js.map +1 -0
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +67 -0
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -0
- package/dist/tasks/frictionless/frictionlessTasks.js +227 -36
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -0
- package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +6 -0
- package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +1 -0
- package/dist/tasks/frictionless/frictionlessTasksUtils.js +18 -1
- package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +30 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +80 -32
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +7 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -0
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/powCaptcha/powTasks.d.ts +17 -0
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -0
- package/dist/tasks/powCaptcha/powTasks.js +50 -22
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -0
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts +3 -0
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -0
- package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -0
- package/dist/tasks/tasks.d.ts +25 -0
- package/dist/tasks/tasks.d.ts.map +1 -0
- package/dist/tasks/tasks.js.map +1 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.d.ts.map +1 -0
- package/dist/tests/index.js +2 -0
- package/dist/tests/index.js.map +1 -0
- package/dist/tests/integration/accessRules.integration.test.d.ts +2 -0
- package/dist/tests/integration/accessRules.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/accessRules.integration.test.js +588 -0
- package/dist/tests/integration/accessRules.integration.test.js.map +1 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts +2 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +60 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -0
- package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts +2 -0
- package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +368 -0
- package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -0
- package/dist/tests/integration/imgCaptcha.integration.test.d.ts +2 -0
- package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/imgCaptcha.integration.test.js +272 -0
- package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -0
- package/dist/tests/integration/ipValidation.integration.test.d.ts +2 -0
- package/dist/tests/integration/ipValidation.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/ipValidation.integration.test.js +75 -0
- package/dist/tests/integration/ipValidation.integration.test.js.map +1 -0
- package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +32 -0
- package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +1 -0
- package/dist/tests/integration/mocks/solvedTestCaptchas.js +1046 -0
- package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -0
- package/dist/tests/integration/powCaptcha.integration.test.d.ts +2 -0
- package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/powCaptcha.integration.test.js +308 -0
- package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -0
- package/dist/tests/integration/registerSitekey.d.ts +3 -0
- package/dist/tests/integration/registerSitekey.d.ts.map +1 -0
- package/dist/tests/integration/registerSitekey.js +24 -0
- package/dist/tests/integration/registerSitekey.js.map +1 -0
- package/dist/tests/integration/userAccessPolicy.d.ts +2 -0
- package/dist/tests/integration/userAccessPolicy.d.ts.map +1 -0
- package/dist/tests/integration/userAccessPolicy.js +2 -0
- package/dist/tests/integration/userAccessPolicy.js.map +1 -0
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +60 -0
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -0
- package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +43 -0
- package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +1 -0
- package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/ja4Middleware.unit.test.js +57 -0
- package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +1 -0
- package/dist/tests/unit/compositeIpAddress.unit.test.d.ts +2 -0
- package/dist/tests/unit/compositeIpAddress.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/compositeIpAddress.unit.test.js +86 -0
- package/dist/tests/unit/compositeIpAddress.unit.test.js.map +1 -0
- package/dist/tests/unit/pairs.unit.test.d.ts +2 -0
- package/dist/tests/unit/pairs.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/pairs.unit.test.js +83 -0
- package/dist/tests/unit/pairs.unit.test.js.map +1 -0
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +2 -0
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +75 -0
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -0
- package/dist/tests/unit/services/ipComparison.unit.test.d.ts +2 -0
- package/dist/tests/unit/services/ipComparison.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/services/ipComparison.unit.test.js +258 -0
- package/dist/tests/unit/services/ipComparison.unit.test.js.map +1 -0
- package/dist/tests/unit/services/ipInfo.unit.test.d.ts +2 -0
- package/dist/tests/unit/services/ipInfo.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/services/ipInfo.unit.test.js +210 -0
- package/dist/tests/unit/services/ipInfo.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +311 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +289 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +92 -0
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +75 -0
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +143 -0
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +145 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +64 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +388 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +46 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +216 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +69 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -0
- package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts +2 -0
- package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +505 -0
- package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +1 -0
- package/dist/tests/unit/util.ipDistance.unit.test.d.ts +2 -0
- package/dist/tests/unit/util.ipDistance.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/util.ipDistance.unit.test.js +93 -0
- package/dist/tests/unit/util.ipDistance.unit.test.js.map +1 -0
- package/dist/tests/unit/util.unit.test.d.ts +2 -0
- package/dist/tests/unit/util.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/util.unit.test.js +170 -0
- package/dist/tests/unit/util.unit.test.js.map +1 -0
- package/dist/util.d.ts +24 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +263 -18
- package/dist/util.js.map +1 -0
- package/dist/utils/hashUserAgent.d.ts +2 -0
- package/dist/utils/hashUserAgent.d.ts.map +1 -0
- package/dist/utils/hashUserAgent.js +10 -0
- package/dist/utils/hashUserAgent.js.map +1 -0
- package/package.json +31 -29
- package/vite.test.config.ts +3 -2
- package/vite.threads.test.config.ts +33 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApiPrefix } from "@prosopo/types";
|
|
2
|
-
import {
|
|
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
|
|
14
|
-
const userScopeKeys = Object.keys(userScope)
|
|
15
|
-
|
|
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
|
-
)
|
|
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
|
-
|
|
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:
|
|
42
|
+
policyScopeMatch: FilterScopeMatch.Exact,
|
|
41
43
|
userScope: parsedUserScope,
|
|
42
|
-
userScopeMatch:
|
|
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 @@
|
|
|
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"}
|
package/dist/api/captcha.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
|
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 || "")
|
|
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
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
339
|
+
getCompositeIpAddress(req.ip || ""),
|
|
299
340
|
flatten(req.headers),
|
|
300
341
|
req.ja4,
|
|
301
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
418
|
-
|
|
419
|
-
|
|
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 {
|
|
427
|
-
|
|
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
|
-
|
|
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
|
-
|
|
462
|
-
|
|
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
|
-
|
|
607
|
+
const scoreUpdate = tasks.frictionlessManager.scoreIncreaseAccessPolicy(
|
|
478
608
|
userAccessPolicy,
|
|
479
609
|
baseBotScore,
|
|
480
610
|
botScore,
|
|
481
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
650
|
+
const scoreUpdate = tasks.frictionlessManager.scoreIncreaseTimestamp(
|
|
496
651
|
timestamp,
|
|
497
652
|
baseBotScore,
|
|
498
653
|
botScore,
|
|
499
|
-
|
|
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(
|
|
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
|
-
|
|
681
|
+
msg: "Bot score is greater than threshold",
|
|
508
682
|
data: {
|
|
509
683
|
botScore,
|
|
510
684
|
botThreshold,
|
|
511
|
-
|
|
685
|
+
token
|
|
512
686
|
}
|
|
513
687
|
}));
|
|
514
688
|
return res.json(
|
|
515
|
-
await tasks.frictionlessManager.sendImageCaptcha(
|
|
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(
|
|
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
|
|
12
|
-
if (!
|
|
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(
|
|
19
|
+
validateAddress(siteKey, false, 42);
|
|
20
20
|
} catch (err) {
|
|
21
|
-
throw invalidSiteKeyError(req.i18n,
|
|
21
|
+
throw invalidSiteKeyError(req.i18n, siteKey, req.logger);
|
|
22
22
|
}
|
|
23
|
-
const clientSettings = await tasks.db.getClientRecord(
|
|
23
|
+
const clientSettings = await tasks.db.getClientRecord(siteKey);
|
|
24
24
|
if (!clientSettings)
|
|
25
|
-
throw siteKeyNotRegisteredError(req.i18n,
|
|
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
|
-
|
|
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.
|
|
38
|
+
if (tasks.clientTaskManager.domainPatternMatcher(origin, domain)) {
|
|
39
39
|
next();
|
|
40
40
|
return;
|
|
41
41
|
}
|