@prosopo/provider 5.13.0 → 5.13.2
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 +22 -21
- package/.turbo/turbo-build$colon$tsc.log +27 -27
- package/.turbo/turbo-build.log +22 -21
- package/CHANGELOG.md +113 -0
- package/dist/api/admin/apiDnsEventEndpoint.d.ts +2 -2
- package/dist/api/admin/apiDnsEventEndpoint.d.ts.map +1 -1
- package/dist/api/admin/apiDnsEventEndpoint.js +28 -5
- package/dist/api/admin/apiDnsEventEndpoint.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +2 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js +2 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.js +3 -2
- package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +3 -2
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPuzzleCaptchaSolution.js +3 -2
- package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
- package/dist/api/hardBlockVerdictCache.d.ts +1 -0
- package/dist/api/hardBlockVerdictCache.d.ts.map +1 -1
- package/dist/api/hardBlockVerdictCache.js +4 -1
- package/dist/api/hardBlockVerdictCache.js.map +1 -1
- package/dist/api/requestBodySummary.d.ts +14 -0
- package/dist/api/requestBodySummary.d.ts.map +1 -0
- package/dist/api/requestBodySummary.js +47 -0
- package/dist/api/requestBodySummary.js.map +1 -0
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +9 -8
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +27 -4
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +1 -1
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +2 -1
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +2 -1
- package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +3 -2
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +3 -2
- package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +3 -2
- package/dist/cjs/api/hardBlockVerdictCache.cjs +4 -1
- package/dist/cjs/api/requestBodySummary.cjs +47 -0
- package/dist/cjs/api/verify.cjs +9 -8
- package/dist/cjs/pairs.cjs +70 -6
- package/dist/cjs/tasks/captchaManager.cjs +16 -0
- package/dist/cjs/tasks/detection/bundlePool.cjs +4 -3
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +4 -1
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +21 -6
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +9 -1
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +5 -4
- package/dist/cjs/tasks/tasks.cjs +1 -37
- package/dist/pairs.d.ts +6 -1
- package/dist/pairs.d.ts.map +1 -1
- package/dist/pairs.js +67 -7
- package/dist/pairs.js.map +1 -1
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +16 -0
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/detection/bundlePool.d.ts.map +1 -1
- package/dist/tasks/detection/bundlePool.js +4 -3
- package/dist/tasks/detection/bundlePool.js.map +1 -1
- package/dist/tasks/detection/bundlePool.test.js +30 -0
- package/dist/tasks/detection/bundlePool.test.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +4 -1
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +24 -8
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +9 -1
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js +5 -4
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tasks/tasks.d.ts +0 -1
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +1 -37
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/authenticatedVerifyClaim.integration.test.d.ts +2 -0
- package/dist/tests/integration/authenticatedVerifyClaim.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/authenticatedVerifyClaim.integration.test.js +81 -0
- package/dist/tests/integration/authenticatedVerifyClaim.integration.test.js.map +1 -0
- package/dist/tests/integration/imgCaptcha.integration.test.js +37 -1
- package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
- package/dist/tests/unit/api/admin/apiDnsEventEndpoint.unit.test.js +39 -3
- package/dist/tests/unit/api/admin/apiDnsEventEndpoint.unit.test.js.map +1 -1
- package/dist/tests/unit/api/hardBlockVerdictCache.unit.test.js +32 -0
- package/dist/tests/unit/api/hardBlockVerdictCache.unit.test.js.map +1 -1
- package/dist/tests/unit/api/requestBodySummary.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/requestBodySummary.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/requestBodySummary.unit.test.js +172 -0
- package/dist/tests/unit/api/requestBodySummary.unit.test.js.map +1 -0
- package/dist/tests/unit/pairs.unit.test.js +126 -1
- package/dist/tests/unit/pairs.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +38 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +0 -8
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +236 -17
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +70 -14
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +27 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/tasksBackgroundWork.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/tasksBackgroundWork.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/tasksBackgroundWork.unit.test.js +34 -0
- package/dist/tests/unit/tasks/tasksBackgroundWork.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js +0 -49
- package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js.map +1 -1
- package/dist/tests/unit/util/redisCache.unit.test.js +1 -104
- package/dist/tests/unit/util/redisCache.unit.test.js.map +1 -1
- package/package.json +23 -23
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.13.
|
|
2
|
+
> @prosopo/provider@5.13.2 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -32,7 +32,6 @@ ViteCommonJSConfig: .
|
|
|
32
32
|
{
|
|
33
33
|
externals: [
|
|
34
34
|
'@prosopo/api-route',
|
|
35
|
-
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
36
35
|
'@prosopo/logger',
|
|
37
36
|
'@prosopo/util',
|
|
38
37
|
'@prosopo/api-express-router',
|
|
@@ -56,10 +55,11 @@ ViteCommonJSConfig: .
|
|
|
56
55
|
'@prosopo/web-bot-auth'
|
|
57
56
|
]
|
|
58
57
|
}
|
|
58
|
+
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
59
59
|
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
60
60
|
Bundle build started
|
|
61
61
|
[2K
|
|
62
|
-
✓
|
|
62
|
+
✓ 117 modules transformed.
|
|
63
63
|
rendering chunks...
|
|
64
64
|
computing gzip size...
|
|
65
65
|
dist/cjs/tasks/index.cjs 0.08 kB │ gzip: 0.07 kB
|
|
@@ -98,7 +98,6 @@ dist/cjs/schedulers/getClientList.cjs 1
|
|
|
98
98
|
dist/cjs/api/admin/apiGetDecisionMachineEndpoint.cjs 1.33 kB │ gzip: 0.52 kB
|
|
99
99
|
dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs 1.36 kB │ gzip: 0.52 kB
|
|
100
100
|
dist/cjs/api/admin/apiRemoveAllDecisionMachinesEndpoint.cjs 1.36 kB │ gzip: 0.54 kB
|
|
101
|
-
dist/cjs/pairs.cjs 1.39 kB │ gzip: 0.60 kB
|
|
102
101
|
dist/cjs/tasks/dataset/datasetTasksUtils.cjs 1.42 kB │ gzip: 0.49 kB
|
|
103
102
|
dist/cjs/tasks/puzzle/backgroundBuffer.cjs 1.44 kB │ gzip: 0.54 kB
|
|
104
103
|
dist/cjs/utils/clientMetaData.cjs 1.48 kB │ gzip: 0.72 kB
|
|
@@ -116,6 +115,7 @@ dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs 1
|
|
|
116
115
|
dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs 1.80 kB │ gzip: 0.72 kB
|
|
117
116
|
dist/cjs/utils/honeypot/phraseBank.cjs 1.87 kB │ gzip: 0.91 kB
|
|
118
117
|
dist/cjs/api/handshakeTimingMiddleware.cjs 1.88 kB │ gzip: 0.71 kB
|
|
118
|
+
dist/cjs/api/requestBodySummary.cjs 1.96 kB │ gzip: 0.88 kB
|
|
119
119
|
dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs 2.01 kB │ gzip: 0.78 kB
|
|
120
120
|
dist/cjs/tasks/frictionless/ipMatch.cjs 2.03 kB │ gzip: 1.03 kB
|
|
121
121
|
dist/cjs/tasks/spam/updateSpamEmailDomains.cjs 2.12 kB │ gzip: 0.85 kB
|
|
@@ -126,21 +126,22 @@ dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs 2
|
|
|
126
126
|
dist/cjs/api/captcha/signedAssetsResolver.cjs 2.24 kB │ gzip: 1.00 kB
|
|
127
127
|
dist/cjs/api/captcha/sealedAssetsResolver.cjs 2.37 kB │ gzip: 0.98 kB
|
|
128
128
|
dist/cjs/tasks/captchaTypeSelection.cjs 2.44 kB │ gzip: 1.04 kB
|
|
129
|
-
dist/cjs/api/admin/apiDnsEventEndpoint.cjs 2.59 kB │ gzip: 1.00 kB
|
|
130
129
|
dist/cjs/utils/dns.cjs 2.66 kB │ gzip: 1.02 kB
|
|
131
130
|
dist/cjs/api/forwardVerify.cjs 2.66 kB │ gzip: 1.12 kB
|
|
132
131
|
dist/cjs/tasks/puzzle/puzzleDifficulty.cjs 2.66 kB │ gzip: 1.10 kB
|
|
133
132
|
dist/cjs/api/captcha/checkSpamEmail.cjs 2.73 kB │ gzip: 0.95 kB
|
|
134
|
-
dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs 2.77 kB │ gzip: 0.99 kB
|
|
135
133
|
dist/cjs/api/public.cjs 2.79 kB │ gzip: 1.07 kB
|
|
136
134
|
dist/cjs/api/captcha/maintenanceModeResponses.cjs 2.91 kB │ gzip: 0.77 kB
|
|
137
|
-
dist/cjs/api/captcha/
|
|
135
|
+
dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs 2.93 kB │ gzip: 1.01 kB
|
|
136
|
+
dist/cjs/api/captcha/submitImageCaptchaSolution.cjs 3.09 kB │ gzip: 1.06 kB
|
|
137
|
+
dist/cjs/api/admin/apiDnsEventEndpoint.cjs 3.20 kB │ gzip: 1.22 kB
|
|
138
138
|
dist/cjs/tasks/detection/getBotScore.cjs 3.37 kB │ gzip: 1.33 kB
|
|
139
139
|
dist/cjs/compositeIpAddress.cjs 3.39 kB │ gzip: 1.36 kB
|
|
140
140
|
dist/cjs/api/captcha/assetSealFormat.cjs 3.59 kB │ gzip: 1.37 kB
|
|
141
141
|
dist/cjs/api/captcha/assignDetectorBundle.cjs 3.63 kB │ gzip: 1.37 kB
|
|
142
142
|
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs 3.66 kB │ gzip: 1.35 kB
|
|
143
143
|
dist/cjs/api/admin/apiAdminRoutesProvider.cjs 3.67 kB │ gzip: 0.62 kB
|
|
144
|
+
dist/cjs/tasks/tasks.cjs 3.82 kB │ gzip: 1.07 kB
|
|
144
145
|
dist/cjs/api/rawTlsSignalsMiddleware.cjs 3.84 kB │ gzip: 1.16 kB
|
|
145
146
|
dist/cjs/api/domainMiddleware.cjs 3.85 kB │ gzip: 1.26 kB
|
|
146
147
|
dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs 4.03 kB │ gzip: 1.60 kB
|
|
@@ -148,22 +149,22 @@ dist/cjs/services/ipComparison.cjs 4
|
|
|
148
149
|
dist/cjs/tasks/spam/checkSpamEmail.cjs 4.14 kB │ gzip: 1.14 kB
|
|
149
150
|
dist/cjs/api/captcha/trafficFilterRequestTime.cjs 4.17 kB │ gzip: 1.53 kB
|
|
150
151
|
dist/cjs/api/cpuProfiler.cjs 4.21 kB │ gzip: 1.78 kB
|
|
151
|
-
dist/cjs/api/hardBlockVerdictCache.cjs 4.27 kB │ gzip: 1.70 kB
|
|
152
152
|
dist/cjs/tasks/puzzle/puzzleRenderer.cjs 4.36 kB │ gzip: 1.55 kB
|
|
153
|
+
dist/cjs/api/hardBlockVerdictCache.cjs 4.39 kB │ gzip: 1.74 kB
|
|
153
154
|
dist/cjs/api/captcha.cjs 4.51 kB │ gzip: 1.40 kB
|
|
154
155
|
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs 4.56 kB │ gzip: 1.07 kB
|
|
156
|
+
dist/cjs/pairs.cjs 4.64 kB │ gzip: 1.61 kB
|
|
155
157
|
dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs 4.84 kB │ gzip: 1.74 kB
|
|
156
158
|
dist/cjs/index.cjs 5.02 kB │ gzip: 1.05 kB
|
|
157
|
-
dist/cjs/tasks/tasks.cjs 5.07 kB │ gzip: 1.57 kB
|
|
158
159
|
dist/cjs/tasks/detection/decoderPool.cjs 5.47 kB │ gzip: 2.06 kB
|
|
159
160
|
dist/cjs/util/usageCounters.cjs 5.72 kB │ gzip: 2.03 kB
|
|
160
|
-
dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs 6.
|
|
161
|
+
dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs 6.85 kB │ gzip: 1.92 kB
|
|
161
162
|
dist/cjs/api/healthzGeo.cjs 7.03 kB │ gzip: 2.70 kB
|
|
162
163
|
dist/cjs/api/captcha/getImageCaptchaChallenge.cjs 7.39 kB │ gzip: 2.06 kB
|
|
163
164
|
dist/cjs/tasks/spam/checkTrafficFilter.cjs 7.47 kB │ gzip: 2.48 kB
|
|
164
|
-
dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs 7.
|
|
165
|
-
dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 9.
|
|
166
|
-
dist/cjs/tasks/detection/bundlePool.cjs 9.
|
|
165
|
+
dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs 7.67 kB │ gzip: 2.05 kB
|
|
166
|
+
dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 9.28 kB │ gzip: 2.74 kB
|
|
167
|
+
dist/cjs/tasks/detection/bundlePool.cjs 9.29 kB │ gzip: 3.38 kB
|
|
167
168
|
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs 10.33 kB │ gzip: 1.82 kB
|
|
168
169
|
dist/cjs/api/startProviderApi.cjs 11.73 kB │ gzip: 3.72 kB
|
|
169
170
|
dist/cjs/tasks/client/clientTasks.cjs 11.73 kB │ gzip: 3.04 kB
|
|
@@ -171,15 +172,15 @@ dist/cjs/api/metrics.cjs 11
|
|
|
171
172
|
dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 12.69 kB │ gzip: 3.91 kB
|
|
172
173
|
dist/cjs/util.cjs 13.15 kB │ gzip: 3.26 kB
|
|
173
174
|
dist/cjs/api/blacklistRequestInspector.cjs 13.39 kB │ gzip: 4.50 kB
|
|
174
|
-
dist/cjs/api/verify.cjs
|
|
175
|
-
dist/cjs/tasks/frictionless/frictionlessTasks.cjs 18.
|
|
176
|
-
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 20.
|
|
177
|
-
dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.
|
|
178
|
-
dist/cjs/tasks/captchaManager.cjs
|
|
179
|
-
dist/cjs/tasks/powCaptcha/powTasks.cjs 25.
|
|
180
|
-
dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs
|
|
175
|
+
dist/cjs/api/verify.cjs 17.22 kB │ gzip: 2.97 kB
|
|
176
|
+
dist/cjs/tasks/frictionless/frictionlessTasks.cjs 18.43 kB │ gzip: 4.88 kB
|
|
177
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 20.15 kB │ gzip: 4.63 kB
|
|
178
|
+
dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.26 kB │ gzip: 5.18 kB
|
|
179
|
+
dist/cjs/tasks/captchaManager.cjs 25.12 kB │ gzip: 7.48 kB
|
|
180
|
+
dist/cjs/tasks/powCaptcha/powTasks.cjs 25.99 kB │ gzip: 6.23 kB
|
|
181
|
+
dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 28.88 kB │ gzip: 6.55 kB
|
|
181
182
|
|
|
182
|
-
[32m✓ built in
|
|
183
|
+
[32m✓ built in 194ms[39m
|
|
183
184
|
[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
|
|
184
185
|
[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
|
|
185
186
|
[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.13.
|
|
2
|
+
> @prosopo/provider@5.13.2 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
9:
|
|
5
|
+
9:57:12 AM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../util/tsconfig.json
|
|
8
8
|
* ../logger/tsconfig.json
|
|
@@ -28,53 +28,53 @@
|
|
|
28
28
|
* ../web-bot-auth/tsconfig.json
|
|
29
29
|
* tsconfig.json
|
|
30
30
|
|
|
31
|
-
9:
|
|
31
|
+
9:57:12 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/vite.frontend.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
32
32
|
|
|
33
|
-
9:
|
|
33
|
+
9:57:12 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/verifyRecency.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
9:
|
|
35
|
+
9:57:12 AM - 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'
|
|
36
36
|
|
|
37
|
-
9:
|
|
37
|
+
9:57:12 AM - 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'
|
|
38
38
|
|
|
39
|
-
9:
|
|
39
|
+
9:57:12 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/util.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
40
40
|
|
|
41
|
-
9:
|
|
41
|
+
9:57:12 AM - 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'
|
|
42
42
|
|
|
43
|
-
9:
|
|
43
|
+
9:57:12 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
44
44
|
|
|
45
|
-
9:
|
|
45
|
+
9:57:12 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
46
46
|
|
|
47
|
-
9:
|
|
47
|
+
9:57:12 AM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
48
48
|
|
|
49
|
-
9:
|
|
49
|
+
9:57:12 AM - 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'
|
|
50
50
|
|
|
51
|
-
9:
|
|
51
|
+
9:57:12 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
52
52
|
|
|
53
|
-
9:
|
|
53
|
+
9:57:12 AM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
54
54
|
|
|
55
|
-
9:
|
|
55
|
+
9:57:12 AM - 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'
|
|
56
56
|
|
|
57
|
-
9:
|
|
57
|
+
9:57:12 AM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
|
|
58
58
|
|
|
59
|
-
9:
|
|
59
|
+
9:57:12 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
60
60
|
|
|
61
|
-
9:
|
|
61
|
+
9:57:12 AM - 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'
|
|
62
62
|
|
|
63
|
-
9:
|
|
63
|
+
9:57:12 AM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/env.ts' is older than output '../env/tsconfig.tsbuildinfo'
|
|
64
64
|
|
|
65
|
-
9:
|
|
65
|
+
9:57:12 AM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/tests/unit/apiExpressDefaultEndpointAdapter.unit.test.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
|
|
66
66
|
|
|
67
|
-
9:
|
|
67
|
+
9:57:12 AM - Project '../captcha-severity/tsconfig.json' is up to date because newest input '../captcha-severity/src/index.test.ts' is older than output '../captcha-severity/tsconfig.tsbuildinfo'
|
|
68
68
|
|
|
69
|
-
9:
|
|
69
|
+
9:57:12 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/mocks/data/captchas.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
70
70
|
|
|
71
|
-
9:
|
|
71
|
+
9:57:12 AM - 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'
|
|
72
72
|
|
|
73
|
-
9:
|
|
73
|
+
9:57:12 AM - 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'
|
|
74
74
|
|
|
75
|
-
9:
|
|
75
|
+
9:57:12 AM - Project '../web-bot-auth/tsconfig.json' is up to date because newest input '../web-bot-auth/src/verify.ts' is older than output '../web-bot-auth/tsconfig.tsbuildinfo'
|
|
76
76
|
|
|
77
|
-
9:
|
|
77
|
+
9:57:12 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
78
78
|
|
|
79
|
-
9:
|
|
79
|
+
9:57:12 AM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
|
|
80
80
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.13.
|
|
2
|
+
> @prosopo/provider@5.13.2 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider@5.13.
|
|
6
|
+
> @prosopo/provider@5.13.2 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -63,7 +63,7 @@ ViteEsmConfig: .
|
|
|
63
63
|
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
64
64
|
Bundle build started
|
|
65
65
|
[2K
|
|
66
|
-
✓
|
|
66
|
+
✓ 117 modules transformed.
|
|
67
67
|
rendering chunks...
|
|
68
68
|
computing gzip size...
|
|
69
69
|
dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
|
|
@@ -98,7 +98,6 @@ dist/api/admin/apiRemoveSiteKeyEndpoint.js 1.08 k
|
|
|
98
98
|
dist/api/block.js 1.08 kB │ gzip: 0.46 kB
|
|
99
99
|
dist/schedulers/captchaScheduler.js 1.11 kB │ gzip: 0.48 kB
|
|
100
100
|
dist/utils/normalizeRequestIp.js 1.14 kB │ gzip: 0.52 kB
|
|
101
|
-
dist/pairs.js 1.19 kB │ gzip: 0.58 kB
|
|
102
101
|
dist/schedulers/getClientList.js 1.19 kB │ gzip: 0.53 kB
|
|
103
102
|
dist/api/admin/apiGetDecisionMachineEndpoint.js 1.26 kB │ gzip: 0.50 kB
|
|
104
103
|
dist/tasks/puzzle/backgroundBuffer.js 1.26 kB │ gzip: 0.51 kB
|
|
@@ -122,6 +121,7 @@ dist/utils/honeypot/phraseBank.js 1.69 k
|
|
|
122
121
|
dist/api/handshakeTimingMiddleware.js 1.75 kB │ gzip: 0.69 kB
|
|
123
122
|
dist/tasks/spam/updateSpamEmailDomains.js 1.87 kB │ gzip: 0.77 kB
|
|
124
123
|
dist/api/admin/apiClearAllCountersEndpoint.js 1.89 kB │ gzip: 0.76 kB
|
|
124
|
+
dist/api/requestBodySummary.js 1.94 kB │ gzip: 0.88 kB
|
|
125
125
|
dist/tasks/frictionless/ipMatch.js 1.98 kB │ gzip: 1.02 kB
|
|
126
126
|
dist/api/captcha/signedAssetsResolver.js 2.08 kB │ gzip: 0.98 kB
|
|
127
127
|
dist/migrations/frictionlessLadder.js 2.12 kB │ gzip: 0.93 kB
|
|
@@ -132,20 +132,21 @@ dist/tasks/frictionless/routingMachine.js 2.20 k
|
|
|
132
132
|
dist/tasks/captchaTypeSelection.js 2.22 kB │ gzip: 1.03 kB
|
|
133
133
|
dist/api/captcha/sealedAssetsResolver.js 2.26 kB │ gzip: 0.97 kB
|
|
134
134
|
dist/utils/dns.js 2.36 kB │ gzip: 0.95 kB
|
|
135
|
-
dist/api/admin/apiDnsEventEndpoint.js 2.43 kB │ gzip: 0.96 kB
|
|
136
135
|
dist/api/public.js 2.45 kB │ gzip: 0.98 kB
|
|
137
136
|
dist/api/captcha/checkSpamEmail.js 2.47 kB │ gzip: 0.91 kB
|
|
138
137
|
dist/tasks/puzzle/puzzleDifficulty.js 2.50 kB │ gzip: 1.09 kB
|
|
139
|
-
dist/api/captcha/submitPuzzleCaptchaSolution.js 2.55 kB │ gzip: 0.96 kB
|
|
140
138
|
dist/api/forwardVerify.js 2.59 kB │ gzip: 1.10 kB
|
|
141
|
-
dist/api/captcha/
|
|
139
|
+
dist/api/captcha/submitPuzzleCaptchaSolution.js 2.65 kB │ gzip: 0.99 kB
|
|
140
|
+
dist/api/captcha/submitImageCaptchaSolution.js 2.69 kB │ gzip: 1.03 kB
|
|
142
141
|
dist/api/admin/apiAdminRoutesProvider.js 2.78 kB │ gzip: 0.55 kB
|
|
143
142
|
dist/index.js 2.95 kB │ gzip: 0.81 kB
|
|
143
|
+
dist/api/admin/apiDnsEventEndpoint.js 3.05 kB │ gzip: 1.18 kB
|
|
144
144
|
dist/compositeIpAddress.js 3.15 kB │ gzip: 1.34 kB
|
|
145
145
|
dist/tasks/detection/getBotScore.js 3.29 kB │ gzip: 1.32 kB
|
|
146
146
|
dist/api/captcha/assetSealFormat.js 3.38 kB │ gzip: 1.34 kB
|
|
147
147
|
dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.39 kB │ gzip: 1.32 kB
|
|
148
148
|
dist/api/captcha/assignDetectorBundle.js 3.40 kB │ gzip: 1.34 kB
|
|
149
|
+
dist/tasks/tasks.js 3.44 kB │ gzip: 1.01 kB
|
|
149
150
|
dist/api/domainMiddleware.js 3.52 kB │ gzip: 1.22 kB
|
|
150
151
|
dist/api/rawTlsSignalsMiddleware.js 3.69 kB │ gzip: 1.13 kB
|
|
151
152
|
dist/tasks/spam/evaluateEmailSpamRules.js 3.84 kB │ gzip: 1.59 kB
|
|
@@ -155,19 +156,19 @@ dist/services/ipComparison.js 4.04 k
|
|
|
155
156
|
dist/api/captcha.js 4.05 kB │ gzip: 1.31 kB
|
|
156
157
|
dist/tasks/spam/checkSpamEmail.js 4.12 kB │ gzip: 1.12 kB
|
|
157
158
|
dist/api/cpuProfiler.js 4.12 kB │ gzip: 1.77 kB
|
|
158
|
-
dist/api/hardBlockVerdictCache.js 4.
|
|
159
|
+
dist/api/hardBlockVerdictCache.js 4.26 kB │ gzip: 1.72 kB
|
|
160
|
+
dist/pairs.js 4.27 kB │ gzip: 1.57 kB
|
|
159
161
|
dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js 4.35 kB │ gzip: 1.07 kB
|
|
160
|
-
dist/tasks/tasks.js 4.69 kB │ gzip: 1.51 kB
|
|
161
162
|
dist/tasks/dnsEvent/enrichDnsEvent.js 4.71 kB │ gzip: 1.72 kB
|
|
162
163
|
dist/tasks/detection/decoderPool.js 5.34 kB │ gzip: 2.02 kB
|
|
163
164
|
dist/util/usageCounters.js 5.65 kB │ gzip: 2.01 kB
|
|
164
|
-
dist/api/captcha/getPoWCaptchaChallenge.js 6.
|
|
165
|
+
dist/api/captcha/getPoWCaptchaChallenge.js 6.17 kB │ gzip: 1.85 kB
|
|
165
166
|
dist/api/captcha/getImageCaptchaChallenge.js 6.61 kB │ gzip: 2.00 kB
|
|
166
|
-
dist/api/captcha/getPuzzleCaptchaChallenge.js 6.84 kB │ gzip: 1.97 kB
|
|
167
167
|
dist/api/healthzGeo.js 6.86 kB │ gzip: 2.68 kB
|
|
168
|
+
dist/api/captcha/getPuzzleCaptchaChallenge.js 6.92 kB │ gzip: 1.99 kB
|
|
168
169
|
dist/tasks/spam/checkTrafficFilter.js 7.16 kB │ gzip: 2.45 kB
|
|
169
|
-
dist/api/captcha/submitPoWCaptchaSolution.js 8.
|
|
170
|
-
dist/tasks/detection/bundlePool.js 8.
|
|
170
|
+
dist/api/captcha/submitPoWCaptchaSolution.js 8.70 kB │ gzip: 2.69 kB
|
|
171
|
+
dist/tasks/detection/bundlePool.js 8.86 kB │ gzip: 3.34 kB
|
|
171
172
|
dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 9.36 kB │ gzip: 1.80 kB
|
|
172
173
|
dist/api/startProviderApi.js 10.02 kB │ gzip: 3.45 kB
|
|
173
174
|
dist/api/metrics.js 11.27 kB │ gzip: 3.53 kB
|
|
@@ -175,15 +176,15 @@ dist/tasks/client/clientTasks.js 11.27 k
|
|
|
175
176
|
dist/tasks/decisionMachine/decisionMachineRunner.js 12.28 kB │ gzip: 3.85 kB
|
|
176
177
|
dist/util.js 12.47 kB │ gzip: 3.20 kB
|
|
177
178
|
dist/api/blacklistRequestInspector.js 12.75 kB │ gzip: 4.46 kB
|
|
178
|
-
dist/api/verify.js 15.
|
|
179
|
-
dist/tasks/frictionless/frictionlessTasks.js 17.
|
|
180
|
-
dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 18.
|
|
181
|
-
dist/tasks/puzzleCaptcha/puzzleTasks.js 22.
|
|
182
|
-
dist/tasks/
|
|
183
|
-
dist/tasks/
|
|
184
|
-
dist/tasks/imgCaptcha/imgCaptchaTasks.js
|
|
179
|
+
dist/api/verify.js 15.32 kB │ gzip: 2.84 kB
|
|
180
|
+
dist/tasks/frictionless/frictionlessTasks.js 17.86 kB │ gzip: 4.86 kB
|
|
181
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 18.63 kB │ gzip: 4.53 kB
|
|
182
|
+
dist/tasks/puzzleCaptcha/puzzleTasks.js 22.85 kB │ gzip: 5.14 kB
|
|
183
|
+
dist/tasks/powCaptcha/powTasks.js 24.56 kB │ gzip: 6.17 kB
|
|
184
|
+
dist/tasks/captchaManager.js 24.61 kB │ gzip: 7.41 kB
|
|
185
|
+
dist/tasks/imgCaptcha/imgCaptchaTasks.js 27.39 kB │ gzip: 6.51 kB
|
|
185
186
|
|
|
186
|
-
[32m✓ built in
|
|
187
|
+
[32m✓ built in 185ms[39m
|
|
187
188
|
[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
|
|
188
189
|
[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
|
|
189
190
|
[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,118 @@
|
|
|
1
1
|
# @prosopo/provider
|
|
2
2
|
|
|
3
|
+
## 5.13.2
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- f650c66: A Web Bot Auth (authenticated) token can now only be verified once, even when several verify requests for it arrive at the same time. Before, the provider checked whether the session was already used and then marked it used in a separate step, so parallel verifies could all return `verified: true`. Marking the session used is now a single conditional database write, and only the request that wins it is verified; the rest get `API.USER_ALREADY_VERIFIED`.
|
|
7
|
+
- e482b25: When a captcha challenge, solution or verify request fails to parse, the provider now logs a short summary of the body (its type, size, top-level keys and a preview of at most 512 characters) instead of the whole body. Signature, token, secret, proof, salt, email, password and IP fields are replaced with `[redacted]` in the preview, however deeply they are nested. Before, a caller could post a body close to the 1 MB limit and have all of it copied into the logs, including any tokens and signatures it carried.
|
|
8
|
+
- 8933ad5: Build the proofs returned after a passed image captcha from the right leaves, and refuse to build a proof for a hash that is not a leaf.
|
|
9
|
+
|
|
10
|
+
The provider asked the commitment tree for a proof of each captcha ID, but the tree's leaves are solution hashes, so no captcha ID is ever a leaf. `proof()` did not check, and returned a proof that linked nothing to the root. The provider now asks for a proof of each leaf, and `proof()` throws `DATASET.MERKLE_ERROR` when the hash is not a leaf. Several merkle tests that could never fail (`expect(x > -1)`) now assert properly.
|
|
11
|
+
- 026b126: A PoW captcha challenge can now only be submitted once. Before, submitting the same solved challenge again after the site's server had verified the token reset the record to "not yet checked", so the same token could pass server verification a second time for as long as the verify window lasted. Puzzle captchas already refused a second submission, and PoW now does the same.
|
|
12
|
+
- 0c8678e: The DNS event ingest endpoint now checks each event on its own. One malformed event used to make
|
|
13
|
+
the whole batch fail validation, so every good event sent alongside it was lost. Bad events are now
|
|
14
|
+
dropped and counted, the rest are stored, and the response reports how many were dropped. A single
|
|
15
|
+
warning names up to five of the dropped events and why they failed.
|
|
16
|
+
- b77c5f4: The image captcha widget now tells the provider whether each tile, and the checkbox, was picked with a mouse or finger or with the keyboard. Keyboard presses have no screen position, so they all arrive as (0, 0). The provider used to see those repeats as a script clicking the same pixel and reject people who solve with the keyboard. It now looks for repeated positions among pointer selections only. It rejects a keyboard selection that claims a position. Requests from older widgets, which send no input method, are checked as strictly as before. The input method is stored on the commitment next to the coordinates.
|
|
17
|
+
- 7065689: Removed the Redis session write queue. Nothing ever put a session on it, yet every provider polled Redis for it every 10 seconds, and its drain step could duplicate, drop or delete records if it had ever been used. `RedisWriteQueue` loses `queueSessionRecord`, `drainSessionRecords`, `startPeriodicFlush` and `stopPeriodicFlush`, and `Tasks.flushWriteQueue` is gone. The session read cache is unchanged.
|
|
18
|
+
- 9318584: A frictionless session can now only be used by the site it was issued for. Before, a session created on one site, for example one set up for easy PoW, could be passed with a request for a different site and the provider would issue the captcha type and difficulty chosen for the first site. The provider now refuses the session when its site key does not match the site asking for a captcha, with the same "no session found" answer it gives for an unknown session.
|
|
19
|
+
- 084da7e: Changing an access rule now reliably clears the provider's cached block verdicts. A verdict lookup that was already running when the rules changed used to finish afterwards and write the old answer back into the cache, so a just-deleted block rule could keep blocking (or a just-added one keep allowing) for up to ten more seconds. Lookups that started before the change no longer write their result, and new requests no longer wait on them.
|
|
20
|
+
- fa316d6: A captcha token now verifies at most once even when a site's server sends several verify requests for it at the same moment. Before, each request read the record, saw it had not been checked yet, and then marked it checked, so every request that arrived before the first write finished was accepted. Marking a PoW, puzzle or image result as checked is now a single conditional write, and only the request that wins it is verified. The same applies to image captcha submissions: a request hash can now only be spent by one submission, so answers can no longer be tried in parallel against one challenge.
|
|
21
|
+
- 9ed0ac5: Web Bot Auth signatures are now held to the replay window the spec requires. A signature must carry `created`, `expires` and `tag="web-bot-auth"`. It is rejected if it was created in the future (allowing 5s of clock skew) or if it stays valid for more than 24 hours. Before this, a signature with no `expires` could be replayed forever.
|
|
22
|
+
|
|
23
|
+
The signer key directory is fetched more carefully, since its URL comes from a request header:
|
|
24
|
+
- The URL must be https and a public hostname. IP literals, localhost and dotless hosts are refused, except in test and development.
|
|
25
|
+
- The fetch times out after 3s and does not follow redirects.
|
|
26
|
+
- The body is capped at 64KiB.
|
|
27
|
+
- The cache holds at most 1000 entries, each for at most 24 hours.
|
|
28
|
+
- Updated dependencies [f650c66]
|
|
29
|
+
- Updated dependencies [59b7e87]
|
|
30
|
+
- Updated dependencies [b5e55a6]
|
|
31
|
+
- Updated dependencies [e5aefc6]
|
|
32
|
+
- Updated dependencies [d528f41]
|
|
33
|
+
- Updated dependencies [8933ad5]
|
|
34
|
+
- Updated dependencies [5375d10]
|
|
35
|
+
- Updated dependencies [294b480]
|
|
36
|
+
- Updated dependencies [0a4ae2f]
|
|
37
|
+
- Updated dependencies [0c8678e]
|
|
38
|
+
- Updated dependencies [b77c5f4]
|
|
39
|
+
- Updated dependencies [4109641]
|
|
40
|
+
- Updated dependencies [7065689]
|
|
41
|
+
- Updated dependencies [dab0338]
|
|
42
|
+
- Updated dependencies [dffecf0]
|
|
43
|
+
- Updated dependencies [0d29dde]
|
|
44
|
+
- Updated dependencies [fa316d6]
|
|
45
|
+
- Updated dependencies [9ed0ac5]
|
|
46
|
+
- @prosopo/database@4.1.0
|
|
47
|
+
- @prosopo/types-database@5.7.0
|
|
48
|
+
- @prosopo/types@5.11.0
|
|
49
|
+
- @prosopo/common@3.1.60
|
|
50
|
+
- @prosopo/load-balancer@2.11.2
|
|
51
|
+
- @prosopo/captcha-severity@1.1.2
|
|
52
|
+
- @prosopo/datasets@3.1.92
|
|
53
|
+
- @prosopo/locale@3.6.1
|
|
54
|
+
- @prosopo/native-ja4@0.0.7
|
|
55
|
+
- @prosopo/redis-client@1.0.38
|
|
56
|
+
- @prosopo/api@4.3.6
|
|
57
|
+
- @prosopo/util@3.3.12
|
|
58
|
+
- @prosopo/web-bot-auth@0.1.3
|
|
59
|
+
- @prosopo/env@3.6.65
|
|
60
|
+
- @prosopo/types-env@2.11.11
|
|
61
|
+
- @prosopo/api-express-router@3.1.96
|
|
62
|
+
- @prosopo/ipinfo@0.4.11
|
|
63
|
+
- @prosopo/keyring@2.9.98
|
|
64
|
+
- @prosopo/user-access-policy@3.14.12
|
|
65
|
+
- @prosopo/api-route@2.6.61
|
|
66
|
+
- @prosopo/logger@2.1.1
|
|
67
|
+
|
|
68
|
+
## 5.13.1
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- fda0eba: Decision machines can now see which page the captcha was rendered on. `currentUrl` (the top-frame page) and `iframeUrl` (the widget's own frame, when embedded) were already stored on the session and already read back from the database, but the verify-time path never passed them to the decision machine, so rules always saw them as undefined.
|
|
72
|
+
|
|
73
|
+
They are now forwarded on all three verify paths (image, PoW and puzzle). No behaviour changes on its own — it just makes the fields available to rules that need to treat an embedded widget differently from a first-party one.
|
|
74
|
+
|
|
75
|
+
Both values are reported by the client and are not checked against the request's Origin or Referer header, so a rule must not hand out an exemption on the strength of these fields alone.
|
|
76
|
+
- 1728cd0: Carry the detector bundle's `keyMap` through the pool push.
|
|
77
|
+
|
|
78
|
+
`keyMap` is an opaque per-bundle decode parameter, written alongside each
|
|
79
|
+
bundle by the pool build and meaningless without it — the same contract as
|
|
80
|
+
`payloadLayout`. The admin pool-replace body schema never declared it, so zod
|
|
81
|
+
stripped it from every push, and the endpoint's persist step then wrote the
|
|
82
|
+
bundle back to disk without it.
|
|
83
|
+
|
|
84
|
+
The result was a pool the provider served but could not decode: the push
|
|
85
|
+
returned success with `persisted: true`, the bundles loaded and sessions were
|
|
86
|
+
assigned them, but what they produced could not be read. Pools copied onto the
|
|
87
|
+
volume were unaffected, because that path never goes through the schema.
|
|
88
|
+
|
|
89
|
+
Adds `keyMap` to `ReplaceDetectorPoolBody` and writes it in
|
|
90
|
+
`persistDetectorBundlePool`.
|
|
91
|
+
- 20542d8: Send page scroll events with the captcha's behavioural data.
|
|
92
|
+
|
|
93
|
+
The widget now passes a fourth collector, the page's scroll position and the
|
|
94
|
+
time of each scroll, alongside mouse, touch and click data, and the provider
|
|
95
|
+
stores it as `c4` on the captcha record. People scroll in uneven bursts while
|
|
96
|
+
bots tend to scroll at a steady rate, so this gives detection something to
|
|
97
|
+
work with. Detector bundles that predate the scroll tracker simply send no
|
|
98
|
+
`c4`.
|
|
99
|
+
- Updated dependencies [fda0eba]
|
|
100
|
+
- Updated dependencies [1728cd0]
|
|
101
|
+
- Updated dependencies [20542d8]
|
|
102
|
+
- Updated dependencies [eebe6ee]
|
|
103
|
+
- @prosopo/types@5.10.2
|
|
104
|
+
- @prosopo/types-database@5.6.5
|
|
105
|
+
- @prosopo/api@4.3.5
|
|
106
|
+
- @prosopo/api-express-router@3.1.95
|
|
107
|
+
- @prosopo/database@4.0.41
|
|
108
|
+
- @prosopo/datasets@3.1.91
|
|
109
|
+
- @prosopo/env@3.6.64
|
|
110
|
+
- @prosopo/ipinfo@0.4.10
|
|
111
|
+
- @prosopo/keyring@2.9.97
|
|
112
|
+
- @prosopo/load-balancer@2.11.1
|
|
113
|
+
- @prosopo/types-env@2.11.10
|
|
114
|
+
- @prosopo/user-access-policy@3.14.11
|
|
115
|
+
|
|
3
116
|
## 5.13.0
|
|
4
117
|
### Minor Changes
|
|
5
118
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type ApiEndpoint, type ApiEndpointResponse } from "@prosopo/api-route";
|
|
2
2
|
import type { IIpInfoService } from "@prosopo/ipinfo";
|
|
3
3
|
import { type Logger } from "@prosopo/logger";
|
|
4
|
-
import { type DnsEvent,
|
|
4
|
+
import { type DnsEvent, DnsEventIngestBatchSchema } from "@prosopo/types";
|
|
5
5
|
import type { IProviderDatabase } from "@prosopo/types-database";
|
|
6
6
|
import type { z } from "zod";
|
|
7
|
-
type DnsEventBatchSchemaType = typeof
|
|
7
|
+
type DnsEventBatchSchemaType = typeof DnsEventIngestBatchSchema;
|
|
8
8
|
export declare const dnsEventToFields: (event: DnsEvent) => {
|
|
9
9
|
resolverIp?: string;
|
|
10
10
|
peerIp?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiDnsEventEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiDnsEventEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"apiDnsEventEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiDnsEventEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACN,KAAK,QAAQ,EACb,yBAAyB,EAEzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAU7B,KAAK,uBAAuB,GAAG,OAAO,yBAAyB,CAAC;AAGhE,eAAO,MAAM,gBAAgB,UACrB,QAAQ,KACb;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAW7D,CAAC;AAEF,cAAM,mBAAoB,YAAW,WAAW,CAAC,uBAAuB,CAAC;IAEvE,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBADd,EAAE,EAAE,iBAAiB,EACrB,aAAa,CAAC,EAAE,cAAc,YAAA;IAG1C,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,EACtC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IAuExB,oBAAoB,IAAI,uBAAuB;YAIxC,qBAAqB;CAkCnC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { computeDnsAsymmetry, enrichDnsEvent } from "../../tasks/dnsEvent/enrichDnsEvent.js";
|
|
2
2
|
import { getLogger } from "@prosopo/logger";
|
|
3
|
-
import {
|
|
3
|
+
import { DnsEventIngestBatchSchema, DnsEventSchema } from "@prosopo/types";
|
|
4
4
|
import { ApiEndpointResponseStatus } from "@prosopo/api-route";
|
|
5
5
|
//#region src/api/admin/apiDnsEventEndpoint.ts
|
|
6
|
+
var MAX_LOGGED_INVALID = 5;
|
|
6
7
|
var dnsEventToFields = (event) => {
|
|
7
8
|
if (event.kind === "dns") return { resolverIp: event.src_ip };
|
|
8
9
|
const out = { peerIp: event.src_ip };
|
|
@@ -19,8 +20,20 @@ var ApiDnsEventEndpoint = class {
|
|
|
19
20
|
const { events } = args;
|
|
20
21
|
let stored = 0;
|
|
21
22
|
let errors = 0;
|
|
23
|
+
let dropped = 0;
|
|
24
|
+
const invalid = [];
|
|
22
25
|
const now = /* @__PURE__ */ new Date();
|
|
23
|
-
for (const
|
|
26
|
+
for (const [index, raw] of events.entries()) {
|
|
27
|
+
const parsed = DnsEventSchema.safeParse(raw);
|
|
28
|
+
if (!parsed.success) {
|
|
29
|
+
dropped += 1;
|
|
30
|
+
if (invalid.length < MAX_LOGGED_INVALID) invalid.push({
|
|
31
|
+
index,
|
|
32
|
+
issues: parsed.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
|
|
33
|
+
});
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const event = parsed.data;
|
|
24
37
|
const sessionId = event.jti;
|
|
25
38
|
if (!sessionId) continue;
|
|
26
39
|
try {
|
|
@@ -41,11 +54,20 @@ var ApiDnsEventEndpoint = class {
|
|
|
41
54
|
}));
|
|
42
55
|
}
|
|
43
56
|
}
|
|
57
|
+
if (dropped > 0) logger.warn(() => ({
|
|
58
|
+
data: {
|
|
59
|
+
received: events.length,
|
|
60
|
+
dropped,
|
|
61
|
+
invalid
|
|
62
|
+
},
|
|
63
|
+
msg: "Dropped invalid DNS events from batch"
|
|
64
|
+
}));
|
|
44
65
|
logger.info(() => ({
|
|
45
66
|
data: {
|
|
46
67
|
received: events.length,
|
|
47
68
|
stored,
|
|
48
|
-
errors
|
|
69
|
+
errors,
|
|
70
|
+
dropped
|
|
49
71
|
},
|
|
50
72
|
msg: "Processed DNS event batch"
|
|
51
73
|
}));
|
|
@@ -53,12 +75,13 @@ var ApiDnsEventEndpoint = class {
|
|
|
53
75
|
status: ApiEndpointResponseStatus.SUCCESS,
|
|
54
76
|
data: {
|
|
55
77
|
stored,
|
|
56
|
-
errors
|
|
78
|
+
errors,
|
|
79
|
+
dropped
|
|
57
80
|
}
|
|
58
81
|
};
|
|
59
82
|
}
|
|
60
83
|
getRequestArgsSchema() {
|
|
61
|
-
return
|
|
84
|
+
return DnsEventIngestBatchSchema;
|
|
62
85
|
}
|
|
63
86
|
async recomputeDnsAsymmetry(sessionId, logger) {
|
|
64
87
|
if (!this.ipInfoService) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiDnsEventEndpoint.js","sourceRoot":"","sources":["../../../src/api/admin/apiDnsEventEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"apiDnsEventEndpoint.js","sourceRoot":"","sources":["../../../src/api/admin/apiDnsEventEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAEN,yBAAyB,EACzB,cAAc,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACN,mBAAmB,EACnB,cAAc,GACd,MAAM,wCAAwC,CAAC;AAIhD,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAK7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,KAAe,EACiD,EAAE;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,GAAG,GAA4C;QACpD,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;IACF,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3C,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,mBAAmB;IACxB,YACkB,EAAqB,EACrB,aAA8B;QAD9B,OAAE,GAAF,EAAE,CAAmB;QACrB,kBAAa,GAAb,aAAa,CAAiB;IAC7C,CAAC;IAEJ,KAAK,CAAC,cAAc,CACnB,IAAsC,EACtC,MAAe;QAEf,MAAM,GAAG,MAAM;YACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,wBAAwB,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QACxD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,GAA0C,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC;wBACZ,KAAK;wBACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CACtD;qBACD,CAAC,CAAC;gBACJ,CAAC;gBACD,SAAS;YACV,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;YAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,SAAS;YACV,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CACjD,SAAS,EACT,MAAM,EACN,GAAG,CACH,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrD,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,GAAG;oBACH,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;oBACrC,GAAG,EAAE,wCAAwC;iBAC7C,CAAC,CAAC,CAAC;YACL,CAAC;QACF,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;gBACnD,GAAG,EAAE,uCAAuC;aAC5C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;YAC1D,GAAG,EAAE,2BAA2B;SAChC,CAAC,CAAC,CAAC;QAEJ,OAAO;YACN,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;SACjC,CAAC;IACH,CAAC;IAEM,oBAAoB;QAC1B,OAAO,yBAAyB,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAClC,SAAiB,EACjB,MAAc;QAEd,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,EAAE,QAAQ;gBAAE,OAAO;YAC/B,MAAM,QAAQ,GAAG,MAAM,cAAc,CACpC,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,aAAa,EAClB,OAAO,CAAC,MAAM,EAAE,EAAE,CAClB,CAAC;YAKF,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE;oBAC5C,eAAe,EAAE;wBAChB,GAAG,OAAO,CAAC,eAAe;wBAC1B,YAAY;qBACZ;iBACD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClB,GAAG;gBACH,IAAI,EAAE,EAAE,SAAS,EAAE;gBACnB,GAAG,EAAE,wDAAwD;aAC7D,CAAC,CAAC,CAAC;QACL,CAAC;IACF,CAAC;CACD;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/handler.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;8BAuCtD,mBAAmB,0BACA,kBAAkB,WAGpC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,QACP,YAAY;AAPpB,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/handler.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;8BAuCtD,mBAAmB,0BACA,kBAAkB,WAGpC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,QACP,YAAY;AAPpB,wBA43BG"}
|
|
@@ -237,7 +237,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
237
237
|
method: req.method,
|
|
238
238
|
url: `https://${req.headers.host ?? ""}${req.originalUrl ?? req.url}`,
|
|
239
239
|
headers: flatten(req.headers)
|
|
240
|
-
});
|
|
240
|
+
}, { allowLocalSigners: process.env.NODE_ENV === "test" || process.env.NODE_ENV === "development" });
|
|
241
241
|
const verifiedSignerUrl = verified.verified ? verified.signerUrl : void 0;
|
|
242
242
|
const userScope = getRequestUserScope(flatten(req.headers), req.ja4, normalizedIp, user, void 0, void 0, countryCode, asn, verifiedSignerUrl);
|
|
243
243
|
const [decryptedPayload, validation, accessPolicies] = await Promise.all([
|