@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.
Files changed (90) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +16 -13
  2. package/.turbo/turbo-build$colon$tsc.log +25 -25
  3. package/.turbo/turbo-build.log +17 -14
  4. package/CHANGELOG.md +92 -0
  5. package/dist/api/captcha/contextAwareValidation.d.ts +3 -2
  6. package/dist/api/captcha/contextAwareValidation.d.ts.map +1 -1
  7. package/dist/api/captcha/contextAwareValidation.js +32 -13
  8. package/dist/api/captcha/contextAwareValidation.js.map +1 -1
  9. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -1
  10. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +8 -5
  11. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -1
  12. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
  13. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +14 -20
  14. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
  15. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  16. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +3 -0
  17. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  18. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
  19. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +2 -2
  20. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
  21. package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
  22. package/dist/api/captcha/getImageCaptchaChallenge.js +2 -3
  23. package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
  24. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts +4 -1
  25. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  26. package/dist/api/captcha/submitPoWCaptchaSolution.js +23 -6
  27. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  28. package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
  29. package/dist/api/captcha/trafficFilterRequestTime.js +2 -2
  30. package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
  31. package/dist/cjs/api/captcha/contextAwareValidation.cjs +31 -11
  32. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +7 -4
  33. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +12 -18
  34. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +3 -0
  35. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +1 -1
  36. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +1 -1
  37. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +22 -5
  38. package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +1 -1
  39. package/dist/cjs/tasks/captchaTypeSelection.cjs +53 -0
  40. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +19 -8
  41. package/dist/cjs/tasks/puzzle/puzzleDifficulty.cjs +208 -0
  42. package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +13 -61
  43. package/dist/cjs/tasks/puzzle/stratifiedSampler.cjs +61 -0
  44. package/dist/tasks/captchaTypeSelection.d.ts +5 -0
  45. package/dist/tasks/captchaTypeSelection.d.ts.map +1 -0
  46. package/dist/tasks/captchaTypeSelection.js +53 -0
  47. package/dist/tasks/captchaTypeSelection.js.map +1 -0
  48. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  49. package/dist/tasks/frictionless/frictionlessTasks.js +20 -9
  50. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  51. package/dist/tasks/frictionless/routingMachine.d.ts +4 -1
  52. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
  53. package/dist/tasks/frictionless/routingMachine.js.map +1 -1
  54. package/dist/tasks/puzzle/puzzleDifficulty.d.ts +25 -0
  55. package/dist/tasks/puzzle/puzzleDifficulty.d.ts.map +1 -0
  56. package/dist/tasks/puzzle/puzzleDifficulty.js +204 -0
  57. package/dist/tasks/puzzle/puzzleDifficulty.js.map +1 -0
  58. package/dist/tasks/puzzle/puzzleRenderer.d.ts +1 -3
  59. package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
  60. package/dist/tasks/puzzle/puzzleRenderer.js +15 -62
  61. package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
  62. package/dist/tasks/puzzle/stratifiedSampler.d.ts +7 -0
  63. package/dist/tasks/puzzle/stratifiedSampler.d.ts.map +1 -0
  64. package/dist/tasks/puzzle/stratifiedSampler.js +61 -0
  65. package/dist/tasks/puzzle/stratifiedSampler.js.map +1 -0
  66. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +4 -0
  67. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  68. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +3 -0
  69. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  70. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +2 -0
  71. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  72. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +3 -0
  73. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
  74. package/dist/tests/unit/api/contextAwareValidation.unit.test.js +88 -67
  75. package/dist/tests/unit/api/contextAwareValidation.unit.test.js.map +1 -1
  76. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +55 -105
  77. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  78. package/dist/tests/unit/tasks/captchaManager.unit.test.js +2 -0
  79. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  80. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.d.ts +2 -0
  81. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.d.ts.map +1 -0
  82. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js +54 -0
  83. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js.map +1 -0
  84. package/dist/tests/unit/tasks/frictionless/routerImageRoundsClamp.unit.test.js +24 -5
  85. package/dist/tests/unit/tasks/frictionless/routerImageRoundsClamp.unit.test.js.map +1 -1
  86. package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.d.ts +2 -0
  87. package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.d.ts.map +1 -0
  88. package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.js +137 -0
  89. package/dist/tests/unit/tasks/puzzleDifficulty.unit.test.js.map +1 -0
  90. package/package.json +13 -13
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/provider@5.6.2 build:cjs
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
  vite v8.1.5 building ssr environment for production...
