@prosopo/provider 3.12.3 → 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 +173 -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.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 +4 -4
- 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 +130 -40
- 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.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.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.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.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.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 +23 -1
- 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 +3 -2
- package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +41 -0
- package/dist/cjs/api/blacklistRequestInspector.cjs +3 -3
- package/dist/cjs/api/captcha.cjs +130 -40
- package/dist/cjs/api/ja4Middleware.cjs +2 -1
- package/dist/cjs/api/verify.cjs +23 -1
- package/dist/cjs/tasks/captchaManager.cjs +5 -21
- package/dist/cjs/tasks/client/clientTasks.cjs +3 -36
- package/dist/cjs/tasks/detection/decodePayload.cjs +570 -669
- package/dist/cjs/tasks/detection/getBotScore.cjs +15 -2
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +116 -29
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +18 -12
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +6 -6
- package/dist/cjs/util.cjs +14 -1
- package/dist/compositeIpAddress.d.ts +5 -0
- package/dist/compositeIpAddress.d.ts.map +1 -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.map +1 -0
- package/dist/pairs.d.ts +3 -0
- package/dist/pairs.d.ts.map +1 -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.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.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 +3 -20
- 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 +3 -36
- 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 +570 -669
- 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 +17 -4
- 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 +116 -29
- 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.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 +18 -12
- 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 +6 -6
- 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 +14 -1
- 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.map +1 -0
- package/package.json +24 -25
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const apiRoute = require("@prosopo/api-route");
|
|
4
|
+
const common = require("@prosopo/common");
|
|
5
|
+
const types = require("@prosopo/types");
|
|
6
|
+
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
7
|
+
function getMaintenanceMode() {
|
|
8
|
+
return process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
|
|
9
|
+
}
|
|
10
|
+
function setMaintenanceMode(enabled) {
|
|
11
|
+
process.env.MAINTENANCE_MODE = enabled ? "true" : "false";
|
|
12
|
+
}
|
|
13
|
+
class ApiToggleMaintenanceModeEndpoint {
|
|
14
|
+
async processRequest(args, logger) {
|
|
15
|
+
const { enabled } = args;
|
|
16
|
+
logger = logger || common.getLogger("info", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("api/admin/apiToggleMaintenanceModeEndpoint.cjs", document.baseURI).href);
|
|
17
|
+
const previousMode = getMaintenanceMode();
|
|
18
|
+
logger.info(() => ({
|
|
19
|
+
data: { enabled, previous: previousMode },
|
|
20
|
+
msg: "Toggling maintenance mode"
|
|
21
|
+
}));
|
|
22
|
+
setMaintenanceMode(enabled);
|
|
23
|
+
const currentMode = getMaintenanceMode();
|
|
24
|
+
logger.info(() => ({
|
|
25
|
+
data: { enabled: currentMode },
|
|
26
|
+
msg: "Maintenance mode updated"
|
|
27
|
+
}));
|
|
28
|
+
return {
|
|
29
|
+
status: apiRoute.ApiEndpointResponseStatus.SUCCESS,
|
|
30
|
+
data: {
|
|
31
|
+
maintenanceMode: currentMode
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
getRequestArgsSchema() {
|
|
36
|
+
return types.ToggleMaintenanceModeBody;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.ApiToggleMaintenanceModeEndpoint = ApiToggleMaintenanceModeEndpoint;
|
|
40
|
+
exports.getMaintenanceMode = getMaintenanceMode;
|
|
41
|
+
exports.setMaintenanceMode = setMaintenanceMode;
|
|
@@ -34,16 +34,16 @@ const getPrioritisedAccessRule = async (userAccessRulesStorage, userScope, clien
|
|
|
34
34
|
if (Object.values(scope).every((value) => value === void 0)) {
|
|
35
35
|
continue;
|
|
36
36
|
}
|
|
37
|
-
const parsedUserScope = userAccessPolicy.
|
|
37
|
+
const parsedUserScope = userAccessPolicy.userScopeInput.parse(scope);
|
|
38
38
|
const filter = {
|
|
39
39
|
...clientOrUndefined && {
|
|
40
40
|
policyScope: {
|
|
41
41
|
clientId: clientOrUndefined
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
-
policyScopeMatch: userAccessPolicy.
|
|
44
|
+
policyScopeMatch: userAccessPolicy.FilterScopeMatch.Exact,
|
|
45
45
|
userScope: parsedUserScope,
|
|
46
|
-
userScopeMatch: userAccessPolicy.
|
|
46
|
+
userScopeMatch: userAccessPolicy.FilterScopeMatch.Exact
|
|
47
47
|
};
|
|
48
48
|
policyPromises.push(userAccessRulesStorage.findRules(filter, true, true));
|
|
49
49
|
}
|
package/dist/cjs/api/captcha.cjs
CHANGED
|
@@ -11,6 +11,7 @@ const frictionlessTasks = require("../tasks/frictionless/frictionlessTasks.cjs")
|
|
|
11
11
|
const frictionlessTasksUtils = require("../tasks/frictionless/frictionlessTasksUtils.cjs");
|
|
12
12
|
const tasks = require("../tasks/tasks.cjs");
|
|
13
13
|
const hashUserAgent = require("../utils/hashUserAgent.cjs");
|
|
14
|
+
const apiToggleMaintenanceModeEndpoint = require("./admin/apiToggleMaintenanceModeEndpoint.cjs");
|
|
14
15
|
const blacklistRequestInspector = require("./blacklistRequestInspector.cjs");
|
|
15
16
|
const validateAddress = require("./validateAddress.cjs");
|
|
16
17
|
const DEFAULT_FRICTIONLESS_THRESHOLD = 0.5;
|
|
@@ -68,7 +69,12 @@ function prosopoRouter(env) {
|
|
|
68
69
|
dapp,
|
|
69
70
|
userScope
|
|
70
71
|
))[0];
|
|
71
|
-
const {
|
|
72
|
+
const {
|
|
73
|
+
valid,
|
|
74
|
+
reason,
|
|
75
|
+
sessionId: validSessionId,
|
|
76
|
+
solvedImagesCount
|
|
77
|
+
} = await tasks$1.imgCaptchaManager.isValidRequest(
|
|
72
78
|
clientRecord,
|
|
73
79
|
types.CaptchaType.image,
|
|
74
80
|
env,
|
|
@@ -103,7 +109,7 @@ function prosopoRouter(env) {
|
|
|
103
109
|
ipAddress,
|
|
104
110
|
captchaConfig,
|
|
105
111
|
clientRecord.settings.imageThreshold ?? 0.8,
|
|
106
|
-
|
|
112
|
+
validSessionId
|
|
107
113
|
);
|
|
108
114
|
const captchaResponse = {
|
|
109
115
|
[types.ApiParams.status]: "ok",
|
|
@@ -159,6 +165,17 @@ function prosopoRouter(env) {
|
|
|
159
165
|
types.ClientApiPaths.SubmitImageCaptchaSolution,
|
|
160
166
|
async (req, res, next) => {
|
|
161
167
|
const tasks$1 = new tasks.Tasks(env, req.logger);
|
|
168
|
+
if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
169
|
+
req.logger.info(() => ({
|
|
170
|
+
msg: "Maintenance mode active - returning verified for image captcha"
|
|
171
|
+
}));
|
|
172
|
+
const result = {
|
|
173
|
+
status: "ok",
|
|
174
|
+
captchas: [],
|
|
175
|
+
verified: true
|
|
176
|
+
};
|
|
177
|
+
return res.json(result);
|
|
178
|
+
}
|
|
162
179
|
let parsed;
|
|
163
180
|
try {
|
|
164
181
|
parsed = types.CaptchaSolutionBody.parse(req.body);
|
|
@@ -264,7 +281,12 @@ function prosopoRouter(env) {
|
|
|
264
281
|
dapp,
|
|
265
282
|
userScope
|
|
266
283
|
))[0];
|
|
267
|
-
const {
|
|
284
|
+
const {
|
|
285
|
+
valid,
|
|
286
|
+
reason,
|
|
287
|
+
sessionId: validSessionId,
|
|
288
|
+
powDifficulty
|
|
289
|
+
} = await tasks$1.powCaptchaManager.isValidRequest(
|
|
268
290
|
clientSettings,
|
|
269
291
|
types.CaptchaType.pow,
|
|
270
292
|
env,
|
|
@@ -319,7 +341,7 @@ function prosopoRouter(env) {
|
|
|
319
341
|
compositeIpAddress.getCompositeIpAddress(req.ip || ""),
|
|
320
342
|
util.flatten(req.headers),
|
|
321
343
|
req.ja4,
|
|
322
|
-
|
|
344
|
+
validSessionId
|
|
323
345
|
);
|
|
324
346
|
const getPowCaptchaResponse = {
|
|
325
347
|
[types.ApiParams.status]: "ok",
|
|
@@ -369,6 +391,16 @@ function prosopoRouter(env) {
|
|
|
369
391
|
async (req, res, next) => {
|
|
370
392
|
let parsed;
|
|
371
393
|
const tasks$1 = new tasks.Tasks(env, req.logger);
|
|
394
|
+
if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
395
|
+
req.logger.info(() => ({
|
|
396
|
+
msg: "Maintenance mode active - returning verified"
|
|
397
|
+
}));
|
|
398
|
+
const response = {
|
|
399
|
+
status: "ok",
|
|
400
|
+
verified: true
|
|
401
|
+
};
|
|
402
|
+
return res.json(response);
|
|
403
|
+
}
|
|
372
404
|
try {
|
|
373
405
|
parsed = types.SubmitPowCaptchaSolutionBody.parse(req.body);
|
|
374
406
|
} catch (err) {
|
|
@@ -430,8 +462,30 @@ function prosopoRouter(env) {
|
|
|
430
462
|
async (req, res, next) => {
|
|
431
463
|
try {
|
|
432
464
|
const tasks$1 = new tasks.Tasks(env, req.logger);
|
|
433
|
-
const { token, dapp, user } = types.GetFrictionlessCaptchaChallengeRequestBody.parse(req.body);
|
|
434
|
-
|
|
465
|
+
const { token, headHash, dapp, user } = types.GetFrictionlessCaptchaChallengeRequestBody.parse(req.body);
|
|
466
|
+
if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
467
|
+
req.logger.info(() => ({
|
|
468
|
+
msg: "Maintenance mode active - storing dummy token and sending PoW captcha",
|
|
469
|
+
data: { dapp, user }
|
|
470
|
+
}));
|
|
471
|
+
return res.json(
|
|
472
|
+
await tasks$1.frictionlessManager.sendPowCaptcha({
|
|
473
|
+
token,
|
|
474
|
+
score: 0,
|
|
475
|
+
threshold: 0.5,
|
|
476
|
+
scoreComponents: {
|
|
477
|
+
baseScore: 0
|
|
478
|
+
},
|
|
479
|
+
providerSelectEntropy: 0,
|
|
480
|
+
ipAddress: compositeIpAddress.getCompositeIpAddress(req.ip || ""),
|
|
481
|
+
powDifficulty: void 0,
|
|
482
|
+
webView: false,
|
|
483
|
+
iFrame: false,
|
|
484
|
+
decryptedHeadHash: ""
|
|
485
|
+
})
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
const existingToken = await tasks$1.db.getSessionRecordByToken(token);
|
|
435
489
|
if (existingToken) {
|
|
436
490
|
req.logger.info(() => ({
|
|
437
491
|
token: existingToken,
|
|
@@ -457,8 +511,11 @@ function prosopoRouter(env) {
|
|
|
457
511
|
timestamp,
|
|
458
512
|
providerSelectEntropy,
|
|
459
513
|
userId,
|
|
460
|
-
userAgent
|
|
461
|
-
|
|
514
|
+
userAgent,
|
|
515
|
+
webView,
|
|
516
|
+
iFrame,
|
|
517
|
+
decryptedHeadHash
|
|
518
|
+
} = await tasks$1.frictionlessManager.decryptPayload(token, headHash);
|
|
462
519
|
req.logger.debug(() => ({
|
|
463
520
|
msg: "Decrypted payload",
|
|
464
521
|
data: {
|
|
@@ -466,7 +523,8 @@ function prosopoRouter(env) {
|
|
|
466
523
|
timestamp,
|
|
467
524
|
providerSelectEntropy,
|
|
468
525
|
userId,
|
|
469
|
-
userAgent
|
|
526
|
+
userAgent,
|
|
527
|
+
webView
|
|
470
528
|
}
|
|
471
529
|
}));
|
|
472
530
|
let botScore = baseBotScore + lScore;
|
|
@@ -499,16 +557,21 @@ function prosopoRouter(env) {
|
|
|
499
557
|
);
|
|
500
558
|
}
|
|
501
559
|
const botThreshold = clientRecord.settings?.frictionlessThreshold || DEFAULT_FRICTIONLESS_THRESHOLD;
|
|
502
|
-
|
|
560
|
+
let scoreComponents = {
|
|
561
|
+
baseScore: baseBotScore,
|
|
562
|
+
...lScore && { lScore }
|
|
563
|
+
};
|
|
564
|
+
const ipAddress = compositeIpAddress.getCompositeIpAddress(req.ip || "");
|
|
565
|
+
tasks$1.frictionlessManager.setSessionParams({
|
|
503
566
|
token,
|
|
504
567
|
score: botScore,
|
|
505
568
|
threshold: botThreshold,
|
|
506
|
-
scoreComponents
|
|
507
|
-
baseScore: baseBotScore,
|
|
508
|
-
...lScore && { lScore }
|
|
509
|
-
},
|
|
569
|
+
scoreComponents,
|
|
510
570
|
providerSelectEntropy,
|
|
511
|
-
ipAddress
|
|
571
|
+
ipAddress,
|
|
572
|
+
webView,
|
|
573
|
+
iFrame,
|
|
574
|
+
decryptedHeadHash
|
|
512
575
|
});
|
|
513
576
|
const userScope = blacklistRequestInspector.getRequestUserScope(
|
|
514
577
|
util.flatten(req.headers),
|
|
@@ -537,57 +600,83 @@ function prosopoRouter(env) {
|
|
|
537
600
|
}
|
|
538
601
|
}));
|
|
539
602
|
return res.json(
|
|
540
|
-
await tasks$1.frictionlessManager.sendImageCaptcha(
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
)
|
|
603
|
+
await tasks$1.frictionlessManager.sendImageCaptcha({
|
|
604
|
+
solvedImagesCount: frictionlessTasksUtils.timestampDecayFunction(timestamp)
|
|
605
|
+
})
|
|
544
606
|
);
|
|
545
607
|
}
|
|
546
608
|
if (userAccessPolicy) {
|
|
547
|
-
|
|
609
|
+
const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseAccessPolicy(
|
|
548
610
|
userAccessPolicy,
|
|
549
611
|
baseBotScore,
|
|
550
612
|
botScore,
|
|
551
|
-
|
|
613
|
+
scoreComponents
|
|
552
614
|
);
|
|
615
|
+
botScore = scoreUpdate.score;
|
|
616
|
+
scoreComponents = scoreUpdate.scoreComponents;
|
|
617
|
+
tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
|
|
553
618
|
if (userAccessPolicy.captchaType === types.CaptchaType.image) {
|
|
554
619
|
return res.json(
|
|
555
|
-
await tasks$1.frictionlessManager.sendImageCaptcha(
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
)
|
|
620
|
+
await tasks$1.frictionlessManager.sendImageCaptcha({
|
|
621
|
+
solvedImagesCount: userAccessPolicy.solvedImagesCount
|
|
622
|
+
})
|
|
559
623
|
);
|
|
560
624
|
}
|
|
561
625
|
if (userAccessPolicy.captchaType === types.CaptchaType.pow) {
|
|
562
626
|
return res.json(
|
|
563
|
-
await tasks$1.frictionlessManager.sendPowCaptcha(
|
|
627
|
+
await tasks$1.frictionlessManager.sendPowCaptcha({
|
|
628
|
+
powDifficulty: void 0
|
|
629
|
+
})
|
|
564
630
|
);
|
|
565
631
|
}
|
|
566
632
|
}
|
|
633
|
+
if (clientRecord.settings.disallowWebView && webView) {
|
|
634
|
+
tasks$1.logger.info(() => ({
|
|
635
|
+
msg: "WebView detected"
|
|
636
|
+
}));
|
|
637
|
+
const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseWebView(
|
|
638
|
+
baseBotScore,
|
|
639
|
+
botScore,
|
|
640
|
+
scoreComponents
|
|
641
|
+
);
|
|
642
|
+
botScore = scoreUpdate.score;
|
|
643
|
+
scoreComponents = scoreUpdate.scoreComponents;
|
|
644
|
+
tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
|
|
645
|
+
return res.json(
|
|
646
|
+
await tasks$1.frictionlessManager.sendImageCaptcha({
|
|
647
|
+
solvedImagesCount: env.config.captchas.solved.count * 2
|
|
648
|
+
})
|
|
649
|
+
);
|
|
650
|
+
}
|
|
567
651
|
if (frictionlessTasks.FrictionlessManager.timestampTooOld(timestamp)) {
|
|
568
|
-
|
|
652
|
+
const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseTimestamp(
|
|
569
653
|
timestamp,
|
|
570
654
|
baseBotScore,
|
|
571
655
|
botScore,
|
|
572
|
-
|
|
656
|
+
scoreComponents
|
|
573
657
|
);
|
|
658
|
+
botScore = scoreUpdate.score;
|
|
659
|
+
scoreComponents = scoreUpdate.scoreComponents;
|
|
660
|
+
tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
|
|
574
661
|
return res.json(
|
|
575
|
-
await tasks$1.frictionlessManager.sendImageCaptcha(
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
)
|
|
662
|
+
await tasks$1.frictionlessManager.sendImageCaptcha({
|
|
663
|
+
solvedImagesCount: frictionlessTasksUtils.timestampDecayFunction(timestamp)
|
|
664
|
+
})
|
|
579
665
|
);
|
|
580
666
|
}
|
|
581
667
|
const hostVerified = await tasks$1.frictionlessManager.hostVerified(
|
|
582
668
|
providerSelectEntropy
|
|
583
669
|
);
|
|
584
670
|
if (!hostVerified.verified) {
|
|
585
|
-
|
|
671
|
+
const scoreUpdate = tasks$1.frictionlessManager.scoreIncreaseUnverifiedHost(
|
|
586
672
|
hostVerified.domain,
|
|
587
673
|
baseBotScore,
|
|
588
674
|
botScore,
|
|
589
|
-
|
|
675
|
+
scoreComponents
|
|
590
676
|
);
|
|
677
|
+
botScore = scoreUpdate.score;
|
|
678
|
+
scoreComponents = scoreUpdate.scoreComponents;
|
|
679
|
+
tasks$1.frictionlessManager.updateScore(botScore, scoreComponents);
|
|
591
680
|
}
|
|
592
681
|
if (Number(botScore) > botThreshold) {
|
|
593
682
|
req.logger.info(() => ({
|
|
@@ -595,18 +684,19 @@ function prosopoRouter(env) {
|
|
|
595
684
|
data: {
|
|
596
685
|
botScore,
|
|
597
686
|
botThreshold,
|
|
598
|
-
|
|
687
|
+
token
|
|
599
688
|
}
|
|
600
689
|
}));
|
|
601
690
|
return res.json(
|
|
602
|
-
await tasks$1.frictionlessManager.sendImageCaptcha(
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
)
|
|
691
|
+
await tasks$1.frictionlessManager.sendImageCaptcha({
|
|
692
|
+
solvedImagesCount: env.config.captchas.solved.count
|
|
693
|
+
})
|
|
606
694
|
);
|
|
607
695
|
}
|
|
608
696
|
return res.json(
|
|
609
|
-
await tasks$1.frictionlessManager.sendPowCaptcha(
|
|
697
|
+
await tasks$1.frictionlessManager.sendPowCaptcha({
|
|
698
|
+
powDifficulty: void 0
|
|
699
|
+
})
|
|
610
700
|
);
|
|
611
701
|
} catch (err) {
|
|
612
702
|
req.logger.error(() => ({
|
|
@@ -5,9 +5,10 @@ const apiExpressRouter = require("@prosopo/api-express-router");
|
|
|
5
5
|
const common = require("@prosopo/common");
|
|
6
6
|
const utilCrypto = require("@prosopo/util-crypto");
|
|
7
7
|
const readTlsClientHello = require("read-tls-client-hello");
|
|
8
|
+
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
8
9
|
const DEFAULT_JA4 = "ja4";
|
|
9
10
|
const getJA4 = async (headers, logger) => {
|
|
10
|
-
logger = logger || common.getLogger("info",
|
|
11
|
+
logger = logger || common.getLogger("info", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("api/ja4Middleware.cjs", document.baseURI).href);
|
|
11
12
|
if (process.env.NODE_ENV === "development") {
|
|
12
13
|
return {
|
|
13
14
|
ja4PlusFingerprint: `${DEFAULT_JA4}${utilCrypto.randomAsHex().slice(28, 32)}`
|
package/dist/cjs/api/verify.cjs
CHANGED
|
@@ -6,12 +6,23 @@ const types = require("@prosopo/types");
|
|
|
6
6
|
const utilCrypto = require("@prosopo/util-crypto");
|
|
7
7
|
const express = require("express");
|
|
8
8
|
const tasks = require("../tasks/tasks.cjs");
|
|
9
|
+
const apiToggleMaintenanceModeEndpoint = require("./admin/apiToggleMaintenanceModeEndpoint.cjs");
|
|
9
10
|
function prosopoVerifyRouter(env) {
|
|
10
11
|
const router = express.Router();
|
|
11
12
|
router.post(
|
|
12
13
|
types.ClientApiPaths.VerifyImageCaptchaSolutionDapp,
|
|
13
14
|
async (req, res, next) => {
|
|
14
15
|
const tasks$1 = new tasks.Tasks(env, req.logger);
|
|
16
|
+
if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
17
|
+
req.logger.info(() => ({
|
|
18
|
+
msg: "Maintenance mode active - returning verified for image captcha verification"
|
|
19
|
+
}));
|
|
20
|
+
const verificationResponse = {
|
|
21
|
+
status: "ok",
|
|
22
|
+
verified: true
|
|
23
|
+
};
|
|
24
|
+
return res.json(verificationResponse);
|
|
25
|
+
}
|
|
15
26
|
let parsed;
|
|
16
27
|
try {
|
|
17
28
|
parsed = types.VerifySolutionBody.parse(req.body);
|
|
@@ -47,7 +58,8 @@ function prosopoVerifyRouter(env) {
|
|
|
47
58
|
commitmentId,
|
|
48
59
|
env,
|
|
49
60
|
maxVerifiedTime,
|
|
50
|
-
ip
|
|
61
|
+
ip,
|
|
62
|
+
clientRecord.settings.disallowWebView
|
|
51
63
|
);
|
|
52
64
|
req.logger.debug(() => ({ data: { response } }));
|
|
53
65
|
const verificationResponse = tasks$1.imgCaptchaManager.getVerificationResponse(
|
|
@@ -74,6 +86,16 @@ function prosopoVerifyRouter(env) {
|
|
|
74
86
|
types.ClientApiPaths.VerifyPowCaptchaSolution,
|
|
75
87
|
async (req, res, next) => {
|
|
76
88
|
const tasks$1 = new tasks.Tasks(env, req.logger);
|
|
89
|
+
if (apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
90
|
+
req.logger.info(() => ({
|
|
91
|
+
msg: "Maintenance mode active - returning verified for PoW captcha verification"
|
|
92
|
+
}));
|
|
93
|
+
const verificationResponse = {
|
|
94
|
+
status: "ok",
|
|
95
|
+
verified: true
|
|
96
|
+
};
|
|
97
|
+
return res.json(verificationResponse);
|
|
98
|
+
}
|
|
77
99
|
let parsed;
|
|
78
100
|
try {
|
|
79
101
|
parsed = types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
|
|
@@ -3,29 +3,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const common = require("@prosopo/common");
|
|
4
4
|
const types = require("@prosopo/types");
|
|
5
5
|
const blacklistRequestInspector = require("../api/blacklistRequestInspector.cjs");
|
|
6
|
+
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
6
7
|
class CaptchaManager {
|
|
7
8
|
constructor(db, pair, logger) {
|
|
8
9
|
this.pair = pair;
|
|
9
10
|
this.db = db;
|
|
10
|
-
this.logger = logger || common.getLogger("info",
|
|
11
|
+
this.logger = logger || common.getLogger("info", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("tasks/captchaManager.cjs", document.baseURI).href);
|
|
11
12
|
}
|
|
12
|
-
async
|
|
13
|
-
const tokenRecord = await this.db.getFrictionlessTokenRecordByTokenId(
|
|
14
|
-
sessionRecord.tokenId
|
|
15
|
-
);
|
|
16
|
-
return tokenRecord ? tokenRecord._id : void 0;
|
|
17
|
-
}
|
|
18
|
-
async validateFrictionlessTokenIP(sessionRecord, currentIP, env) {
|
|
19
|
-
const tokenRecord = await this.db.getFrictionlessTokenRecordByTokenId(
|
|
20
|
-
sessionRecord.tokenId
|
|
21
|
-
);
|
|
22
|
-
if (!tokenRecord) {
|
|
23
|
-
this.logger.info(() => ({
|
|
24
|
-
msg: "No frictionless token found for session",
|
|
25
|
-
data: { sessionId: sessionRecord.sessionId }
|
|
26
|
-
}));
|
|
27
|
-
return { valid: false, reason: "CAPTCHA.NO_SESSION_FOUND" };
|
|
28
|
-
}
|
|
13
|
+
async validateSessionIP(sessionRecord, currentIP, env) {
|
|
29
14
|
return { valid: true };
|
|
30
15
|
}
|
|
31
16
|
async isValidRequest(clientSettings, requestedCaptchaType, env, sessionId, userAccessPolicy, currentIP) {
|
|
@@ -68,7 +53,7 @@ class CaptchaManager {
|
|
|
68
53
|
};
|
|
69
54
|
}
|
|
70
55
|
if (currentIP) {
|
|
71
|
-
const ipValidation = await this.
|
|
56
|
+
const ipValidation = await this.validateSessionIP(
|
|
72
57
|
sessionRecord,
|
|
73
58
|
currentIP,
|
|
74
59
|
env
|
|
@@ -81,7 +66,6 @@ class CaptchaManager {
|
|
|
81
66
|
};
|
|
82
67
|
}
|
|
83
68
|
}
|
|
84
|
-
const frictionlessTokenId = await this.getFrictionlessTokenIdFromSession(sessionRecord);
|
|
85
69
|
if (sessionRecord.captchaType !== requestedCaptchaType) {
|
|
86
70
|
this.logger.warn(() => ({
|
|
87
71
|
msg: "Invalid frictionless request",
|
|
@@ -98,7 +82,7 @@ class CaptchaManager {
|
|
|
98
82
|
}
|
|
99
83
|
return {
|
|
100
84
|
valid: true,
|
|
101
|
-
|
|
85
|
+
sessionId: sessionRecord.sessionId,
|
|
102
86
|
type: requestedCaptchaType,
|
|
103
87
|
...sessionRecord.powDifficulty && {
|
|
104
88
|
powDifficulty: sessionRecord.powDifficulty
|
|
@@ -102,44 +102,11 @@ class ClientTaskManager {
|
|
|
102
102
|
async (skip) => await this.providerDB.getUnstoredSessionRecords(BATCH_SIZE, skip),
|
|
103
103
|
async (batch) => {
|
|
104
104
|
const filteredBatch = lastTask?.updated ? batch.filter((record) => this.isRecordUpdated(record)) : batch;
|
|
105
|
-
const frictionlessTokenRecords = await this.providerDB.getFrictionlessTokenRecordsByTokenIds(
|
|
106
|
-
filteredBatch.map((record) => record.tokenId)
|
|
107
|
-
);
|
|
108
|
-
this.logger.info(() => ({
|
|
109
|
-
msg: `Frictionless token records: ${frictionlessTokenRecords.length}`
|
|
110
|
-
}));
|
|
111
|
-
const filteredBatchWithScores = filteredBatch.map((record) => {
|
|
112
|
-
const tokenRecord = frictionlessTokenRecords.find(
|
|
113
|
-
(tokenRecord2) => tokenRecord2._id?.toString() === record.tokenId.toString()
|
|
114
|
-
);
|
|
115
|
-
if (!tokenRecord) {
|
|
116
|
-
this.logger.error(() => ({
|
|
117
|
-
msg: "No token record found",
|
|
118
|
-
data: { tokenId: record.tokenId }
|
|
119
|
-
}));
|
|
120
|
-
return {
|
|
121
|
-
...record,
|
|
122
|
-
score: 0,
|
|
123
|
-
scoreComponents: {
|
|
124
|
-
baseScore: 0
|
|
125
|
-
},
|
|
126
|
-
threshold: 0
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
const { _id, token, ...tokenRecordWithoutId } = tokenRecord;
|
|
130
|
-
return {
|
|
131
|
-
...record,
|
|
132
|
-
...tokenRecordWithoutId
|
|
133
|
-
};
|
|
134
|
-
});
|
|
135
105
|
if (filteredBatch.length > 0) {
|
|
136
|
-
await captchaDB.saveCaptchas(
|
|
106
|
+
await captchaDB.saveCaptchas(filteredBatch, [], []);
|
|
137
107
|
await this.providerDB.markSessionRecordsStored(
|
|
138
108
|
filteredBatch.map((record) => record.sessionId)
|
|
139
109
|
);
|
|
140
|
-
await this.providerDB.markFrictionlessTokenRecordsStored(
|
|
141
|
-
filteredBatch.map((record) => record.tokenId).filter((id) => !!id)
|
|
142
|
-
);
|
|
143
110
|
}
|
|
144
111
|
processedSessionRecords += filteredBatch.length;
|
|
145
112
|
}
|
|
@@ -196,7 +163,7 @@ class ClientTaskManager {
|
|
|
196
163
|
this.logger
|
|
197
164
|
);
|
|
198
165
|
const tenMinuteWindow = 10 * 60 * 1e3;
|
|
199
|
-
const updatedAtTimestamp = lastTask?.updated ? lastTask.updated - tenMinuteWindow || 0 : 0;
|
|
166
|
+
const updatedAtTimestamp = lastTask?.updated ? lastTask.updated.getTime() - tenMinuteWindow || 0 : 0;
|
|
200
167
|
this.logger.info(() => ({
|
|
201
168
|
msg: `Getting updated client records since ${new Date(updatedAtTimestamp).toDateString()}`
|
|
202
169
|
}));
|
|
@@ -295,7 +262,7 @@ class ClientTaskManager {
|
|
|
295
262
|
}
|
|
296
263
|
isRecordUpdated(record) {
|
|
297
264
|
const { lastUpdatedTimestamp, storedAtTimestamp } = record;
|
|
298
|
-
return !lastUpdatedTimestamp || !storedAtTimestamp || lastUpdatedTimestamp > storedAtTimestamp;
|
|
265
|
+
return !lastUpdatedTimestamp || !storedAtTimestamp || lastUpdatedTimestamp.getTime() > storedAtTimestamp.getTime();
|
|
299
266
|
}
|
|
300
267
|
async processBatchesWithCursor(fetchBatch, processBatch) {
|
|
301
268
|
let skip = 0;
|