@prosopo/provider 5.10.3 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +18 -17
- package/.turbo/turbo-build$colon$tsc.log +27 -27
- package/.turbo/turbo-build.log +18 -17
- package/CHANGELOG.md +86 -0
- package/dist/api/assetDocument.d.ts +3 -0
- package/dist/api/assetDocument.d.ts.map +1 -0
- package/dist/api/assetDocument.js +41 -0
- package/dist/api/assetDocument.js.map +1 -0
- package/dist/api/captcha/assignDetectorBundle.d.ts.map +1 -1
- package/dist/api/captcha/assignDetectorBundle.js +24 -2
- package/dist/api/captcha/assignDetectorBundle.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +5 -16
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +3 -14
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/public.d.ts.map +1 -1
- package/dist/api/public.js +2 -0
- package/dist/api/public.js.map +1 -1
- package/dist/cjs/api/assetDocument.cjs +43 -0
- package/dist/cjs/api/captcha/assignDetectorBundle.cjs +23 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +5 -16
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +3 -14
- package/dist/cjs/api/public.cjs +2 -0
- package/dist/cjs/tasks/captchaManager.cjs +11 -23
- package/dist/cjs/tasks/detection/bundlePool.cjs +3 -1
- package/dist/cjs/tasks/detection/decodePayload.cjs +1559 -1190
- package/dist/cjs/tasks/detection/decodePayload.js +1 -1
- package/dist/cjs/tasks/detection/getBotScore.cjs +70 -65
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +39 -164
- package/dist/cjs/tasks/frictionless/routingMachine.cjs +2 -1
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +1 -0
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +2 -0
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +1 -0
- package/dist/tasks/captchaManager.d.ts +1 -0
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +11 -23
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/detection/bundlePool.d.ts +1 -0
- package/dist/tasks/detection/bundlePool.d.ts.map +1 -1
- package/dist/tasks/detection/bundlePool.js +3 -1
- package/dist/tasks/detection/bundlePool.js.map +1 -1
- package/dist/tasks/detection/decodePayload.d.ts +2 -2
- package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
- package/dist/tasks/detection/decodePayload.js +1 -1
- package/dist/tasks/detection/decodePayload.js.map +1 -1
- package/dist/tasks/detection/getBotScore.d.ts +10 -49
- package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
- package/dist/tasks/detection/getBotScore.js +71 -66
- package/dist/tasks/detection/getBotScore.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +2 -15
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +39 -164
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/frictionless/routingMachine.d.ts +2 -1
- package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
- package/dist/tasks/frictionless/routingMachine.js +2 -1
- package/dist/tasks/frictionless/routingMachine.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +1 -0
- 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 +2 -0
- 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 +1 -0
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tests/integration/routingDecisionMachines.integration.test.js +15 -21
- package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
- package/dist/tests/unit/api/assetDocument.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/assetDocument.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/assetDocument.unit.test.js +55 -0
- package/dist/tests/unit/api/assetDocument.unit.test.js.map +1 -0
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +9 -19
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +21 -117
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +105 -66
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +8 -18
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +30 -12
- package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@5.
|
|
2
|
+
> @prosopo/provider@5.11.0 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -29,6 +29,7 @@ ViteCommonJSConfig: .
|
|
|
29
29
|
'/home/runner/work/captcha/captcha/packages/web-bot-auth/tsconfig.json'
|
|
30
30
|
]
|
|
31
31
|
}
|
|
32
|
+
[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
|
|
32
33
|
{
|
|
33
34
|
externals: [
|
|
34
35
|
'@prosopo/api-route',
|
|
@@ -55,11 +56,10 @@ ViteCommonJSConfig: .
|
|
|
55
56
|
'@prosopo/web-bot-auth'
|
|
56
57
|
]
|
|
57
58
|
}
|
|
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
|
+
✓ 112 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
|
|
@@ -100,6 +100,7 @@ dist/cjs/pairs.cjs 1
|
|
|
100
100
|
dist/cjs/tasks/dataset/datasetTasksUtils.cjs 1.42 kB │ gzip: 0.49 kB
|
|
101
101
|
dist/cjs/utils/clientMetaData.cjs 1.48 kB │ gzip: 0.72 kB
|
|
102
102
|
dist/cjs/tasks/detection/assignSecret.cjs 1.48 kB │ gzip: 0.75 kB
|
|
103
|
+
dist/cjs/api/assetDocument.cjs 1.50 kB │ gzip: 0.81 kB
|
|
103
104
|
dist/cjs/compositeIpAddress.cjs 1.55 kB │ gzip: 0.57 kB
|
|
104
105
|
dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs 1.59 kB │ gzip: 0.60 kB
|
|
105
106
|
dist/cjs/schedulers/updateSpamEmailDomains.cjs 1.64 kB │ gzip: 0.62 kB
|
|
@@ -117,22 +118,22 @@ dist/cjs/api/captcha/signedAssetsResolver.cjs 1
|
|
|
117
118
|
dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs 2.01 kB │ gzip: 0.78 kB
|
|
118
119
|
dist/cjs/tasks/frictionless/ipMatch.cjs 2.03 kB │ gzip: 1.03 kB
|
|
119
120
|
dist/cjs/tasks/spam/updateSpamEmailDomains.cjs 2.12 kB │ gzip: 0.85 kB
|
|
120
|
-
dist/cjs/tasks/frictionless/routingMachine.cjs 2.17 kB │ gzip: 0.91 kB
|
|
121
121
|
dist/cjs/migrations/frictionlessLadder.cjs 2.19 kB │ gzip: 0.95 kB
|
|
122
122
|
dist/cjs/tasks/puzzle/stratifiedSampler.cjs 2.20 kB │ gzip: 1.08 kB
|
|
123
|
+
dist/cjs/tasks/frictionless/routingMachine.cjs 2.21 kB │ gzip: 0.93 kB
|
|
123
124
|
dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs 2.21 kB │ gzip: 1.10 kB
|
|
124
125
|
dist/cjs/tasks/captchaTypeSelection.cjs 2.44 kB │ gzip: 1.04 kB
|
|
125
126
|
dist/cjs/api/admin/apiDnsEventEndpoint.cjs 2.59 kB │ gzip: 1.00 kB
|
|
126
127
|
dist/cjs/utils/dns.cjs 2.66 kB │ gzip: 1.02 kB
|
|
127
128
|
dist/cjs/api/forwardVerify.cjs 2.66 kB │ gzip: 1.12 kB
|
|
128
129
|
dist/cjs/tasks/puzzle/puzzleDifficulty.cjs 2.66 kB │ gzip: 1.10 kB
|
|
129
|
-
dist/cjs/api/public.cjs 2.67 kB │ gzip: 1.05 kB
|
|
130
|
-
dist/cjs/tasks/detection/getBotScore.cjs 2.67 kB │ gzip: 0.97 kB
|
|
131
130
|
dist/cjs/api/captcha/checkSpamEmail.cjs 2.73 kB │ gzip: 0.95 kB
|
|
132
131
|
dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs 2.77 kB │ gzip: 0.99 kB
|
|
133
|
-
dist/cjs/api/
|
|
132
|
+
dist/cjs/api/public.cjs 2.79 kB │ gzip: 1.07 kB
|
|
134
133
|
dist/cjs/api/captcha/maintenanceModeResponses.cjs 2.91 kB │ gzip: 0.77 kB
|
|
135
134
|
dist/cjs/api/captcha/submitImageCaptchaSolution.cjs 2.93 kB │ gzip: 1.03 kB
|
|
135
|
+
dist/cjs/tasks/detection/getBotScore.cjs 3.35 kB │ gzip: 1.30 kB
|
|
136
|
+
dist/cjs/api/captcha/assignDetectorBundle.cjs 3.63 kB │ gzip: 1.37 kB
|
|
136
137
|
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs 3.66 kB │ gzip: 1.35 kB
|
|
137
138
|
dist/cjs/api/admin/apiAdminRoutesProvider.cjs 3.67 kB │ gzip: 0.62 kB
|
|
138
139
|
dist/cjs/api/rawTlsSignalsMiddleware.cjs 3.84 kB │ gzip: 1.16 kB
|
|
@@ -155,8 +156,8 @@ dist/cjs/api/captcha/getImageCaptchaChallenge.cjs 7
|
|
|
155
156
|
dist/cjs/tasks/spam/checkTrafficFilter.cjs 7.47 kB │ gzip: 2.48 kB
|
|
156
157
|
dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs 7.56 kB │ gzip: 2.03 kB
|
|
157
158
|
dist/cjs/api/metrics.cjs 7.96 kB │ gzip: 2.23 kB
|
|
158
|
-
dist/cjs/
|
|
159
|
-
dist/cjs/
|
|
159
|
+
dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 9.12 kB │ gzip: 2.71 kB
|
|
160
|
+
dist/cjs/tasks/detection/bundlePool.cjs 9.24 kB │ gzip: 3.37 kB
|
|
160
161
|
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs 10.33 kB │ gzip: 1.82 kB
|
|
161
162
|
dist/cjs/api/startProviderApi.cjs 11.62 kB │ gzip: 3.70 kB
|
|
162
163
|
dist/cjs/tasks/client/clientTasks.cjs 11.73 kB │ gzip: 3.04 kB
|
|
@@ -164,17 +165,17 @@ dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 12
|
|
|
164
165
|
dist/cjs/api/blacklistRequestInspector.cjs 13.10 kB │ gzip: 4.41 kB
|
|
165
166
|
dist/cjs/util.cjs 13.15 kB │ gzip: 3.26 kB
|
|
166
167
|
dist/cjs/api/verify.cjs 16.79 kB │ gzip: 2.93 kB
|
|
167
|
-
dist/cjs/
|
|
168
|
-
dist/cjs/
|
|
169
|
-
dist/cjs/tasks/captchaManager.cjs
|
|
170
|
-
dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.
|
|
171
|
-
dist/cjs/tasks/powCaptcha/powTasks.cjs 24.
|
|
172
|
-
dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 27.
|
|
168
|
+
dist/cjs/tasks/frictionless/frictionlessTasks.cjs 18.37 kB │ gzip: 4.89 kB
|
|
169
|
+
dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 20.05 kB │ gzip: 4.59 kB
|
|
170
|
+
dist/cjs/tasks/captchaManager.cjs 22.28 kB │ gzip: 6.57 kB
|
|
171
|
+
dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.05 kB │ gzip: 5.15 kB
|
|
172
|
+
dist/cjs/tasks/powCaptcha/powTasks.cjs 24.93 kB │ gzip: 5.99 kB
|
|
173
|
+
dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 27.98 kB │ gzip: 6.37 kB
|
|
173
174
|
dist/cjs/tasks/detection/decodeBehavior.cjs 32.24 kB │ gzip: 10.32 kB
|
|
174
175
|
dist/cjs/tasks/detection/decodeSimd.cjs 36.03 kB │ gzip: 11.96 kB
|
|
175
|
-
dist/cjs/tasks/detection/decodePayload.cjs
|
|
176
|
+
dist/cjs/tasks/detection/decodePayload.cjs 70.12 kB │ gzip: 22.57 kB
|
|
176
177
|
|
|
177
|
-
[32m✓ built in
|
|
178
|
+
[32m✓ built in 202ms[39m
|
|
178
179
|
[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
|
|
179
180
|
[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
|
|
180
181
|
[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.
|
|
2
|
+
> @prosopo/provider@5.11.0 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
2:43:22 PM - 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
|
-
|
|
31
|
+
2:43:22 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'
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
2:43:22 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
2:43:22 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
2:43:22 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'
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
2:43:22 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
2:43:22 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'
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
2:43:23 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'
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
2:43:23 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/utils/batches.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
2:43:23 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/index.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
2:43:23 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/tests/testRedisConnection.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
2:43:23 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
2:43:23 PM - 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
|
-
|
|
55
|
+
2:43:23 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/schemas.test.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
2:43:23 PM - 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
|
-
|
|
59
|
+
2:43:23 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/pair/decode.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
2:43:23 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'
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
2:43:23 PM - 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
|
-
|
|
65
|
+
2:43:23 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/middlewares/requestLoggerMiddleware.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
2:43:23 PM - 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
|
-
|
|
69
|
+
2:43:23 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
2:43:23 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/tests/productionProviderList.unit.test.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
2:43:23 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'
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
2:43:23 PM - 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
|
-
|
|
77
|
+
2:43:23 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
2:43:23 PM - 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.
|
|
2
|
+
> @prosopo/provider@5.11.0 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider@5.
|
|
6
|
+
> @prosopo/provider@5.11.0 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
|
+
✓ 112 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
|
|
@@ -102,6 +102,7 @@ dist/api/admin/apiGetDecisionMachineEndpoint.js 1.26 k
|
|
|
102
102
|
dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js 1.27 kB │ gzip: 0.51 kB
|
|
103
103
|
dist/api/admin/apiRemoveDecisionMachineEndpoint.js 1.29 kB │ gzip: 0.51 kB
|
|
104
104
|
dist/tasks/dataset/datasetTasksUtils.js 1.30 kB │ gzip: 0.48 kB
|
|
105
|
+
dist/api/assetDocument.js 1.36 kB │ gzip: 0.75 kB
|
|
105
106
|
dist/compositeIpAddress.js 1.36 kB │ gzip: 0.55 kB
|
|
106
107
|
dist/tasks/detection/assignSecret.js 1.42 kB │ gzip: 0.74 kB
|
|
107
108
|
dist/utils/clientMetaData.js 1.42 kB │ gzip: 0.72 kB
|
|
@@ -123,23 +124,23 @@ dist/api/admin/apiClearAllCountersEndpoint.js 1.89 k
|
|
|
123
124
|
dist/tasks/frictionless/ipMatch.js 1.98 kB │ gzip: 1.02 kB
|
|
124
125
|
dist/migrations/frictionlessLadder.js 2.12 kB │ gzip: 0.93 kB
|
|
125
126
|
dist/tasks/puzzle/stratifiedSampler.js 2.14 kB │ gzip: 1.07 kB
|
|
126
|
-
dist/tasks/frictionless/routingMachine.js 2.16 kB │ gzip: 0.91 kB
|
|
127
127
|
dist/tasks/frictionless/frictionlessTasksUtils.js 2.16 kB │ gzip: 1.09 kB
|
|
128
128
|
dist/api/captcha/maintenanceModeResponses.js 2.16 kB │ gzip: 0.73 kB
|
|
129
|
+
dist/tasks/frictionless/routingMachine.js 2.20 kB │ gzip: 0.93 kB
|
|
129
130
|
dist/tasks/captchaTypeSelection.js 2.22 kB │ gzip: 1.03 kB
|
|
130
|
-
dist/api/public.js 2.36 kB │ gzip: 0.96 kB
|
|
131
131
|
dist/utils/dns.js 2.36 kB │ gzip: 0.95 kB
|
|
132
132
|
dist/api/admin/apiDnsEventEndpoint.js 2.43 kB │ gzip: 0.96 kB
|
|
133
|
+
dist/api/public.js 2.45 kB │ gzip: 0.98 kB
|
|
133
134
|
dist/api/captcha/checkSpamEmail.js 2.47 kB │ gzip: 0.91 kB
|
|
134
135
|
dist/tasks/puzzle/puzzleDifficulty.js 2.50 kB │ gzip: 1.09 kB
|
|
135
136
|
dist/api/captcha/submitPuzzleCaptchaSolution.js 2.55 kB │ gzip: 0.96 kB
|
|
136
137
|
dist/api/forwardVerify.js 2.59 kB │ gzip: 1.10 kB
|
|
137
138
|
dist/api/captcha/submitImageCaptchaSolution.js 2.59 kB │ gzip: 1.00 kB
|
|
138
|
-
dist/tasks/detection/getBotScore.js 2.59 kB │ gzip: 0.95 kB
|
|
139
|
-
dist/api/captcha/assignDetectorBundle.js 2.69 kB │ gzip: 1.11 kB
|
|
140
139
|
dist/api/admin/apiAdminRoutesProvider.js 2.78 kB │ gzip: 0.55 kB
|
|
141
140
|
dist/index.js 2.92 kB │ gzip: 0.80 kB
|
|
141
|
+
dist/tasks/detection/getBotScore.js 3.27 kB │ gzip: 1.29 kB
|
|
142
142
|
dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.39 kB │ gzip: 1.32 kB
|
|
143
|
+
dist/api/captcha/assignDetectorBundle.js 3.40 kB │ gzip: 1.34 kB
|
|
143
144
|
dist/api/domainMiddleware.js 3.52 kB │ gzip: 1.22 kB
|
|
144
145
|
dist/api/rawTlsSignalsMiddleware.js 3.69 kB │ gzip: 1.13 kB
|
|
145
146
|
dist/tasks/spam/evaluateEmailSpamRules.js 3.84 kB │ gzip: 1.59 kB
|
|
@@ -159,8 +160,8 @@ dist/api/captcha/getPuzzleCaptchaChallenge.js 6.84 k
|
|
|
159
160
|
dist/api/healthzGeo.js 6.86 kB │ gzip: 2.68 kB
|
|
160
161
|
dist/tasks/spam/checkTrafficFilter.js 7.16 kB │ gzip: 2.45 kB
|
|
161
162
|
dist/api/metrics.js 7.36 kB │ gzip: 2.19 kB
|
|
162
|
-
dist/
|
|
163
|
-
dist/
|
|
163
|
+
dist/api/captcha/submitPoWCaptchaSolution.js 8.60 kB │ gzip: 2.66 kB
|
|
164
|
+
dist/tasks/detection/bundlePool.js 8.80 kB │ gzip: 3.32 kB
|
|
164
165
|
dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 9.36 kB │ gzip: 1.80 kB
|
|
165
166
|
dist/api/startProviderApi.js 9.93 kB │ gzip: 3.42 kB
|
|
166
167
|
dist/tasks/client/clientTasks.js 11.27 kB │ gzip: 3.00 kB
|
|
@@ -168,17 +169,17 @@ dist/tasks/decisionMachine/decisionMachineRunner.js 12.19 k
|
|
|
168
169
|
dist/api/blacklistRequestInspector.js 12.46 kB │ gzip: 4.37 kB
|
|
169
170
|
dist/util.js 12.47 kB │ gzip: 3.20 kB
|
|
170
171
|
dist/api/verify.js 15.12 kB │ gzip: 2.82 kB
|
|
171
|
-
dist/
|
|
172
|
-
dist/
|
|
173
|
-
dist/tasks/
|
|
174
|
-
dist/tasks/
|
|
175
|
-
dist/tasks/powCaptcha/powTasks.js 23.
|
|
176
|
-
dist/tasks/imgCaptcha/imgCaptchaTasks.js 26.
|
|
172
|
+
dist/tasks/frictionless/frictionlessTasks.js 17.80 kB │ gzip: 4.86 kB
|
|
173
|
+
dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 18.54 kB │ gzip: 4.48 kB
|
|
174
|
+
dist/tasks/captchaManager.js 21.77 kB │ gzip: 6.50 kB
|
|
175
|
+
dist/tasks/puzzleCaptcha/puzzleTasks.js 22.65 kB │ gzip: 5.11 kB
|
|
176
|
+
dist/tasks/powCaptcha/powTasks.js 23.55 kB │ gzip: 5.95 kB
|
|
177
|
+
dist/tasks/imgCaptcha/imgCaptchaTasks.js 26.47 kB │ gzip: 6.31 kB
|
|
177
178
|
dist/tasks/detection/decodeBehavior.js 32.26 kB │ gzip: 10.34 kB
|
|
178
179
|
dist/tasks/detection/decodeSimd.js 36.06 kB │ gzip: 12.00 kB
|
|
179
|
-
dist/tasks/detection/decodePayload.js
|
|
180
|
+
dist/tasks/detection/decodePayload.js 70.03 kB │ gzip: 22.55 kB
|
|
180
181
|
|
|
181
|
-
[32m✓ built in
|
|
182
|
+
[32m✓ built in 174ms[39m
|
|
182
183
|
[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
|
|
183
184
|
[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
|
|
184
185
|
[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,91 @@
|
|
|
1
1
|
# @prosopo/provider
|
|
2
2
|
|
|
3
|
+
## 5.11.0
|
|
4
|
+
### Minor Changes
|
|
5
|
+
|
|
6
|
+
- a606f54: Detector signals now travel in a single open field, `d`, instead of one named
|
|
7
|
+
field each.
|
|
8
|
+
|
|
9
|
+
Previously every signal the detector reported needed adding by hand in about a
|
|
10
|
+
dozen places — the decoder, two type files, the Mongoose schema, the read
|
|
11
|
+
projection, the session write path, the escalation copy, and each machine's
|
|
12
|
+
input — and missing any one of them dropped the signal with no error. Signals
|
|
13
|
+
were in fact being dropped that way: one was persisted but never reached a
|
|
14
|
+
decision machine at all, and three more were lost whenever a user was escalated
|
|
15
|
+
from PoW to another challenge.
|
|
16
|
+
|
|
17
|
+
Now the provider carries whatever the detector reported without knowing what it
|
|
18
|
+
is, and hands it to decision and routing machines as `input.d`. A rule can read
|
|
19
|
+
a signal that no release of `@prosopo/types` or `@prosopo/provider` has ever
|
|
20
|
+
heard of, so adding one no longer requires a release of either. Values keep
|
|
21
|
+
their types: a boolean arrives as a boolean and a number as a number.
|
|
22
|
+
|
|
23
|
+
The bag is client-controlled data that gets persisted, so it is sanitised and
|
|
24
|
+
capped on ingress — key names Mongo cannot store are dropped, values that are
|
|
25
|
+
not JSON are dropped, and there are limits on key count, string length, array
|
|
26
|
+
length, nesting depth and total size.
|
|
27
|
+
|
|
28
|
+
Two things to note when deploying. Sessions written before this change carry
|
|
29
|
+
the old named fields and no `d`, so queries and dashboards that read those
|
|
30
|
+
fields need a `d.` prefix; the sessions collection expires after a day, so the
|
|
31
|
+
overlap is short. And the sparse session index moves to a dotted path inside
|
|
32
|
+
the bag.
|
|
33
|
+
- 0f23010: Correlate captcha sessions with Prosopo Protect sessions on sites that run both.
|
|
34
|
+
|
|
35
|
+
Protect's challenge page already renders the widget with `data-sessionid=<its session id>`, so captchas served from the interstitial can be matched back to the Protect session. A widget the site embeds itself — on its own pages — had no way to know that id, so those sessions could not be matched to anything.
|
|
36
|
+
|
|
37
|
+
The widget now falls back to reading Protect's session id from the page (`window.prosopo_protect.jti`, or the `prosopo_session` cookie Protect sets on the site's domain) when the site has not supplied a session id of its own. A session id the site does supply always wins, so nothing changes for sites that use the field themselves, and sites without Protect are unaffected. Only the id is read — the session token that shares the cookie never leaves the page.
|
|
38
|
+
|
|
39
|
+
Two gaps in the existing field are closed alongside it: the widget now sends the session id when it first asks for a captcha rather than only when submitting a solution, and the provider records it on the session at that point. Previously a session that was allowed without a challenge, or abandoned before the user solved one, carried no session id at all. An escalated session now inherits the id from the session it escalated from.
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- a4a71be: Regenerate the obfuscated payload decoder so it matches the payload the
|
|
44
|
+
detector now produces.
|
|
45
|
+
|
|
46
|
+
The decoder ships as a pre-built file rather than being compiled from source
|
|
47
|
+
here, so it did not pick up the payload format change that landed alongside the
|
|
48
|
+
detector data bag. It still expected the old fixed field count, and rejected
|
|
49
|
+
every payload written in the new format — the provider then treated a perfectly
|
|
50
|
+
good detection result as an unreadable one and fell back to a challenge.
|
|
51
|
+
- Updated dependencies [a606f54]
|
|
52
|
+
- Updated dependencies [ce2500b]
|
|
53
|
+
- Updated dependencies [0f23010]
|
|
54
|
+
- @prosopo/types@5.9.0
|
|
55
|
+
- @prosopo/types-database@5.6.0
|
|
56
|
+
- @prosopo/api@4.3.0
|
|
57
|
+
- @prosopo/api-express-router@3.1.90
|
|
58
|
+
- @prosopo/database@4.0.36
|
|
59
|
+
- @prosopo/datasets@3.1.85
|
|
60
|
+
- @prosopo/env@3.6.59
|
|
61
|
+
- @prosopo/ipinfo@0.4.5
|
|
62
|
+
- @prosopo/keyring@2.9.92
|
|
63
|
+
- @prosopo/load-balancer@2.10.47
|
|
64
|
+
- @prosopo/types-env@2.11.5
|
|
65
|
+
- @prosopo/user-access-policy@3.14.6
|
|
66
|
+
|
|
67
|
+
## 5.10.4
|
|
68
|
+
### Patch Changes
|
|
69
|
+
|
|
70
|
+
- be25974: Two optional per-site settings are now passed through to the client. Sites that
|
|
71
|
+
do not set them are unaffected.
|
|
72
|
+
- 8d158a1: Type the mocks in the provider's PoW, client, dataset and scheduler unit tests with `vi.mocked` and correctly-typed fixtures instead of `any`, so the test mocks now match the real function signatures.
|
|
73
|
+
- be25974: Fixes a decoded session field that was being dropped before it reached the
|
|
74
|
+
session record.
|
|
75
|
+
- Updated dependencies [be25974]
|
|
76
|
+
- @prosopo/types@5.8.5
|
|
77
|
+
- @prosopo/api@4.2.5
|
|
78
|
+
- @prosopo/api-express-router@3.1.89
|
|
79
|
+
- @prosopo/database@4.0.35
|
|
80
|
+
- @prosopo/datasets@3.1.84
|
|
81
|
+
- @prosopo/env@3.6.58
|
|
82
|
+
- @prosopo/ipinfo@0.4.4
|
|
83
|
+
- @prosopo/keyring@2.9.91
|
|
84
|
+
- @prosopo/load-balancer@2.10.46
|
|
85
|
+
- @prosopo/types-database@5.5.5
|
|
86
|
+
- @prosopo/types-env@2.11.4
|
|
87
|
+
- @prosopo/user-access-policy@3.14.5
|
|
88
|
+
|
|
3
89
|
## 5.10.3
|
|
4
90
|
### Patch Changes
|
|
5
91
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetDocument.d.ts","sourceRoot":"","sources":["../../src/api/assetDocument.ts"],"names":[],"mappings":"AAcA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAiC/C,wBAAgB,mBAAmB,IAAI,MAAM,CAyB5C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
//#region src/api/assetDocument.ts
|
|
3
|
+
var scriptLiteral = (value) => JSON.stringify(value).replace(/</g, "\\u003c").replace(/>/g, "\\u003e");
|
|
4
|
+
var page = (inner, id) => `<!doctype html>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<body><script>
|
|
7
|
+
var f=document.createElement('iframe');
|
|
8
|
+
f.src=${scriptLiteral(inner)};
|
|
9
|
+
f.onload=function(){window.top.postMessage({p:'n',i:${scriptLiteral(id)}},'*')};
|
|
10
|
+
document.body.appendChild(f);
|
|
11
|
+
<\/script></body>`;
|
|
12
|
+
var ID_PATTERN = /^[A-Za-z0-9]{1,64}$/;
|
|
13
|
+
var probeId = (raw) => "string" === typeof raw && ID_PATTERN.test(raw) ? raw : "";
|
|
14
|
+
var innerUrl = (raw) => {
|
|
15
|
+
if ("string" !== typeof raw || 0 === raw.length) return;
|
|
16
|
+
try {
|
|
17
|
+
const url = new URL(raw);
|
|
18
|
+
return "http:" === url.protocol || "https:" === url.protocol ? url.href : void 0;
|
|
19
|
+
} catch {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function assetDocumentRouter() {
|
|
24
|
+
const router = express.Router();
|
|
25
|
+
router.get(/.*/, (req, res, next) => {
|
|
26
|
+
if ("n" !== req.query.m) return next();
|
|
27
|
+
const inner = innerUrl(req.query.u);
|
|
28
|
+
if (!inner) return next();
|
|
29
|
+
const id = probeId(req.query.i);
|
|
30
|
+
res.removeHeader("X-Frame-Options");
|
|
31
|
+
res.set({
|
|
32
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
33
|
+
"Cache-Control": "no-store",
|
|
34
|
+
"Content-Security-Policy": "frame-ancestors *"
|
|
35
|
+
});
|
|
36
|
+
return res.status(200).send(page(inner, id));
|
|
37
|
+
});
|
|
38
|
+
return router;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { assetDocumentRouter };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetDocument.js","sourceRoot":"","sources":["../../src/api/assetDocument.ts"],"names":[],"mappings":"AAcA,OAAO,OAAwB,MAAM,SAAS,CAAC;AAE/C,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAEzE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAU,EAAU,EAAE,CAAC;;;;QAI5C,aAAa,CAAC,KAAK,CAAC;sDAC0B,aAAa,CAAC,EAAE,CAAC;;iBAEtD,CAAC;AAElB,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,MAAM,OAAO,GAAG,CAAC,GAAY,EAAU,EAAE,CACxC,QAAQ,KAAK,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAE5D,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAsB,EAAE;IACrD,IAAI,QAAQ,KAAK,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,OAAO,KAAK,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,CAAC,QAAQ;YAC3D,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,SAAS,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,UAAU,mBAAmB;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACnC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,EAAE,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,IAAI,EAAE,CAAC;QACf,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhC,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC;YACP,cAAc,EAAE,0BAA0B;YAC1C,eAAe,EAAE,UAAU;YAC3B,yBAAyB,EAAE,mBAAmB;SAC9C,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assignDetectorBundle.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assignDetectorBundle.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;8BAgEpC,mBAAmB,WAEjC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,SACN,YAAY,KACjB,OAAO,CAAC,QAAQ,CAAC;AALrB,wBAgEG"}
|
|
@@ -2,12 +2,32 @@ import { getDetectorBundlePool, getDetectorBundlePoolDir } from "../../tasks/det
|
|
|
2
2
|
import { Tasks } from "../../tasks/tasks.js";
|
|
3
3
|
import { getAssignSecret } from "../../tasks/detection/assignSecret.js";
|
|
4
4
|
import { normalizeRequestIp } from "../../utils/normalizeRequestIp.js";
|
|
5
|
-
import { ApiParams } from "@prosopo/types";
|
|
5
|
+
import { ApiParams, AssignDetectorBundleRequestBody } from "@prosopo/types";
|
|
6
6
|
import { createHmac } from "node:crypto";
|
|
7
7
|
import { v4 } from "uuid";
|
|
8
8
|
//#region src/api/captcha/assignDetectorBundle.ts
|
|
9
9
|
/** Pool position for this caller: a keyed hash of their address. */
|
|
10
10
|
var clientIndex = (ip, secret) => createHmac("sha256", secret).update(ip).digest().readUIntBE(0, 6);
|
|
11
|
+
var siteConfig = async (tasks, body, logger) => {
|
|
12
|
+
const parsed = AssignDetectorBundleRequestBody.safeParse(body);
|
|
13
|
+
if (!parsed.success) return {};
|
|
14
|
+
try {
|
|
15
|
+
const client = await tasks.db.getClientRecord(parsed.data[ApiParams.dapp]);
|
|
16
|
+
const clientUrl = client?.settings?.clientUrl;
|
|
17
|
+
const assetOrigin = client?.settings?.assetOrigin;
|
|
18
|
+
if (!clientUrl || !assetOrigin) return {};
|
|
19
|
+
return {
|
|
20
|
+
[ApiParams.clientUrl]: clientUrl,
|
|
21
|
+
[ApiParams.assetOrigin]: assetOrigin
|
|
22
|
+
};
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logger.warn(() => ({
|
|
25
|
+
msg: "assignDetectorBundle site config failed",
|
|
26
|
+
err
|
|
27
|
+
}));
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
11
31
|
/**
|
|
12
32
|
* Assigns a precomputed detector bundle for this detection session.
|
|
13
33
|
*
|
|
@@ -43,13 +63,15 @@ var assignDetectorBundle_default = (env) => async (req, res, _next) => {
|
|
|
43
63
|
});
|
|
44
64
|
const { bundleId, bundle } = pool.at(clientIndex(normalizeRequestIp(req.ip, req.logger), secret));
|
|
45
65
|
const detectorSessionId = `det-${v4()}`;
|
|
46
|
-
const
|
|
66
|
+
const tasks = new Tasks(env, req.logger);
|
|
67
|
+
const writeQueue = tasks.frictionlessManager.writeQueue;
|
|
47
68
|
if (!writeQueue) return res.json(noBundle);
|
|
48
69
|
if (!await writeQueue.cacheDetectorBundle(detectorSessionId, bundleId)) return res.json(noBundle);
|
|
49
70
|
const response = {
|
|
50
71
|
[ApiParams.useProviderBundle]: true,
|
|
51
72
|
[ApiParams.detectorSessionId]: detectorSessionId,
|
|
52
73
|
[ApiParams.detectorScript]: bundle.js,
|
|
74
|
+
...await siteConfig(tasks, req.body, req.logger),
|
|
53
75
|
status: "ok"
|
|
54
76
|
};
|
|
55
77
|
return res.json(response);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assignDetectorBundle.js","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"assignDetectorBundle.js","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,wBAq3BG"}
|
|
@@ -130,6 +130,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
130
130
|
...dedupCountryCode && { countryCode: dedupCountryCode },
|
|
131
131
|
score: dedup.session.score,
|
|
132
132
|
platform: derivePlatform(dedupUserAgent, dedup.session.webView, { ...typeof dedupIsMobile === "boolean" && { isMobile: dedupIsMobile } }),
|
|
133
|
+
...dedup.session.d !== void 0 && { d: dedup.session.d },
|
|
133
134
|
raw: {
|
|
134
135
|
headers: dedupFlatHeaders,
|
|
135
136
|
userAgent: dedupUserAgent,
|
|
@@ -267,7 +268,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
267
268
|
...verifiedSignerUrl && { agent: verifiedSignerUrl }
|
|
268
269
|
});
|
|
269
270
|
}
|
|
270
|
-
const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty,
|
|
271
|
+
const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty, d, bundleId } = decryptedPayload;
|
|
271
272
|
const detectorOverride = process.env.PROSOPO_TEST_FRICTIONLESS_DETECTOR_OVERRIDE === "1";
|
|
272
273
|
const baseBotScore = detectorOverride ? 0 : rawBaseBotScore;
|
|
273
274
|
const timestamp = detectorOverride ? Date.now() : rawTimestamp;
|
|
@@ -323,21 +324,8 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
323
324
|
mode: sessionMode,
|
|
324
325
|
...bundleId && { bundleId },
|
|
325
326
|
...decodedSimdReadings && { simdReadings: decodedSimdReadings },
|
|
326
|
-
...
|
|
327
|
-
...
|
|
328
|
-
...entropyWallClockOffsetMs !== void 0 && { entropyWallClockOffsetMs },
|
|
329
|
-
...entropyMathRandomFirst !== void 0 && { entropyMathRandomFirst },
|
|
330
|
-
...g !== void 0 && { g },
|
|
331
|
-
...i !== void 0 && { i },
|
|
332
|
-
...cv !== void 0 && { cv },
|
|
333
|
-
...sq !== void 0 && { sq },
|
|
334
|
-
...cg !== void 0 && { cg },
|
|
335
|
-
...sm !== void 0 && { sm },
|
|
336
|
-
...b !== void 0 && { b },
|
|
337
|
-
...sw !== void 0 && { sw },
|
|
338
|
-
...md !== void 0 && { md },
|
|
339
|
-
...bn !== void 0 && { bn },
|
|
340
|
-
...fs !== void 0 && { fs },
|
|
327
|
+
...d !== void 0 && { d },
|
|
328
|
+
...clientSessionId && { clientMetaData: { clientSessionId } },
|
|
341
329
|
...req.tcpToChelloUs !== void 0 && { tcpToChelloUs: req.tcpToChelloUs },
|
|
342
330
|
...req.chelloToHandshakeUs !== void 0 && { chelloToHandshakeUs: req.chelloToHandshakeUs },
|
|
343
331
|
...rawTlsSignalsForSession(req)
|
|
@@ -357,6 +345,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
357
345
|
baseImageRounds: env.config.captchas.solved.count,
|
|
358
346
|
puzzleMaxDifficulty: clientRecord.settings.puzzleMaxDifficulty,
|
|
359
347
|
platform: derivePlatform(requestUserAgent, webView, { ...typeof ipInfoMobile === "boolean" && { isMobile: ipInfoMobile } }),
|
|
348
|
+
...d !== void 0 && { d },
|
|
360
349
|
raw: {
|
|
361
350
|
headers: flatHeaders,
|
|
362
351
|
userAgent: requestUserAgent,
|