@prosopo/provider 5.6.2 → 5.6.4
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 +16 -13
- package/.turbo/turbo-build$colon$tsc.log +25 -25
- package/.turbo/turbo-build.log +17 -14
- package/CHANGELOG.md +92 -0
- package/dist/api/captcha/contextAwareValidation.d.ts +3 -2
- package/dist/api/captcha/contextAwareValidation.d.ts.map +1 -1
- package/dist/api/captcha/contextAwareValidation.js +32 -13
- package/dist/api/captcha/contextAwareValidation.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +8 -5
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +14 -20
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +3 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +2 -2
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +2 -3
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts +4 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +23 -6
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.js +2 -2
- package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
- package/dist/cjs/api/captcha/contextAwareValidation.cjs +31 -11
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +7 -4
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +12 -18
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +3 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +1 -1
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +1 -1
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +22 -5
- package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +1 -1
- package/dist/cjs/tasks/captchaTypeSelection.cjs +53 -0
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +19 -8
- package/dist/cjs/tasks/puzzle/puzzleDifficulty.cjs +208 -0
- package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +13 -61
- package/dist/cjs/tasks/puzzle/stratifiedSampler.cjs +61 -0
- package/dist/tasks/captchaTypeSelection.d.ts +5 -0
- package/dist/tasks/captchaTypeSelection.d.ts.map +1 -0
- package/dist/tasks/captchaTypeSelection.js +53 -0
- package/dist/tasks/captchaTypeSelection.js.map +1 -0
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +20 -9
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/frictionless/routingMachine.d.ts +4 -1
- package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
- package/dist/tasks/frictionless/routingMachine.js.map +1 -1
- package/dist/tasks/puzzle/puzzleDifficulty.d.ts +25 -0
- package/dist/tasks/puzzle/puzzleDifficulty.d.ts.map +1 -0
- package/dist/tasks/puzzle/puzzleDifficulty.js +204 -0
- package/dist/tasks/puzzle/puzzleDifficulty.js.map +1 -0
- package/dist/tasks/puzzle/puzzleRenderer.d.ts +1 -3
- package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
- package/dist/tasks/puzzle/puzzleRenderer.js +15 -62
- package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
- package/dist/tasks/puzzle/stratifiedSampler.d.ts +7 -0
- package/dist/tasks/puzzle/stratifiedSampler.d.ts.map +1 -0
- package/dist/tasks/puzzle/stratifiedSampler.js +61 -0
- package/dist/tasks/puzzle/stratifiedSampler.js.map +1 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +4 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js +3 -0
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +2 -0
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +3 -0
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
- package/dist/tests/unit/api/contextAwareValidation.unit.test.js +88 -67
- package/dist/tests/unit/api/contextAwareValidation.unit.test.js.map +1 -1
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +55 -105
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +2 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js +54 -0
- package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/routerImageRoundsClamp.unit.test.js +24 -5
- package/dist/tests/unit/tasks/frictionless/routerImageRoundsClamp.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.js +137 -0
- package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.js.map +1 -0
- package/package.json +13 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.6.
|
|
2
|
+
> @prosopo/provider@5.6.4 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -55,7 +55,7 @@ ViteCommonJSConfig: .
|
|
|
55
55
|
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
56
56
|
Bundle build started
|
|
57
57
|
[2K
|
|
58
|
-
✓
|
|
58
|
+
✓ 108 modules transformed.
|
|
59
59
|
rendering chunks...
|
|
60
60
|
computing gzip size...
|
|
61
61
|
dist/cjs/tasks/index.cjs 0.08 kB │ gzip: 0.07 kB
|
|
@@ -85,7 +85,6 @@ dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs 1
|
|
|
85
85
|
dist/cjs/utils/normalizeRequestIp.cjs 1.16 kB │ gzip: 0.52 kB
|
|
86
86
|
dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs 1.16 kB │ gzip: 0.50 kB
|
|
87
87
|
dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs 1.17 kB │ gzip: 0.50 kB
|
|
88
|
-
dist/cjs/api/captcha/contextAwareValidation.cjs 1.17 kB │ gzip: 0.46 kB
|
|
89
88
|
dist/cjs/schedulers/captchaScheduler.cjs 1.21 kB │ gzip: 0.50 kB
|
|
90
89
|
dist/cjs/api/block.cjs 1.28 kB │ gzip: 0.48 kB
|
|
91
90
|
dist/cjs/schedulers/getClientList.cjs 1.28 kB │ gzip: 0.55 kB
|
|
@@ -113,10 +112,13 @@ dist/cjs/utils/honeypot/phraseBank.cjs 1
|
|
|
113
112
|
dist/cjs/api/handshakeTimingMiddleware.cjs 1.88 kB │ gzip: 0.71 kB
|
|
114
113
|
dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs 2.01 kB │ gzip: 0.78 kB
|
|
115
114
|
dist/cjs/api/captcha/assignDetectorBundle.cjs 2.03 kB │ gzip: 0.86 kB
|
|
115
|
+
dist/cjs/api/captcha/contextAwareValidation.cjs 2.09 kB │ gzip: 0.90 kB
|
|
116
116
|
dist/cjs/tasks/spam/updateSpamEmailDomains.cjs 2.12 kB │ gzip: 0.85 kB
|
|
117
117
|
dist/cjs/tasks/frictionless/routingMachine.cjs 2.17 kB │ gzip: 0.91 kB
|
|
118
118
|
dist/cjs/api/public.cjs 2.18 kB │ gzip: 0.91 kB
|
|
119
119
|
dist/cjs/migrations/frictionlessLadder.cjs 2.19 kB │ gzip: 0.95 kB
|
|
120
|
+
dist/cjs/tasks/puzzle/stratifiedSampler.cjs 2.20 kB │ gzip: 1.08 kB
|
|
121
|
+
dist/cjs/tasks/captchaTypeSelection.cjs 2.44 kB │ gzip: 1.04 kB
|
|
120
122
|
dist/cjs/api/admin/apiDnsEventEndpoint.cjs 2.59 kB │ gzip: 1.00 kB
|
|
121
123
|
dist/cjs/utils/dns.cjs 2.66 kB │ gzip: 1.02 kB
|
|
122
124
|
dist/cjs/api/forwardVerify.cjs 2.66 kB │ gzip: 1.12 kB
|
|
@@ -124,38 +126,39 @@ dist/cjs/api/captcha/checkSpamEmail.cjs 2
|
|
|
124
126
|
dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs 2.77 kB │ gzip: 0.99 kB
|
|
125
127
|
dist/cjs/api/captcha/maintenanceModeResponses.cjs 2.91 kB │ gzip: 0.77 kB
|
|
126
128
|
dist/cjs/api/captcha/submitImageCaptchaSolution.cjs 2.93 kB │ gzip: 1.03 kB
|
|
127
|
-
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs 3.
|
|
129
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs 3.66 kB │ gzip: 1.35 kB
|
|
128
130
|
dist/cjs/api/admin/apiAdminRoutesProvider.cjs 3.67 kB │ gzip: 0.62 kB
|
|
129
131
|
dist/cjs/api/rawTlsSignalsMiddleware.cjs 3.84 kB │ gzip: 1.16 kB
|
|
130
132
|
dist/cjs/api/domainMiddleware.cjs 3.85 kB │ gzip: 1.26 kB
|
|
131
133
|
dist/cjs/services/ipComparison.cjs 3.98 kB │ gzip: 1.20 kB
|
|
132
134
|
dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs 4.03 kB │ gzip: 1.60 kB
|
|
133
|
-
dist/cjs/api/captcha/trafficFilterRequestTime.cjs 4.12 kB │ gzip: 1.52 kB
|
|
134
135
|
dist/cjs/tasks/spam/checkSpamEmail.cjs 4.14 kB │ gzip: 1.14 kB
|
|
136
|
+
dist/cjs/api/captcha/trafficFilterRequestTime.cjs 4.17 kB │ gzip: 1.53 kB
|
|
137
|
+
dist/cjs/tasks/puzzle/puzzleRenderer.cjs 4.24 kB │ gzip: 1.51 kB
|
|
135
138
|
dist/cjs/api/hardBlockVerdictCache.cjs 4.27 kB │ gzip: 1.70 kB
|
|
136
|
-
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs 4.31 kB │ gzip: 1.03 kB
|
|
137
139
|
dist/cjs/api/captcha.cjs 4.51 kB │ gzip: 1.40 kB
|
|
140
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs 4.56 kB │ gzip: 1.07 kB
|
|
138
141
|
dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs 4.84 kB │ gzip: 1.74 kB
|
|
139
142
|
dist/cjs/index.cjs 4.85 kB │ gzip: 1.01 kB
|
|
140
143
|
dist/cjs/tasks/tasks.cjs 5.07 kB │ gzip: 1.57 kB
|
|
141
144
|
dist/cjs/util/usageCounters.cjs 5.72 kB │ gzip: 2.03 kB
|
|
142
|
-
dist/cjs/tasks/puzzle/
|
|
145
|
+
dist/cjs/tasks/puzzle/puzzleDifficulty.cjs 5.78 kB │ gzip: 2.05 kB
|
|
143
146
|
dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs 6.65 kB │ gzip: 1.87 kB
|
|
144
|
-
dist/cjs/api/captcha/getImageCaptchaChallenge.cjs
|
|
147
|
+
dist/cjs/api/captcha/getImageCaptchaChallenge.cjs 6.98 kB │ gzip: 1.99 kB
|
|
145
148
|
dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs 7.48 kB │ gzip: 2.00 kB
|
|
146
149
|
dist/cjs/api/metrics.cjs 7.51 kB │ gzip: 2.12 kB
|
|
147
150
|
dist/cjs/tasks/spam/checkTrafficFilter.cjs 7.65 kB │ gzip: 2.55 kB
|
|
148
|
-
dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 7.71 kB │ gzip: 2.38 kB
|
|
149
151
|
dist/cjs/tasks/detection/bundlePool.cjs 8.72 kB │ gzip: 3.26 kB
|
|
152
|
+
dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 8.85 kB │ gzip: 2.66 kB
|
|
150
153
|
dist/cjs/api/startProviderApi.cjs 11.62 kB │ gzip: 3.70 kB
|
|
151
154
|
dist/cjs/tasks/client/clientTasks.cjs 11.73 kB │ gzip: 3.04 kB
|
|
152
155
|
dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 12.32 kB │ gzip: 3.81 kB
|
|
153
156
|
dist/cjs/api/blacklistRequestInspector.cjs 12.41 kB │ gzip: 4.31 kB
|
|
154
|
-
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs 12.
|
|
157
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs 12.47 kB │ gzip: 2.26 kB
|
|
155
158
|
dist/cjs/util.cjs 13.25 kB │ gzip: 3.22 kB
|
|
156
159
|
dist/cjs/api/verify.cjs 13.86 kB │ gzip: 2.60 kB
|
|
157
|
-
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 18.
|
|
158
|
-
dist/cjs/tasks/frictionless/frictionlessTasks.cjs
|
|
160
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 18.33 kB │ gzip: 4.30 kB
|
|
161
|
+
dist/cjs/tasks/frictionless/frictionlessTasks.cjs 20.34 kB │ gzip: 5.38 kB
|
|
159
162
|
dist/cjs/tasks/captchaManager.cjs 22.33 kB │ gzip: 6.35 kB
|
|
160
163
|
dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.03 kB │ gzip: 5.15 kB
|
|
161
164
|
dist/cjs/tasks/powCaptcha/powTasks.cjs 24.84 kB │ gzip: 5.97 kB
|
|
@@ -164,7 +167,7 @@ dist/cjs/tasks/detection/decodeBehavior.cjs 32
|
|
|
164
167
|
dist/cjs/tasks/detection/decodeSimd.cjs 36.03 kB │ gzip: 11.96 kB
|
|
165
168
|
dist/cjs/tasks/detection/decodePayload.cjs 49.79 kB │ gzip: 16.98 kB
|
|
166
169
|
|
|
167
|
-
[32m✓ built in
|
|
170
|
+
[32m✓ built in 113ms[39m
|
|
168
171
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeBehavior.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodeBehavior.js
|
|
169
172
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodePayload.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodePayload.js
|
|
170
173
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodeSimd.js
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.6.
|
|
2
|
+
> @prosopo/provider@5.6.4 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
1:56:54 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../util/tsconfig.json
|
|
8
8
|
* ../logger/tsconfig.json
|
|
@@ -26,49 +26,49 @@
|
|
|
26
26
|
* ../puzzle-assets/tsconfig.json
|
|
27
27
|
* tsconfig.json
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
1:56:54 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
1:56:54 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
1:56:54 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
1:56:54 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/index.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
1:56:54 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
1:56:54 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
1:56:54 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/index.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
1:56:54 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
1:56:54 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
1:56:54 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
1:56:54 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
1:56:54 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/rule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
1:56:54 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
1:56:54 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/mongoGlobalSetup.ts' is older than output '../database/tsconfig.tsbuildinfo'
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
1:56:54 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
1:56:54 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/index.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
1:56:54 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/index.ts' is older than output '../env/tsconfig.tsbuildinfo'
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
1:56:54 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/tests/unit/testDoubles.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
1:56:54 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
1:56:54 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
1:56:54 PM - Project '../puzzle-assets/tsconfig.json' is up to date because newest input '../puzzle-assets/src/background.ts' is older than output '../puzzle-assets/tsconfig.tsbuildinfo'
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
1:56:54 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
1:56:54 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
|
|
74
74
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.6.
|
|
2
|
+
> @prosopo/provider@5.6.4 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider@5.6.
|
|
6
|
+
> @prosopo/provider@5.6.4 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -59,7 +59,7 @@ ViteEsmConfig: .
|
|
|
59
59
|
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
60
60
|
Bundle build started
|
|
61
61
|
[2K
|
|
62
|
-
✓
|
|
62
|
+
✓ 108 modules transformed.
|
|
63
63
|
rendering chunks...
|
|
64
64
|
computing gzip size...
|
|
65
65
|
dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
|
|
@@ -89,7 +89,6 @@ dist/api/admin/apiRemoveSiteKeysEndpoint.js 1.07 k
|
|
|
89
89
|
dist/api/admin/apiRegisterSiteKeysEndpoint.js 1.08 kB │ gzip: 0.50 kB
|
|
90
90
|
dist/api/admin/apiRemoveSiteKeyEndpoint.js 1.08 kB │ gzip: 0.48 kB
|
|
91
91
|
dist/api/block.js 1.08 kB │ gzip: 0.46 kB
|
|
92
|
-
dist/api/captcha/contextAwareValidation.js 1.09 kB │ gzip: 0.45 kB
|
|
93
92
|
dist/schedulers/captchaScheduler.js 1.11 kB │ gzip: 0.48 kB
|
|
94
93
|
dist/utils/normalizeRequestIp.js 1.14 kB │ gzip: 0.52 kB
|
|
95
94
|
dist/pairs.js 1.19 kB │ gzip: 0.58 kB
|
|
@@ -119,9 +118,12 @@ dist/tasks/spam/updateSpamEmailDomains.js 1.87 k
|
|
|
119
118
|
dist/api/admin/apiClearAllCountersEndpoint.js 1.89 kB │ gzip: 0.76 kB
|
|
120
119
|
dist/api/public.js 1.90 kB │ gzip: 0.83 kB
|
|
121
120
|
dist/api/captcha/assignDetectorBundle.js 1.90 kB │ gzip: 0.84 kB
|
|
121
|
+
dist/api/captcha/contextAwareValidation.js 1.99 kB │ gzip: 0.88 kB
|
|
122
122
|
dist/migrations/frictionlessLadder.js 2.12 kB │ gzip: 0.93 kB
|
|
123
|
+
dist/tasks/puzzle/stratifiedSampler.js 2.14 kB │ gzip: 1.07 kB
|
|
123
124
|
dist/tasks/frictionless/routingMachine.js 2.16 kB │ gzip: 0.91 kB
|
|
124
125
|
dist/api/captcha/maintenanceModeResponses.js 2.16 kB │ gzip: 0.73 kB
|
|
126
|
+
dist/tasks/captchaTypeSelection.js 2.22 kB │ gzip: 1.03 kB
|
|
125
127
|
dist/utils/dns.js 2.36 kB │ gzip: 0.95 kB
|
|
126
128
|
dist/api/admin/apiDnsEventEndpoint.js 2.43 kB │ gzip: 0.96 kB
|
|
127
129
|
dist/api/captcha/checkSpamEmail.js 2.47 kB │ gzip: 0.91 kB
|
|
@@ -130,36 +132,37 @@ dist/api/forwardVerify.js 2.59 k
|
|
|
130
132
|
dist/api/captcha/submitImageCaptchaSolution.js 2.59 kB │ gzip: 1.00 kB
|
|
131
133
|
dist/api/admin/apiAdminRoutesProvider.js 2.78 kB │ gzip: 0.55 kB
|
|
132
134
|
dist/index.js 2.86 kB │ gzip: 0.78 kB
|
|
133
|
-
dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.
|
|
135
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.39 kB │ gzip: 1.32 kB
|
|
134
136
|
dist/api/domainMiddleware.js 3.52 kB │ gzip: 1.22 kB
|
|
135
137
|
dist/api/rawTlsSignalsMiddleware.js 3.69 kB │ gzip: 1.13 kB
|
|
136
138
|
dist/tasks/spam/evaluateEmailSpamRules.js 3.84 kB │ gzip: 1.59 kB
|
|
137
|
-
dist/
|
|
139
|
+
dist/tasks/puzzle/puzzleRenderer.js 3.90 kB │ gzip: 1.49 kB
|
|
140
|
+
dist/api/captcha/trafficFilterRequestTime.js 3.94 kB │ gzip: 1.51 kB
|
|
138
141
|
dist/services/ipComparison.js 3.96 kB │ gzip: 1.19 kB
|
|
139
142
|
dist/api/captcha.js 4.05 kB │ gzip: 1.31 kB
|
|
140
143
|
dist/tasks/spam/checkSpamEmail.js 4.12 kB │ gzip: 1.12 kB
|
|
141
|
-
dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js 4.13 kB │ gzip: 1.03 kB
|
|
142
144
|
dist/api/hardBlockVerdictCache.js 4.14 kB │ gzip: 1.69 kB
|
|
145
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js 4.35 kB │ gzip: 1.07 kB
|
|
143
146
|
dist/tasks/tasks.js 4.69 kB │ gzip: 1.51 kB
|
|
144
147
|
dist/tasks/dnsEvent/enrichDnsEvent.js 4.71 kB │ gzip: 1.72 kB
|
|
145
|
-
dist/tasks/puzzle/
|
|
148
|
+
dist/tasks/puzzle/puzzleDifficulty.js 5.50 kB │ gzip: 2.02 kB
|
|
146
149
|
dist/util/usageCounters.js 5.65 kB │ gzip: 2.01 kB
|
|
147
150
|
dist/api/captcha/getPoWCaptchaChallenge.js 6.02 kB │ gzip: 1.81 kB
|
|
148
|
-
dist/api/captcha/getImageCaptchaChallenge.js 6.
|
|
151
|
+
dist/api/captcha/getImageCaptchaChallenge.js 6.28 kB │ gzip: 1.94 kB
|
|
149
152
|
dist/api/captcha/getPuzzleCaptchaChallenge.js 6.77 kB │ gzip: 1.95 kB
|
|
150
153
|
dist/api/metrics.js 6.96 kB │ gzip: 2.09 kB
|
|
151
|
-
dist/api/captcha/submitPoWCaptchaSolution.js 7.30 kB │ gzip: 2.35 kB
|
|
152
154
|
dist/tasks/spam/checkTrafficFilter.js 7.32 kB │ gzip: 2.53 kB
|
|
153
155
|
dist/tasks/detection/bundlePool.js 8.30 kB │ gzip: 3.21 kB
|
|
156
|
+
dist/api/captcha/submitPoWCaptchaSolution.js 8.37 kB │ gzip: 2.62 kB
|
|
154
157
|
dist/api/startProviderApi.js 9.93 kB │ gzip: 3.42 kB
|
|
155
158
|
dist/tasks/client/clientTasks.js 11.27 kB │ gzip: 3.00 kB
|
|
156
|
-
dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 11.
|
|
159
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 11.34 kB │ gzip: 2.23 kB
|
|
157
160
|
dist/api/blacklistRequestInspector.js 11.85 kB │ gzip: 4.28 kB
|
|
158
161
|
dist/tasks/decisionMachine/decisionMachineRunner.js 11.93 kB │ gzip: 3.75 kB
|
|
159
162
|
dist/api/verify.js 12.52 kB │ gzip: 2.49 kB
|
|
160
163
|
dist/util.js 12.57 kB │ gzip: 3.17 kB
|
|
161
|
-
dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js
|
|
162
|
-
dist/tasks/frictionless/frictionlessTasks.js 19.
|
|
164
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 17.12 kB │ gzip: 4.21 kB
|
|
165
|
+
dist/tasks/frictionless/frictionlessTasks.js 19.85 kB │ gzip: 5.35 kB
|
|
163
166
|
dist/tasks/captchaManager.js 21.82 kB │ gzip: 6.29 kB
|
|
164
167
|
dist/tasks/puzzleCaptcha/puzzleTasks.js 22.62 kB │ gzip: 5.11 kB
|
|
165
168
|
dist/tasks/powCaptcha/powTasks.js 23.47 kB │ gzip: 5.93 kB
|
|
@@ -168,7 +171,7 @@ dist/tasks/detection/decodeBehavior.js 32.26 k
|
|
|
168
171
|
dist/tasks/detection/decodeSimd.js 36.06 kB │ gzip: 12.00 kB
|
|
169
172
|
dist/tasks/detection/decodePayload.js 49.69 kB │ gzip: 16.96 kB
|
|
170
173
|
|
|
171
|
-
[32m✓ built in
|
|
174
|
+
[32m✓ built in 103ms[39m
|
|
172
175
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeBehavior.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeBehavior.js
|
|
173
176
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodePayload.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodePayload.js
|
|
174
177
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeSimd.js
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,97 @@
|
|
|
1
1
|
# @prosopo/provider
|
|
2
2
|
|
|
3
|
+
## 5.6.4
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- a62b994: Context-aware validation buckets by device type, not just webview.
|
|
7
|
+
|
|
8
|
+
Context-aware validation compares a session's head SimHash against a baseline
|
|
9
|
+
for its context. That context was `default | webview`, which puts a phone and
|
|
10
|
+
a desktop in the same bucket — and those two emit genuinely different
|
|
11
|
+
`<head>`s, so the blended baseline matches neither well. Contexts are now the
|
|
12
|
+
device family crossed with the webview flag: `desktop`, `desktop-webview`,
|
|
13
|
+
`mobile`, `mobile-webview`, `tablet`, `tablet-webview`.
|
|
14
|
+
|
|
15
|
+
`desktop-webview` is included deliberately. Desktop webviews are a real and
|
|
16
|
+
notably fraudulent population here (see the Twickets desktop-webview rules),
|
|
17
|
+
and folding them into the plain `desktop` baseline would let exactly the
|
|
18
|
+
traffic we want excluded define what "normal desktop" looks like.
|
|
19
|
+
|
|
20
|
+
**Classification.** `deviceTypeFromUserAgent` in `@prosopo/types` is a
|
|
21
|
+
dependency-free UA classifier, deliberately not ua-parser-js: this module is
|
|
22
|
+
imported by the browser bundles, and the off-provider entropy sweep has to
|
|
23
|
+
bucket stored sessions *identically* or it writes baselines the decision
|
|
24
|
+
machine never looks up. One shared function keeps the two sides in lockstep.
|
|
25
|
+
Tablets are matched before phones because an iPad's UA carries a
|
|
26
|
+
`Mobile/<build>` token and an Android tablet is exactly "Android without
|
|
27
|
+
Mobile". Known gap, documented at the call site: an iPadOS 13+ Safari in
|
|
28
|
+
desktop mode identifies as a Mac and lands in `desktop` — nothing in the UA
|
|
29
|
+
separates it from a real Mac, and both sides make the same call, which is
|
|
30
|
+
what matters for the lookup.
|
|
31
|
+
|
|
32
|
+
**Back-compat.** `default` and `webview` remain valid `ContextType` members,
|
|
33
|
+
so settings already stored against them keep parsing. `expandContexts` maps a
|
|
34
|
+
legacy `default` onto the three non-webview families and a legacy `webview`
|
|
35
|
+
onto the three webview families, at the threshold they were saved with; an
|
|
36
|
+
explicit device entry always wins over the legacy entry covering it. Nothing
|
|
37
|
+
downstream of settings parsing branches on the legacy keys, and no data
|
|
38
|
+
migration is required.
|
|
39
|
+
|
|
40
|
+
**Behaviour change.** A request whose context is not configured now skips
|
|
41
|
+
context validation instead of borrowing another context's baseline.
|
|
42
|
+
Previously, configuring a single context validated *every* request against it
|
|
43
|
+
— with six contexts that would measure desktop traffic against a tablet
|
|
44
|
+
baseline and reject real users wholesale. `isContextConfigured` is the new
|
|
45
|
+
guard; `determineContextType` now takes the raw request UA alongside the
|
|
46
|
+
webview flag.
|
|
47
|
+
|
|
48
|
+
New site-key registrations default to all six device contexts.
|
|
49
|
+
- a447afa: Per-sitekey `imageMinRounds` alongside the existing `imageMaxRounds`.
|
|
50
|
+
|
|
51
|
+
Every source of an image round count — access-policy rules, traffic-filter categories, routing machines, the staleness curve, and the provider's own heuristics — is now clamped into `[imageMinRounds, imageMaxRounds]` via `clampImageRounds`, so the sitekey's settings override its rules in both directions rather than only capping them. `imageMinRounds` defaults to 2, matching the floor that was previously hard-coded, so existing sitekeys are unaffected.
|
|
52
|
+
- Updated dependencies [a62b994]
|
|
53
|
+
- Updated dependencies [a447afa]
|
|
54
|
+
- @prosopo/types@5.5.3
|
|
55
|
+
- @prosopo/types-database@5.3.4
|
|
56
|
+
- @prosopo/api@4.1.4
|
|
57
|
+
- @prosopo/api-express-router@3.1.80
|
|
58
|
+
- @prosopo/database@4.0.26
|
|
59
|
+
- @prosopo/datasets@3.1.76
|
|
60
|
+
- @prosopo/env@3.6.49
|
|
61
|
+
- @prosopo/ipinfo@0.3.21
|
|
62
|
+
- @prosopo/keyring@2.9.83
|
|
63
|
+
- @prosopo/load-balancer@2.10.38
|
|
64
|
+
- @prosopo/types-env@2.10.43
|
|
65
|
+
- @prosopo/user-access-policy@3.12.32
|
|
66
|
+
|
|
67
|
+
## 5.6.3
|
|
68
|
+
### Patch Changes
|
|
69
|
+
|
|
70
|
+
- 458cf17: Let a site disable image or puzzle under frictionless, and give the puzzle a difficulty ladder.
|
|
71
|
+
|
|
72
|
+
Adds `frictionlessTypes: { image, puzzle }` to `ClientSettingsSchema`. PoW is deliberately not toggleable: it is the decision machine's terminal fallback and the only type with no interaction requirement, so a site with both of these off still has a way to challenge. This replaces the practice of expressing "no image" as a `frictionlessImageThreshold` nobody can reach — the rung is a score boundary, and a site that wants image off should not have to encode that as an unreachable threshold.
|
|
73
|
+
|
|
74
|
+
Enforcement is a single seam. `downgradePuzzleIfUnavailable` is replaced by `coerceToEnabledCaptchaType`, which folds render-availability together with the site's enabled-type constraint; the old helper fell back to image unconditionally, which on an image-disabled site would have served exactly the type the customer asked us never to serve. It is applied at the two points a session's captchaType is decided — `sendCaptcha` (after the routing machine, so it is the last word) and `buildEscalation` — which transitively covers the score ladder, the no-measurement gates, access-policy Restrict rules, traffic-filter category policies, routing-machine actions and detector-generated rules. Coercion only ever narrows, so it cannot hand a user a harder challenge than was asked for. A PoW escalation is not an escalation, so a site with both interactive types disabled no longer escalates a verified PoW solve at all.
|
|
75
|
+
|
|
76
|
+
An image captcha expresses severity as a round count; a puzzle has none, so on an image-disabled site every escalation would otherwise collapse into an identical challenge. `PUZZLE_DIFFICULTY_LEVELS` is an ordered ladder mapped from that same round-count currency by `severityToPuzzleDifficulty`, expressed as rounds *above* the site's ordinary count so it means the same thing across sites. Each level is a band per knob rather than a fixed config, sampled per challenge: fixed values are learnable, and adjacent bands overlap so a single observed render does not identify the level a session was placed in. Level 0 samples nothing, leaving a site's own configured `puzzleTolerance` / `puzzle` settings in force — escalation should not silently rewrite configuration. Automatic escalation is capped below the hardest level, because with image disabled there is no fallback modality for a user who genuinely cannot solve it.
|
|
77
|
+
|
|
78
|
+
Sampling reuses the stratified interleaved draw already used for piece size, extracted to `stratifiedSampler`, with one cursor per knob — a shared cursor would make the knobs advance in lockstep and let a solver infer the whole config, and hence the level, from a single value. Draws are server-side and per-challenge, never seeded from client-supplied input, so a request cannot be replayed to reproduce a render. The invariant the ladder walks toward — the real cutout staying the deepest region on the frame — is now enforced in `resolvePuzzleRenderSettings`, the only point the final pair is known, since site settings and a traffic-filter policy each set one half without sight of the other and can invert it through individually valid overrides.
|
|
79
|
+
|
|
80
|
+
Also closes two paths that issued image challenges without honouring the sitekey's `imageMaxRounds`: `buildEscalation` took a router-supplied round count entirely unbounded, and `sendCaptcha` skipped its clamp whenever the routing context carried no ceiling. Both now fall back to the schema default rather than leaving the count unbounded.
|
|
81
|
+
- Updated dependencies [458cf17]
|
|
82
|
+
- @prosopo/types@5.5.2
|
|
83
|
+
- @prosopo/api@4.1.3
|
|
84
|
+
- @prosopo/api-express-router@3.1.79
|
|
85
|
+
- @prosopo/database@4.0.25
|
|
86
|
+
- @prosopo/datasets@3.1.75
|
|
87
|
+
- @prosopo/env@3.6.48
|
|
88
|
+
- @prosopo/ipinfo@0.3.20
|
|
89
|
+
- @prosopo/keyring@2.9.82
|
|
90
|
+
- @prosopo/load-balancer@2.10.37
|
|
91
|
+
- @prosopo/types-database@5.3.3
|
|
92
|
+
- @prosopo/types-env@2.10.42
|
|
93
|
+
- @prosopo/user-access-policy@3.12.31
|
|
94
|
+
|
|
3
95
|
## 5.6.2
|
|
4
96
|
### Patch Changes
|
|
5
97
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ContextType, type IUserSettings } from "@prosopo/types";
|
|
2
|
-
export declare function determineContextType(webView: boolean): ContextType;
|
|
1
|
+
import { type ContextType, type IUserSettings } from "@prosopo/types";
|
|
2
|
+
export declare function determineContextType(userAgent: string | undefined, webView: boolean): ContextType;
|
|
3
|
+
export declare function isContextConfigured(settings: IUserSettings, contextType: ContextType): boolean;
|
|
3
4
|
export declare function getContextThreshold(settings: IUserSettings, contextType: ContextType): number;
|
|
4
5
|
//# sourceMappingURL=contextAwareValidation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextAwareValidation.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/contextAwareValidation.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,WAAW,
|
|
1
|
+
{"version":3,"file":"contextAwareValidation.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/contextAwareValidation.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,aAAa,EAIlB,MAAM,gBAAgB,CAAC;AAcxB,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,OAAO,GACd,WAAW,CAEb;AAWD,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,GACtB,OAAO,CAIT;AAaD,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,GACtB,MAAM,CAGR"}
|
|
@@ -1,26 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { contextAwareThresholdDefault, contextTypeFromSession, expandContexts } from "@prosopo/types";
|
|
2
2
|
//#region src/api/captcha/contextAwareValidation.ts
|
|
3
3
|
/**
|
|
4
|
-
* Determines the context
|
|
4
|
+
* Determines the context a request belongs to — its device family crossed
|
|
5
|
+
* with whether it is running in a webview.
|
|
6
|
+
*
|
|
7
|
+
* `userAgent` is the raw header value, not the hashed one carried on the
|
|
8
|
+
* decrypted payload. The entropy sweep classifies stored sessions from the
|
|
9
|
+
* same header through the same function, so the two sides agree on which
|
|
10
|
+
* bucket a session lands in.
|
|
11
|
+
*
|
|
12
|
+
* @param userAgent - Raw `user-agent` request header
|
|
5
13
|
* @param webView - Whether the request is from a WebView
|
|
6
|
-
* @returns The context type (Webview or Default)
|
|
7
14
|
*/
|
|
8
|
-
function determineContextType(webView) {
|
|
9
|
-
return webView
|
|
15
|
+
function determineContextType(userAgent, webView) {
|
|
16
|
+
return contextTypeFromSession(userAgent, webView);
|
|
10
17
|
}
|
|
11
18
|
/**
|
|
12
|
-
*
|
|
19
|
+
* Whether the client has this context configured.
|
|
20
|
+
*
|
|
21
|
+
* A context the customer has not enabled is not validated at all — the
|
|
22
|
+
* request passes through this stage untouched. That is a change from the
|
|
23
|
+
* pre-device-type behaviour, where configuring a single context validated
|
|
24
|
+
* *every* request against it: with six contexts, applying a tablet baseline
|
|
25
|
+
* to desktop traffic would reject real users wholesale.
|
|
26
|
+
*/
|
|
27
|
+
function isContextConfigured(settings, contextType) {
|
|
28
|
+
return expandContexts(settings.contextAware?.contexts)[contextType] !== void 0;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Gets the threshold for a specific context type from client settings.
|
|
32
|
+
*
|
|
33
|
+
* Falls back to the global default when the context is unconfigured, so a
|
|
34
|
+
* caller that skipped `isContextConfigured` still gets a sane number rather
|
|
35
|
+
* than NaN.
|
|
36
|
+
*
|
|
13
37
|
* @param settings - Client settings
|
|
14
38
|
* @param contextType - The context type to get the threshold for
|
|
15
39
|
* @returns The threshold for the context type, or the global threshold if not configured
|
|
16
40
|
*/
|
|
17
41
|
function getContextThreshold(settings, contextType) {
|
|
18
|
-
|
|
19
|
-
if (contextAware === void 0) return contextAwareThresholdDefault;
|
|
20
|
-
const contexts = contextAware.contexts;
|
|
21
|
-
let contextConfig;
|
|
22
|
-
if (contexts !== void 0) contextConfig = contexts[contextType];
|
|
23
|
-
return contextConfig?.threshold ?? contextAwareThresholdDefault;
|
|
42
|
+
return expandContexts(settings.contextAware?.contexts)[contextType]?.threshold ?? contextAwareThresholdDefault;
|
|
24
43
|
}
|
|
25
44
|
//#endregion
|
|
26
|
-
export { determineContextType, getContextThreshold };
|
|
45
|
+
export { determineContextType, getContextThreshold, isContextConfigured };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextAwareValidation.js","sourceRoot":"","sources":["../../../src/api/captcha/contextAwareValidation.ts"],"names":[],"mappings":"AAcA,OAAO,
|
|
1
|
+
{"version":3,"file":"contextAwareValidation.js","sourceRoot":"","sources":["../../../src/api/captcha/contextAwareValidation.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,4BAA4B,EAC5B,sBAAsB,EACtB,cAAc,GACd,MAAM,gBAAgB,CAAC;AAcxB,MAAM,UAAU,oBAAoB,CACnC,SAA6B,EAC7B,OAAgB;IAEhB,OAAO,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAWD,MAAM,UAAU,mBAAmB,CAClC,QAAuB,EACvB,WAAwB;IAExB,OAAO,CACN,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,SAAS,CAC1E,CAAC;AACH,CAAC;AAaD,MAAM,UAAU,mBAAmB,CAClC,QAAuB,EACvB,WAAwB;IAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,IAAI,4BAA4B,CAAC;AACzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessPolicy.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"accessPolicy.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACN,KAAK,UAAU,EACf,KAAK,SAAS,EAEd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAI3B,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;CACrB,CAAC;AAIF,MAAM,MAAM,mBAAmB,GAC5B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACrC;IACA,OAAO,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;CAChC,CAAC;AAEL,eAAO,MAAM,kBAAkB,UACvB,iBAAiB,OACnB,QAAQ,KACX,OAAO,CAAC,mBAAmB,CA4K7B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FrictionlessReason as FrictionlessReason$1 } from "../../../tasks/frictionless/frictionlessTasks.js";
|
|
2
2
|
import { attachHoneypot } from "./honeypotResponse.js";
|
|
3
|
-
import { CaptchaType } from "@prosopo/types";
|
|
3
|
+
import { CaptchaType, clampImageRounds, resolveImageRoundsBounds } from "@prosopo/types";
|
|
4
4
|
import { describeMatchedRule } from "@prosopo/user-access-policy";
|
|
5
5
|
//#region src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts
|
|
6
6
|
var handleAccessPolicy = async (input, res) => {
|
|
@@ -32,7 +32,7 @@ var handleAccessPolicy = async (input, res) => {
|
|
|
32
32
|
}
|
|
33
33
|
}));
|
|
34
34
|
await tasks.frictionlessManager.registerBlockedSession({
|
|
35
|
-
solvedImagesCount: clientRecord.settings.
|
|
35
|
+
solvedImagesCount: resolveImageRoundsBounds(clientRecord.settings).max,
|
|
36
36
|
userSitekeyIpHash: input.userSitekeyIpHash,
|
|
37
37
|
reason: FrictionlessReason$1.ACCESS_POLICY_BLOCK,
|
|
38
38
|
siteKey: input.dapp,
|
|
@@ -56,7 +56,7 @@ var handleAccessPolicy = async (input, res) => {
|
|
|
56
56
|
}
|
|
57
57
|
}));
|
|
58
58
|
await tasks.frictionlessManager.registerBlockedSession({
|
|
59
|
-
solvedImagesCount: clientRecord.settings.
|
|
59
|
+
solvedImagesCount: resolveImageRoundsBounds(clientRecord.settings).max,
|
|
60
60
|
userSitekeyIpHash: input.userSitekeyIpHash,
|
|
61
61
|
reason: FrictionlessReason$1.AUTO_BAN_SCORE,
|
|
62
62
|
siteKey: input.dapp,
|
|
@@ -88,7 +88,7 @@ var handleAccessPolicy = async (input, res) => {
|
|
|
88
88
|
handled: true,
|
|
89
89
|
response: res.json(await tasks.frictionlessManager.sendImageCaptcha({
|
|
90
90
|
...captchaTypeBaseParams,
|
|
91
|
-
solvedImagesCount: userAccessPolicy.solvedImagesCount ?
|
|
91
|
+
solvedImagesCount: userAccessPolicy.solvedImagesCount ? clampImageRounds(userAccessPolicy.solvedImagesCount, clientRecord.settings) : resolveImageRoundsBounds(clientRecord.settings).max
|
|
92
92
|
}))
|
|
93
93
|
};
|
|
94
94
|
}
|
|
@@ -117,7 +117,10 @@ var handleAccessPolicy = async (input, res) => {
|
|
|
117
117
|
attachHoneypot(res, clientRecord);
|
|
118
118
|
return {
|
|
119
119
|
handled: true,
|
|
120
|
-
response: res.json(await tasks.frictionlessManager.sendPuzzleCaptcha(
|
|
120
|
+
response: res.json(await tasks.frictionlessManager.sendPuzzleCaptcha({
|
|
121
|
+
...captchaTypeBaseParams,
|
|
122
|
+
...userAccessPolicy.solvedImagesCount !== void 0 && { solvedImagesCount: userAccessPolicy.solvedImagesCount }
|
|
123
|
+
}))
|
|
121
124
|
};
|
|
122
125
|
}
|
|
123
126
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessPolicy.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,WAAW,
|
|
1
|
+
{"version":3,"file":"accessPolicy.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,WAAW,EAIX,gBAAgB,EAChB,wBAAwB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAGN,mBAAmB,GACnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AAEtF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA8BvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACtC,KAAwB,EACxB,GAAa,EACkB,EAAE;IACjC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC7B,OAAO;YACN,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,eAAe,EAAE,KAAK,CAAC,eAAe;SACtC,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAQhE,KAAK,CAAC,mBAAmB,CAAC,cAAc,CACvC,mBAAmB,CAAC,gBAAgB,CAAC,CACrC,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClB,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE;YACL,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE,gBAAgB,CAAC,WAAW;YACzC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC1B;KACD,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,GAAG,KAAK,CAAC,mBAAmB,CAAC,yBAAyB,CACtE,gBAAgB,EAChB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,eAAe,CACrB,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;IACnC,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;IACpD,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAEjE,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE,WAAW,CAAC,KAAK;aAC9B;SACD,CAAC,CAAC,CAAC;QACJ,MAAM,KAAK,CAAC,mBAAmB,CAAC,sBAAsB,CAAC;YACtD,iBAAiB,EAAE,wBAAwB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG;YACtE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,MAAM,EAAE,kBAAkB,CAAC,mBAAmB;YAC9C,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,WAAW;SAC1B,CAAC,CAAC;QAEH,OAAO;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;SACzD,CAAC;IACH,CAAC;IAOD,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrE,IAAI,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ;gBACR,gBAAgB;gBAChB,WAAW,EAAE,gBAAgB,CAAC,WAAW;aACzC;SACD,CAAC,CAAC,CAAC;QACJ,MAAM,KAAK,CAAC,mBAAmB,CAAC,sBAAsB,CAAC;YACtD,iBAAiB,EAAE,wBAAwB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG;YACtE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,MAAM,EAAE,kBAAkB,CAAC,cAAc;YACzC,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,WAAW;SAC1B,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;SACzD,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG;QAC7B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,MAAM,EAAE,kBAAkB,CAAC,kBAAkB;QAC7C,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,WAAW;KAC1B,CAAC;IAEF,IAAI,gBAAgB,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,oBAAoB;gBAC9B,WAAW,EAAE,WAAW,CAAC,KAAK;aAC9B;SACD,CAAC,CAAC,CAAC;QACJ,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAClC,OAAO;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG,CAAC,IAAI,CACjB,MAAM,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;gBAChD,GAAG,qBAAqB;gBACxB,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;oBACpD,CAAC,CAAC,gBAAgB,CAChB,gBAAgB,CAAC,iBAAiB,EAClC,YAAY,CAAC,QAAQ,CACrB;oBACF,CAAC,CAAC,wBAAwB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG;aACtD,CAAC,CACF;SACD,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,oBAAoB;gBAC9B,WAAW,EAAE,WAAW,CAAC,GAAG;aAC5B;SACD,CAAC,CAAC,CAAC;QACJ,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAClC,OAAO;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG,CAAC,IAAI,CACjB,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,qBAAqB,CAAC,CACrE;SACD,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,oBAAoB;gBAC9B,WAAW,EAAE,WAAW,CAAC,MAAM;aAC/B;SACD,CAAC,CAAC,CAAC;QACJ,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAClC,OAAO;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG,CAAC,IAAI,CACjB,MAAM,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;gBACjD,GAAG,qBAAqB;gBAOxB,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,SAAS,IAAI;oBACvD,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;iBACrD,CAAC;aACF,CAAC,CACF;SACD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACtD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisionMachine.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"decisionMachine.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"AAeA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAiBrD,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,mBAAmB,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IAGd,QAAQ,EAAE,MAAM,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;IAIrB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,kBAAkB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAIzC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChC,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAKF,eAAO,MAAM,kBAAkB,UACvB,oBAAoB,UACnB,aAAa,KACnB,OAAO,CAAC,OAAO,CA0VjB,CAAC"}
|