@prosopo/provider 5.19.3 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +45 -40
- package/.turbo/turbo-build$colon$tsc.log +28 -28
- package/.turbo/turbo-build.log +48 -40
- package/CHANGELOG.md +167 -0
- package/dist/api/admin/apiClearAllCountersEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetSessionEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveSiteKeyEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveSiteKeysEndpoint.js.map +1 -1
- package/dist/api/admin/apiReplaceDetectorPoolEndpoint.js.map +1 -1
- package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.js +9 -8
- package/dist/api/blacklistRequestInspector.js.map +1 -1
- package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -1
- package/dist/api/captcha/checkSpamEmail.js +19 -26
- package/dist/api/captcha/checkSpamEmail.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +11 -2
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +6 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +30 -27
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +32 -43
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +27 -32
- package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +3 -0
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js +23 -5
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/interactiveCaptchaChallenge.js +27 -32
- package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/interactiveCaptchaSolution.js +18 -24
- package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.js +18 -24
- package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +35 -27
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/domainMiddleware.d.ts.map +1 -1
- package/dist/api/domainMiddleware.js +39 -47
- package/dist/api/domainMiddleware.js.map +1 -1
- package/dist/api/errorCodeForReason.d.ts +3 -0
- package/dist/api/errorCodeForReason.d.ts.map +1 -0
- package/dist/api/errorCodeForReason.js +22 -0
- package/dist/api/errorCodeForReason.js.map +1 -0
- package/dist/api/headerCheckMiddleware.d.ts.map +1 -1
- package/dist/api/headerCheckMiddleware.js +14 -9
- package/dist/api/headerCheckMiddleware.js.map +1 -1
- package/dist/api/ipInfoMiddleware.d.ts +1 -1
- package/dist/api/ipInfoMiddleware.d.ts.map +1 -1
- package/dist/api/ipInfoMiddleware.js +5 -1
- package/dist/api/ipInfoMiddleware.js.map +1 -1
- package/dist/api/metrics.d.ts.map +1 -1
- package/dist/api/metrics.js +9 -1
- package/dist/api/metrics.js.map +1 -1
- package/dist/api/public.d.ts.map +1 -1
- package/dist/api/public.js +6 -2
- package/dist/api/public.js.map +1 -1
- package/dist/api/rateLimitHandler.d.ts +4 -0
- package/dist/api/rateLimitHandler.d.ts.map +1 -0
- package/dist/api/rateLimitHandler.js +20 -0
- package/dist/api/rateLimitHandler.js.map +1 -0
- package/dist/api/startProviderApi.d.ts +1 -0
- package/dist/api/startProviderApi.d.ts.map +1 -1
- package/dist/api/startProviderApi.js +8 -17
- package/dist/api/startProviderApi.js.map +1 -1
- package/dist/api/validateAddress.d.ts +3 -4
- package/dist/api/validateAddress.d.ts.map +1 -1
- package/dist/api/validateAddress.js +13 -19
- package/dist/api/validateAddress.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +73 -96
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/blacklistRequestInspector.cjs +9 -8
- package/dist/cjs/api/captcha/checkSpamEmail.cjs +18 -25
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +11 -2
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +6 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +29 -26
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +31 -42
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +26 -31
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +22 -3
- package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +26 -31
- package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +17 -23
- package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +17 -23
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +34 -26
- package/dist/cjs/api/domainMiddleware.cjs +38 -46
- package/dist/cjs/api/errorCodeForReason.cjs +22 -0
- package/dist/cjs/api/headerCheckMiddleware.cjs +13 -8
- package/dist/cjs/api/ipInfoMiddleware.cjs +5 -1
- package/dist/cjs/api/metrics.cjs +9 -1
- package/dist/cjs/api/public.cjs +5 -1
- package/dist/cjs/api/rateLimitHandler.cjs +20 -0
- package/dist/cjs/api/startProviderApi.cjs +8 -16
- package/dist/cjs/api/validateAddress.cjs +12 -18
- package/dist/cjs/api/verify.cjs +72 -95
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/tasks/captchaManager.cjs +6 -8
- package/dist/cjs/tasks/client/clientTasks.cjs +26 -13
- package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +28 -8
- package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +21 -19
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +1 -1
- package/dist/cjs/tasks/frictionless/routingMachine.cjs +13 -4
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +89 -40
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +18 -8
- package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +21 -13
- package/dist/cjs/tasks/powCaptcha/backgroundWrites.cjs +24 -0
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +44 -19
- package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +14 -10
- package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +17 -8
- package/dist/cjs/tasks/signatureCheck.cjs +12 -0
- package/dist/cjs/tasks/tasks.cjs +6 -1
- package/dist/cjs/util/usageCounters.cjs +26 -3
- package/dist/cjs/util.cjs +14 -3
- package/dist/cjs/utils/devicePlatform.cjs +9 -5
- package/dist/cjs/utils/mobileSignals.cjs +69 -0
- package/dist/errorSites.d.ts +98 -0
- package/dist/errorSites.d.ts.map +1 -0
- package/dist/errorSites.js +2 -0
- package/dist/errorSites.js.map +1 -0
- package/dist/fingerprint/dist/merkle.js +69 -0
- package/dist/fingerprint/dist/proof.js +95 -0
- package/dist/fingerprint/dist/summary.js +73 -0
- package/dist/index.js +2 -2
- package/dist/tasks/captchaManager.d.ts +2 -3
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +6 -7
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/client/clientTasks.d.ts.map +1 -1
- package/dist/tasks/client/clientTasks.js +27 -14
- package/dist/tasks/client/clientTasks.js.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.js +29 -9
- package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +1 -3
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.js +21 -19
- package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
- package/dist/tasks/frictionless/routingMachine.js +13 -4
- package/dist/tasks/frictionless/routingMachine.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +91 -42
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +19 -9
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -1
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +22 -14
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -1
- package/dist/tasks/powCaptcha/backgroundWrites.d.ts +7 -0
- package/dist/tasks/powCaptcha/backgroundWrites.d.ts.map +1 -0
- package/dist/tasks/powCaptcha/backgroundWrites.js +24 -0
- package/dist/tasks/powCaptcha/backgroundWrites.js.map +1 -0
- package/dist/tasks/powCaptcha/powTasks.d.ts +3 -3
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +45 -20
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.js +15 -11
- package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
- package/dist/tasks/puzzle/puzzleRenderer.d.ts +8 -1
- package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
- package/dist/tasks/puzzle/puzzleRenderer.js +16 -8
- package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
- package/dist/tasks/signatureCheck.d.ts +2 -0
- package/dist/tasks/signatureCheck.d.ts.map +1 -0
- package/dist/tasks/signatureCheck.js +12 -0
- package/dist/tasks/signatureCheck.js.map +1 -0
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +7 -2
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +3 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +6 -2
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +1 -1
- package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
- package/dist/tests/integration/imgCaptcha.integration.test.js +6 -5
- package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
- package/dist/tests/integration/ipValidation.integration.test.js +1 -1
- package/dist/tests/integration/ipValidation.integration.test.js.map +1 -1
- package/dist/tests/integration/powCaptcha.integration.test.js +2 -2
- package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
- package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
- package/dist/tests/integration/testUtils.d.ts +2 -2
- package/dist/tests/integration/testUtils.d.ts.map +1 -1
- package/dist/tests/integration/testUtils.js +1 -1
- package/dist/tests/integration/testUtils.js.map +1 -1
- package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js +3 -1
- package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js.map +1 -1
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +26 -10
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js +4 -4
- package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.js +210 -0
- package/dist/tests/unit/api/captcha/puzzleTouchFloors.unit.test.js.map +1 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js +153 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js.map +1 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js +6 -2
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js.map +1 -1
- package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.js +23 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.js.map +1 -0
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +6 -1
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js +16 -7
- package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js.map +1 -1
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js +46 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js.map +1 -0
- package/dist/tests/unit/api/public.unit.test.js +45 -10
- package/dist/tests/unit/api/public.unit.test.js.map +1 -1
- package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.js +39 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.js.map +1 -0
- package/dist/tests/unit/api/validateAddress.unit.test.js +41 -115
- package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -1
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js +3 -3
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +22 -18
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +25 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +25 -20
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +31 -0
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js +80 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +48 -0
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +20 -28
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +2 -2
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js +44 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -43
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +7 -6
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +2 -2
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/util/usageCounters.unit.test.js +20 -0
- package/dist/tests/unit/util/usageCounters.unit.test.js.map +1 -1
- package/dist/tests/unit/util.unit.test.js +7 -7
- package/dist/tests/unit/util.unit.test.js.map +1 -1
- package/dist/tests/unit/utils/devicePlatform.unit.test.js +9 -8
- package/dist/tests/unit/utils/devicePlatform.unit.test.js.map +1 -1
- package/dist/tests/unit/utils/mobileSignals.unit.test.d.ts +2 -0
- package/dist/tests/unit/utils/mobileSignals.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/mobileSignals.unit.test.js +161 -0
- package/dist/tests/unit/utils/mobileSignals.unit.test.js.map +1 -0
- package/dist/util/usageCounters.d.ts +1 -1
- package/dist/util/usageCounters.d.ts.map +1 -1
- package/dist/util/usageCounters.js +26 -3
- package/dist/util/usageCounters.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +15 -4
- package/dist/util.js.map +1 -1
- package/dist/utils/devicePlatform.d.ts +3 -3
- package/dist/utils/devicePlatform.d.ts.map +1 -1
- package/dist/utils/devicePlatform.js +9 -5
- package/dist/utils/devicePlatform.js.map +1 -1
- package/dist/utils/mobileSignals.d.ts +32 -0
- package/dist/utils/mobileSignals.d.ts.map +1 -0
- package/dist/utils/mobileSignals.js +68 -0
- package/dist/utils/mobileSignals.js.map +1 -0
- package/package.json +44 -43
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_rawTlsSignalsMiddleware = require("../../rawTlsSignalsMiddleware.cjs");
|
|
2
2
|
const require_compositeIpAddress = require("../../../compositeIpAddress.cjs");
|
|
3
3
|
const require_devicePlatform = require("../../../utils/devicePlatform.cjs");
|
|
4
|
+
const require_errorCodeForReason = require("../../errorCodeForReason.cjs");
|
|
4
5
|
const require_metrics = require("../../metrics.cjs");
|
|
5
6
|
const require_blacklistRequestInspector = require("../../blacklistRequestInspector.cjs");
|
|
6
7
|
const require_audioAlternative = require("../../../tasks/audioAlternative.cjs");
|
|
@@ -93,23 +94,20 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
93
94
|
token: existingToken,
|
|
94
95
|
msg: "Token has already been used"
|
|
95
96
|
}));
|
|
96
|
-
return next(new _prosopo_common.
|
|
97
|
+
return next(new _prosopo_common.ProsopoError({
|
|
98
|
+
code: "INVALID_REQUEST",
|
|
99
|
+
errorSite: "PROV-5",
|
|
100
|
+
message: "BadRequest",
|
|
97
101
|
context: {
|
|
98
|
-
code: 400,
|
|
99
102
|
siteKey: dapp,
|
|
100
103
|
user
|
|
101
|
-
}
|
|
102
|
-
i18n: req.i18n,
|
|
103
|
-
logger: req.logger
|
|
104
|
+
}
|
|
104
105
|
}));
|
|
105
106
|
}
|
|
106
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
},
|
|
111
|
-
i18n: req.i18n,
|
|
112
|
-
logger: req.logger
|
|
107
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
108
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
109
|
+
errorSite: "PROV-6",
|
|
110
|
+
context: { siteKey: dapp }
|
|
113
111
|
}));
|
|
114
112
|
const audioAlternativeEnabled = require_audioAlternative.isAudioAlternativeEnabled(clientRecord.settings);
|
|
115
113
|
tasks.frictionlessManager.setAudioAlternativeEnabled(audioAlternativeEnabled);
|
|
@@ -149,7 +147,11 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
149
147
|
ip: normalizedIp,
|
|
150
148
|
...dedupCountryCode && { countryCode: dedupCountryCode },
|
|
151
149
|
score: dedup.session.score,
|
|
152
|
-
platform: require_devicePlatform.derivePlatform(dedupUserAgent, dedup.session.webView, {
|
|
150
|
+
platform: require_devicePlatform.derivePlatform(dedupUserAgent, dedup.session.webView, {
|
|
151
|
+
headers: dedupFlatHeaders,
|
|
152
|
+
...typeof dedupIsMobile === "boolean" && { carrierNetwork: dedupIsMobile },
|
|
153
|
+
...req.tcpMss !== void 0 && { tcpMss: req.tcpMss }
|
|
154
|
+
}),
|
|
153
155
|
...dedup.session.d !== void 0 && { d: dedup.session.d },
|
|
154
156
|
raw: {
|
|
155
157
|
headers: dedupFlatHeaders,
|
|
@@ -348,14 +350,13 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
348
350
|
}));
|
|
349
351
|
let botScore = baseBotScore + lScore;
|
|
350
352
|
const { valid, reason } = validation;
|
|
351
|
-
if (!valid) return next(new _prosopo_common.
|
|
353
|
+
if (!valid) return next(new _prosopo_common.ProsopoError({
|
|
354
|
+
code: require_errorCodeForReason.errorCodeForReason(reason),
|
|
355
|
+
errorSite: "PROV-80",
|
|
352
356
|
context: {
|
|
353
|
-
code: 400,
|
|
354
357
|
siteKey: dapp,
|
|
355
358
|
user
|
|
356
|
-
}
|
|
357
|
-
i18n: req.i18n,
|
|
358
|
-
logger: req.logger
|
|
359
|
+
}
|
|
359
360
|
}));
|
|
360
361
|
require_metrics.recordBotScore(botScore);
|
|
361
362
|
if (triggeredDetectors && triggeredDetectors.length > 0) require_metrics.recordDetectorTriggered(triggeredDetectors);
|
|
@@ -404,7 +405,11 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
404
405
|
imageMinRounds: clientRecord.settings.imageMinRounds,
|
|
405
406
|
baseImageRounds: env.config.captchas.solved.count,
|
|
406
407
|
puzzleMaxDifficulty: clientRecord.settings.puzzleMaxDifficulty,
|
|
407
|
-
platform: require_devicePlatform.derivePlatform(requestUserAgent, webView, {
|
|
408
|
+
platform: require_devicePlatform.derivePlatform(requestUserAgent, webView, {
|
|
409
|
+
headers: flatHeaders,
|
|
410
|
+
...typeof ipInfoMobile === "boolean" && { carrierNetwork: ipInfoMobile },
|
|
411
|
+
...req.tcpMss !== void 0 && { tcpMss: req.tcpMss }
|
|
412
|
+
}),
|
|
408
413
|
...d !== void 0 && { d },
|
|
409
414
|
raw: {
|
|
410
415
|
headers: flatHeaders,
|
|
@@ -484,13 +489,11 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
484
489
|
err,
|
|
485
490
|
msg: "Error in frictionless captcha challenge"
|
|
486
491
|
}));
|
|
487
|
-
return next(new _prosopo_common.
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
i18n: req.i18n,
|
|
493
|
-
logger: req.logger
|
|
492
|
+
return next(new _prosopo_common.ProsopoError({
|
|
493
|
+
code: "INVALID_REQUEST",
|
|
494
|
+
errorSite: "PROV-7",
|
|
495
|
+
message: "BadRequest",
|
|
496
|
+
cause: err
|
|
494
497
|
}));
|
|
495
498
|
}
|
|
496
499
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const require_errorCodeForReason = require("../errorCodeForReason.cjs");
|
|
1
2
|
const require_metrics = require("../metrics.cjs");
|
|
2
3
|
const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
|
|
3
4
|
const require_validateAddress = require("../validateAddress.cjs");
|
|
@@ -13,42 +14,36 @@ const require_signedAssetsResolver = require("./signedAssetsResolver.cjs");
|
|
|
13
14
|
let _prosopo_common = require("@prosopo/common");
|
|
14
15
|
let _prosopo_types = require("@prosopo/types");
|
|
15
16
|
let _prosopo_util = require("@prosopo/util");
|
|
16
|
-
let _prosopo_locale = require("@prosopo/locale");
|
|
17
17
|
let _prosopo_datasets = require("@prosopo/datasets");
|
|
18
|
+
let _prosopo_locale = require("@prosopo/locale");
|
|
18
19
|
//#region src/api/captcha/getImageCaptchaChallenge.ts
|
|
19
20
|
var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req, res, next) => {
|
|
20
21
|
let parsed;
|
|
21
22
|
const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
|
|
22
|
-
if (!normalizedIp) return next(new _prosopo_common.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
i18n: req.i18n,
|
|
28
|
-
logger: req.logger
|
|
23
|
+
if (!normalizedIp) return next(new _prosopo_common.ProsopoError({
|
|
24
|
+
code: "INVALID_REQUEST",
|
|
25
|
+
errorSite: "PROV-8",
|
|
26
|
+
message: "BadRequest",
|
|
27
|
+
context: { error: "IP address not found" }
|
|
29
28
|
}));
|
|
30
29
|
const ipAddress = (0, _prosopo_util.getIPAddress)(normalizedIp);
|
|
31
30
|
try {
|
|
32
31
|
parsed = _prosopo_types.CaptchaRequestBody.parse(req.body);
|
|
33
32
|
} catch (err) {
|
|
34
|
-
return next(new _prosopo_common.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
i18n: req.i18n,
|
|
40
|
-
logger: req.logger
|
|
33
|
+
return next(new _prosopo_common.ProsopoError({
|
|
34
|
+
code: "INVALID_REQUEST",
|
|
35
|
+
errorSite: "PROV-9",
|
|
36
|
+
message: "Error parsing captcha",
|
|
37
|
+
cause: err
|
|
41
38
|
}));
|
|
42
39
|
}
|
|
43
40
|
const { datasetId: clientDatasetId, user, dapp, sessionId, simdReadings } = parsed;
|
|
44
41
|
const datasetId = clientDatasetId ?? env.datasetId;
|
|
45
|
-
if (!datasetId) return next(new _prosopo_common.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
i18n: req.i18n,
|
|
51
|
-
logger: req.logger
|
|
42
|
+
if (!datasetId) return next(new _prosopo_common.ProsopoError({
|
|
43
|
+
code: "INVALID_REQUEST",
|
|
44
|
+
errorSite: "PROV-10",
|
|
45
|
+
message: "BadRequest",
|
|
46
|
+
context: { error: "No dataset available. Please upload a dataset first." }
|
|
52
47
|
}));
|
|
53
48
|
require_validateAddress.validateSiteKey(dapp);
|
|
54
49
|
require_validateAddress.validateAddr(user);
|
|
@@ -77,13 +72,10 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
|
|
|
77
72
|
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
78
73
|
try {
|
|
79
74
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
80
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
},
|
|
85
|
-
i18n: req.i18n,
|
|
86
|
-
logger: req.logger
|
|
75
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
76
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
77
|
+
errorSite: "PROV-11",
|
|
78
|
+
context: { siteKey: dapp }
|
|
87
79
|
}));
|
|
88
80
|
const countryCode = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.countryCode : void 0;
|
|
89
81
|
const asn = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.asnNumber : void 0;
|
|
@@ -93,14 +85,13 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
|
|
|
93
85
|
const userAccessPolicy = accessPolicies.find((p) => !p.deferToVerify);
|
|
94
86
|
const deferredParamsPolicy = accessPolicies.find((p) => p.deferToVerify === true);
|
|
95
87
|
const { valid, reason, sessionId: validSessionId, solvedImagesCount } = await tasks.imgCaptchaManager.isValidRequest(clientRecord, _prosopo_types.CaptchaType.image, env, sessionId, userAccessPolicy, normalizedIp);
|
|
96
|
-
if (!valid) return next(new _prosopo_common.
|
|
88
|
+
if (!valid) return next(new _prosopo_common.ProsopoError({
|
|
89
|
+
code: require_errorCodeForReason.errorCodeForReason(reason),
|
|
90
|
+
errorSite: "PROV-81",
|
|
97
91
|
context: {
|
|
98
|
-
code: 400,
|
|
99
92
|
siteKey: dapp,
|
|
100
93
|
user
|
|
101
|
-
}
|
|
102
|
-
i18n: req.i18n,
|
|
103
|
-
logger: req.logger
|
|
94
|
+
}
|
|
104
95
|
}));
|
|
105
96
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientRecord.settings?.trafficFilter, req.logger);
|
|
106
97
|
const trafficSolvedImagesCount = trafficVerdict.kind === "challenge" ? trafficVerdict.solvedImagesCount : void 0;
|
|
@@ -150,14 +141,12 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
|
|
|
150
141
|
data: req.params,
|
|
151
142
|
msg: "Error in image captcha challenge request"
|
|
152
143
|
}));
|
|
153
|
-
return next(new _prosopo_common.
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
i18n: req.i18n,
|
|
160
|
-
logger: req.logger
|
|
144
|
+
return next(new _prosopo_common.ProsopoError({
|
|
145
|
+
code: "UNEXPECTED",
|
|
146
|
+
errorSite: "PROV-12",
|
|
147
|
+
message: "BadRequest",
|
|
148
|
+
cause: err,
|
|
149
|
+
context: { params: req.params }
|
|
161
150
|
}));
|
|
162
151
|
}
|
|
163
152
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
|
|
2
|
+
const require_errorCodeForReason = require("../errorCodeForReason.cjs");
|
|
2
3
|
const require_metrics = require("../metrics.cjs");
|
|
3
4
|
const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
|
|
4
5
|
const require_validateAddress = require("../validateAddress.cjs");
|
|
@@ -18,13 +19,11 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
|
|
|
18
19
|
try {
|
|
19
20
|
parsed = _prosopo_types.GetPowCaptchaChallengeRequestBody.parse(req.body);
|
|
20
21
|
} catch (err) {
|
|
21
|
-
return next(new _prosopo_common.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
i18n: req.i18n,
|
|
27
|
-
logger: req.logger
|
|
22
|
+
return next(new _prosopo_common.ProsopoError({
|
|
23
|
+
code: "INVALID_REQUEST",
|
|
24
|
+
errorSite: "PROV-13",
|
|
25
|
+
message: "Error parsing captcha",
|
|
26
|
+
cause: err
|
|
28
27
|
}));
|
|
29
28
|
}
|
|
30
29
|
const { user, dapp, sessionId, simdReadings } = parsed;
|
|
@@ -55,13 +54,10 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
|
|
|
55
54
|
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
56
55
|
try {
|
|
57
56
|
const clientSettings = await tasks.db.getClientRecord(dapp);
|
|
58
|
-
if (!clientSettings) return next(new _prosopo_common.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
},
|
|
63
|
-
i18n: req.i18n,
|
|
64
|
-
logger: req.logger
|
|
57
|
+
if (!clientSettings) return next(new _prosopo_common.ProsopoError({
|
|
58
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
59
|
+
errorSite: "PROV-14",
|
|
60
|
+
context: { siteKey: dapp }
|
|
65
61
|
}));
|
|
66
62
|
const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
|
|
67
63
|
if (!normalizedIp) req.logger.warn(() => ({ msg: "Request missing IP; geoblocking will be skipped" }));
|
|
@@ -73,25 +69,24 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
|
|
|
73
69
|
const userAccessPolicy = accessPolicies.find((p) => !p.deferToVerify);
|
|
74
70
|
const deferredParamsPolicy = accessPolicies.find((p) => p.deferToVerify === true);
|
|
75
71
|
const { valid, reason, sessionId: validSessionId, powDifficulty } = await tasks.powCaptchaManager.isValidRequest(clientSettings, _prosopo_types.CaptchaType.pow, env, sessionId, userAccessPolicy, normalizedIp);
|
|
76
|
-
if (!valid) return next(new _prosopo_common.
|
|
72
|
+
if (!valid) return next(new _prosopo_common.ProsopoError({
|
|
73
|
+
code: require_errorCodeForReason.errorCodeForReason(reason),
|
|
74
|
+
errorSite: "PROV-82",
|
|
77
75
|
context: {
|
|
78
|
-
code: 400,
|
|
79
76
|
siteKey: dapp,
|
|
80
77
|
user
|
|
81
|
-
}
|
|
82
|
-
i18n: req.i18n,
|
|
83
|
-
logger: req.logger
|
|
78
|
+
}
|
|
84
79
|
}));
|
|
85
80
|
const origin = req.headers.origin;
|
|
86
|
-
if (!origin) return next(new _prosopo_common.
|
|
81
|
+
if (!origin) return next(new _prosopo_common.ProsopoError({
|
|
82
|
+
code: "INVALID_REQUEST",
|
|
83
|
+
errorSite: "PROV-15",
|
|
84
|
+
message: "BadRequest",
|
|
87
85
|
context: {
|
|
88
86
|
error: "Origin header not found",
|
|
89
|
-
code: 400,
|
|
90
87
|
siteKey: dapp,
|
|
91
88
|
user
|
|
92
|
-
}
|
|
93
|
-
i18n: req.i18n,
|
|
94
|
-
logger: req.logger
|
|
89
|
+
}
|
|
95
90
|
}));
|
|
96
91
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
|
|
97
92
|
const difficulty = (trafficVerdict.kind === "challenge" ? trafficVerdict.powDifficulty : void 0) || powDifficulty || userAccessPolicy?.powDifficulty || deferredParamsPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty;
|
|
@@ -136,15 +131,15 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
|
|
|
136
131
|
body: require_requestBodySummary.summariseRequestBody(req),
|
|
137
132
|
msg: "Error in PoW captcha challenge request"
|
|
138
133
|
}));
|
|
139
|
-
return next(new _prosopo_common.
|
|
134
|
+
return next(new _prosopo_common.ProsopoError({
|
|
135
|
+
code: "UNEXPECTED",
|
|
136
|
+
errorSite: "PROV-16",
|
|
137
|
+
message: "BadRequest",
|
|
138
|
+
cause: err,
|
|
140
139
|
context: {
|
|
141
|
-
code: 500,
|
|
142
140
|
siteKey: req.body.dapp,
|
|
143
|
-
user: req.body.user
|
|
144
|
-
|
|
145
|
-
},
|
|
146
|
-
i18n: req.i18n,
|
|
147
|
-
logger: req.logger
|
|
141
|
+
user: req.body.user
|
|
142
|
+
}
|
|
148
143
|
}));
|
|
149
144
|
}
|
|
150
145
|
};
|
|
@@ -1,16 +1,29 @@
|
|
|
1
|
+
const require_mobileSignals = require("../../utils/mobileSignals.cjs");
|
|
1
2
|
const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
|
|
2
3
|
const require_interactiveCaptchaChallenge = require("./interactiveCaptchaChallenge.cjs");
|
|
3
4
|
const require_maintenanceModeResponses = require("./maintenanceModeResponses.cjs");
|
|
4
5
|
const require_constants = require("./getFrictionlessCaptchaChallenge/constants.cjs");
|
|
5
6
|
let _prosopo_types = require("@prosopo/types");
|
|
7
|
+
let _prosopo_captcha_severity = require("@prosopo/captcha-severity");
|
|
6
8
|
let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
|
|
7
9
|
//#region src/api/captcha/getPuzzleCaptchaChallenge.ts
|
|
10
|
+
/** Exported for unit testing only; the default export is the entry point. */
|
|
8
11
|
var issuePuzzleChallenge = async ({ tasks, user, dapp, origin, clientSettings, sessionRecord, trafficVerdict, provenance }) => {
|
|
9
12
|
const challengeVerdict = trafficVerdict.kind === "challenge" ? trafficVerdict : void 0;
|
|
10
|
-
const
|
|
13
|
+
const mobileVerdict = require_mobileSignals.deriveMobileVerdict({
|
|
14
|
+
userAgent: provenance.headers["user-agent"],
|
|
15
|
+
headers: provenance.headers,
|
|
16
|
+
...provenance.ipInfo?.isValid && { carrierNetwork: provenance.ipInfo.isMobile },
|
|
17
|
+
...sessionRecord?.tcpMss !== void 0 && { tcpMss: sessionRecord.tcpMss },
|
|
18
|
+
...sessionRecord?.webView !== void 0 && { webView: sessionRecord.webView }
|
|
19
|
+
});
|
|
20
|
+
const easeForTouch = mobileVerdict.isMobile && mobileVerdict.corroborated;
|
|
21
|
+
const requestedTolerance = challengeVerdict?.puzzleTolerance ?? sessionRecord?.puzzleTolerance ?? clientSettings?.settings?.puzzleTolerance;
|
|
22
|
+
const tolerance = easeForTouch && requestedTolerance !== void 0 ? (0, _prosopo_captcha_severity.easeToleranceForTouch)(requestedTolerance) : requestedTolerance;
|
|
11
23
|
const routedPuzzleSettings = challengeVerdict?.puzzleSettings ?? sessionRecord?.puzzle;
|
|
12
24
|
const effectivePuzzleSettings = require_puzzleRenderer.resolvePuzzleRenderSettings(clientSettings?.settings?.puzzle, routedPuzzleSettings);
|
|
13
|
-
const
|
|
25
|
+
const pieceScaleRange = require_puzzleRenderer.resolvePuzzlePieceScaleRange(clientSettings?.settings?.puzzle, routedPuzzleSettings);
|
|
26
|
+
const effectivePieceSize = require_puzzleRenderer.samplePuzzlePieceSize(easeForTouch ? (0, _prosopo_captcha_severity.easePieceScaleForTouch)(pieceScaleRange) : pieceScaleRange);
|
|
14
27
|
const challenge = await tasks.puzzleCaptchaManager.getPuzzleCaptchaChallenge(user, dapp, origin, tolerance);
|
|
15
28
|
await tasks.db.storePuzzleCaptchaRecord(challenge.challenge, {
|
|
16
29
|
requestedAtTimestamp: challenge.requestedAtTimestamp,
|
|
@@ -45,7 +58,12 @@ var issuePuzzleChallenge = async ({ tasks, user, dapp, origin, clientSettings, s
|
|
|
45
58
|
}));
|
|
46
59
|
});
|
|
47
60
|
return {
|
|
48
|
-
logData: {
|
|
61
|
+
logData: {
|
|
62
|
+
tolerance: challenge.tolerance,
|
|
63
|
+
pieceSize: images.pieceSize,
|
|
64
|
+
mobileScore: mobileVerdict.score,
|
|
65
|
+
mobileCorroborated: mobileVerdict.corroborated ? 1 : 0
|
|
66
|
+
},
|
|
49
67
|
response: {
|
|
50
68
|
[_prosopo_types.ApiParams.status]: "ok",
|
|
51
69
|
[_prosopo_types.ApiParams.challenge]: challenge.challenge,
|
|
@@ -69,3 +87,4 @@ var getPuzzleCaptchaChallenge_default = (env, userAccessRulesStorage) => require
|
|
|
69
87
|
});
|
|
70
88
|
//#endregion
|
|
71
89
|
exports.default = getPuzzleCaptchaChallenge_default;
|
|
90
|
+
exports.issuePuzzleChallenge = issuePuzzleChallenge;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
|
|
2
|
+
const require_errorCodeForReason = require("../errorCodeForReason.cjs");
|
|
2
3
|
const require_metrics = require("../metrics.cjs");
|
|
3
4
|
const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
|
|
4
5
|
const require_validateAddress = require("../validateAddress.cjs");
|
|
@@ -20,13 +21,11 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
|
|
|
20
21
|
try {
|
|
21
22
|
parsed = _prosopo_types.GetPuzzleCaptchaChallengeRequestBody.parse(req.body);
|
|
22
23
|
} catch (err) {
|
|
23
|
-
return next(new _prosopo_common.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
i18n: req.i18n,
|
|
29
|
-
logger: req.logger
|
|
24
|
+
return next(new _prosopo_common.ProsopoError({
|
|
25
|
+
code: "INVALID_REQUEST",
|
|
26
|
+
errorSite: "PROV-17",
|
|
27
|
+
message: "Error parsing captcha",
|
|
28
|
+
cause: err
|
|
30
29
|
}));
|
|
31
30
|
}
|
|
32
31
|
const { user, dapp, sessionId, simdReadings } = parsed;
|
|
@@ -58,13 +57,10 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
|
|
|
58
57
|
const manager = spec.manager(tasks);
|
|
59
58
|
try {
|
|
60
59
|
const clientSettings = await tasks.db.getClientRecord(dapp);
|
|
61
|
-
if (!clientSettings) return next(new _prosopo_common.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
},
|
|
66
|
-
i18n: req.i18n,
|
|
67
|
-
logger: req.logger
|
|
60
|
+
if (!clientSettings) return next(new _prosopo_common.ProsopoError({
|
|
61
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
62
|
+
errorSite: "PROV-18",
|
|
63
|
+
context: { siteKey: dapp }
|
|
68
64
|
}));
|
|
69
65
|
const normalizedIp = require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger);
|
|
70
66
|
if (!normalizedIp) req.logger.warn(() => ({ msg: "Request missing IP; geoblocking will be skipped" }));
|
|
@@ -74,25 +70,24 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
|
|
|
74
70
|
const userScope = require_blacklistRequestInspector.getRequestUserScope((0, _prosopo_util.flatten)(req.headers), req.ja4, normalizedIp, user, sessionRecord?.decryptedHeadHash, void 0, countryCode, asn);
|
|
75
71
|
const userAccessPolicy = (await manager.getPrioritisedAccessPolicies(userAccessRulesStorage, dapp, userScope, require_blacklistRequestInspector.normalizeHeadersForMatching(req.headers))).find((p) => !p.deferToVerify);
|
|
76
72
|
const { valid, reason, sessionId: validSessionId } = await manager.isValidRequest(clientSettings, captchaType, env, sessionId, userAccessPolicy, normalizedIp);
|
|
77
|
-
if (!valid) return next(new _prosopo_common.
|
|
73
|
+
if (!valid) return next(new _prosopo_common.ProsopoError({
|
|
74
|
+
code: require_errorCodeForReason.errorCodeForReason(reason),
|
|
75
|
+
errorSite: "PROV-83",
|
|
78
76
|
context: {
|
|
79
|
-
code: 400,
|
|
80
77
|
siteKey: dapp,
|
|
81
78
|
user
|
|
82
|
-
}
|
|
83
|
-
i18n: req.i18n,
|
|
84
|
-
logger: req.logger
|
|
79
|
+
}
|
|
85
80
|
}));
|
|
86
81
|
const origin = req.headers.origin;
|
|
87
|
-
if (!origin) return next(new _prosopo_common.
|
|
82
|
+
if (!origin) return next(new _prosopo_common.ProsopoError({
|
|
83
|
+
code: "INVALID_REQUEST",
|
|
84
|
+
errorSite: "PROV-19",
|
|
85
|
+
message: "BadRequest",
|
|
88
86
|
context: {
|
|
89
87
|
error: "Origin header not found",
|
|
90
|
-
code: 400,
|
|
91
88
|
siteKey: dapp,
|
|
92
89
|
user
|
|
93
|
-
}
|
|
94
|
-
i18n: req.i18n,
|
|
95
|
-
logger: req.logger
|
|
90
|
+
}
|
|
96
91
|
}));
|
|
97
92
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
|
|
98
93
|
if (validSessionId && simdReadings) await tasks.frictionlessManager.decryptAndAttachSimdReadingsIfAbsent(validSessionId, simdReadings, _prosopo_types.SimdReadingsStage.challenge).catch((updateErr) => {
|
|
@@ -138,15 +133,15 @@ var interactiveChallengeHandler = (env, userAccessRulesStorage, spec) => async (
|
|
|
138
133
|
body: require_requestBodySummary.summariseRequestBody(req),
|
|
139
134
|
msg: `Error in ${label} captcha challenge request`
|
|
140
135
|
}));
|
|
141
|
-
return next(new _prosopo_common.
|
|
136
|
+
return next(new _prosopo_common.ProsopoError({
|
|
137
|
+
code: "UNEXPECTED",
|
|
138
|
+
errorSite: "PROV-20",
|
|
139
|
+
message: "BadRequest",
|
|
140
|
+
cause: err,
|
|
142
141
|
context: {
|
|
143
|
-
code: 500,
|
|
144
142
|
siteKey: req.body.dapp,
|
|
145
|
-
user: req.body.user
|
|
146
|
-
|
|
147
|
-
},
|
|
148
|
-
i18n: req.i18n,
|
|
149
|
-
logger: req.logger
|
|
143
|
+
user: req.body.user
|
|
144
|
+
}
|
|
150
145
|
}));
|
|
151
146
|
}
|
|
152
147
|
};
|
|
@@ -19,14 +19,12 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
|
|
|
19
19
|
try {
|
|
20
20
|
parsed = spec.parse(req.body);
|
|
21
21
|
} catch (err) {
|
|
22
|
-
return next(new _prosopo_common.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
i18n: req.i18n,
|
|
29
|
-
logger: req.logger
|
|
22
|
+
return next(new _prosopo_common.ProsopoError({
|
|
23
|
+
code: "INVALID_REQUEST",
|
|
24
|
+
errorSite: "PROV-21",
|
|
25
|
+
message: "Error parsing captcha",
|
|
26
|
+
cause: err,
|
|
27
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
30
28
|
}));
|
|
31
29
|
}
|
|
32
30
|
const { dapp, user } = parsed;
|
|
@@ -42,13 +40,10 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
|
|
|
42
40
|
}
|
|
43
41
|
try {
|
|
44
42
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
45
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
i18n: req.i18n,
|
|
51
|
-
logger: req.logger
|
|
43
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
44
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
45
|
+
errorSite: "PROV-22",
|
|
46
|
+
context: { siteKey: dapp }
|
|
52
47
|
}));
|
|
53
48
|
const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
|
|
54
49
|
const response = {
|
|
@@ -57,19 +52,18 @@ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
|
|
|
57
52
|
};
|
|
58
53
|
return res.json(response);
|
|
59
54
|
} catch (err) {
|
|
55
|
+
if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
|
|
60
56
|
req.logger.error(() => ({
|
|
61
57
|
err,
|
|
62
58
|
body: require_requestBodySummary.summariseRequestBody(req),
|
|
63
59
|
msg: `Error in ${spec.label} captcha solution submission`
|
|
64
60
|
}));
|
|
65
|
-
return next(new _prosopo_common.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
i18n: req.i18n,
|
|
72
|
-
logger: req.logger
|
|
61
|
+
return next(new _prosopo_common.ProsopoError({
|
|
62
|
+
code: "UNEXPECTED",
|
|
63
|
+
errorSite: "PROV-23",
|
|
64
|
+
message: "BadRequest",
|
|
65
|
+
cause: err,
|
|
66
|
+
context: { siteKey: req.body.dapp }
|
|
73
67
|
}));
|
|
74
68
|
}
|
|
75
69
|
};
|
|
@@ -21,14 +21,12 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
21
21
|
try {
|
|
22
22
|
parsed = _prosopo_types.CaptchaSolutionBody.parse(req.body);
|
|
23
23
|
} catch (err) {
|
|
24
|
-
return next(new _prosopo_common.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
i18n: req.i18n,
|
|
31
|
-
logger: req.logger
|
|
24
|
+
return next(new _prosopo_common.ProsopoError({
|
|
25
|
+
code: "INVALID_REQUEST",
|
|
26
|
+
errorSite: "PROV-24",
|
|
27
|
+
message: "Error parsing captcha",
|
|
28
|
+
cause: err,
|
|
29
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
32
30
|
}));
|
|
33
31
|
}
|
|
34
32
|
const { user, dapp } = parsed;
|
|
@@ -44,13 +42,10 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
44
42
|
return res.json(result);
|
|
45
43
|
}
|
|
46
44
|
try {
|
|
47
|
-
if (!await tasks.db.getClientRecord(parsed.dapp)) return next(new _prosopo_common.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
i18n: req.i18n,
|
|
53
|
-
logger: req.logger
|
|
45
|
+
if (!await tasks.db.getClientRecord(parsed.dapp)) return next(new _prosopo_common.ProsopoError({
|
|
46
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
47
|
+
errorSite: "PROV-25",
|
|
48
|
+
context: { siteKey: dapp }
|
|
54
49
|
}));
|
|
55
50
|
const result = await tasks.imgCaptchaManager.dappUserSolution(user, dapp, parsed[_prosopo_types.ApiParams.requestHash], parsed[_prosopo_types.ApiParams.captchas], parsed[_prosopo_types.ApiParams.signature].user.timestamp, Number.parseInt(parsed[_prosopo_types.ApiParams.timestamp]), parsed[_prosopo_types.ApiParams.signature].provider.requestHash, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), req.ja4, parsed[_prosopo_types.ApiParams.behavioralData], req.ipInfo, parsed[_prosopo_types.ApiParams.simdReadings], parsed[_prosopo_types.ApiParams.clientMetaData]);
|
|
56
51
|
const returnValue = {
|
|
@@ -59,19 +54,18 @@ var submitImageCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
59
54
|
};
|
|
60
55
|
return res.json(returnValue);
|
|
61
56
|
} catch (err) {
|
|
57
|
+
if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
|
|
62
58
|
req.logger.error(() => ({
|
|
63
59
|
err,
|
|
64
60
|
body: require_requestBodySummary.summariseRequestBody(req),
|
|
65
61
|
msg: "Error in image captcha solution submission"
|
|
66
62
|
}));
|
|
67
|
-
return next(new _prosopo_common.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
i18n: req.i18n,
|
|
74
|
-
logger: req.logger
|
|
63
|
+
return next(new _prosopo_common.ProsopoError({
|
|
64
|
+
code: "UNEXPECTED",
|
|
65
|
+
errorSite: "PROV-26",
|
|
66
|
+
message: "BadRequest",
|
|
67
|
+
cause: err,
|
|
68
|
+
context: { siteKey: req.body.dapp }
|
|
75
69
|
}));
|
|
76
70
|
}
|
|
77
71
|
};
|