@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
package/dist/cjs/api/verify.cjs
CHANGED
|
@@ -36,13 +36,11 @@ var decodeTokenOr400 = (token, i18n, logger, next) => {
|
|
|
36
36
|
try {
|
|
37
37
|
return (0, _prosopo_types.decodeProcaptchaOutput)(token);
|
|
38
38
|
} catch (error) {
|
|
39
|
-
next(new _prosopo_common.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
i18n,
|
|
45
|
-
logger
|
|
39
|
+
next(new _prosopo_common.ProsopoError({
|
|
40
|
+
code: "INVALID_REQUEST",
|
|
41
|
+
errorSite: "PROV-37",
|
|
42
|
+
message: "Error parsing captcha",
|
|
43
|
+
cause: error
|
|
46
44
|
}));
|
|
47
45
|
return null;
|
|
48
46
|
}
|
|
@@ -52,13 +50,12 @@ var dappSignatureError = (signature, message, pair, req) => {
|
|
|
52
50
|
(0, _prosopo_api_express_router.verifySignature)(signature, message, pair);
|
|
53
51
|
return;
|
|
54
52
|
} catch {
|
|
55
|
-
return new _prosopo_common.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
logger: req.logger
|
|
53
|
+
return new _prosopo_common.ProsopoError({
|
|
54
|
+
code: "UNAUTHORIZED",
|
|
55
|
+
errorSite: "PROV-38",
|
|
56
|
+
message: "Invalid signature",
|
|
57
|
+
status: 400,
|
|
58
|
+
context: { siteKey: pair.address }
|
|
62
59
|
});
|
|
63
60
|
}
|
|
64
61
|
};
|
|
@@ -77,14 +74,12 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
77
74
|
try {
|
|
78
75
|
parsed = _prosopo_types.ServerPuzzleCaptchaVerifyRequestBody.parse(req.body);
|
|
79
76
|
} catch (err) {
|
|
80
|
-
return next(new _prosopo_common.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
i18n: req.i18n,
|
|
87
|
-
logger: req.logger
|
|
77
|
+
return next(new _prosopo_common.ProsopoError({
|
|
78
|
+
code: "INVALID_REQUEST",
|
|
79
|
+
errorSite: "PROV-39",
|
|
80
|
+
message: "Error parsing captcha",
|
|
81
|
+
cause: err,
|
|
82
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
88
83
|
}));
|
|
89
84
|
}
|
|
90
85
|
try {
|
|
@@ -115,13 +110,10 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
115
110
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
116
111
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
117
112
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
118
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
i18n: req.i18n,
|
|
124
|
-
logger: req.logger
|
|
113
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
114
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
115
|
+
errorSite: "PROV-40",
|
|
116
|
+
context: { siteKey: dapp }
|
|
125
117
|
}));
|
|
126
118
|
if (!challenge) {
|
|
127
119
|
const unverifiedResponse = {
|
|
@@ -151,13 +143,11 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
151
143
|
err,
|
|
152
144
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
153
145
|
}));
|
|
154
|
-
return next(new _prosopo_common.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
i18n: req.i18n,
|
|
160
|
-
logger: req.logger
|
|
146
|
+
return next(new _prosopo_common.ProsopoError({
|
|
147
|
+
code: "UNEXPECTED",
|
|
148
|
+
errorSite: "PROV-41",
|
|
149
|
+
message: "BadRequest",
|
|
150
|
+
cause: err
|
|
161
151
|
}));
|
|
162
152
|
}
|
|
163
153
|
};
|
|
@@ -217,14 +207,12 @@ function prosopoVerifyRouter(env) {
|
|
|
217
207
|
try {
|
|
218
208
|
parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
|
|
219
209
|
} catch (err) {
|
|
220
|
-
return next(new _prosopo_common.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
i18n: req.i18n,
|
|
227
|
-
logger: req.logger
|
|
210
|
+
return next(new _prosopo_common.ProsopoError({
|
|
211
|
+
code: "INVALID_REQUEST",
|
|
212
|
+
errorSite: "PROV-42",
|
|
213
|
+
message: "Error parsing captcha",
|
|
214
|
+
cause: err,
|
|
215
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
228
216
|
}));
|
|
229
217
|
}
|
|
230
218
|
const { dappSignature, token, ip, maxVerifiedTime, email, clientSessionId } = parsed;
|
|
@@ -255,14 +243,13 @@ function prosopoVerifyRouter(env) {
|
|
|
255
243
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
256
244
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
257
245
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
258
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
246
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
247
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
248
|
+
errorSite: "PROV-43",
|
|
259
249
|
context: {
|
|
260
|
-
code: 400,
|
|
261
250
|
siteKey: dapp,
|
|
262
251
|
user
|
|
263
|
-
}
|
|
264
|
-
i18n: req.i18n,
|
|
265
|
-
logger: req.logger
|
|
252
|
+
}
|
|
266
253
|
}));
|
|
267
254
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
268
255
|
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
@@ -285,14 +272,14 @@ function prosopoVerifyRouter(env) {
|
|
|
285
272
|
msg: "Error in verifyImageCaptchaSolution",
|
|
286
273
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
287
274
|
}));
|
|
288
|
-
return next(new _prosopo_common.
|
|
275
|
+
return next(new _prosopo_common.ProsopoError({
|
|
276
|
+
code: "UNEXPECTED",
|
|
277
|
+
errorSite: "PROV-44",
|
|
278
|
+
message: "BadRequest",
|
|
289
279
|
context: {
|
|
290
|
-
code: 500,
|
|
291
280
|
siteKey: req.body.dapp,
|
|
292
281
|
user: req.body.user
|
|
293
|
-
}
|
|
294
|
-
i18n: req.i18n,
|
|
295
|
-
logger: req.logger
|
|
282
|
+
}
|
|
296
283
|
}));
|
|
297
284
|
}
|
|
298
285
|
});
|
|
@@ -313,14 +300,12 @@ function prosopoVerifyRouter(env) {
|
|
|
313
300
|
try {
|
|
314
301
|
parsed = _prosopo_types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
|
|
315
302
|
} catch (err) {
|
|
316
|
-
return next(new _prosopo_common.
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
i18n: req.i18n,
|
|
323
|
-
logger: req.logger
|
|
303
|
+
return next(new _prosopo_common.ProsopoError({
|
|
304
|
+
code: "INVALID_REQUEST",
|
|
305
|
+
errorSite: "PROV-45",
|
|
306
|
+
message: "Error parsing captcha",
|
|
307
|
+
cause: err,
|
|
308
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
324
309
|
}));
|
|
325
310
|
}
|
|
326
311
|
try {
|
|
@@ -351,13 +336,10 @@ function prosopoVerifyRouter(env) {
|
|
|
351
336
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
352
337
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
353
338
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
354
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
},
|
|
359
|
-
i18n: req.i18n,
|
|
360
|
-
logger: req.logger
|
|
339
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
340
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
341
|
+
errorSite: "PROV-46",
|
|
342
|
+
context: { siteKey: dapp }
|
|
361
343
|
}));
|
|
362
344
|
if (!challenge) {
|
|
363
345
|
const unverifiedResponse = {
|
|
@@ -377,7 +359,7 @@ function prosopoVerifyRouter(env) {
|
|
|
377
359
|
const maintenanceResponse = require_maintenanceModeResponses.buildMaintenanceVerificationResponse(req.i18n.t);
|
|
378
360
|
return res.json(maintenanceResponse);
|
|
379
361
|
}
|
|
380
|
-
const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
|
|
362
|
+
const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId, clientRecord.settings.ipValidationRules);
|
|
381
363
|
const verificationResponse = tasks.powCaptchaManager.getVerificationResponse(verified, clientRecord, req.i18n.t, score, reason, sessionId);
|
|
382
364
|
return res.json(verificationResponse);
|
|
383
365
|
} catch (err) {
|
|
@@ -386,13 +368,11 @@ function prosopoVerifyRouter(env) {
|
|
|
386
368
|
err,
|
|
387
369
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
388
370
|
}));
|
|
389
|
-
return next(new _prosopo_common.
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
i18n: req.i18n,
|
|
395
|
-
logger: req.logger
|
|
371
|
+
return next(new _prosopo_common.ProsopoError({
|
|
372
|
+
code: "UNEXPECTED",
|
|
373
|
+
errorSite: "PROV-47",
|
|
374
|
+
message: "BadRequest",
|
|
375
|
+
cause: err
|
|
396
376
|
}));
|
|
397
377
|
}
|
|
398
378
|
});
|
|
@@ -437,14 +417,12 @@ function prosopoVerifyRouter(env) {
|
|
|
437
417
|
try {
|
|
438
418
|
parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
|
|
439
419
|
} catch (err) {
|
|
440
|
-
return next(new _prosopo_common.
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
}
|
|
446
|
-
i18n: req.i18n,
|
|
447
|
-
logger: req.logger
|
|
420
|
+
return next(new _prosopo_common.ProsopoError({
|
|
421
|
+
code: "INVALID_REQUEST",
|
|
422
|
+
errorSite: "PROV-48",
|
|
423
|
+
message: "Error parsing captcha",
|
|
424
|
+
cause: err,
|
|
425
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
448
426
|
}));
|
|
449
427
|
}
|
|
450
428
|
const { dappSignature, token, ip, clientSessionId } = parsed;
|
|
@@ -471,14 +449,13 @@ function prosopoVerifyRouter(env) {
|
|
|
471
449
|
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
472
450
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
473
451
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
474
|
-
if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.
|
|
452
|
+
if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.ProsopoError({
|
|
453
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
454
|
+
errorSite: "PROV-49",
|
|
475
455
|
context: {
|
|
476
|
-
code: 400,
|
|
477
456
|
siteKey: dapp,
|
|
478
457
|
user
|
|
479
|
-
}
|
|
480
|
-
i18n: req.i18n,
|
|
481
|
-
logger: req.logger
|
|
458
|
+
}
|
|
482
459
|
}));
|
|
483
460
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
484
461
|
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
@@ -503,14 +480,14 @@ function prosopoVerifyRouter(env) {
|
|
|
503
480
|
msg: "Error in verifyAuthenticatedSession",
|
|
504
481
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
505
482
|
}));
|
|
506
|
-
return next(new _prosopo_common.
|
|
483
|
+
return next(new _prosopo_common.ProsopoError({
|
|
484
|
+
code: "UNEXPECTED",
|
|
485
|
+
errorSite: "PROV-50",
|
|
486
|
+
message: "BadRequest",
|
|
507
487
|
context: {
|
|
508
|
-
code: 500,
|
|
509
488
|
siteKey: req.body.dapp,
|
|
510
489
|
user: req.body.user
|
|
511
|
-
}
|
|
512
|
-
i18n: req.i18n,
|
|
513
|
-
logger: req.logger
|
|
490
|
+
}
|
|
514
491
|
}));
|
|
515
492
|
}
|
|
516
493
|
});
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -45,6 +45,7 @@ exports.getIpAddressFromComposite = require_compositeIpAddress.getIpAddressFromC
|
|
|
45
45
|
exports.getJA4 = require_ja4Middleware.getJA4;
|
|
46
46
|
exports.getPrioritisedAccessRule = require_blacklistRequestInspector.getPrioritisedAccessRule;
|
|
47
47
|
exports.getRequestUserScope = require_blacklistRequestInspector.getRequestUserScope;
|
|
48
|
+
exports.getServerVerifyPaths = require_startProviderApi.getServerVerifyPaths;
|
|
48
49
|
exports.getUserFromJWT = require_startProviderApi.getUserFromJWT;
|
|
49
50
|
exports.getVerdictCache = require_blacklistRequestInspector.getVerdictCache;
|
|
50
51
|
exports.handshakeTimingMiddleware = require_handshakeTimingMiddleware.handshakeTimingMiddleware;
|
|
@@ -552,9 +552,7 @@ var CaptchaManager = class CaptchaManager {
|
|
|
552
552
|
*
|
|
553
553
|
* @returns The blocking policy if user should be blocked, undefined otherwise
|
|
554
554
|
*/
|
|
555
|
-
async checkForHardBlock(userAccessRulesStorage, challengeRecord, userAccount, headers, coords, countryCode, asn) {
|
|
556
|
-
let headHash;
|
|
557
|
-
if (challengeRecord.sessionId) headHash = (await this.db.getSessionRecordBySessionId(challengeRecord.sessionId))?.decryptedHeadHash;
|
|
555
|
+
async checkForHardBlock(userAccessRulesStorage, challengeRecord, userAccount, headers, headHash, coords, countryCode, asn) {
|
|
558
556
|
const coordsString = coords ? JSON.stringify(coords) : void 0;
|
|
559
557
|
const ipAddressRecord = require_compositeIpAddress.getIpAddressFromComposite(challengeRecord.ipAddress);
|
|
560
558
|
const userScope = require_blacklistRequestInspector.getRequestUserScope(headers, challengeRecord.ja4, ipAddressRecord.address, userAccount, headHash, coordsString, countryCode, asn);
|
|
@@ -581,8 +579,9 @@ var CaptchaManager = class CaptchaManager {
|
|
|
581
579
|
* time (ipInfoMiddleware → storeXxxRecord), so by default we reuse it
|
|
582
580
|
* instead of hitting the sidecar again.
|
|
583
581
|
* - If the dapp's server passed up the end user's current IP via the
|
|
584
|
-
* verify call,
|
|
585
|
-
*
|
|
582
|
+
* verify call, the caller looks that up fresh and passes the result as
|
|
583
|
+
* `currentIpInfo` — it's the "now" IP for filtering and may differ from
|
|
584
|
+
* the IP that originally requested the captcha.
|
|
586
585
|
* - When the session carries a `dnsEvent`, its `peerIp` and `resolverIp`
|
|
587
586
|
* are enriched and passed alongside the primary IP.
|
|
588
587
|
* - The abuser category defaults to `{action:"block"}` so abusive
|
|
@@ -595,7 +594,7 @@ var CaptchaManager = class CaptchaManager {
|
|
|
595
594
|
* updates record / session state differently); this helper just returns
|
|
596
595
|
* the verdict.
|
|
597
596
|
*/
|
|
598
|
-
async resolveTrafficFilterCheck(
|
|
597
|
+
async resolveTrafficFilterCheck(recordIpInfo, trafficFilter, currentIpInfo, enrichedDnsEvent) {
|
|
599
598
|
const effective = {
|
|
600
599
|
abuser: { action: _prosopo_types.TrafficFilterAction.Block },
|
|
601
600
|
...trafficFilter
|
|
@@ -604,8 +603,7 @@ var CaptchaManager = class CaptchaManager {
|
|
|
604
603
|
isBlocked: false,
|
|
605
604
|
matches: []
|
|
606
605
|
};
|
|
607
|
-
|
|
608
|
-
return require_checkTrafficFilter.checkTrafficFilter(ipInfo, effective, require_enrichDnsEvent.extraIpInfosFromEnrichedDnsEvent(enrichedDnsEvent), enrichedDnsEvent?.pathValid);
|
|
606
|
+
return require_checkTrafficFilter.checkTrafficFilter(currentIpInfo ?? recordIpInfo, effective, require_enrichDnsEvent.extraIpInfosFromEnrichedDnsEvent(enrichedDnsEvent), enrichedDnsEvent?.pathValid);
|
|
609
607
|
}
|
|
610
608
|
/**
|
|
611
609
|
* Does this client's tier entitle it to the bot score, and is there one?
|
|
@@ -126,9 +126,11 @@ var ClientTaskManager = class {
|
|
|
126
126
|
if (newClientRecords) await this.providerDB.updateClientRecords(newClientRecords);
|
|
127
127
|
await this.providerDB.updateScheduledTaskStatus(taskID, _prosopo_types.ScheduledTaskStatus.Completed, { data: { clientRecords: newClientRecords.length } });
|
|
128
128
|
} catch (e) {
|
|
129
|
-
const getClientListError = new _prosopo_common.
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
const getClientListError = new _prosopo_common.ProsopoError({
|
|
130
|
+
code: "DB_QUERY_FAILED",
|
|
131
|
+
errorSite: "PROV-51",
|
|
132
|
+
message: "Unknown database error",
|
|
133
|
+
cause: e
|
|
132
134
|
});
|
|
133
135
|
this.logger.error(() => ({
|
|
134
136
|
err: getClientListError,
|
|
@@ -170,12 +172,14 @@ var ClientTaskManager = class {
|
|
|
170
172
|
await this.providerDB.removeClientRecords(accounts);
|
|
171
173
|
}
|
|
172
174
|
async updateDecisionMachine(scope, runtime, source, dappAccount, language, name, version, captchaType, kind) {
|
|
173
|
-
if (scope === _prosopo_types.DecisionMachineScope.Dapp && !dappAccount) throw new _prosopo_common.
|
|
175
|
+
if (scope === _prosopo_types.DecisionMachineScope.Dapp && !dappAccount) throw new _prosopo_common.ProsopoError({
|
|
176
|
+
code: "INVALID_REQUEST",
|
|
177
|
+
errorSite: "PROV-52",
|
|
178
|
+
message: "BadRequest",
|
|
174
179
|
context: {
|
|
175
180
|
scope,
|
|
176
181
|
dappAccount
|
|
177
|
-
}
|
|
178
|
-
logger: this.logger
|
|
182
|
+
}
|
|
179
183
|
});
|
|
180
184
|
const now = /* @__PURE__ */ new Date();
|
|
181
185
|
await this.providerDB.upsertDecisionMachineArtifact({
|
|
@@ -218,9 +222,11 @@ var ClientTaskManager = class {
|
|
|
218
222
|
}
|
|
219
223
|
async getDecisionMachine(id) {
|
|
220
224
|
const artifact = await this.providerDB.getDecisionMachineArtifactById(id);
|
|
221
|
-
if (!artifact) throw new _prosopo_common.
|
|
222
|
-
|
|
223
|
-
|
|
225
|
+
if (!artifact) throw new _prosopo_common.ProsopoError({
|
|
226
|
+
code: "INVALID_REQUEST",
|
|
227
|
+
errorSite: "PROV-53",
|
|
228
|
+
message: "BadRequest",
|
|
229
|
+
context: { id }
|
|
224
230
|
});
|
|
225
231
|
return {
|
|
226
232
|
_id: artifact._id.toString(),
|
|
@@ -239,22 +245,29 @@ var ClientTaskManager = class {
|
|
|
239
245
|
}
|
|
240
246
|
async removeDecisionMachine(id) {
|
|
241
247
|
const success = await this.providerDB.removeDecisionMachineArtifact(id);
|
|
242
|
-
if (!success) throw new _prosopo_common.
|
|
248
|
+
if (!success) throw new _prosopo_common.ProsopoError({
|
|
249
|
+
code: "INVALID_REQUEST",
|
|
250
|
+
errorSite: "PROV-54",
|
|
251
|
+
message: "BadRequest",
|
|
243
252
|
context: {
|
|
244
253
|
id,
|
|
245
254
|
message: "Decision machine not found"
|
|
246
|
-
}
|
|
247
|
-
logger: this.logger
|
|
255
|
+
}
|
|
248
256
|
});
|
|
257
|
+
require_decisionMachineRunner.invalidateAllDecisionMachineArtifactCaches();
|
|
258
|
+
require_decisionMachineRunner.invalidateDecisionMachineScriptCache();
|
|
249
259
|
return {
|
|
250
260
|
success,
|
|
251
261
|
deletedId: id
|
|
252
262
|
};
|
|
253
263
|
}
|
|
254
264
|
async removeAllDecisionMachines() {
|
|
265
|
+
const deletedCount = await this.providerDB.removeAllDecisionMachineArtifacts();
|
|
266
|
+
require_decisionMachineRunner.invalidateAllDecisionMachineArtifactCaches();
|
|
267
|
+
require_decisionMachineRunner.invalidateDecisionMachineScriptCache();
|
|
255
268
|
return {
|
|
256
269
|
success: true,
|
|
257
|
-
deletedCount
|
|
270
|
+
deletedCount
|
|
258
271
|
};
|
|
259
272
|
}
|
|
260
273
|
/**
|
|
@@ -2,16 +2,36 @@ let _prosopo_common = require("@prosopo/common");
|
|
|
2
2
|
let _prosopo_datasets = require("@prosopo/datasets");
|
|
3
3
|
//#region src/tasks/dataset/datasetTasksUtils.ts
|
|
4
4
|
var providerValidateDataset = async (datasetRaw, minSolvedCaptchas, minUnsolvedCaptchas) => {
|
|
5
|
-
if (datasetRaw.captchas.length < minSolvedCaptchas + minUnsolvedCaptchas) throw new _prosopo_common.
|
|
5
|
+
if (datasetRaw.captchas.length < minSolvedCaptchas + minUnsolvedCaptchas) throw new _prosopo_common.ProsopoError({
|
|
6
|
+
code: "DATASET_INVALID",
|
|
7
|
+
errorSite: "PROV-55",
|
|
8
|
+
message: "Number of captchas in dataset is less than configured number of captchas",
|
|
9
|
+
context: { failedFuncName: providerValidateDataset.name }
|
|
10
|
+
});
|
|
6
11
|
const solutions = datasetRaw.captchas.map((captcha) => captcha.solution ? 1 : 0).reduce((partialSum, b) => partialSum + b, 0);
|
|
7
|
-
if (solutions < minSolvedCaptchas) throw new _prosopo_common.
|
|
8
|
-
|
|
12
|
+
if (solutions < minSolvedCaptchas) throw new _prosopo_common.ProsopoError({
|
|
13
|
+
code: "DATASET_INVALID",
|
|
14
|
+
errorSite: "PROV-56",
|
|
15
|
+
message: "Number of solutions in dataset is less than configured number of solutions",
|
|
16
|
+
context: { failedFuncName: providerValidateDataset.name }
|
|
17
|
+
});
|
|
18
|
+
if (datasetRaw.captchas.length - solutions < minUnsolvedCaptchas) throw new _prosopo_common.ProsopoError({
|
|
19
|
+
code: "DATASET_INVALID",
|
|
20
|
+
errorSite: "PROV-57",
|
|
21
|
+
message: "Number of captchas in dataset is less than configured number of captchas",
|
|
22
|
+
context: { failedFuncName: providerValidateDataset.name }
|
|
23
|
+
});
|
|
9
24
|
const dataset = await (0, _prosopo_datasets.buildDataset)(datasetRaw);
|
|
10
|
-
if (!dataset.datasetId || !dataset.datasetContentId) throw new _prosopo_common.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
25
|
+
if (!dataset.datasetId || !dataset.datasetContentId) throw new _prosopo_common.ProsopoError({
|
|
26
|
+
code: "DATASET_INVALID",
|
|
27
|
+
errorSite: "PROV-58",
|
|
28
|
+
message: "Dataset id undefined",
|
|
29
|
+
context: {
|
|
30
|
+
failedFuncName: providerValidateDataset.name,
|
|
31
|
+
datasetId: dataset.datasetId,
|
|
32
|
+
datasetContentId: dataset.datasetContentId
|
|
33
|
+
}
|
|
34
|
+
});
|
|
15
35
|
return dataset;
|
|
16
36
|
};
|
|
17
37
|
//#endregion
|
|
@@ -44,18 +44,20 @@ var ARTIFACT_CACHE_TTL_MS = Number.parseInt(process.env.DECISION_MACHINE_ARTIFAC
|
|
|
44
44
|
var DEFAULT_DECISION = { decision: _prosopo_types.DecisionMachineDecision.Allow };
|
|
45
45
|
var RequiredCountersSchema = zod.z.array(_prosopo_types.CounterSpecSchema);
|
|
46
46
|
/**
|
|
47
|
-
* Bumped by {@link invalidateAllDecisionMachineArtifactCaches}.
|
|
48
|
-
*
|
|
49
|
-
* diverge, which flushes every
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* This replaces a registry of live runners, which assumed runners were built
|
|
53
|
-
* once per process. They are built per request, so the registry grew without
|
|
54
|
-
* bound and construction eventually began to fail. `WeakRef` did not bound
|
|
55
|
-
* it: the set held the wrapper, which outlives its referent.
|
|
47
|
+
* Bumped by {@link invalidateAllDecisionMachineArtifactCaches}. Each cache
|
|
48
|
+
* records the generation it was filled under and is discarded once the two
|
|
49
|
+
* diverge, which flushes every cache without holding a reference to any of
|
|
50
|
+
* them.
|
|
56
51
|
*/
|
|
57
52
|
var artifactCacheGeneration = 0;
|
|
58
53
|
/**
|
|
54
|
+
* Runners are built per request, so a cache owned by the runner never served
|
|
55
|
+
* a second lookup and every decision paid two Mongo reads. The cache lives
|
|
56
|
+
* with the database the runner reads from instead: one per process in
|
|
57
|
+
* production, and still isolated between test doubles.
|
|
58
|
+
*/
|
|
59
|
+
var artifactCaches = /* @__PURE__ */ new WeakMap();
|
|
60
|
+
/**
|
|
59
61
|
* Flush every runner's in-memory artifact cache. Companion to
|
|
60
62
|
* {@link invalidateDecisionMachineScriptCache}. Call both after any
|
|
61
63
|
* `upsertDecisionMachineArtifact` upload.
|
|
@@ -66,19 +68,20 @@ var invalidateAllDecisionMachineArtifactCaches = () => {
|
|
|
66
68
|
var DecisionMachineRunner = class DecisionMachineRunner {
|
|
67
69
|
constructor(db) {
|
|
68
70
|
this.db = db;
|
|
69
|
-
this.artifactCache = /* @__PURE__ */ new Map();
|
|
70
|
-
this.seenArtifactCacheGeneration = artifactCacheGeneration;
|
|
71
71
|
}
|
|
72
|
-
/** Drop every
|
|
72
|
+
/** Drop every cached artifact read from this runner's database. */
|
|
73
73
|
invalidateArtifactCache() {
|
|
74
74
|
this.artifactCache.clear();
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
get artifactCache() {
|
|
77
|
+
const cache = artifactCaches.get(this.db);
|
|
78
|
+
if (cache && cache.generation === artifactCacheGeneration) return cache.entries;
|
|
79
|
+
const fresh = {
|
|
80
|
+
generation: artifactCacheGeneration,
|
|
81
|
+
entries: /* @__PURE__ */ new Map()
|
|
82
|
+
};
|
|
83
|
+
artifactCaches.set(this.db, fresh);
|
|
84
|
+
return fresh.entries;
|
|
82
85
|
}
|
|
83
86
|
/** Build a cache key for a given scope + kind + dappAccount tuple. */
|
|
84
87
|
static cacheKey(scope, kind, dappAccount) {
|
|
@@ -86,7 +89,6 @@ var DecisionMachineRunner = class DecisionMachineRunner {
|
|
|
86
89
|
}
|
|
87
90
|
/** Return a cached artifact if still fresh, or undefined. */
|
|
88
91
|
getCachedArtifact(scope, kind, dappAccount) {
|
|
89
|
-
this.dropArtifactCacheIfStale();
|
|
90
92
|
const entry = this.artifactCache.get(DecisionMachineRunner.cacheKey(scope, kind, dappAccount));
|
|
91
93
|
if (!entry) return null;
|
|
92
94
|
if (Date.now() - entry.cachedAt > ARTIFACT_CACHE_TTL_MS) {
|
|
@@ -282,7 +282,7 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
282
282
|
const maxLevel = (0, _prosopo_captcha_severity.resolveMaxEscalationLevel)(this.routingContext?.puzzleMaxDifficulty ?? _prosopo_types.puzzleMaxDifficultyDefault, this.routingContext?.platform.isMobile ?? false);
|
|
283
283
|
const ceiling = finalReason === _prosopo_types.FrictionlessReason.OLD_TIMESTAMP ? Math.min(maxLevel, _prosopo_captcha_severity.MAX_STALE_PAYLOAD_LEVEL) : maxLevel;
|
|
284
284
|
const level = finalReason !== void 0 && _prosopo_types.NO_MEASUREMENT_REASONS.has(finalReason) ? 0 : (0, _prosopo_captcha_severity.severityToPuzzleDifficulty)(requestedSolvedImagesCount, this.routingContext?.baseImageRounds ?? this.config.captchas.solved.count, ceiling);
|
|
285
|
-
const difficulty = level > 0 ? require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken) : void 0;
|
|
285
|
+
const difficulty = level > 0 ? require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken, ceiling) : void 0;
|
|
286
286
|
const tolerance = routed.puzzleTolerance ?? difficulty?.tolerance;
|
|
287
287
|
const puzzle = routed.puzzle || difficulty ? {
|
|
288
288
|
...difficulty?.puzzle ?? {},
|
|
@@ -56,14 +56,15 @@ var applyRouter = async (runner, counters, baseline, ctx, logger, phase = "route
|
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
58
58
|
* Map machine-declared CounterSpecs onto the values that the provider knows
|
|
59
|
-
* how to read
|
|
60
|
-
*
|
|
59
|
+
* how to read. Specs whose dimension we cannot resolve are silently skipped,
|
|
60
|
+
* so a rule naming `deviceBucket` on a request that disclosed no proof of
|
|
61
|
+
* fingerprint simply does not get that key.
|
|
61
62
|
*/
|
|
62
63
|
var specsToReads = (specs, ctx) => {
|
|
63
64
|
const out = [];
|
|
64
65
|
for (const spec of specs) {
|
|
65
|
-
const value = spec.dimension
|
|
66
|
-
if (value === void 0) continue;
|
|
66
|
+
const value = resolveDimension(spec.dimension, ctx);
|
|
67
|
+
if (value === void 0 || value === "") continue;
|
|
67
68
|
out.push({
|
|
68
69
|
spec,
|
|
69
70
|
value
|
|
@@ -71,5 +72,13 @@ var specsToReads = (specs, ctx) => {
|
|
|
71
72
|
}
|
|
72
73
|
return out;
|
|
73
74
|
};
|
|
75
|
+
var resolveDimension = (dimension, ctx) => {
|
|
76
|
+
switch (dimension) {
|
|
77
|
+
case "ip": return ctx.ip;
|
|
78
|
+
case "userAccount": return ctx.userAccount;
|
|
79
|
+
case "deviceBucket": return ctx.raw.fingerprintSummary?.bucketId;
|
|
80
|
+
case "peerIp": return;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
74
83
|
//#endregion
|
|
75
84
|
exports.applyRouter = applyRouter;
|