@prosopo/provider 5.19.4 → 5.20.1
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 +40 -36
- package/.turbo/turbo-build$colon$tsc.log +28 -28
- package/.turbo/turbo-build.log +43 -36
- package/CHANGELOG.md +155 -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 +20 -25
- 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/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 +23 -25
- 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 +19 -24
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +31 -42
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +26 -31
- 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 +22 -24
- 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/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/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/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/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/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/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/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/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);
|
|
@@ -352,14 +350,13 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
352
350
|
}));
|
|
353
351
|
let botScore = baseBotScore + lScore;
|
|
354
352
|
const { valid, reason } = validation;
|
|
355
|
-
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",
|
|
356
356
|
context: {
|
|
357
|
-
code: 400,
|
|
358
357
|
siteKey: dapp,
|
|
359
358
|
user
|
|
360
|
-
}
|
|
361
|
-
i18n: req.i18n,
|
|
362
|
-
logger: req.logger
|
|
359
|
+
}
|
|
363
360
|
}));
|
|
364
361
|
require_metrics.recordBotScore(botScore);
|
|
365
362
|
if (triggeredDetectors && triggeredDetectors.length > 0) require_metrics.recordDetectorTriggered(triggeredDetectors);
|
|
@@ -492,13 +489,11 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
492
489
|
err,
|
|
493
490
|
msg: "Error in frictionless captcha challenge"
|
|
494
491
|
}));
|
|
495
|
-
return next(new _prosopo_common.
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
i18n: req.i18n,
|
|
501
|
-
logger: req.logger
|
|
492
|
+
return next(new _prosopo_common.ProsopoError({
|
|
493
|
+
code: "INVALID_REQUEST",
|
|
494
|
+
errorSite: "PROV-7",
|
|
495
|
+
message: "BadRequest",
|
|
496
|
+
cause: err
|
|
502
497
|
}));
|
|
503
498
|
}
|
|
504
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,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
|
};
|
|
@@ -12,6 +12,7 @@ let _prosopo_types = require("@prosopo/types");
|
|
|
12
12
|
let _prosopo_util = require("@prosopo/util");
|
|
13
13
|
let _prosopo_captcha_severity = require("@prosopo/captcha-severity");
|
|
14
14
|
let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
|
|
15
|
+
let _prosopo_fingerprint_summary = require("@prosopo/fingerprint/summary");
|
|
15
16
|
//#region src/api/captcha/submitPoWCaptchaSolution.ts
|
|
16
17
|
var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
17
18
|
if (require_apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
@@ -26,14 +27,12 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
26
27
|
try {
|
|
27
28
|
parsed = _prosopo_types.SubmitPowCaptchaSolutionBody.parse(req.body);
|
|
28
29
|
} catch (err) {
|
|
29
|
-
return next(new _prosopo_common.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
i18n: req.i18n,
|
|
36
|
-
logger: req.logger
|
|
30
|
+
return next(new _prosopo_common.ProsopoError({
|
|
31
|
+
code: "INVALID_REQUEST",
|
|
32
|
+
errorSite: "PROV-27",
|
|
33
|
+
message: "Error parsing captcha",
|
|
34
|
+
cause: err,
|
|
35
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
37
36
|
}));
|
|
38
37
|
}
|
|
39
38
|
const { challenge, signature, nonce, dapp, user, behavioralData, salt, simdReadings, clientMetaData, fingerprintProof } = parsed;
|
|
@@ -49,22 +48,21 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
49
48
|
}
|
|
50
49
|
try {
|
|
51
50
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
52
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
i18n: req.i18n,
|
|
58
|
-
logger: req.logger
|
|
51
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
52
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
53
|
+
errorSite: "PROV-28",
|
|
54
|
+
context: { siteKey: dapp }
|
|
59
55
|
}));
|
|
60
56
|
const flatHeaders = (0, _prosopo_util.flatten)(req.headers);
|
|
61
57
|
const userAgent = req.headers["user-agent"] ?? "";
|
|
62
58
|
const countryCode = req.ipInfo && "isValid" in req.ipInfo && req.ipInfo.isValid ? req.ipInfo.countryCode : void 0;
|
|
59
|
+
const fingerprintSummary = (0, _prosopo_fingerprint_summary.summariseFingerprintProof)(fingerprintProof);
|
|
63
60
|
req.logger.info(() => ({
|
|
64
61
|
msg: fingerprintProof ? "fingerprintProof detected" : "no fingerprintProof on PoW submission",
|
|
65
62
|
data: {
|
|
66
63
|
fingerprintProofPresent: fingerprintProof !== void 0,
|
|
67
64
|
fingerprintProofBytes: fingerprintProof?.length ?? 0,
|
|
65
|
+
fingerprintSummarised: fingerprintSummary !== void 0,
|
|
68
66
|
challenge
|
|
69
67
|
}
|
|
70
68
|
}));
|
|
@@ -82,6 +80,7 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
82
80
|
userAgent,
|
|
83
81
|
...req.ja4 && { ja4: req.ja4 },
|
|
84
82
|
...fingerprintProof && { fingerprintProof },
|
|
83
|
+
...fingerprintSummary && { fingerprintSummary },
|
|
85
84
|
...req.tcpToChelloUs !== void 0 && { tcpToChelloUs: req.tcpToChelloUs },
|
|
86
85
|
...req.chelloToHandshakeUs !== void 0 && { chelloToHandshakeUs: req.chelloToHandshakeUs },
|
|
87
86
|
...require_rawTlsSignalsMiddleware.rawTlsSignalsForSession(req),
|
|
@@ -90,7 +89,7 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
90
89
|
}
|
|
91
90
|
});
|
|
92
91
|
const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
|
|
93
|
-
const result = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, signature.provider.challenge, nonce, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), flatHeaders, behavioralData, salt, simdReadings, clientMetaData);
|
|
92
|
+
const result = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, signature.provider.challenge, nonce, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), flatHeaders, behavioralData, salt, simdReadings, clientMetaData, fingerprintSummary);
|
|
94
93
|
if (result.routingOutput) req.logger.info(() => ({
|
|
95
94
|
msg: "post-PoW routing decision",
|
|
96
95
|
data: {
|
|
@@ -115,19 +114,18 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
115
114
|
};
|
|
116
115
|
return res.json(response);
|
|
117
116
|
} catch (err) {
|
|
117
|
+
if ((0, _prosopo_common.isProsopoError)(err) && !(0, _prosopo_common.isSevereError)(err)) return next(err);
|
|
118
118
|
req.logger.error(() => ({
|
|
119
119
|
err,
|
|
120
120
|
body: require_requestBodySummary.summariseRequestBody(req),
|
|
121
121
|
msg: "Error in PoW captcha solution submission"
|
|
122
122
|
}));
|
|
123
|
-
return next(new _prosopo_common.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
i18n: req.i18n,
|
|
130
|
-
logger: req.logger
|
|
123
|
+
return next(new _prosopo_common.ProsopoError({
|
|
124
|
+
code: "UNEXPECTED",
|
|
125
|
+
errorSite: "PROV-29",
|
|
126
|
+
message: "BadRequest",
|
|
127
|
+
cause: err,
|
|
128
|
+
context: { siteKey: req.body.dapp }
|
|
131
129
|
}));
|
|
132
130
|
}
|
|
133
131
|
};
|