@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const require_validateAddress = require("../validateAddress.cjs");
|
|
2
|
+
const require_tasks = require("../../tasks/tasks.cjs");
|
|
3
|
+
const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
|
|
4
|
+
const require_testSiteKey = require("../testSiteKey.cjs");
|
|
5
|
+
const require_requestBodySummary = require("../requestBodySummary.cjs");
|
|
6
|
+
let _prosopo_common = require("@prosopo/common");
|
|
7
|
+
//#region src/api/captcha/interactiveCaptchaSolution.ts
|
|
8
|
+
/** Request handling shared by the solution endpoints of the interactive types. */
|
|
9
|
+
var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
|
|
10
|
+
if (require_apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
|
|
11
|
+
req.logger.info(() => ({ msg: "Maintenance mode active - returning verified" }));
|
|
12
|
+
return res.json({
|
|
13
|
+
status: "ok",
|
|
14
|
+
verified: true
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
let parsed;
|
|
18
|
+
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
19
|
+
try {
|
|
20
|
+
parsed = spec.parse(req.body);
|
|
21
|
+
} catch (err) {
|
|
22
|
+
return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
|
|
23
|
+
context: {
|
|
24
|
+
code: 400,
|
|
25
|
+
error: err,
|
|
26
|
+
body: require_requestBodySummary.summariseRequestBody(req)
|
|
27
|
+
},
|
|
28
|
+
i18n: req.i18n,
|
|
29
|
+
logger: req.logger
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
const { dapp, user } = parsed;
|
|
33
|
+
require_validateAddress.validateSiteKey(dapp);
|
|
34
|
+
require_validateAddress.validateAddr(user);
|
|
35
|
+
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
36
|
+
if (testVerdict !== null) {
|
|
37
|
+
const response = {
|
|
38
|
+
status: "ok",
|
|
39
|
+
verified: testVerdict
|
|
40
|
+
};
|
|
41
|
+
return res.json(response);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
45
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
|
|
46
|
+
context: {
|
|
47
|
+
code: 400,
|
|
48
|
+
siteKey: dapp
|
|
49
|
+
},
|
|
50
|
+
i18n: req.i18n,
|
|
51
|
+
logger: req.logger
|
|
52
|
+
}));
|
|
53
|
+
const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
|
|
54
|
+
const response = {
|
|
55
|
+
status: "ok",
|
|
56
|
+
verified: await spec.verify(tasks, parsed, submitWindowMs, req)
|
|
57
|
+
};
|
|
58
|
+
return res.json(response);
|
|
59
|
+
} catch (err) {
|
|
60
|
+
req.logger.error(() => ({
|
|
61
|
+
err,
|
|
62
|
+
body: require_requestBodySummary.summariseRequestBody(req),
|
|
63
|
+
msg: `Error in ${spec.label} captcha solution submission`
|
|
64
|
+
}));
|
|
65
|
+
return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
|
|
66
|
+
context: {
|
|
67
|
+
code: 500,
|
|
68
|
+
siteKey: req.body.dapp,
|
|
69
|
+
error: err
|
|
70
|
+
},
|
|
71
|
+
i18n: req.i18n,
|
|
72
|
+
logger: req.logger
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
//#endregion
|
|
77
|
+
exports.interactiveSolutionHandler = interactiveSolutionHandler;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
const require_audioRenderer = require("../../tasks/audio/audioRenderer.cjs");
|
|
1
2
|
const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
|
|
3
|
+
const require_iconOrderRenderer = require("../../tasks/iconOrder/iconOrderRenderer.cjs");
|
|
2
4
|
let _prosopo_types = require("@prosopo/types");
|
|
3
5
|
let node_crypto = require("node:crypto");
|
|
4
6
|
//#region src/api/captcha/maintenanceModeResponses.ts
|
|
@@ -49,8 +51,35 @@ var buildPuzzleMaintenanceResponse = async (user, dapp) => {
|
|
|
49
51
|
[_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
|
|
50
52
|
};
|
|
51
53
|
};
|
|
54
|
+
var buildAudioMaintenanceResponse = async (user, dapp) => {
|
|
55
|
+
const timestamp = Date.now();
|
|
56
|
+
const rendered = require_audioRenderer.renderAudioClip(require_audioRenderer.resolveAudioRenderSettings());
|
|
57
|
+
return {
|
|
58
|
+
[_prosopo_types.ApiParams.status]: "ok",
|
|
59
|
+
[_prosopo_types.ApiParams.challenge]: buildChallenge(user, dapp),
|
|
60
|
+
[_prosopo_types.ApiParams.clip]: rendered.clip,
|
|
61
|
+
[_prosopo_types.ApiParams.characterCount]: rendered.characterCount,
|
|
62
|
+
[_prosopo_types.ApiParams.timestamp]: timestamp.toString(),
|
|
63
|
+
[_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
var buildIconOrderMaintenanceResponse = async (user, dapp) => {
|
|
67
|
+
const timestamp = Date.now();
|
|
68
|
+
const images = await require_iconOrderRenderer.renderIconOrderImages();
|
|
69
|
+
return {
|
|
70
|
+
[_prosopo_types.ApiParams.status]: "ok",
|
|
71
|
+
[_prosopo_types.ApiParams.challenge]: buildChallenge(user, dapp),
|
|
72
|
+
[_prosopo_types.ApiParams.background]: images.background,
|
|
73
|
+
[_prosopo_types.ApiParams.legend]: images.legend,
|
|
74
|
+
[_prosopo_types.ApiParams.legendIconSize]: images.legendIconSize,
|
|
75
|
+
[_prosopo_types.ApiParams.timestamp]: timestamp.toString(),
|
|
76
|
+
[_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
|
|
77
|
+
};
|
|
78
|
+
};
|
|
52
79
|
//#endregion
|
|
80
|
+
exports.buildAudioMaintenanceResponse = buildAudioMaintenanceResponse;
|
|
53
81
|
exports.buildFrictionlessMaintenanceResponse = buildFrictionlessMaintenanceResponse;
|
|
82
|
+
exports.buildIconOrderMaintenanceResponse = buildIconOrderMaintenanceResponse;
|
|
54
83
|
exports.buildImageMaintenanceResponse = buildImageMaintenanceResponse;
|
|
55
84
|
exports.buildMaintenanceVerificationResponse = buildMaintenanceVerificationResponse;
|
|
56
85
|
exports.buildPowMaintenanceResponse = buildPowMaintenanceResponse;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
|
|
2
|
+
let _prosopo_types = require("@prosopo/types");
|
|
3
|
+
let _prosopo_util = require("@prosopo/util");
|
|
4
|
+
//#region src/api/captcha/submitAudioCaptchaSolution.ts
|
|
5
|
+
var submitAudioCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
|
|
6
|
+
label: "audio",
|
|
7
|
+
parse: (body) => _prosopo_types.SubmitAudioCaptchaSolutionBody.parse(body),
|
|
8
|
+
verify: (tasks, body, submitWindowMs, req) => tasks.audioCaptchaManager.verifyAudioCaptchaSolution(body.challenge, body.signature.provider.challenge, body.answer, body.replays ?? 0, body.audioEvents ?? [], submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.default = submitAudioCaptchaSolution_default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
|
|
2
|
+
let _prosopo_types = require("@prosopo/types");
|
|
3
|
+
let _prosopo_util = require("@prosopo/util");
|
|
4
|
+
//#region src/api/captcha/submitIconOrderCaptchaSolution.ts
|
|
5
|
+
var submitIconOrderCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
|
|
6
|
+
label: "icon-order",
|
|
7
|
+
parse: (body) => _prosopo_types.SubmitIconOrderCaptchaSolutionBody.parse(body),
|
|
8
|
+
verify: (tasks, body, submitWindowMs, req) => tasks.iconOrderCaptchaManager.verifyIconOrderCaptchaSolution(body.challenge, body.signature.provider.challenge, body.clicks, body.iconOrderEvents, submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.default = submitIconOrderCaptchaSolution_default;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
const require_rawTlsSignalsMiddleware = require("../rawTlsSignalsMiddleware.cjs");
|
|
2
|
+
const require_devicePlatform = require("../../utils/devicePlatform.cjs");
|
|
1
3
|
const require_validateAddress = require("../validateAddress.cjs");
|
|
2
4
|
const require_captchaTypeSelection = require("../../tasks/captchaTypeSelection.cjs");
|
|
3
5
|
const require_puzzleDifficulty = require("../../tasks/puzzle/puzzleDifficulty.cjs");
|
|
4
|
-
const require_devicePlatform = require("../../utils/devicePlatform.cjs");
|
|
5
6
|
const require_tasks = require("../../tasks/tasks.cjs");
|
|
6
7
|
const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
|
|
7
8
|
const require_testSiteKey = require("../testSiteKey.cjs");
|
|
8
|
-
const require_rawTlsSignalsMiddleware = require("../rawTlsSignalsMiddleware.cjs");
|
|
9
9
|
const require_requestBodySummary = require("../requestBodySummary.cjs");
|
|
10
10
|
let _prosopo_common = require("@prosopo/common");
|
|
11
11
|
let _prosopo_types = require("@prosopo/types");
|
|
@@ -100,8 +100,9 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
|
|
|
100
100
|
chelloToHandshakeUs: req.chelloToHandshakeUs,
|
|
101
101
|
...require_rawTlsSignalsMiddleware.rawTlsSignalsForSession(req)
|
|
102
102
|
}, {
|
|
103
|
-
|
|
104
|
-
imageMaxRounds: clientRecord.settings?.imageMaxRounds
|
|
103
|
+
allowedCaptchaTypes: (0, _prosopo_types.resolveAllowedCaptchaTypes)(clientRecord.settings),
|
|
104
|
+
imageMaxRounds: clientRecord.settings?.imageMaxRounds,
|
|
105
|
+
puzzleMaxDifficulty: clientRecord.settings?.puzzleMaxDifficulty
|
|
105
106
|
});
|
|
106
107
|
const response = {
|
|
107
108
|
status: "ok",
|
|
@@ -144,17 +145,19 @@ var buildEscalation = async (tasks, result, challenge, perConnectionSignals, sit
|
|
|
144
145
|
const originSession = await tasks.db.getSessionRecordBySessionId(powRecord.sessionId);
|
|
145
146
|
if (!originSession) return void 0;
|
|
146
147
|
const routed = result.routingOutput;
|
|
147
|
-
const escalatedType = require_captchaTypeSelection.coerceToEnabledCaptchaType(routed.captchaType, siteConstraints?.
|
|
148
|
+
const escalatedType = require_captchaTypeSelection.coerceToEnabledCaptchaType(routed.captchaType, siteConstraints?.allowedCaptchaTypes);
|
|
148
149
|
if (escalatedType === _prosopo_types.CaptchaType.pow) return void 0;
|
|
149
150
|
const imageMaxRounds = siteConstraints?.imageMaxRounds ?? _prosopo_types.imageMaxRoundsDefault;
|
|
150
151
|
const escalationPuzzleOverrides = (() => {
|
|
151
152
|
if (escalatedType !== _prosopo_types.CaptchaType.puzzle) return void 0;
|
|
152
|
-
const
|
|
153
|
+
const { isMobile } = require_devicePlatform.derivePlatform(originSession.headers?.["user-agent"] ?? "", originSession.webView);
|
|
154
|
+
const level = (0, _prosopo_captcha_severity.severityToPuzzleDifficulty)(routed.solvedImagesCount ?? originSession.solvedImagesCount, tasks.config.captchas.solved.count, (0, _prosopo_captcha_severity.resolveMaxEscalationLevel)(siteConstraints?.puzzleMaxDifficulty, isMobile));
|
|
153
155
|
if (level === 0) return void 0;
|
|
154
156
|
const difficulty = require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken);
|
|
155
157
|
return {
|
|
156
158
|
puzzleTolerance: difficulty.tolerance,
|
|
157
|
-
puzzle: difficulty.puzzle
|
|
159
|
+
puzzle: difficulty.puzzle,
|
|
160
|
+
puzzleLevel: difficulty.level
|
|
158
161
|
};
|
|
159
162
|
})();
|
|
160
163
|
const selectionReason = routed.reason ?? originSession.reason;
|
|
@@ -185,15 +188,7 @@ var buildEscalation = async (tasks, result, challenge, perConnectionSignals, sit
|
|
|
185
188
|
originSessionId: originSession.sessionId,
|
|
186
189
|
tcpToChelloUs: perConnectionSignals?.tcpToChelloUs,
|
|
187
190
|
chelloToHandshakeUs: perConnectionSignals?.chelloToHandshakeUs,
|
|
188
|
-
|
|
189
|
-
synackNs: perConnectionSignals?.synackNs,
|
|
190
|
-
ackNs: perConnectionSignals?.ackNs,
|
|
191
|
-
observedTtl: perConnectionSignals?.observedTtl,
|
|
192
|
-
tcpMss: perConnectionSignals?.tcpMss,
|
|
193
|
-
tcpWscale: perConnectionSignals?.tcpWscale,
|
|
194
|
-
tcpOptsFlags: perConnectionSignals?.tcpOptsFlags,
|
|
195
|
-
tcpOptsOrder: perConnectionSignals?.tcpOptsOrder,
|
|
196
|
-
tcpWindow: perConnectionSignals?.tcpWindow,
|
|
191
|
+
...require_rawTlsSignalsMiddleware.rawTlsSignalsFromRecord(perConnectionSignals),
|
|
197
192
|
puzzleTolerance: escalationPuzzleOverrides?.puzzleTolerance,
|
|
198
193
|
puzzle: escalationPuzzleOverrides?.puzzle,
|
|
199
194
|
clientMetaData: originSession.clientMetaData
|
|
@@ -1,78 +1,11 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_tasks = require("../../tasks/tasks.cjs");
|
|
3
|
-
const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
|
|
4
|
-
const require_testSiteKey = require("../testSiteKey.cjs");
|
|
5
|
-
const require_requestBodySummary = require("../requestBodySummary.cjs");
|
|
6
|
-
let _prosopo_common = require("@prosopo/common");
|
|
1
|
+
const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
|
|
7
2
|
let _prosopo_types = require("@prosopo/types");
|
|
8
3
|
let _prosopo_util = require("@prosopo/util");
|
|
9
4
|
//#region src/api/captcha/submitPuzzleCaptchaSolution.ts
|
|
10
|
-
var submitPuzzleCaptchaSolution_default = (env) =>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
verified: true
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
let parsed;
|
|
19
|
-
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
20
|
-
try {
|
|
21
|
-
parsed = _prosopo_types.SubmitPuzzleCaptchaSolutionBody.parse(req.body);
|
|
22
|
-
} catch (err) {
|
|
23
|
-
return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
|
|
24
|
-
context: {
|
|
25
|
-
code: 400,
|
|
26
|
-
error: err,
|
|
27
|
-
body: require_requestBodySummary.summariseRequestBody(req)
|
|
28
|
-
},
|
|
29
|
-
i18n: req.i18n,
|
|
30
|
-
logger: req.logger
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
33
|
-
const { challenge, signature, finalX, finalY, puzzleEvents, dapp, user, behavioralData, salt, simdReadings, clientMetaData } = parsed;
|
|
34
|
-
require_validateAddress.validateSiteKey(dapp);
|
|
35
|
-
require_validateAddress.validateAddr(user);
|
|
36
|
-
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
37
|
-
if (testVerdict !== null) {
|
|
38
|
-
const response = {
|
|
39
|
-
status: "ok",
|
|
40
|
-
verified: testVerdict
|
|
41
|
-
};
|
|
42
|
-
return res.json(response);
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
46
|
-
if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
|
|
47
|
-
context: {
|
|
48
|
-
code: 400,
|
|
49
|
-
siteKey: dapp
|
|
50
|
-
},
|
|
51
|
-
i18n: req.i18n,
|
|
52
|
-
logger: req.logger
|
|
53
|
-
}));
|
|
54
|
-
const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
|
|
55
|
-
const response = {
|
|
56
|
-
status: "ok",
|
|
57
|
-
verified: await tasks.puzzleCaptchaManager.verifyPuzzleCaptchaSolution(challenge, signature.provider.challenge, finalX, finalY, puzzleEvents, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), behavioralData, salt, simdReadings, clientMetaData)
|
|
58
|
-
};
|
|
59
|
-
return res.json(response);
|
|
60
|
-
} catch (err) {
|
|
61
|
-
req.logger.error(() => ({
|
|
62
|
-
err,
|
|
63
|
-
body: require_requestBodySummary.summariseRequestBody(req),
|
|
64
|
-
msg: "Error in puzzle captcha solution submission"
|
|
65
|
-
}));
|
|
66
|
-
return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
|
|
67
|
-
context: {
|
|
68
|
-
code: 500,
|
|
69
|
-
siteKey: req.body.dapp,
|
|
70
|
-
error: err
|
|
71
|
-
},
|
|
72
|
-
i18n: req.i18n,
|
|
73
|
-
logger: req.logger
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
};
|
|
5
|
+
var submitPuzzleCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
|
|
6
|
+
label: "puzzle",
|
|
7
|
+
parse: (body) => _prosopo_types.SubmitPuzzleCaptchaSolutionBody.parse(body),
|
|
8
|
+
verify: (tasks, body, submitWindowMs, req) => tasks.puzzleCaptchaManager.verifyPuzzleCaptchaSolution(body.challenge, body.signature.provider.challenge, body.finalX, body.finalY, body.puzzleEvents, submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
|
|
9
|
+
});
|
|
77
10
|
//#endregion
|
|
78
11
|
exports.default = submitPuzzleCaptchaSolution_default;
|
|
@@ -41,6 +41,9 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
|
|
|
41
41
|
puzzleTolerance: resolved.puzzleTolerance,
|
|
42
42
|
padBytes,
|
|
43
43
|
puzzleSettings: resolved.puzzleSettings,
|
|
44
|
+
audioSettings: resolved.audioSettings,
|
|
45
|
+
iconOrderTolerance: resolved.iconOrderTolerance,
|
|
46
|
+
iconOrderSettings: resolved.iconOrderSettings,
|
|
44
47
|
sourceCategories: resolved.sourceCategories
|
|
45
48
|
};
|
|
46
49
|
};
|
package/dist/cjs/api/captcha.cjs
CHANGED
|
@@ -2,10 +2,14 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
|
2
2
|
const require_tarpitPadding = require("../utils/tarpitPadding.cjs");
|
|
3
3
|
const require_assignDetectorBundle = require("./captcha/assignDetectorBundle.cjs");
|
|
4
4
|
const require_checkSpamEmail = require("./captcha/checkSpamEmail.cjs");
|
|
5
|
+
const require_getAudioCaptchaChallenge = require("./captcha/getAudioCaptchaChallenge.cjs");
|
|
5
6
|
const require_handler = require("./captcha/getFrictionlessCaptchaChallenge/handler.cjs");
|
|
7
|
+
const require_getIconOrderCaptchaChallenge = require("./captcha/getIconOrderCaptchaChallenge.cjs");
|
|
6
8
|
const require_getImageCaptchaChallenge = require("./captcha/getImageCaptchaChallenge.cjs");
|
|
7
9
|
const require_getPoWCaptchaChallenge = require("./captcha/getPoWCaptchaChallenge.cjs");
|
|
8
10
|
const require_getPuzzleCaptchaChallenge = require("./captcha/getPuzzleCaptchaChallenge.cjs");
|
|
11
|
+
const require_submitAudioCaptchaSolution = require("./captcha/submitAudioCaptchaSolution.cjs");
|
|
12
|
+
const require_submitIconOrderCaptchaSolution = require("./captcha/submitIconOrderCaptchaSolution.cjs");
|
|
9
13
|
const require_submitImageCaptchaSolution = require("./captcha/submitImageCaptchaSolution.cjs");
|
|
10
14
|
const require_submitPoWCaptchaSolution = require("./captcha/submitPoWCaptchaSolution.cjs");
|
|
11
15
|
const require_submitPuzzleCaptchaSolution = require("./captcha/submitPuzzleCaptchaSolution.cjs");
|
|
@@ -80,6 +84,10 @@ function prosopoRouter(env) {
|
|
|
80
84
|
* Verifies a user's Puzzle solution as being approved or not
|
|
81
85
|
*/
|
|
82
86
|
router.post(_prosopo_types.ClientApiPaths.SubmitPuzzleCaptchaSolution, asyncHandler(require_submitPuzzleCaptchaSolution.default(env)));
|
|
87
|
+
router.post(_prosopo_types.ClientApiPaths.GetAudioCaptchaChallenge, asyncHandler(require_getAudioCaptchaChallenge.default(env, userAccessRulesStorage)));
|
|
88
|
+
router.post(_prosopo_types.ClientApiPaths.SubmitAudioCaptchaSolution, asyncHandler(require_submitAudioCaptchaSolution.default(env)));
|
|
89
|
+
router.post(_prosopo_types.ClientApiPaths.GetIconOrderCaptchaChallenge, asyncHandler(require_getIconOrderCaptchaChallenge.default(env, userAccessRulesStorage)));
|
|
90
|
+
router.post(_prosopo_types.ClientApiPaths.SubmitIconOrderCaptchaSolution, asyncHandler(require_submitIconOrderCaptchaSolution.default(env)));
|
|
83
91
|
/**
|
|
84
92
|
* Checks if an email domain is spam
|
|
85
93
|
*/
|
|
@@ -4,9 +4,9 @@ const require_apiToggleMaintenanceModeEndpoint = require("./admin/apiToggleMaint
|
|
|
4
4
|
const require_testSiteKey = require("./testSiteKey.cjs");
|
|
5
5
|
let _prosopo_common = require("@prosopo/common");
|
|
6
6
|
let _prosopo_util = require("@prosopo/util");
|
|
7
|
+
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
7
8
|
let _prosopo_util_crypto = require("@prosopo/util-crypto");
|
|
8
9
|
let zod = require("zod");
|
|
9
|
-
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
10
10
|
//#region src/api/domainMiddleware.ts
|
|
11
11
|
var domainMiddleware = (env) => {
|
|
12
12
|
let cachedTasks;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_ja4 = require("./ja4.cjs");
|
|
2
2
|
let _prosopo_logger = require("@prosopo/logger");
|
|
3
|
-
let _prosopo_util_crypto = require("@prosopo/util-crypto");
|
|
4
3
|
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
4
|
+
let _prosopo_util_crypto = require("@prosopo/util-crypto");
|
|
5
5
|
//#region src/api/ja4Middleware.ts
|
|
6
6
|
var DEFAULT_JA4 = "ja4";
|
|
7
7
|
var getJA4 = async (headers, logger) => {
|
|
@@ -7,9 +7,44 @@ var HEADER_ACK_NS = "x-tls-ack-ns";
|
|
|
7
7
|
var HEADER_OBSERVED_TTL = "x-tls-observed-ttl";
|
|
8
8
|
var HEADER_TCP_MSS = "x-tls-tcp-mss";
|
|
9
9
|
var HEADER_TCP_WSCALE = "x-tls-tcp-wscale";
|
|
10
|
+
var HEADER_TCP_WINDOW = "x-tls-tcp-window";
|
|
11
|
+
var HEADER_TCP_OPTS_KINDS = "x-tls-tcp-opts-kinds";
|
|
12
|
+
var HEADER_TCP_OPTS_PRESENT = "x-tls-tcp-opts-present";
|
|
13
|
+
var HEADER_TCP_OPTS_COUNT = "x-tls-tcp-opts-count";
|
|
14
|
+
var HEADER_TCP_TSVAL = "x-tls-tcp-tsval";
|
|
15
|
+
var HEADER_TCP_TSECR = "x-tls-tcp-tsecr";
|
|
16
|
+
var HEADER_TCP_FLAGS = "x-tls-tcp-flags";
|
|
17
|
+
var HEADER_TCP_DATA_OFFSET_RESV = "x-tls-tcp-data-offset-resv";
|
|
18
|
+
var HEADER_TCP_URG_PTR = "x-tls-tcp-urg-ptr";
|
|
19
|
+
var HEADER_IP_IDENT = "x-tls-ip-ident";
|
|
20
|
+
var HEADER_IP_TOTAL_LEN = "x-tls-ip-total-len";
|
|
21
|
+
var HEADER_IP_FRAG_FLAGS = "x-tls-ip-frag-flags";
|
|
22
|
+
var HEADER_IP_TOS = "x-tls-ip-tos";
|
|
10
23
|
var HEADER_TCP_OPTS_FLAGS = "x-tls-tcp-opts-flags";
|
|
11
24
|
var HEADER_TCP_OPTS_ORDER = "x-tls-tcp-opts-order";
|
|
12
|
-
var
|
|
25
|
+
var RAW_TLS_SIGNAL_KEYS = [
|
|
26
|
+
"synNs",
|
|
27
|
+
"synackNs",
|
|
28
|
+
"ackNs",
|
|
29
|
+
"observedTtl",
|
|
30
|
+
"tcpMss",
|
|
31
|
+
"tcpWscale",
|
|
32
|
+
"tcpWindow",
|
|
33
|
+
"tcpOptsKinds",
|
|
34
|
+
"tcpOptsPresent",
|
|
35
|
+
"tcpOptsCount",
|
|
36
|
+
"tcpTsval",
|
|
37
|
+
"tcpTsecr",
|
|
38
|
+
"tcpFlags",
|
|
39
|
+
"tcpDataOffsetResv",
|
|
40
|
+
"tcpUrgPtr",
|
|
41
|
+
"ipIdent",
|
|
42
|
+
"ipTotalLen",
|
|
43
|
+
"ipFragFlags",
|
|
44
|
+
"ipTos",
|
|
45
|
+
"tcpOptsFlags",
|
|
46
|
+
"tcpOptsOrder"
|
|
47
|
+
];
|
|
13
48
|
var parseIntHeader = (raw, logger, headerName, max) => {
|
|
14
49
|
if (raw === void 0) return;
|
|
15
50
|
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
@@ -31,6 +66,46 @@ var MAX_NS = 2 ** 63;
|
|
|
31
66
|
var MAX_U8 = 255;
|
|
32
67
|
var MAX_U16 = 65535;
|
|
33
68
|
var MAX_U32 = 4294967295;
|
|
69
|
+
var OPTS_KINDS_SLOTS = 8;
|
|
70
|
+
var MAX_U64 = (1n << 64n) - 1n;
|
|
71
|
+
var parseOptsKindsHeader = (raw, logger) => {
|
|
72
|
+
if (raw === void 0) return;
|
|
73
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
74
|
+
if (value === void 0 || !/^\d+$/.test(value)) {
|
|
75
|
+
if (value !== void 0) logger.debug(() => ({
|
|
76
|
+
msg: "Ignoring malformed raw TLS signal header",
|
|
77
|
+
data: {
|
|
78
|
+
header: HEADER_TCP_OPTS_KINDS,
|
|
79
|
+
raw: value
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
let packed;
|
|
85
|
+
try {
|
|
86
|
+
packed = BigInt(value);
|
|
87
|
+
} catch {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (packed > MAX_U64) {
|
|
91
|
+
logger.debug(() => ({
|
|
92
|
+
msg: "Ignoring out-of-range raw TLS signal header",
|
|
93
|
+
data: {
|
|
94
|
+
header: HEADER_TCP_OPTS_KINDS,
|
|
95
|
+
raw: value
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (packed === 0n) return;
|
|
101
|
+
const kinds = [];
|
|
102
|
+
for (let slot = 0; slot < OPTS_KINDS_SLOTS; slot++) {
|
|
103
|
+
const kind = Number(packed >> BigInt(slot * 8) & 255n);
|
|
104
|
+
if (kind === 0) break;
|
|
105
|
+
kinds.push(kind);
|
|
106
|
+
}
|
|
107
|
+
return kinds.length > 0 ? kinds : void 0;
|
|
108
|
+
};
|
|
34
109
|
var getRawTlsSignals = (headers, logger) => {
|
|
35
110
|
const log = logger ?? (0, _prosopo_logger.getLogger)("info", "provider:raw-tls-signals");
|
|
36
111
|
return {
|
|
@@ -40,37 +115,50 @@ var getRawTlsSignals = (headers, logger) => {
|
|
|
40
115
|
observedTtl: parseIntHeader(headers[HEADER_OBSERVED_TTL], log, HEADER_OBSERVED_TTL, MAX_U8),
|
|
41
116
|
tcpMss: parseIntHeader(headers[HEADER_TCP_MSS], log, HEADER_TCP_MSS, MAX_U16),
|
|
42
117
|
tcpWscale: parseIntHeader(headers[HEADER_TCP_WSCALE], log, HEADER_TCP_WSCALE, MAX_U8),
|
|
118
|
+
tcpWindow: parseIntHeader(headers[HEADER_TCP_WINDOW], log, HEADER_TCP_WINDOW, MAX_U16),
|
|
119
|
+
tcpOptsKinds: parseOptsKindsHeader(headers[HEADER_TCP_OPTS_KINDS], log),
|
|
120
|
+
tcpOptsPresent: parseIntHeader(headers[HEADER_TCP_OPTS_PRESENT], log, HEADER_TCP_OPTS_PRESENT, MAX_U16),
|
|
121
|
+
tcpOptsCount: parseIntHeader(headers[HEADER_TCP_OPTS_COUNT], log, HEADER_TCP_OPTS_COUNT, MAX_U8),
|
|
122
|
+
tcpTsval: parseIntHeader(headers[HEADER_TCP_TSVAL], log, HEADER_TCP_TSVAL, MAX_U32),
|
|
123
|
+
tcpTsecr: parseIntHeader(headers[HEADER_TCP_TSECR], log, HEADER_TCP_TSECR, MAX_U32),
|
|
124
|
+
tcpFlags: parseIntHeader(headers[HEADER_TCP_FLAGS], log, HEADER_TCP_FLAGS, MAX_U8),
|
|
125
|
+
tcpDataOffsetResv: parseIntHeader(headers[HEADER_TCP_DATA_OFFSET_RESV], log, HEADER_TCP_DATA_OFFSET_RESV, MAX_U8),
|
|
126
|
+
tcpUrgPtr: parseIntHeader(headers[HEADER_TCP_URG_PTR], log, HEADER_TCP_URG_PTR, MAX_U16),
|
|
127
|
+
ipIdent: parseIntHeader(headers[HEADER_IP_IDENT], log, HEADER_IP_IDENT, MAX_U16),
|
|
128
|
+
ipTotalLen: parseIntHeader(headers[HEADER_IP_TOTAL_LEN], log, HEADER_IP_TOTAL_LEN, MAX_U16),
|
|
129
|
+
ipFragFlags: parseIntHeader(headers[HEADER_IP_FRAG_FLAGS], log, HEADER_IP_FRAG_FLAGS, MAX_U16),
|
|
130
|
+
ipTos: parseIntHeader(headers[HEADER_IP_TOS], log, HEADER_IP_TOS, MAX_U8),
|
|
43
131
|
tcpOptsFlags: parseIntHeader(headers[HEADER_TCP_OPTS_FLAGS], log, HEADER_TCP_OPTS_FLAGS, MAX_U8),
|
|
44
|
-
tcpOptsOrder: parseIntHeader(headers[HEADER_TCP_OPTS_ORDER], log, HEADER_TCP_OPTS_ORDER, MAX_U32)
|
|
45
|
-
tcpWindow: parseIntHeader(headers[HEADER_TCP_WINDOW], log, HEADER_TCP_WINDOW, MAX_U16)
|
|
132
|
+
tcpOptsOrder: parseIntHeader(headers[HEADER_TCP_OPTS_ORDER], log, HEADER_TCP_OPTS_ORDER, MAX_U32)
|
|
46
133
|
};
|
|
47
134
|
};
|
|
48
|
-
var rawTlsSignalsForSession = (req) =>
|
|
135
|
+
var rawTlsSignalsForSession = (req) => rawTlsSignalsFromRecord(req);
|
|
136
|
+
/**
|
|
137
|
+
* Pull the raw TLS signals out of a persisted Session — or anything shaped
|
|
138
|
+
* like one — for a decision machine's `raw` bag, or to carry forward onto a
|
|
139
|
+
* new Session record.
|
|
140
|
+
*
|
|
141
|
+
* Six call sites used to name every field by hand, so adding one to the
|
|
142
|
+
* probe meant remembering six places; the fields that were forgotten read as
|
|
143
|
+
* `undefined` and the rules gating on them silently never fired.
|
|
144
|
+
*/
|
|
145
|
+
var rawTlsSignalsFromRecord = (record) => {
|
|
49
146
|
const out = {};
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (req.tcpWscale !== void 0) out.tcpWscale = req.tcpWscale;
|
|
56
|
-
if (req.tcpOptsFlags !== void 0) out.tcpOptsFlags = req.tcpOptsFlags;
|
|
57
|
-
if (req.tcpOptsOrder !== void 0) out.tcpOptsOrder = req.tcpOptsOrder;
|
|
58
|
-
if (req.tcpWindow !== void 0) out.tcpWindow = req.tcpWindow;
|
|
147
|
+
if (!record) return out;
|
|
148
|
+
for (const key of RAW_TLS_SIGNAL_KEYS) {
|
|
149
|
+
const value = record[key];
|
|
150
|
+
if (value !== void 0) Object.assign(out, { [key]: value });
|
|
151
|
+
}
|
|
59
152
|
return out;
|
|
60
153
|
};
|
|
61
154
|
var rawTlsSignalsMiddleware = (env) => {
|
|
62
155
|
return async (req, res, next) => {
|
|
63
156
|
try {
|
|
64
157
|
const signals = getRawTlsSignals(req.headers, req.logger);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (signals.tcpMss !== void 0) req.tcpMss = signals.tcpMss;
|
|
70
|
-
if (signals.tcpWscale !== void 0) req.tcpWscale = signals.tcpWscale;
|
|
71
|
-
if (signals.tcpOptsFlags !== void 0) req.tcpOptsFlags = signals.tcpOptsFlags;
|
|
72
|
-
if (signals.tcpOptsOrder !== void 0) req.tcpOptsOrder = signals.tcpOptsOrder;
|
|
73
|
-
if (signals.tcpWindow !== void 0) req.tcpWindow = signals.tcpWindow;
|
|
158
|
+
for (const key of RAW_TLS_SIGNAL_KEYS) {
|
|
159
|
+
const value = signals[key];
|
|
160
|
+
if (value !== void 0) Object.assign(req, { [key]: value });
|
|
161
|
+
}
|
|
74
162
|
if (Object.values(signals).some((v) => v !== void 0)) req.logger = req.logger.with(signals, "rawTlsSignals");
|
|
75
163
|
next();
|
|
76
164
|
} catch (err) {
|
|
@@ -81,4 +169,5 @@ var rawTlsSignalsMiddleware = (env) => {
|
|
|
81
169
|
//#endregion
|
|
82
170
|
exports.getRawTlsSignals = getRawTlsSignals;
|
|
83
171
|
exports.rawTlsSignalsForSession = rawTlsSignalsForSession;
|
|
172
|
+
exports.rawTlsSignalsFromRecord = rawTlsSignalsFromRecord;
|
|
84
173
|
exports.rawTlsSignalsMiddleware = rawTlsSignalsMiddleware;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_rawTlsSignalsMiddleware = require("./rawTlsSignalsMiddleware.cjs");
|
|
2
3
|
const require_metrics = require("./metrics.cjs");
|
|
3
4
|
const require_blacklistRequestInspector = require("./blacklistRequestInspector.cjs");
|
|
4
5
|
const require_bundlePool = require("../tasks/detection/bundlePool.cjs");
|
|
5
6
|
const require_block = require("./block.cjs");
|
|
6
|
-
const require_rawTlsSignalsMiddleware = require("./rawTlsSignalsMiddleware.cjs");
|
|
7
7
|
const require_captcha = require("./captcha.cjs");
|
|
8
8
|
const require_verify = require("./verify.cjs");
|
|
9
9
|
const require_ja4Middleware = require("./ja4Middleware.cjs");
|
|
@@ -20,13 +20,13 @@ const require_ipInfoMiddleware = require("./ipInfoMiddleware.cjs");
|
|
|
20
20
|
const require_robotsMiddleware = require("./robotsMiddleware.cjs");
|
|
21
21
|
let _prosopo_logger = require("@prosopo/logger");
|
|
22
22
|
let _prosopo_types = require("@prosopo/types");
|
|
23
|
+
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
23
24
|
let node_fs = require("node:fs");
|
|
24
25
|
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
25
26
|
let node_path = require("node:path");
|
|
26
27
|
node_path = require_runtime.__toESM(node_path, 1);
|
|
27
28
|
let node_https = require("node:https");
|
|
28
29
|
node_https = require_runtime.__toESM(node_https, 1);
|
|
29
|
-
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
30
30
|
let express = require("express");
|
|
31
31
|
express = require_runtime.__toESM(express, 1);
|
|
32
32
|
let node_url = require("node:url");
|