@prosopo/provider 5.14.0 → 5.16.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 +62 -46
- package/.turbo/turbo-build$colon$tsc.log +37 -34
- package/.turbo/turbo-build.log +63 -50
- package/CHANGELOG.md +193 -0
- package/LICENSE +201 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +4 -0
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +1 -1
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +63 -3
- package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +1 -1
- package/dist/api/blacklistRequestInspector.js +2 -2
- package/dist/api/captcha/getAudioCaptchaChallenge.d.ts +5 -0
- package/dist/api/captcha/getAudioCaptchaChallenge.d.ts.map +1 -0
- package/dist/api/captcha/getAudioCaptchaChallenge.js +37 -0
- package/dist/api/captcha/getAudioCaptchaChallenge.js.map +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts +2 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +11 -2
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +26 -15
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts +5 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts.map +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js +20 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js.map +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
- package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts +5 -0
- package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts.map +1 -0
- package/dist/api/captcha/getIconOrderCaptchaChallenge.js +37 -0
- package/dist/api/captcha/getIconOrderCaptchaChallenge.js.map +1 -0
- package/dist/api/captcha/getImageCaptchaChallenge.js +2 -2
- package/dist/api/captcha/getPoWCaptchaChallenge.js +4 -4
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +1 -3
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js +53 -146
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/interactiveCaptchaChallenge.d.ts +42 -0
- package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -0
- package/dist/api/captcha/interactiveCaptchaChallenge.js +154 -0
- package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -0
- package/dist/api/captcha/interactiveCaptchaSolution.d.ts +14 -0
- package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -0
- package/dist/api/captcha/interactiveCaptchaSolution.js +77 -0
- package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -0
- package/dist/api/captcha/maintenanceModeResponses.d.ts +4 -2
- package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
- package/dist/api/captcha/maintenanceModeResponses.js +28 -1
- package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
- package/dist/api/captcha/submitAudioCaptchaSolution.d.ts +4 -0
- package/dist/api/captcha/submitAudioCaptchaSolution.d.ts.map +1 -0
- package/dist/api/captcha/submitAudioCaptchaSolution.js +11 -0
- package/dist/api/captcha/submitAudioCaptchaSolution.js.map +1 -0
- package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts +4 -0
- package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts.map +1 -0
- package/dist/api/captcha/submitIconOrderCaptchaSolution.js +11 -0
- package/dist/api/captcha/submitIconOrderCaptchaSolution.js.map +1 -0
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts +4 -11
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +13 -18
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts +1 -3
- package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPuzzleCaptchaSolution.js +6 -73
- package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.d.ts +4 -1
- package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.js +3 -0
- package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
- package/dist/api/captcha.d.ts.map +1 -1
- package/dist/api/captcha.js +8 -0
- package/dist/api/captcha.js.map +1 -1
- package/dist/api/domainMiddleware.js +1 -1
- package/dist/api/ja4Middleware.js +1 -1
- package/dist/api/rawTlsSignalsMiddleware.d.ts +14 -1
- package/dist/api/rawTlsSignalsMiddleware.d.ts.map +1 -1
- package/dist/api/rawTlsSignalsMiddleware.js +111 -23
- package/dist/api/rawTlsSignalsMiddleware.js.map +1 -1
- package/dist/api/startProviderApi.js +2 -2
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +153 -96
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +65 -2
- package/dist/cjs/api/blacklistRequestInspector.cjs +2 -2
- package/dist/cjs/api/captcha/getAudioCaptchaChallenge.cjs +37 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +10 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +1 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +25 -14
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.cjs +20 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +1 -0
- package/dist/cjs/api/captcha/getIconOrderCaptchaChallenge.cjs +37 -0
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +2 -2
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +4 -4
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +52 -145
- package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +154 -0
- package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +77 -0
- package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +29 -0
- package/dist/cjs/api/captcha/submitAudioCaptchaSolution.cjs +11 -0
- package/dist/cjs/api/captcha/submitIconOrderCaptchaSolution.cjs +11 -0
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +11 -16
- package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +6 -73
- package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +3 -0
- package/dist/cjs/api/captcha.cjs +8 -0
- package/dist/cjs/api/domainMiddleware.cjs +1 -1
- package/dist/cjs/api/ja4Middleware.cjs +1 -1
- package/dist/cjs/api/rawTlsSignalsMiddleware.cjs +111 -22
- package/dist/cjs/api/startProviderApi.cjs +2 -2
- package/dist/cjs/api/verify.cjs +152 -95
- package/dist/cjs/compositeIpAddress.cjs +21 -7
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/tasks/audio/audioBuffer.cjs +72 -0
- package/dist/cjs/tasks/audio/audioRenderer.cjs +32 -0
- package/dist/cjs/tasks/audioAlternative.cjs +23 -0
- package/dist/cjs/tasks/audioCaptcha/audioTasks.cjs +65 -0
- package/dist/cjs/tasks/audioCaptcha/audioTasksUtils.cjs +19 -0
- package/dist/cjs/tasks/captchaManager.cjs +28 -1
- package/dist/cjs/tasks/captchaTypeSelection.cjs +31 -3
- package/dist/cjs/tasks/client/clientTasks.cjs +2 -2
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +49 -26
- package/dist/cjs/tasks/iconOrder/iconOrderRenderer.cjs +42 -0
- package/dist/cjs/tasks/iconOrderCaptcha/iconOrderTasks.cjs +69 -0
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +10 -17
- package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +423 -0
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +15 -19
- package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +3 -1
- package/dist/cjs/tasks/puzzle/backgroundBuffer.cjs +3 -3
- package/dist/cjs/tasks/puzzle/nativeBackground.cjs +12 -5
- package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +4 -3
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +40 -493
- package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +18 -1
- package/dist/cjs/tasks/tasks.cjs +6 -0
- package/dist/cjs/util.cjs +1 -1
- package/dist/compositeIpAddress.d.ts.map +1 -1
- package/dist/compositeIpAddress.js +21 -7
- package/dist/compositeIpAddress.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/tasks/audio/audioBuffer.d.ts +23 -0
- package/dist/tasks/audio/audioBuffer.d.ts.map +1 -0
- package/dist/tasks/audio/audioBuffer.js +70 -0
- package/dist/tasks/audio/audioBuffer.js.map +1 -0
- package/dist/tasks/audio/audioRenderer.d.ts +11 -0
- package/dist/tasks/audio/audioRenderer.d.ts.map +1 -0
- package/dist/tasks/audio/audioRenderer.js +31 -0
- package/dist/tasks/audio/audioRenderer.js.map +1 -0
- package/dist/tasks/audioAlternative.d.ts +8 -0
- package/dist/tasks/audioAlternative.d.ts.map +1 -0
- package/dist/tasks/audioAlternative.js +20 -0
- package/dist/tasks/audioAlternative.js.map +1 -0
- package/dist/tasks/audioCaptcha/audioTasks.d.ts +19 -0
- package/dist/tasks/audioCaptcha/audioTasks.d.ts.map +1 -0
- package/dist/tasks/audioCaptcha/audioTasks.js +65 -0
- package/dist/tasks/audioCaptcha/audioTasks.js.map +1 -0
- package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts +3 -0
- package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts.map +1 -0
- package/dist/tasks/audioCaptcha/audioTasksUtils.js +18 -0
- package/dist/tasks/audioCaptcha/audioTasksUtils.js.map +1 -0
- package/dist/tasks/captchaManager.d.ts +9 -3
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +29 -2
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/captchaTypeSelection.d.ts +4 -2
- package/dist/tasks/captchaTypeSelection.d.ts.map +1 -1
- package/dist/tasks/captchaTypeSelection.js +32 -5
- package/dist/tasks/captchaTypeSelection.js.map +1 -1
- package/dist/tasks/client/clientTasks.js +2 -2
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +6 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +51 -28
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/frictionless/routingMachine.d.ts +1 -2
- package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
- package/dist/tasks/frictionless/routingMachine.js.map +1 -1
- package/dist/tasks/iconOrder/iconOrderRenderer.d.ts +12 -0
- package/dist/tasks/iconOrder/iconOrderRenderer.d.ts.map +1 -0
- package/dist/tasks/iconOrder/iconOrderRenderer.js +40 -0
- package/dist/tasks/iconOrder/iconOrderRenderer.js.map +1 -0
- package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts +22 -0
- package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts.map +1 -0
- package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js +69 -0
- package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +10 -17
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts +52 -0
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -0
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +423 -0
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -0
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +15 -19
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts +1 -0
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.js +3 -2
- package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
- package/dist/tasks/puzzle/backgroundBuffer.d.ts +3 -2
- package/dist/tasks/puzzle/backgroundBuffer.d.ts.map +1 -1
- package/dist/tasks/puzzle/backgroundBuffer.js +3 -3
- package/dist/tasks/puzzle/backgroundBuffer.js.map +1 -1
- package/dist/tasks/puzzle/nativeBackground.d.ts +5 -1
- package/dist/tasks/puzzle/nativeBackground.d.ts.map +1 -1
- package/dist/tasks/puzzle/nativeBackground.js +12 -5
- package/dist/tasks/puzzle/nativeBackground.js.map +1 -1
- package/dist/tasks/puzzle/puzzleRenderer.d.ts +2 -0
- package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
- package/dist/tasks/puzzle/puzzleRenderer.js +4 -3
- package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts +14 -16
- package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js +41 -494
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tasks/spam/checkTrafficFilter.d.ts +4 -1
- package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
- package/dist/tasks/spam/checkTrafficFilter.js +18 -1
- package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
- package/dist/tasks/tasks.d.ts +4 -0
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +6 -0
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +7 -3
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js +44 -2
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +4 -2
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
- package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js +76 -1
- package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js +54 -2
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js +45 -0
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js.map +1 -0
- package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +20 -0
- package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +15 -1
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +174 -0
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js +96 -1
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js.map +1 -1
- package/dist/tests/unit/compositeIpAddress.unit.test.js +12 -3
- package/dist/tests/unit/compositeIpAddress.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js +105 -0
- package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/audioAlternative.unit.test.js +76 -0
- package/dist/tests/unit/tasks/audioAlternative.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js +259 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js +52 -0
- package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +171 -2
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js +68 -6
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js +123 -0
- package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +31 -0
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js +103 -0
- package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +28 -0
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js +60 -0
- package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js +225 -0
- package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +23 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js +1 -4
- package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzle/nativeBackground.unit.test.js +10 -3
- package/dist/tests/unit/tasks/puzzle/nativeBackground.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.js +35 -0
- package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.js +49 -0
- package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.js.map +1 -0
- package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +17 -14
- package/dist/tests/unit/testUtils/mockProviderEnv.d.ts.map +1 -1
- package/dist/tests/unit/testUtils/mockProviderEnv.js.map +1 -1
- package/dist/util.js +1 -1
- package/package.json +107 -103
|
@@ -18,14 +18,20 @@ let _prosopo_types = require("@prosopo/types");
|
|
|
18
18
|
* Restrict rules, traffic-filter category policies, routing-machine actions
|
|
19
19
|
* and detector-generated rules.
|
|
20
20
|
*
|
|
21
|
+
* Pass `allowedTypes` from `resolveAllowedCaptchaTypes`, so Prosopo's
|
|
22
|
+
* per-site captcha type feature flags are applied alongside the site owner's
|
|
23
|
+
* own `frictionlessTypes`. Absent means the defaults for both, so icon-order
|
|
24
|
+
* stays off.
|
|
25
|
+
*
|
|
21
26
|
* Coercion only ever narrows. A disabled type falls back to the other
|
|
22
27
|
* interactive type if that is permitted, and to PoW otherwise — never the
|
|
23
28
|
* reverse, so this can't hand a user a harder challenge than was asked for.
|
|
24
29
|
*/
|
|
25
|
-
var coerceToEnabledCaptchaType = (requested,
|
|
26
|
-
const types = (0, _prosopo_types.resolveFrictionlessTypes)(
|
|
30
|
+
var coerceToEnabledCaptchaType = (requested, allowedTypes, logger) => {
|
|
31
|
+
const types = allowedTypes ? (0, _prosopo_types.resolveFrictionlessTypes)(allowedTypes) : (0, _prosopo_types.resolveAllowedCaptchaTypes)(void 0);
|
|
27
32
|
const puzzleAllowed = types.puzzle && require_puzzleRenderer.isPuzzleRenderAvailable();
|
|
28
33
|
const imageAllowed = types.image;
|
|
34
|
+
const iconOrderAllowed = types.iconOrder;
|
|
29
35
|
const resolved = (() => {
|
|
30
36
|
switch (requested) {
|
|
31
37
|
case _prosopo_types.CaptchaType.pow: return _prosopo_types.CaptchaType.pow;
|
|
@@ -35,6 +41,10 @@ var coerceToEnabledCaptchaType = (requested, frictionlessTypes, logger) => {
|
|
|
35
41
|
case _prosopo_types.CaptchaType.image:
|
|
36
42
|
if (imageAllowed) return _prosopo_types.CaptchaType.image;
|
|
37
43
|
return puzzleAllowed ? _prosopo_types.CaptchaType.puzzle : _prosopo_types.CaptchaType.pow;
|
|
44
|
+
case _prosopo_types.CaptchaType.iconOrder:
|
|
45
|
+
if (iconOrderAllowed) return _prosopo_types.CaptchaType.iconOrder;
|
|
46
|
+
if (puzzleAllowed) return _prosopo_types.CaptchaType.puzzle;
|
|
47
|
+
return imageAllowed ? _prosopo_types.CaptchaType.image : _prosopo_types.CaptchaType.pow;
|
|
38
48
|
}
|
|
39
49
|
})();
|
|
40
50
|
if (resolved !== requested) logger?.info(() => ({
|
|
@@ -44,10 +54,28 @@ var coerceToEnabledCaptchaType = (requested, frictionlessTypes, logger) => {
|
|
|
44
54
|
served: resolved,
|
|
45
55
|
imageEnabled: types.image,
|
|
46
56
|
puzzleEnabled: types.puzzle,
|
|
47
|
-
puzzleRenderable: require_puzzleRenderer.isPuzzleRenderAvailable()
|
|
57
|
+
puzzleRenderable: require_puzzleRenderer.isPuzzleRenderAvailable(),
|
|
58
|
+
iconOrderEnabled: types.iconOrder
|
|
48
59
|
}
|
|
49
60
|
}));
|
|
50
61
|
return resolved;
|
|
51
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Swap a puzzle for an image challenge once the user has refreshed it
|
|
65
|
+
* `PUZZLE_REFRESHES_BEFORE_IMAGE` times in a row.
|
|
66
|
+
*
|
|
67
|
+
* A user who keeps refreshing either cannot solve this kind of puzzle or is a
|
|
68
|
+
* solver shopping for an easy instance. The image challenge answers both.
|
|
69
|
+
*
|
|
70
|
+
* The refresh count is client-reported, so this only moves one way: from
|
|
71
|
+
* puzzle to image, never back. Lying about it can only earn a harder
|
|
72
|
+
* challenge. Leaving it out looks like a fresh visit, which is what a page
|
|
73
|
+
* reload already gets.
|
|
74
|
+
*
|
|
75
|
+
* A site that has not enabled image keeps its puzzle. Serving a type the site
|
|
76
|
+
* turned off is exactly what `coerceToEnabledCaptchaType` exists to stop.
|
|
77
|
+
*/
|
|
78
|
+
var switchTypeAfterRefreshes = (resolved, refreshCount, allowedTypes) => _prosopo_types.CaptchaType.puzzle === resolved && (refreshCount ?? 0) >= 3 && (0, _prosopo_types.resolveFrictionlessTypes)(allowedTypes).image ? _prosopo_types.CaptchaType.image : resolved;
|
|
52
79
|
//#endregion
|
|
53
80
|
exports.coerceToEnabledCaptchaType = coerceToEnabledCaptchaType;
|
|
81
|
+
exports.switchTypeAfterRefreshes = switchTypeAfterRefreshes;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const require_validateAddress = require("../../api/validateAddress.cjs");
|
|
2
1
|
const require_decisionMachineRunner = require("../decisionMachine/decisionMachineRunner.cjs");
|
|
2
|
+
const require_validateAddress = require("../../api/validateAddress.cjs");
|
|
3
3
|
let _prosopo_common = require("@prosopo/common");
|
|
4
4
|
let _prosopo_database = require("@prosopo/database");
|
|
5
5
|
let _prosopo_types = require("@prosopo/types");
|
|
6
|
-
require("node:crypto");
|
|
7
6
|
let _prosopo_util = require("@prosopo/util");
|
|
7
|
+
require("node:crypto");
|
|
8
8
|
/**
|
|
9
9
|
* Matches `text` against a pattern where `*` matches any run of characters.
|
|
10
10
|
* Greedy two-pointer match, retrying from the last `*` on mismatch, so time
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
const require_usageCounters = require("../../util/usageCounters.cjs");
|
|
2
|
+
const require_rawTlsSignalsMiddleware = require("../../api/rawTlsSignalsMiddleware.cjs");
|
|
3
|
+
const require_clientMetaData = require("../../utils/clientMetaData.cjs");
|
|
4
|
+
const require_audioAlternative = require("../audioAlternative.cjs");
|
|
5
|
+
const require_captchaManager = require("../captchaManager.cjs");
|
|
2
6
|
const require_decisionMachineRunner = require("../decisionMachine/decisionMachineRunner.cjs");
|
|
3
7
|
const require_dnsEventUrl = require("../../api/dnsEventUrl.cjs");
|
|
4
8
|
const require_lang = require("../../rules/lang.cjs");
|
|
5
|
-
const require_clientMetaData = require("../../utils/clientMetaData.cjs");
|
|
6
|
-
const require_captchaManager = require("../captchaManager.cjs");
|
|
7
9
|
const require_captchaTypeSelection = require("../captchaTypeSelection.cjs");
|
|
8
10
|
const require_getBotScore = require("../detection/getBotScore.cjs");
|
|
9
11
|
const require_puzzleDifficulty = require("../puzzle/puzzleDifficulty.cjs");
|
|
@@ -20,6 +22,7 @@ var getSessionIDPrefix = (host) => {
|
|
|
20
22
|
var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
21
23
|
constructor(db, pair, config, logger, writeQueue, decisionMachineRunner, usageCounters) {
|
|
22
24
|
super(db, pair, config, logger, writeQueue);
|
|
25
|
+
this.audioAlternativeEnabled = false;
|
|
23
26
|
this.config = config;
|
|
24
27
|
this.decisionMachineRunner = decisionMachineRunner ?? new require_decisionMachineRunner.DecisionMachineRunner(db);
|
|
25
28
|
this.usageCounters = usageCounters ?? null;
|
|
@@ -32,6 +35,19 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
32
35
|
setRoutingContext(ctx) {
|
|
33
36
|
this.routingContext = ctx;
|
|
34
37
|
}
|
|
38
|
+
/** Separate from `setSessionParams`, which the short-circuit path bypasses. */
|
|
39
|
+
setAudioAlternativeEnabled(enabled) {
|
|
40
|
+
this.audioAlternativeEnabled = enabled;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The types this site may be served, from `resolveAllowedCaptchaTypes`.
|
|
44
|
+
* Set before any path can mint a session, including the short-circuits
|
|
45
|
+
* that skip routing, so the site's feature flags hold on every path.
|
|
46
|
+
* Unset means the default flags and preferences.
|
|
47
|
+
*/
|
|
48
|
+
setAllowedCaptchaTypes(allowed) {
|
|
49
|
+
this.allowedCaptchaTypes = allowed;
|
|
50
|
+
}
|
|
35
51
|
/**
|
|
36
52
|
* Evaluate the configured routing machine without going through
|
|
37
53
|
* `sendCaptcha`. Returns the supplied baseline on any failure (no machine,
|
|
@@ -63,15 +79,10 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
63
79
|
d: params.d,
|
|
64
80
|
tcpToChelloUs: params.tcpToChelloUs,
|
|
65
81
|
chelloToHandshakeUs: params.chelloToHandshakeUs,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
tcpMss: params.tcpMss,
|
|
71
|
-
tcpWscale: params.tcpWscale,
|
|
72
|
-
tcpOptsFlags: params.tcpOptsFlags,
|
|
73
|
-
tcpOptsOrder: params.tcpOptsOrder,
|
|
74
|
-
tcpWindow: params.tcpWindow
|
|
82
|
+
...require_rawTlsSignalsMiddleware.rawTlsSignalsFromRecord(params),
|
|
83
|
+
refreshOf: params.refreshOf,
|
|
84
|
+
refreshCount: params.refreshCount,
|
|
85
|
+
refreshedAfterMs: params.refreshedAfterMs
|
|
75
86
|
};
|
|
76
87
|
}
|
|
77
88
|
/**
|
|
@@ -91,7 +102,7 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
91
102
|
return require_lang.checkLangRules(this.config, acceptLanguage);
|
|
92
103
|
}
|
|
93
104
|
async createSession(input) {
|
|
94
|
-
const { token, score, threshold, scoreComponents, ipAddress, captchaType, siteKey, mode, solvedImagesCount, powDifficulty, userSitekeyIpHash, reason, blocked, deleted, ipInfo, headers, bundleId, currentUrl, iframeUrl, d, tcpToChelloUs, chelloToHandshakeUs,
|
|
105
|
+
const { token, score, threshold, scoreComponents, ipAddress, captchaType, siteKey, mode, solvedImagesCount, powDifficulty, userSitekeyIpHash, reason, blocked, deleted, ipInfo, headers, bundleId, currentUrl, iframeUrl, d, tcpToChelloUs, chelloToHandshakeUs, simdReadings, puzzleTolerance, puzzle, iconOrderTolerance, iconOrder, isEscalation, originSessionId, refreshOf, refreshCount, refreshedAfterMs, isProtect, matchedRule, clientMetaData, webView = false, iFrame = false, decryptedHeadHash = "" } = input;
|
|
95
106
|
const sessionRecord = {
|
|
96
107
|
sessionId: `${getSessionIDPrefix(this.config.host)}-${(0, uuid.v4)()}`,
|
|
97
108
|
createdAt: /* @__PURE__ */ new Date(),
|
|
@@ -106,11 +117,16 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
106
117
|
powDifficulty,
|
|
107
118
|
...puzzleTolerance !== void 0 && { puzzleTolerance },
|
|
108
119
|
...puzzle && { puzzle },
|
|
120
|
+
...iconOrderTolerance !== void 0 && { iconOrderTolerance },
|
|
121
|
+
...iconOrder && { iconOrder },
|
|
109
122
|
userSitekeyIpHash,
|
|
110
123
|
webView,
|
|
111
124
|
iFrame,
|
|
112
125
|
...isEscalation && { isEscalation: true },
|
|
113
126
|
...originSessionId && { originSessionId },
|
|
127
|
+
...refreshOf && { refreshOf },
|
|
128
|
+
...refreshCount !== void 0 && { refreshCount },
|
|
129
|
+
...refreshedAfterMs !== void 0 && { refreshedAfterMs },
|
|
114
130
|
decryptedHeadHash,
|
|
115
131
|
bundleId,
|
|
116
132
|
reason,
|
|
@@ -127,15 +143,7 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
127
143
|
d,
|
|
128
144
|
tcpToChelloUs,
|
|
129
145
|
chelloToHandshakeUs,
|
|
130
|
-
|
|
131
|
-
synackNs,
|
|
132
|
-
ackNs,
|
|
133
|
-
observedTtl,
|
|
134
|
-
tcpMss,
|
|
135
|
-
tcpWscale,
|
|
136
|
-
tcpOptsFlags,
|
|
137
|
-
tcpOptsOrder,
|
|
138
|
-
tcpWindow,
|
|
146
|
+
...require_rawTlsSignalsMiddleware.rawTlsSignalsFromRecord(input),
|
|
139
147
|
...matchedRule && { matchedRule },
|
|
140
148
|
...clientMetaData && { clientMetaData }
|
|
141
149
|
};
|
|
@@ -235,6 +243,9 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
235
243
|
async sendPuzzleCaptcha(params) {
|
|
236
244
|
return this.sendCaptcha(_prosopo_types.CaptchaType.puzzle, params);
|
|
237
245
|
}
|
|
246
|
+
async sendIconOrderCaptcha(params) {
|
|
247
|
+
return this.sendCaptcha(_prosopo_types.CaptchaType.iconOrder, params);
|
|
248
|
+
}
|
|
238
249
|
async sendCaptcha(captchaType, params) {
|
|
239
250
|
const effectiveParams = {
|
|
240
251
|
...this.sessionParams,
|
|
@@ -247,14 +258,16 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
247
258
|
powDifficulty: captchaType === _prosopo_types.CaptchaType.pow ? effectiveParams.powDifficulty : void 0
|
|
248
259
|
};
|
|
249
260
|
const routed = this.routingContext ? await require_routingMachine.applyRouter(this.decisionMachineRunner, this.usageCounters, baseline, this.routingContext, this.logger) : baseline;
|
|
250
|
-
const
|
|
261
|
+
const enabledCaptchaType = require_captchaTypeSelection.coerceToEnabledCaptchaType(routed.captchaType, this.allowedCaptchaTypes, this.logger);
|
|
262
|
+
const finalCaptchaType = require_captchaTypeSelection.switchTypeAfterRefreshes(enabledCaptchaType, effectiveParams.refreshCount, this.allowedCaptchaTypes);
|
|
263
|
+
const switchedByRefreshes = finalCaptchaType !== enabledCaptchaType;
|
|
251
264
|
const requestedSolvedImagesCount = routed.solvedImagesCount ?? effectiveParams.solvedImagesCount;
|
|
252
265
|
const imageRoundsBounds = this.routingContext ?? {};
|
|
253
266
|
const finalSolvedImagesCount = finalCaptchaType === _prosopo_types.CaptchaType.image ? requestedSolvedImagesCount !== void 0 ? (0, _prosopo_types.clampImageRounds)(requestedSolvedImagesCount, imageRoundsBounds) : requestedSolvedImagesCount : void 0;
|
|
254
267
|
const finalPowDifficulty = finalCaptchaType === _prosopo_types.CaptchaType.pow ? routed.powDifficulty ?? effectiveParams.powDifficulty : void 0;
|
|
255
|
-
const finalReason = routed.reason ?? effectiveParams.reason;
|
|
268
|
+
const finalReason = switchedByRefreshes ? _prosopo_types.FrictionlessReason.PUZZLE_REFRESH_LIMIT : routed.reason ?? effectiveParams.reason;
|
|
256
269
|
const finalPuzzleOverrides = finalCaptchaType === _prosopo_types.CaptchaType.puzzle ? (() => {
|
|
257
|
-
const maxLevel = this.routingContext?.puzzleMaxDifficulty ?? _prosopo_types.puzzleMaxDifficultyDefault;
|
|
270
|
+
const maxLevel = (0, _prosopo_captcha_severity.resolveMaxEscalationLevel)(this.routingContext?.puzzleMaxDifficulty ?? _prosopo_types.puzzleMaxDifficultyDefault, this.routingContext?.platform.isMobile ?? false);
|
|
258
271
|
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, maxLevel);
|
|
259
272
|
const difficulty = level > 0 ? require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken) : void 0;
|
|
260
273
|
const tolerance = routed.puzzleTolerance ?? difficulty?.tolerance;
|
|
@@ -264,9 +277,14 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
264
277
|
} : void 0;
|
|
265
278
|
return {
|
|
266
279
|
...tolerance !== void 0 && { puzzleTolerance: tolerance },
|
|
267
|
-
...puzzle !== void 0 && { puzzle }
|
|
280
|
+
...puzzle !== void 0 && { puzzle },
|
|
281
|
+
...difficulty !== void 0 && { puzzleLevel: difficulty.level }
|
|
268
282
|
};
|
|
269
283
|
})() : {};
|
|
284
|
+
const finalIconOrderOverrides = finalCaptchaType === _prosopo_types.CaptchaType.iconOrder ? {
|
|
285
|
+
...routed.iconOrderTolerance !== void 0 && { iconOrderTolerance: routed.iconOrderTolerance },
|
|
286
|
+
...routed.iconOrder && { iconOrder: routed.iconOrder }
|
|
287
|
+
} : {};
|
|
270
288
|
const blocked = finalCaptchaType === _prosopo_types.CaptchaType.image ? effectiveParams.blocked : void 0;
|
|
271
289
|
const sessionRecord = await this.createSession({
|
|
272
290
|
...effectiveParams,
|
|
@@ -283,6 +301,8 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
283
301
|
blocked,
|
|
284
302
|
puzzleTolerance: finalPuzzleOverrides.puzzleTolerance,
|
|
285
303
|
puzzle: finalPuzzleOverrides.puzzle,
|
|
304
|
+
iconOrderTolerance: finalIconOrderOverrides.iconOrderTolerance,
|
|
305
|
+
iconOrder: finalIconOrderOverrides.iconOrder,
|
|
286
306
|
deleted: void 0,
|
|
287
307
|
isEscalation: void 0,
|
|
288
308
|
originSessionId: void 0
|
|
@@ -292,7 +312,8 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
292
312
|
[_prosopo_types.ApiParams.captchaType]: finalCaptchaType,
|
|
293
313
|
[_prosopo_types.ApiParams.sessionId]: sessionRecord.sessionId,
|
|
294
314
|
[_prosopo_types.ApiParams.status]: "ok",
|
|
295
|
-
dns_url: require_dnsEventUrl.buildDnsEventUrl(sessionRecord.sessionId)
|
|
315
|
+
dns_url: require_dnsEventUrl.buildDnsEventUrl(sessionRecord.sessionId),
|
|
316
|
+
...require_audioAlternative.offersAudioAlternative(finalCaptchaType, this.audioAlternativeEnabled) && { audioAlternativeAvailable: true }
|
|
296
317
|
};
|
|
297
318
|
}
|
|
298
319
|
async registerBlockedSession(params) {
|
|
@@ -315,6 +336,8 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
|
|
|
315
336
|
deleted: true,
|
|
316
337
|
puzzleTolerance: void 0,
|
|
317
338
|
puzzle: void 0,
|
|
339
|
+
iconOrderTolerance: void 0,
|
|
340
|
+
iconOrder: void 0,
|
|
318
341
|
isEscalation: void 0,
|
|
319
342
|
originSessionId: void 0
|
|
320
343
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
let _prosopo_types = require("@prosopo/types");
|
|
2
|
+
let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
|
|
3
|
+
let _prosopo_icon_order_assets = require("@prosopo/icon-order-assets");
|
|
4
|
+
//#region src/tasks/iconOrder/iconOrderRenderer.ts
|
|
5
|
+
/** Layers partial overrides onto the asset defaults; later sources win. */
|
|
6
|
+
var resolveIconOrderRenderSettings = (...overrides) => {
|
|
7
|
+
let resolved = { ..._prosopo_icon_order_assets.DEFAULT_RENDER_SETTINGS };
|
|
8
|
+
for (const override of overrides) resolved = {
|
|
9
|
+
targetCount: override?.targetCount ?? resolved.targetCount,
|
|
10
|
+
decoyCount: override?.decoyCount ?? resolved.decoyCount,
|
|
11
|
+
strokeWidth: override?.strokeWidth ?? resolved.strokeWidth,
|
|
12
|
+
iconOpacity: override?.iconOpacity ?? resolved.iconOpacity,
|
|
13
|
+
haloOpacity: override?.haloOpacity ?? resolved.haloOpacity,
|
|
14
|
+
backgroundClutter: override?.backgroundClutter ?? resolved.backgroundClutter
|
|
15
|
+
};
|
|
16
|
+
const decoyBudget = _prosopo_types.ICON_ORDER_GLYPH_VOCABULARY - resolved.targetCount;
|
|
17
|
+
if (resolved.decoyCount > decoyBudget) resolved = {
|
|
18
|
+
...resolved,
|
|
19
|
+
decoyCount: Math.max(0, decoyBudget)
|
|
20
|
+
};
|
|
21
|
+
return resolved;
|
|
22
|
+
};
|
|
23
|
+
/** Drops the render-only fields (rotation, hue); grading needs none of them. */
|
|
24
|
+
var toStoredTargets = (targets) => targets.map((target) => ({
|
|
25
|
+
x: target.x,
|
|
26
|
+
y: target.y,
|
|
27
|
+
size: target.size,
|
|
28
|
+
kind: target.kind
|
|
29
|
+
}));
|
|
30
|
+
var renderIconOrderImages = async (settings = _prosopo_icon_order_assets.DEFAULT_RENDER_SETTINGS) => {
|
|
31
|
+
const rendered = await (0, _prosopo_icon_order_assets.renderIconOrder)(_prosopo_icon_order_assets.DEFAULT_GEOMETRY, settings);
|
|
32
|
+
return {
|
|
33
|
+
background: (0, _prosopo_puzzle_assets.toDataUri)(rendered.background),
|
|
34
|
+
legend: (0, _prosopo_puzzle_assets.toDataUri)(rendered.legend),
|
|
35
|
+
legendIconSize: rendered.legendIconSize,
|
|
36
|
+
targets: rendered.targets
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
exports.renderIconOrderImages = renderIconOrderImages;
|
|
41
|
+
exports.resolveIconOrderRenderSettings = resolveIconOrderRenderSettings;
|
|
42
|
+
exports.toStoredTargets = toStoredTargets;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const require_interactiveCaptchaManager = require("../interactiveCaptcha/interactiveCaptchaManager.cjs");
|
|
2
|
+
const require_iconOrderRenderer = require("../iconOrder/iconOrderRenderer.cjs");
|
|
3
|
+
let _prosopo_types = require("@prosopo/types");
|
|
4
|
+
let _prosopo_icon_order_assets = require("@prosopo/icon-order-assets");
|
|
5
|
+
//#region src/tasks/iconOrderCaptcha/iconOrderTasks.ts
|
|
6
|
+
var IconOrderCaptchaManager = class extends require_interactiveCaptchaManager.InteractiveCaptchaManager {
|
|
7
|
+
constructor(..._args) {
|
|
8
|
+
super(..._args);
|
|
9
|
+
this.captchaType = _prosopo_types.CaptchaType.iconOrder;
|
|
10
|
+
this.logLabel = "icon-order";
|
|
11
|
+
}
|
|
12
|
+
getRecordByChallenge(challenge) {
|
|
13
|
+
return this.db.getIconOrderCaptchaRecordByChallenge(challenge);
|
|
14
|
+
}
|
|
15
|
+
updateRecord(challenge, updates) {
|
|
16
|
+
return this.db.updateIconOrderCaptchaRecord(challenge, updates);
|
|
17
|
+
}
|
|
18
|
+
updateSubmissionResult(challenge, result, userSignature, coords) {
|
|
19
|
+
return this.db.updateIconOrderCaptchaRecordResult(challenge, result, false, true, userSignature, coords);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An atomic claim rather than a read of `userSubmitted`: concurrent
|
|
23
|
+
* submissions would all read it unset and each get a verdict, enough to
|
|
24
|
+
* enumerate the ordering of a handful of icons.
|
|
25
|
+
*/
|
|
26
|
+
claimSubmission(record) {
|
|
27
|
+
return this.db.claimIconOrderCaptchaSubmission(record.challenge);
|
|
28
|
+
}
|
|
29
|
+
markRecordChecked(challenge) {
|
|
30
|
+
return this.db.markIconOrderCaptchaRecordChecked(challenge);
|
|
31
|
+
}
|
|
32
|
+
decisionMachineEventFields(record) {
|
|
33
|
+
return { iconOrderEvents: record.iconOrderEvents };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The renderer decides where the icons land, so the answer only exists
|
|
37
|
+
* once the imagery does; the caller must store `targets` before responding.
|
|
38
|
+
*/
|
|
39
|
+
async getIconOrderCaptchaChallenge(userAccount, dappAccount, tolerance, renderImages) {
|
|
40
|
+
const minted = this.mintChallenge(userAccount, dappAccount);
|
|
41
|
+
const { targets, ...images } = await renderImages();
|
|
42
|
+
return {
|
|
43
|
+
...minted,
|
|
44
|
+
targets: require_iconOrderRenderer.toStoredTargets(targets),
|
|
45
|
+
tolerance: tolerance ?? _prosopo_types.iconOrderToleranceDefault,
|
|
46
|
+
images
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async verifyIconOrderCaptchaSolution(challenge, providerChallengeSignature, clicks, iconOrderEvents, timeout, userTimestampSignature, ipAddress, behavioralData, salt, simdReadings, clientMetaData) {
|
|
50
|
+
return this.submitInteractiveCaptchaSolution({
|
|
51
|
+
challenge,
|
|
52
|
+
providerChallengeSignature,
|
|
53
|
+
timeout,
|
|
54
|
+
userTimestampSignature,
|
|
55
|
+
ipAddress,
|
|
56
|
+
behavioralData,
|
|
57
|
+
salt,
|
|
58
|
+
simdReadings,
|
|
59
|
+
clientMetaData,
|
|
60
|
+
isCorrect: (record) => (0, _prosopo_icon_order_assets.gradeClicks)(record.targets, clicks, record.tolerance),
|
|
61
|
+
persistInteraction: () => this.db.updateIconOrderCaptchaRecord(challenge, {
|
|
62
|
+
clicks,
|
|
63
|
+
iconOrderEvents
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
exports.IconOrderCaptchaManager = IconOrderCaptchaManager;
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
const require_usageCounters = require("../../util/usageCounters.cjs");
|
|
2
|
-
const
|
|
3
|
-
const require_lang = require("../../rules/lang.cjs");
|
|
4
|
-
const require_clientMetaData = require("../../utils/clientMetaData.cjs");
|
|
2
|
+
const require_rawTlsSignalsMiddleware = require("../../api/rawTlsSignalsMiddleware.cjs");
|
|
5
3
|
const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
|
|
6
|
-
const require_enrichDnsEvent = require("../dnsEvent/enrichDnsEvent.cjs");
|
|
7
|
-
const require_captchaManager = require("../captchaManager.cjs");
|
|
8
|
-
const require_pairs = require("../../pairs.cjs");
|
|
9
4
|
const require_util = require("../../util.cjs");
|
|
5
|
+
const require_clientMetaData = require("../../utils/clientMetaData.cjs");
|
|
10
6
|
const require_devicePlatform = require("../../utils/devicePlatform.cjs");
|
|
7
|
+
const require_enrichDnsEvent = require("../dnsEvent/enrichDnsEvent.cjs");
|
|
8
|
+
const require_captchaManager = require("../captchaManager.cjs");
|
|
9
|
+
const require_decisionMachineRunner = require("../decisionMachine/decisionMachineRunner.cjs");
|
|
11
10
|
const require_frictionlessTasksUtils = require("../frictionless/frictionlessTasksUtils.cjs");
|
|
12
11
|
const require_evaluateEmailSpamRules = require("../spam/evaluateEmailSpamRules.cjs");
|
|
12
|
+
const require_lang = require("../../rules/lang.cjs");
|
|
13
|
+
const require_pairs = require("../../pairs.cjs");
|
|
13
14
|
const require_imgCaptchaTasksUtils = require("./imgCaptchaTasksUtils.cjs");
|
|
14
15
|
let _prosopo_common = require("@prosopo/common");
|
|
15
16
|
let _prosopo_types = require("@prosopo/types");
|
|
17
|
+
let _polkadot_util = require("@polkadot/util");
|
|
18
|
+
let _prosopo_user_access_policy = require("@prosopo/user-access-policy");
|
|
16
19
|
let _prosopo_util = require("@prosopo/util");
|
|
17
20
|
let _prosopo_util_crypto = require("@prosopo/util-crypto");
|
|
18
21
|
let _prosopo_datasets = require("@prosopo/datasets");
|
|
19
|
-
let _prosopo_user_access_policy = require("@prosopo/user-access-policy");
|
|
20
|
-
let _polkadot_util = require("@polkadot/util");
|
|
21
22
|
//#region src/tasks/imgCaptcha/imgCaptchaTasks.ts
|
|
22
23
|
var ImgCaptchaManager = class extends require_captchaManager.CaptchaManager {
|
|
23
24
|
constructor(db, pair, config, logger, writeQueue, usageCounters) {
|
|
@@ -566,15 +567,7 @@ var ImgCaptchaManager = class extends require_captchaManager.CaptchaManager {
|
|
|
566
567
|
currentUrl: sessionRecord?.currentUrl,
|
|
567
568
|
iframeUrl: sessionRecord?.iframeUrl,
|
|
568
569
|
coords: solution.coords,
|
|
569
|
-
|
|
570
|
-
synackNs: sessionRecord?.synackNs,
|
|
571
|
-
ackNs: sessionRecord?.ackNs,
|
|
572
|
-
observedTtl: sessionRecord?.observedTtl,
|
|
573
|
-
tcpMss: sessionRecord?.tcpMss,
|
|
574
|
-
tcpWscale: sessionRecord?.tcpWscale,
|
|
575
|
-
tcpOptsFlags: sessionRecord?.tcpOptsFlags,
|
|
576
|
-
tcpOptsOrder: sessionRecord?.tcpOptsOrder,
|
|
577
|
-
tcpWindow: sessionRecord?.tcpWindow,
|
|
570
|
+
...require_rawTlsSignalsMiddleware.rawTlsSignalsFromRecord(sessionRecord),
|
|
578
571
|
trafficPolicies: require_devicePlatform.deriveTrafficPolicies(trafficFilter)
|
|
579
572
|
};
|
|
580
573
|
try {
|