56
56
  Bundle build started
57
57
  
58
- ✓ 105 modules transformed.
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.64 kB │ gzip: 1.35 kB
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/puzzleRenderer.cjs 5.87 kB │ gzip: 2.13 kB
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 7.01 kB │ gzip: 2.00 kB
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.53 kB │ gzip: 2.29 kB
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.16 kB │ gzip: 4.26 kB
158
- dist/cjs/tasks/frictionless/frictionlessTasks.cjs 19.65 kB │ gzip: 5.20 kB
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
- ✓ built in 146ms
170
+ ✓ built in 113ms
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 build:tsc
2
+ > @prosopo/provider@5.6.4 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 6:47:50 PM - Projects in this build:
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
- 6:47:50 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'
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
- 6:47:50 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../logger/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
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
- 6:47:50 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'
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
- 6:47:50 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/batches.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/types.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
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
- 6:47:50 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'
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
- 6:47:50 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types.test-d.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/unit/redisCacheEscalation.unit.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/env.ts' is older than output '../env/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/apiExpressRouterFactory.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/index.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project '../puzzle-assets/tsconfig.json' is up to date because newest input '../puzzle-assets/src/browser.ts' is older than output '../puzzle-assets/tsconfig.tsbuildinfo'
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
- 6:47:50 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
71
+ 1:56:54 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
72
72
 
73
- 6:47:50 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
73
+ 1:56:54 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
74
74
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/provider@5.6.2 build
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.2 build:cross-env
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
  vite v8.1.5 building ssr environment for production...
60
60
  Bundle build started
61
61
  
62
- ✓ 105 modules transformed.
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.38 kB │ gzip: 1.32 kB
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/api/captcha/trafficFilterRequestTime.js 3.89 kB │ gzip: 1.49 kB
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/puzzleRenderer.js 5.51 kB │ gzip: 2.11 kB
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.38 kB │ gzip: 1.95 kB
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.51 kB │ gzip: 2.27 kB
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 16.95 kB │ gzip: 4.17 kB
162
- dist/tasks/frictionless/frictionlessTasks.js 19.22 kB │ gzip: 5.18 kB
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
- ✓ built in 122ms
174
+ ✓ built in 103ms
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,EACX,KAAK,aAAa,EAElB,MAAM,gBAAgB,CAAC;AAOxB,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAElE;AAQD,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,GACtB,MAAM,CAkBR"}
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 { ContextType, contextAwareThresholdDefault } from "@prosopo/types";
1
+ import { contextAwareThresholdDefault, contextTypeFromSession, expandContexts } from "@prosopo/types";
2
2
  //#region src/api/captcha/contextAwareValidation.ts
3
3
  /**
4
- * Determines the context type based on the webView flag
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 ? ContextType.Webview : ContextType.Default;
15
+ function determineContextType(userAgent, webView) {
16
+ return contextTypeFromSession(userAgent, webView);
10
17
  }
11
18
  /**
12
- * Gets the threshold for a specific context type from client settings
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
- const contextAware = settings.contextAware;
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,EACN,WAAW,EAEX,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AAOxB,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5D,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAClC,QAAuB,EACvB,WAAwB;IAExB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,4BAA4B,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;IACvC,IAAI,aAAmE,CAAC;IAExE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,aAAa,GACZ,QAGA,CAAC,WAAW,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,aAAa,EAAE,SAAS,IAAI,4BAA4B,CAAC;AACjE,CAAC"}
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,EACpB,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,CAmK7B,CAAC"}
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.imageMaxRounds,
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.imageMaxRounds,
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 ? Math.min(userAccessPolicy.solvedImagesCount, clientRecord.settings.imageMaxRounds) : clientRecord.settings.imageMaxRounds
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(captchaTypeBaseParams))
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":"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"}
1
+ {"version":3,"file":"accessPolicy.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decisionMachine.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"AAeA,OAAO,EAGN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,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;AAgBrD,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,CAuVjB,CAAC"}
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"}