@prosopo/provider 4.8.1 → 4.9.1
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 +20 -19
- package/.turbo/turbo-build$colon$tsc.log +24 -24
- package/.turbo/turbo-build.log +21 -20
- package/CHANGELOG.md +107 -0
- package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -1
- package/dist/api/admin/apiAdminRoutesProvider.js +4 -1
- package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -1
- package/dist/api/admin/apiDnsEventEndpoint.d.ts +4 -1
- package/dist/api/admin/apiDnsEventEndpoint.d.ts.map +1 -1
- package/dist/api/admin/apiDnsEventEndpoint.js +31 -1
- package/dist/api/admin/apiDnsEventEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.js +5 -2
- package/dist/api/blacklistRequestInspector.js.map +1 -1
- package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -1
- package/dist/api/captcha/checkSpamEmail.js +9 -1
- package/dist/api/captcha/checkSpamEmail.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +5 -5
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +10 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +2 -2
- 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 -2
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/maintenanceModeResponses.d.ts +2 -1
- package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
- package/dist/api/captcha/maintenanceModeResponses.js +10 -0
- package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.js +1 -1
- 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 -4
- 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 -4
- package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +7 -7
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +4 -1
- package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +31 -1
- package/dist/cjs/api/blacklistRequestInspector.cjs +5 -2
- package/dist/cjs/api/captcha/checkSpamEmail.cjs +9 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +5 -5
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +10 -1
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +2 -2
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +2 -2
- package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +10 -0
- package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +1 -1
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +3 -4
- package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +3 -4
- package/dist/cjs/api/verify.cjs +7 -7
- package/dist/cjs/pairs.cjs +14 -0
- package/dist/cjs/tasks/captchaManager.cjs +10 -3
- package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +62 -0
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +70 -34
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +46 -17
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +46 -17
- package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +19 -2
- package/dist/cjs/tasks/tasks.cjs +1 -0
- package/dist/cjs/util/usageCounters.cjs +18 -1
- package/dist/cjs/util.cjs +11 -1
- package/dist/pairs.d.ts +4 -0
- package/dist/pairs.d.ts.map +1 -1
- package/dist/pairs.js +15 -1
- package/dist/pairs.js.map +1 -1
- package/dist/tasks/captchaManager.d.ts +2 -2
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +10 -3
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts +8 -0
- package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -0
- package/dist/tasks/dnsEvent/enrichDnsEvent.js +62 -0
- package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -0
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +71 -35
- 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 +46 -17
- 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 +46 -17
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -1
- package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
- package/dist/tasks/spam/checkTrafficFilter.js +19 -2
- package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
- package/dist/tasks/tasks.d.ts +1 -0
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +1 -0
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +2 -0
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js +1 -0
- package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
- package/dist/tests/integration/powCaptcha.integration.test.js +0 -4
- package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +1 -0
- package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +37 -0
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
- package/dist/tests/unit/pairs.unit.test.js +79 -1
- package/dist/tests/unit/pairs.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +29 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js +94 -0
- package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +16 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +36 -3
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +8 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +68 -0
- package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
- package/dist/util/usageCounters.d.ts +1 -1
- package/dist/util/usageCounters.d.ts.map +1 -1
- package/dist/util/usageCounters.js +18 -1
- package/dist/util/usageCounters.js.map +1 -1
- package/dist/util.d.ts +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +11 -1
- package/dist/util.js.map +1 -1
- package/package.json +13 -12
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@4.
|
|
2
|
+
> @prosopo/provider@4.9.1 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -53,7 +53,7 @@ ViteCommonJSConfig: .
|
|
|
53
53
|
Bundle build started
|
|
54
54
|
transforming...
|
|
55
55
|
Build end
|
|
56
|
-
[32m✓[39m
|
|
56
|
+
[32m✓[39m 92 modules transformed.
|
|
57
57
|
[33mEntry module "src/tasks/detection/decodeSimd.js" is using named and default exports together. Consumers of your bundle will have to use `..default` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning.[39m
|
|
58
58
|
[33mEntry module "src/tasks/detection/decodeBehavior.js" is using named and default exports together. Consumers of your bundle will have to use `..default` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning.[39m
|
|
59
59
|
rendering chunks...
|
|
@@ -75,7 +75,6 @@ rendering chunks...
|
|
|
75
75
|
[2mdist/cjs/[22m[36mapi/captcha/contextAwareValidation.cjs [39m[1m[2m 0.75 kB[22m[1m[22m
|
|
76
76
|
[2mdist/cjs/[22m[36mtasks/imgCaptcha/imgCaptchaTasksUtils.cjs [39m[1m[2m 0.84 kB[22m[1m[22m
|
|
77
77
|
[2mdist/cjs/[22m[36mapi/validateAddress.cjs [39m[1m[2m 0.84 kB[22m[1m[22m
|
|
78
|
-
[2mdist/cjs/[22m[36mpairs.cjs [39m[1m[2m 0.87 kB[22m[1m[22m
|
|
79
78
|
[2mdist/cjs/[22m[36mutils/normalizeRequestIp.cjs [39m[1m[2m 0.89 kB[22m[1m[22m
|
|
80
79
|
[2mdist/cjs/[22m[36mapi/block.cjs [39m[1m[2m 0.91 kB[22m[1m[22m
|
|
81
80
|
[2mdist/cjs/[22m[36mtasks/dataset/datasetTasks.cjs [39m[1m[2m 0.96 kB[22m[1m[22m
|
|
@@ -93,6 +92,7 @@ rendering chunks...
|
|
|
93
92
|
[2mdist/cjs/[22m[36mapi/admin/apiUpdateDetectorKeyEndpoint.cjs [39m[1m[2m 1.31 kB[22m[1m[22m
|
|
94
93
|
[2mdist/cjs/[22m[36mapi/admin/apiRemoveDecisionMachineEndpoint.cjs [39m[1m[2m 1.32 kB[22m[1m[22m
|
|
95
94
|
[2mdist/cjs/[22m[36mapi/admin/apiRegisterSiteKeyEndpoint.cjs [39m[1m[2m 1.34 kB[22m[1m[22m
|
|
95
|
+
[2mdist/cjs/[22m[36mpairs.cjs [39m[1m[2m 1.37 kB[22m[1m[22m
|
|
96
96
|
[2mdist/cjs/[22m[36mapi/admin/apiRegisterSiteKeysEndpoint.cjs [39m[1m[2m 1.46 kB[22m[1m[22m
|
|
97
97
|
[2mdist/cjs/[22m[36mapi/admin/apiRemoveSiteKeyEndpoint.cjs [39m[1m[2m 1.47 kB[22m[1m[22m
|
|
98
98
|
[2mdist/cjs/[22m[36mapi/admin/apiRemoveSiteKeysEndpoint.cjs [39m[1m[2m 1.48 kB[22m[1m[22m
|
|
@@ -102,53 +102,54 @@ rendering chunks...
|
|
|
102
102
|
[2mdist/cjs/[22m[36mschedulers/updateSpamEmailDomains.cjs [39m[1m[2m 1.65 kB[22m[1m[22m
|
|
103
103
|
[2mdist/cjs/[22m[36mutils/honeypot/phraseBank.cjs [39m[1m[2m 1.71 kB[22m[1m[22m
|
|
104
104
|
[2mdist/cjs/[22m[36mapi/admin/apiToggleMaintenanceModeEndpoint.cjs [39m[1m[2m 1.72 kB[22m[1m[22m
|
|
105
|
-
[2mdist/cjs/[22m[36mtasks/spam/checkTrafficFilter.cjs [39m[1m[2m 1.72 kB[22m[1m[22m
|
|
106
105
|
[2mdist/cjs/[22m[36mapi/public.cjs [39m[1m[2m 1.74 kB[22m[1m[22m
|
|
107
106
|
[2mdist/cjs/[22m[36mapi/admin/apiClearAllCountersEndpoint.cjs [39m[1m[2m 1.78 kB[22m[1m[22m
|
|
108
107
|
[2mdist/cjs/[22m[36mapi/admin/apiUpdateDecisionMachineEndpoint.cjs [39m[1m[2m 1.79 kB[22m[1m[22m
|
|
109
|
-
[2mdist/cjs/[22m[36mapi/captcha/maintenanceModeResponses.cjs [39m[1m[2m 1.81 kB[22m[1m[22m
|
|
110
108
|
[2mdist/cjs/[22m[36mutils/honeypot/encoders.cjs [39m[1m[2m 1.82 kB[22m[1m[22m
|
|
111
109
|
[2mdist/cjs/[22m[36mapi/admin/apiRemoveDetectorKeyEndpoint.cjs [39m[1m[2m 1.84 kB[22m[1m[22m
|
|
112
110
|
[2mdist/cjs/[22m[36mtasks/frictionless/routingMachine.cjs [39m[1m[2m 1.86 kB[22m[1m[22m
|
|
113
|
-
[2mdist/cjs/[22m[36mapi/captcha/checkSpamEmail.cjs [39m[1m[2m 2.10 kB[22m[1m[22m
|
|
114
111
|
[2mdist/cjs/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs [39m[1m[2m 2.11 kB[22m[1m[22m
|
|
115
|
-
[2mdist/cjs/[22m[36mapi/admin/apiDnsEventEndpoint.cjs [39m[1m[2m 2.12 kB[22m[1m[22m
|
|
116
112
|
[2mdist/cjs/[22m[36mtasks/spam/updateSpamEmailDomains.cjs [39m[1m[2m 2.13 kB[22m[1m[22m
|
|
113
|
+
[2mdist/cjs/[22m[36mtasks/dnsEvent/enrichDnsEvent.cjs [39m[1m[2m 2.16 kB[22m[1m[22m
|
|
114
|
+
[2mdist/cjs/[22m[36mapi/captcha/maintenanceModeResponses.cjs [39m[1m[2m 2.20 kB[22m[1m[22m
|
|
115
|
+
[2mdist/cjs/[22m[36mtasks/spam/checkTrafficFilter.cjs [39m[1m[2m 2.24 kB[22m[1m[22m
|
|
116
|
+
[2mdist/cjs/[22m[36mapi/captcha/checkSpamEmail.cjs [39m[1m[2m 2.47 kB[22m[1m[22m
|
|
117
117
|
[2mdist/cjs/[22m[36mapi/captcha.cjs [39m[1m[2m 2.66 kB[22m[1m[22m
|
|
118
118
|
[2mdist/cjs/[22m[36mapi/ja4Middleware.cjs [39m[1m[2m 2.74 kB[22m[1m[22m
|
|
119
119
|
[2mdist/cjs/[22m[36mapi/captcha/submitPuzzleCaptchaSolution.cjs [39m[1m[2m 2.85 kB[22m[1m[22m
|
|
120
120
|
[2mdist/cjs/[22m[36mtasks/spam/evaluateEmailSpamRules.cjs [39m[1m[2m 3.03 kB[22m[1m[22m
|
|
121
|
+
[2mdist/cjs/[22m[36mapi/admin/apiDnsEventEndpoint.cjs [39m[1m[2m 3.15 kB[22m[1m[22m
|
|
121
122
|
[2mdist/cjs/[22m[36mapi/captcha/submitImageCaptchaSolution.cjs [39m[1m[2m 3.20 kB[22m[1m[22m
|
|
122
123
|
[2mdist/cjs/[22m[36mutils/dns.cjs [39m[1m[2m 3.38 kB[22m[1m[22m
|
|
123
|
-
[2mdist/cjs/[22m[36mapi/admin/apiAdminRoutesProvider.cjs [39m[1m[2m 3.
|
|
124
|
+
[2mdist/cjs/[22m[36mapi/admin/apiAdminRoutesProvider.cjs [39m[1m[2m 3.61 kB[22m[1m[22m
|
|
124
125
|
[2mdist/cjs/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs [39m[1m[2m 3.78 kB[22m[1m[22m
|
|
125
126
|
[2mdist/cjs/[22m[36mapi/domainMiddleware.cjs [39m[1m[2m 3.91 kB[22m[1m[22m
|
|
126
127
|
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m 4.01 kB[22m[1m[22m
|
|
127
128
|
[2mdist/cjs/[22m[36mservices/ipComparison.cjs [39m[1m[2m 4.10 kB[22m[1m[22m
|
|
128
129
|
[2mdist/cjs/[22m[36mtasks/spam/checkSpamEmail.cjs [39m[1m[2m 4.32 kB[22m[1m[22m
|
|
129
130
|
[2mdist/cjs/[22m[36mapi/captcha/submitPoWCaptchaSolution.cjs [39m[1m[2m 5.20 kB[22m[1m[22m
|
|
130
|
-
[2mdist/cjs/[22m[36mtasks/tasks.cjs [39m[1m[2m 5.
|
|
131
|
-
[2mdist/cjs/[22m[36mutil/usageCounters.cjs [39m[1m[2m 5.
|
|
132
|
-
[2mdist/cjs/[22m[36mapi/captcha/getImageCaptchaChallenge.cjs [39m[1m[2m
|
|
133
|
-
[2mdist/cjs/[22m[36mapi/blacklistRequestInspector.cjs [39m[1m[2m 6.
|
|
131
|
+
[2mdist/cjs/[22m[36mtasks/tasks.cjs [39m[1m[2m 5.35 kB[22m[1m[22m
|
|
132
|
+
[2mdist/cjs/[22m[36mutil/usageCounters.cjs [39m[1m[2m 5.80 kB[22m[1m[22m
|
|
133
|
+
[2mdist/cjs/[22m[36mapi/captcha/getImageCaptchaChallenge.cjs [39m[1m[2m 6.00 kB[22m[1m[22m
|
|
134
|
+
[2mdist/cjs/[22m[36mapi/blacklistRequestInspector.cjs [39m[1m[2m 6.12 kB[22m[1m[22m
|
|
134
135
|
[2mdist/cjs/[22m[36mapi/captcha/getPoWCaptchaChallenge.cjs [39m[1m[2m 6.23 kB[22m[1m[22m
|
|
135
136
|
[2mdist/cjs/[22m[36mapi/captcha/getPuzzleCaptchaChallenge.cjs [39m[1m[2m 6.42 kB[22m[1m[22m
|
|
136
137
|
[2mdist/cjs/[22m[36mapi/startProviderApi.cjs [39m[1m[2m 9.53 kB[22m[1m[22m
|
|
137
138
|
[2mdist/cjs/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs [39m[1m[2m 9.54 kB[22m[1m[22m
|
|
138
139
|
[2mdist/cjs/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/handler.cjs [39m[1m[2m10.10 kB[22m[1m[22m
|
|
139
140
|
[2mdist/cjs/[22m[36mtasks/decisionMachine/decisionMachineRunner.cjs [39m[1m[2m10.19 kB[22m[1m[22m
|
|
140
|
-
[2mdist/cjs/[22m[36mapi/verify.cjs [39m[1m[2m10.
|
|
141
|
-
[2mdist/cjs/[22m[36mutil.cjs [39m[1m[2m12.
|
|
141
|
+
[2mdist/cjs/[22m[36mapi/verify.cjs [39m[1m[2m10.86 kB[22m[1m[22m
|
|
142
|
+
[2mdist/cjs/[22m[36mutil.cjs [39m[1m[2m12.59 kB[22m[1m[22m
|
|
142
143
|
[2mdist/cjs/[22m[36mtasks/client/clientTasks.cjs [39m[1m[2m15.63 kB[22m[1m[22m
|
|
143
|
-
[2mdist/cjs/[22m[36mtasks/captchaManager.cjs [39m[1m[
|
|
144
|
+
[2mdist/cjs/[22m[36mtasks/captchaManager.cjs [39m[1m[2m16.08 kB[22m[1m[22m
|
|
144
145
|
[2mdist/cjs/[22m[36mtasks/frictionless/frictionlessTasks.cjs [39m[1m[2m16.20 kB[22m[1m[22m
|
|
145
146
|
[2mdist/cjs/[22m[36mtasks/detection/decodeSimd.cjs [39m[1m[2m18.20 kB[22m[1m[22m
|
|
146
|
-
[2mdist/cjs/[22m[36mtasks/puzzleCaptcha/puzzleTasks.cjs [39m[1m[2m19.08 kB[22m[1m[22m
|
|
147
147
|
[2mdist/cjs/[22m[36mtasks/detection/decodeBehavior.cjs [39m[1m[2m19.16 kB[22m[1m[22m
|
|
148
|
-
[2mdist/cjs/[22m[36mtasks/
|
|
149
|
-
[2mdist/cjs/[22m[36mtasks/
|
|
148
|
+
[2mdist/cjs/[22m[36mtasks/puzzleCaptcha/puzzleTasks.cjs [39m[1m[2m20.40 kB[22m[1m[22m
|
|
149
|
+
[2mdist/cjs/[22m[36mtasks/powCaptcha/powTasks.cjs [39m[1m[2m22.39 kB[22m[1m[22m
|
|
150
|
+
[2mdist/cjs/[22m[36mtasks/imgCaptcha/imgCaptchaTasks.cjs [39m[1m[2m28.48 kB[22m[1m[22m
|
|
150
151
|
[2mdist/cjs/[22m[36mtasks/detection/decodePayload.cjs [39m[1m[2m44.26 kB[22m[1m[22m
|
|
151
|
-
[32m✓ built in
|
|
152
|
+
[32m✓ built in 735ms[39m
|
|
152
153
|
[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
|
|
153
154
|
[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
|
|
154
155
|
[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@4.
|
|
2
|
+
> @prosopo/provider@4.9.1 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
11:35:01 AM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../util/tsconfig.json
|
|
8
8
|
* ../logger/tsconfig.json
|
|
@@ -25,47 +25,47 @@
|
|
|
25
25
|
* ../load-balancer/tsconfig.json
|
|
26
26
|
* tsconfig.json
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
11:35:01 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
11:35:01 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
11:35:01 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
11:35:01 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'
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
11:35:01 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
11:35:01 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'
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
11:35:01 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/procaptcha/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
11:35:01 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/batches.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
11:35:01 AM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/index.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
11:35:01 AM - 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'
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
11:35:01 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
11:35:01 AM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
11:35:01 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'
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
11:35:01 AM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/integration/centralStreamingEnrichment.integration.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
11:35:01 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/pair/decode.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
11:35:01 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'
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
11:35:01 AM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/index.ts' is older than output '../env/tsconfig.tsbuildinfo'
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
11:35:01 AM - 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'
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
11:35:01 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/dataset.unit.test.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
11:35:01 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'
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
11:35:01 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
11:35:01 AM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
|
|
71
71
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@4.
|
|
2
|
+
> @prosopo/provider@4.9.1 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider@4.
|
|
6
|
+
> @prosopo/provider@4.9.1 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -57,7 +57,7 @@ ViteEsmConfig: .
|
|
|
57
57
|
Bundle build started
|
|
58
58
|
transforming...
|
|
59
59
|
Build end
|
|
60
|
-
[32m✓[39m
|
|
60
|
+
[32m✓[39m 92 modules transformed.
|
|
61
61
|
rendering chunks...
|
|
62
62
|
[2mdist/[22m[36mtasks/index.js [39m[1m[2m 0.06 kB[22m[1m[22m
|
|
63
63
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge.js [39m[1m[2m 0.12 kB[22m[1m[22m
|
|
@@ -76,7 +76,6 @@ rendering chunks...
|
|
|
76
76
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js [39m[1m[2m 0.55 kB[22m[1m[22m
|
|
77
77
|
[2mdist/[22m[36mapi/captcha/contextAwareValidation.js [39m[1m[2m 0.63 kB[22m[1m[22m
|
|
78
78
|
[2mdist/[22m[36mapi/validateAddress.js [39m[1m[2m 0.71 kB[22m[1m[22m
|
|
79
|
-
[2mdist/[22m[36mpairs.js [39m[1m[2m 0.72 kB[22m[1m[22m
|
|
80
79
|
[2mdist/[22m[36mtasks/imgCaptcha/imgCaptchaTasksUtils.js [39m[1m[2m 0.74 kB[22m[1m[22m
|
|
81
80
|
[2mdist/[22m[36mapi/block.js [39m[1m[2m 0.78 kB[22m[1m[22m
|
|
82
81
|
[2mdist/[22m[36mutils/normalizeRequestIp.js [39m[1m[2m 0.79 kB[22m[1m[22m
|
|
@@ -95,6 +94,7 @@ rendering chunks...
|
|
|
95
94
|
[2mdist/[22m[36mschedulers/getClientList.js [39m[1m[2m 1.10 kB[22m[1m[22m
|
|
96
95
|
[2mdist/[22m[36mschedulers/setClientEntropy.js [39m[1m[2m 1.13 kB[22m[1m[22m
|
|
97
96
|
[2mdist/[22m[36mschedulers/captchaScheduler.js [39m[1m[2m 1.16 kB[22m[1m[22m
|
|
97
|
+
[2mdist/[22m[36mpairs.js [39m[1m[2m 1.18 kB[22m[1m[22m
|
|
98
98
|
[2mdist/[22m[36mapi/admin/apiUpdateDetectorKeyEndpoint.js [39m[1m[2m 1.18 kB[22m[1m[22m
|
|
99
99
|
[2mdist/[22m[36mapi/admin/apiRemoveAllDecisionMachinesEndpoint.js [39m[1m[2m 1.19 kB[22m[1m[22m
|
|
100
100
|
[2mdist/[22m[36mapi/admin/apiToggleMaintenanceModeEndpoint.js [39m[1m[2m 1.19 kB[22m[1m[22m
|
|
@@ -103,54 +103,55 @@ rendering chunks...
|
|
|
103
103
|
[2mdist/[22m[36mtasks/dataset/datasetTasksUtils.js [39m[1m[2m 1.36 kB[22m[1m[22m
|
|
104
104
|
[2mdist/[22m[36mapi/admin/apiGetAllDecisionMachinesEndpoint.js [39m[1m[2m 1.43 kB[22m[1m[22m
|
|
105
105
|
[2mdist/[22m[36mcompositeIpAddress.js [39m[1m[2m 1.44 kB[22m[1m[22m
|
|
106
|
-
[2mdist/[22m[36mapi/captcha/maintenanceModeResponses.js [39m[1m[2m 1.47 kB[22m[1m[22m
|
|
107
106
|
[2mdist/[22m[36mschedulers/updateSpamEmailDomains.js [39m[1m[2m 1.50 kB[22m[1m[22m
|
|
108
107
|
[2mdist/[22m[36mutils/honeypot/phraseBank.js [39m[1m[2m 1.57 kB[22m[1m[22m
|
|
109
108
|
[2mdist/[22m[36mapi/public.js [39m[1m[2m 1.60 kB[22m[1m[22m
|
|
110
|
-
[2mdist/[22m[36mtasks/spam/checkTrafficFilter.js [39m[1m[2m 1.61 kB[22m[1m[22m
|
|
111
|
-
[2mdist/[22m[36mapi/admin/apiDnsEventEndpoint.js [39m[1m[2m 1.64 kB[22m[1m[22m
|
|
112
109
|
[2mdist/[22m[36mapi/admin/apiClearAllCountersEndpoint.js [39m[1m[2m 1.66 kB[22m[1m[22m
|
|
113
110
|
[2mdist/[22m[36mapi/admin/apiUpdateDecisionMachineEndpoint.js [39m[1m[2m 1.67 kB[22m[1m[22m
|
|
114
111
|
[2mdist/[22m[36mutils/honeypot/encoders.js [39m[1m[2m 1.71 kB[22m[1m[22m
|
|
115
112
|
[2mdist/[22m[36mtasks/frictionless/routingMachine.js [39m[1m[2m 1.76 kB[22m[1m[22m
|
|
113
|
+
[2mdist/[22m[36mapi/captcha/maintenanceModeResponses.js [39m[1m[2m 1.78 kB[22m[1m[22m
|
|
116
114
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js [39m[1m[2m 1.95 kB[22m[1m[22m
|
|
115
|
+
[2mdist/[22m[36mtasks/dnsEvent/enrichDnsEvent.js [39m[1m[2m 1.97 kB[22m[1m[22m
|
|
117
116
|
[2mdist/[22m[36mtasks/spam/updateSpamEmailDomains.js [39m[1m[2m 2.03 kB[22m[1m[22m
|
|
118
|
-
[2mdist/[22m[
|
|
117
|
+
[2mdist/[22m[36mtasks/spam/checkTrafficFilter.js [39m[1m[2m 2.14 kB[22m[1m[22m
|
|
119
118
|
[2mdist/[22m[36mapi/ja4Middleware.js [39m[1m[2m 2.19 kB[22m[1m[22m
|
|
119
|
+
[2mdist/[22m[36mapi/captcha/checkSpamEmail.js [39m[1m[2m 2.39 kB[22m[1m[22m
|
|
120
120
|
[2mdist/[22m[36mapi/captcha.js [39m[1m[2m 2.49 kB[22m[1m[22m
|
|
121
121
|
[2mdist/[22m[36mutils/dns.js [39m[1m[2m 2.57 kB[22m[1m[22m
|
|
122
122
|
[2mdist/[22m[36mindex.js [39m[1m[2m 2.66 kB[22m[1m[22m
|
|
123
|
+
[2mdist/[22m[36mapi/admin/apiDnsEventEndpoint.js [39m[1m[2m 2.66 kB[22m[1m[22m
|
|
123
124
|
[2mdist/[22m[36mapi/captcha/submitPuzzleCaptchaSolution.js [39m[1m[2m 2.78 kB[22m[1m[22m
|
|
124
125
|
[2mdist/[22m[36mtasks/spam/evaluateEmailSpamRules.js [39m[1m[2m 2.84 kB[22m[1m[22m
|
|
125
|
-
[2mdist/[22m[36mapi/admin/apiAdminRoutesProvider.js [39m[1m[2m 2.
|
|
126
|
+
[2mdist/[22m[36mapi/admin/apiAdminRoutesProvider.js [39m[1m[2m 2.99 kB[22m[1m[22m
|
|
126
127
|
[2mdist/[22m[36mapi/captcha/submitImageCaptchaSolution.js [39m[1m[2m 3.07 kB[22m[1m[22m
|
|
127
128
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js [39m[1m[2m 3.59 kB[22m[1m[22m
|
|
128
129
|
[2mdist/[22m[36mapi/domainMiddleware.js [39m[1m[2m 3.71 kB[22m[1m[22m
|
|
129
130
|
[2mdist/[22m[36mservices/ipComparison.js [39m[1m[2m 4.00 kB[22m[1m[22m
|
|
130
131
|
[2mdist/[22m[36mtasks/spam/checkSpamEmail.js [39m[1m[2m 4.26 kB[22m[1m[22m
|
|
131
132
|
[2mdist/[22m[36mapi/captcha/submitPoWCaptchaSolution.js [39m[1m[2m 5.09 kB[22m[1m[22m
|
|
132
|
-
[2mdist/[22m[36mtasks/tasks.js [39m[1m[2m 5.
|
|
133
|
-
[2mdist/[22m[36mutil/usageCounters.js [39m[1m[2m 5.
|
|
134
|
-
[2mdist/[22m[36mapi/captcha/getImageCaptchaChallenge.js [39m[1m[2m 5.
|
|
135
|
-
[2mdist/[22m[36mapi/blacklistRequestInspector.js [39m[1m[2m 5.
|
|
133
|
+
[2mdist/[22m[36mtasks/tasks.js [39m[1m[2m 5.15 kB[22m[1m[22m
|
|
134
|
+
[2mdist/[22m[36mutil/usageCounters.js [39m[1m[2m 5.69 kB[22m[1m[22m
|
|
135
|
+
[2mdist/[22m[36mapi/captcha/getImageCaptchaChallenge.js [39m[1m[2m 5.81 kB[22m[1m[22m
|
|
136
|
+
[2mdist/[22m[36mapi/blacklistRequestInspector.js [39m[1m[2m 5.87 kB[22m[1m[22m
|
|
136
137
|
[2mdist/[22m[36mapi/captcha/getPoWCaptchaChallenge.js [39m[1m[2m 6.00 kB[22m[1m[22m
|
|
137
138
|
[2mdist/[22m[36mapi/captcha/getPuzzleCaptchaChallenge.js [39m[1m[2m 6.17 kB[22m[1m[22m
|
|
138
139
|
[2mdist/[22m[36mapi/startProviderApi.js [39m[1m[2m 7.65 kB[22m[1m[22m
|
|
139
140
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js [39m[1m[2m 9.17 kB[22m[1m[22m
|
|
140
141
|
[2mdist/[22m[36mapi/captcha/getFrictionlessCaptchaChallenge/handler.js [39m[1m[2m 9.76 kB[22m[1m[22m
|
|
141
142
|
[2mdist/[22m[36mtasks/decisionMachine/decisionMachineRunner.js [39m[1m[2m10.14 kB[22m[1m[22m
|
|
142
|
-
[2mdist/[22m[36mapi/verify.js [39m[1m[2m10.
|
|
143
|
-
[2mdist/[22m[36mutil.js [39m[1m[
|
|
144
|
-
[2mdist/[22m[36mtasks/captchaManager.js [39m[1m[2m15.10 kB[22m[1m[22m
|
|
143
|
+
[2mdist/[22m[36mapi/verify.js [39m[1m[2m10.44 kB[22m[1m[22m
|
|
144
|
+
[2mdist/[22m[36mutil.js [39m[1m[2m12.17 kB[22m[1m[22m
|
|
145
145
|
[2mdist/[22m[36mtasks/client/clientTasks.js [39m[1m[2m15.37 kB[22m[1m[22m
|
|
146
|
+
[2mdist/[22m[36mtasks/captchaManager.js [39m[1m[2m15.43 kB[22m[1m[22m
|
|
146
147
|
[2mdist/[22m[36mtasks/frictionless/frictionlessTasks.js [39m[1m[2m15.89 kB[22m[1m[22m
|
|
147
148
|
[2mdist/[22m[36mtasks/detection/decodeSimd.js [39m[1m[2m18.06 kB[22m[1m[22m
|
|
148
|
-
[2mdist/[22m[36mtasks/puzzleCaptcha/puzzleTasks.js [39m[1m[2m18.83 kB[22m[1m[22m
|
|
149
149
|
[2mdist/[22m[36mtasks/detection/decodeBehavior.js [39m[1m[2m19.03 kB[22m[1m[22m
|
|
150
|
-
[2mdist/[22m[36mtasks/
|
|
151
|
-
[2mdist/[22m[36mtasks/
|
|
150
|
+
[2mdist/[22m[36mtasks/puzzleCaptcha/puzzleTasks.js [39m[1m[2m20.10 kB[22m[1m[22m
|
|
151
|
+
[2mdist/[22m[36mtasks/powCaptcha/powTasks.js [39m[1m[2m21.98 kB[22m[1m[22m
|
|
152
|
+
[2mdist/[22m[36mtasks/imgCaptcha/imgCaptchaTasks.js [39m[1m[2m28.04 kB[22m[1m[22m
|
|
152
153
|
[2mdist/[22m[36mtasks/detection/decodePayload.js [39m[1m[2m44.24 kB[22m[1m[22m
|
|
153
|
-
[32m✓ built in
|
|
154
|
+
[32m✓ built in 1.27s[39m
|
|
154
155
|
[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
|
|
155
156
|
[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
|
|
156
157
|
[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,112 @@
|
|
|
1
1
|
# @prosopo/provider
|
|
2
2
|
|
|
3
|
+
## 4.9.1
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- 4da8941: Add `deferToVerify` flag on `AccessPolicy` so a Block policy can skip the request-time `blockMiddleware` (no 401 at the captcha endpoint) and fire instead at the verify step. The behaviour mirrors the existing coords-rule deferral pattern: today the middleware blanks out coords from the userScope, so coords-only rules can only ever match in the verify path. `deferToVerify` is the explicit version of that for other signals (ja4Hash, headersHash, etc.) — useful when you want the attacker to pay the captcha-solving cost and the dApp to silently receive `{verified: false}` instead of the bot's frontend seeing a 401.
|
|
7
|
+
|
|
8
|
+
Wiring:
|
|
9
|
+
|
|
10
|
+
- `BlacklistRequestInspector.shouldAbortRequest` filters out matching policies that have `deferToVerify` before picking the top hit. Those policies never short-circuit the middleware.
|
|
11
|
+
- `CaptchaManager.findHardBlockPolicy` widens its matcher: a Block policy now counts as a hard block when it has either no `captchaType` (existing behaviour) **or** `deferToVerify === true`. The check is invoked from `imgCaptchaTasks.dappUserSolution`, `powTasks.serverVerifyPowCaptcha`, and `puzzleTasks.verifyPuzzleCaptchaSolution`, so the deferral applies to all three captcha types.
|
|
12
|
+
- Persistence: `deferToVerify` lands on the mongo `accessPolicySchema` (Boolean) and the zod `accessPolicyInput` (with a string→boolean preprocess so the Redis round-trip works).
|
|
13
|
+
|
|
14
|
+
Motivating use case: a set of spoofed-JA4 hard-block rules pushed 2026-06-12. Marking those `deferToVerify: true` would still reject the attacker at verify but force them to complete N image captcha rounds and surface behavioural data on the commitment record before the rejection — useful for both telemetry and operator-side friction.
|
|
15
|
+
- f69724f: Expose `ipInfo` to the verify-phase decision machine. The frictionless DM already gets the full `IPInfoResponse`; the verify-phase DM was only receiving `countryCode`, so rules that need `isDatacenter`, `isVPN`, `isAbuser`, `asnNumber` etc. couldn't run at submission time.
|
|
16
|
+
|
|
17
|
+
`DecisionMachineInput` now carries an optional `ipInfo` field (alongside `countryCode`, which is kept for backwards compatibility). The three verify-phase call sites — `powTasks`, `puzzleTasks`, `imgCaptchaTasks` — forward `challengeRecord.ipInfo` / `solution.ipInfo` into the input.
|
|
18
|
+
|
|
19
|
+
This unblocks rules like:
|
|
20
|
+
```
|
|
21
|
+
if (input.behavioralDataPacked &&
|
|
22
|
+
!input.behavioralDataPacked.c1.length &&
|
|
23
|
+
!input.behavioralDataPacked.c2.length &&
|
|
24
|
+
!input.behavioralDataPacked.c3.length &&
|
|
25
|
+
input.ipInfo?.isDatacenter) return Deny;
|
|
26
|
+
```
|
|
27
|
+
which catches the datacenter-class bots (Sparkle, Versatel, OVH) that submit empty `behavioralDataPacked` — observed at 100% empty-bDP across a 21-row Sparkle sample, versus 1–3% in genuine traffic.
|
|
28
|
+
- 3973078: Track every lifecycle timestamp on every captcha type, and switch the dapp-verify recency check from issuance→verify to **submit→verify** with the window sourced from per-client settings.
|
|
29
|
+
|
|
30
|
+
### Lifecycle timestamps
|
|
31
|
+
|
|
32
|
+
`StoredCaptcha` (the base shared by PoW, Puzzle, and Image/UserCommitment) gains three new fields:
|
|
33
|
+
|
|
34
|
+
- `submittedAtTimestamp` — set once on the first user-submission write, never overwritten.
|
|
35
|
+
- `verifiedAtTimestamp` — set once when the dapp first calls /verify, never overwritten.
|
|
36
|
+
- `failedAtTimestamp` — set once on the first non-approved terminal state, never overwritten.
|
|
37
|
+
|
|
38
|
+
`lastUpdatedTimestamp` keeps its "last write of any kind" meaning. The new fields use `$ifNull` in aggregation-pipeline updates so the stamp lands only on the first transition — concurrent or repeat writes are no-ops on the lifecycle stamps.
|
|
39
|
+
|
|
40
|
+
### Submit→verify window
|
|
41
|
+
|
|
42
|
+
The dapp-verify recency check used to be `now - challengeTimestamp <= timeout`. The window was issuance→verify, which gave bots room to stockpile pre-solved solutions and redeem them many seconds (sometimes minutes) later from the time they reached the provider.
|
|
43
|
+
|
|
44
|
+
The check is now `now - challengeRecord.submittedAtTimestamp <= clientSettings.verifiedTimeout`. The window measures from the moment the user's solution actually arrived. Combined with the new lifecycle fields, this measurably tightens the stockpile attack surface — the data showed 1564 records / 21% on Twickets where a correct PoW was submitted but the dapp never verified, p99 issuance→submit of 31s on that cohort, and records up to 1.26 min.
|
|
45
|
+
|
|
46
|
+
### Settings move
|
|
47
|
+
|
|
48
|
+
`verifiedTimeout` moves to `ClientSettingsSchema` (per-client, operator-set via the portal). Default stays at 120000ms for back-compat; auto-submit dapps (Twickets et al.) should set it to ~10000ms.
|
|
49
|
+
|
|
50
|
+
Removed from request bodies entirely:
|
|
51
|
+
|
|
52
|
+
- `ServerPowCaptchaVerifyRequestBody`
|
|
53
|
+
- `ServerPuzzleCaptchaVerifyRequestBody`
|
|
54
|
+
- `SubmitPowCaptchaSolutionBody`
|
|
55
|
+
- `SubmitPuzzleCaptchaSolutionBody`
|
|
56
|
+
|
|
57
|
+
The client field was client-controlled and unsigned — any caller could raise the recency ceiling. It's now server-determined.
|
|
58
|
+
|
|
59
|
+
`ProviderApiInterface.submitPow/PuzzleCaptchaSolution` lose their `timeout` parameter (no longer forwarded). The verify wrappers keep their `recencyLimit` parameter for caller back-compat but the value is no longer transmitted; server reads from the client settings instead.
|
|
60
|
+
|
|
61
|
+
### Migration
|
|
62
|
+
|
|
63
|
+
Pre-PR records with `userSubmitted=true` but no `submittedAtTimestamp` will fail the new recency check. The submit window is short (120s default verifiedTimeout) so the migration cliff is naturally bounded — records in flight at deploy time expire within ~2 minutes.
|
|
64
|
+
|
|
65
|
+
348 provider unit tests + 28 database tests pass.
|
|
66
|
+
- 73b9f92: Run the `getMaintenanceMode()` short-circuit before constructing `Tasks` in every captcha and verify handler. The `Tasks` constructor calls `env.getDb()`, which throws synchronously when `env.db` is undefined (the maintenance-mode case), so the existing short-circuits were unreachable and the provider was throwing `db not setup! Please call isReady() first` on every request the moment maintenance mode was toggled on. Also adds a maintenance-mode bypass to `getImageCaptchaChallenge` (empty-captchas response, mirroring the existing `submitImageCaptchaSolution` shape) and `checkSpamEmail` (`isSpam: false`) so those endpoints stay usable while Mongo is unavailable.
|
|
67
|
+
- Updated dependencies [70ef67a]
|
|
68
|
+
- Updated dependencies [4da8941]
|
|
69
|
+
- Updated dependencies [f69724f]
|
|
70
|
+
- Updated dependencies [4226c59]
|
|
71
|
+
- Updated dependencies [3973078]
|
|
72
|
+
- @prosopo/user-access-policy@3.9.0
|
|
73
|
+
- @prosopo/types@4.4.1
|
|
74
|
+
- @prosopo/database@3.13.11
|
|
75
|
+
- @prosopo/types-database@4.9.1
|
|
76
|
+
- @prosopo/api@3.4.11
|
|
77
|
+
- @prosopo/api-express-router@3.1.21
|
|
78
|
+
- @prosopo/datasets@3.1.31
|
|
79
|
+
- @prosopo/env@3.5.11
|
|
80
|
+
- @prosopo/ipinfo@0.2.17
|
|
81
|
+
- @prosopo/keyring@2.9.37
|
|
82
|
+
- @prosopo/load-balancer@2.9.13
|
|
83
|
+
- @prosopo/types-env@2.9.20
|
|
84
|
+
|
|
85
|
+
## 4.9.0
|
|
86
|
+
### Minor Changes
|
|
87
|
+
|
|
88
|
+
- bc3813d: Surface dnsEvent observations across the verify and frictionless flows. Each verify path now enriches the session's dnsEvent IPs once and passes the result to the traffic filter, decision machine, IP validation, and usage counters. Adds `scoreComponents.dnsAsymmetry` (Zod + TS interface + mongoose) computed from resolver / peer ipInfo plus path validity, with the score patched onto the session at DNS event ingest time so it weights subsequent reads. Adds `CounterDimension.peerIp` for rate-limit keys keyed on the dnsEvent peer IP.
|
|
89
|
+
- f305c37: Extend `checkTrafficFilter` to accept an optional `extraIpInfos` list and apply the same per-rule checks across additional IPs. Each verify path threads `session.dnsEvent` IPs through `resolveTrafficFilterCheck` so its peer / resolver enrichments are evaluated alongside the primary client IP.
|
|
90
|
+
|
|
91
|
+
### Patch Changes
|
|
92
|
+
|
|
93
|
+
- 2d66d8e: Image-captcha widget now forwards the trusted checkbox click `(clientX, clientY)` through `manager.start(x, y)`. `Manager.submit` embeds the pair as a 2-number prefix on the first captcha's solution salt. Provider peels the prefix via length math against `solution.length` (no protocol version flag — older clients keep working unchanged) and prepends it as the first entry of `pairs`, which is written to `UserCommitment.coords`. Adds `peelCheckboxPrefix` helper in `pairs.ts` with round-trip unit tests.
|
|
94
|
+
- Updated dependencies [2972def]
|
|
95
|
+
- Updated dependencies [bc3813d]
|
|
96
|
+
- Updated dependencies [4d05e3f]
|
|
97
|
+
- @prosopo/types-database@4.9.0
|
|
98
|
+
- @prosopo/types@4.4.0
|
|
99
|
+
- @prosopo/database@3.13.10
|
|
100
|
+
- @prosopo/types-env@2.9.19
|
|
101
|
+
- @prosopo/api@3.4.10
|
|
102
|
+
- @prosopo/api-express-router@3.1.20
|
|
103
|
+
- @prosopo/datasets@3.1.30
|
|
104
|
+
- @prosopo/env@3.5.10
|
|
105
|
+
- @prosopo/ipinfo@0.2.16
|
|
106
|
+
- @prosopo/keyring@2.9.36
|
|
107
|
+
- @prosopo/load-balancer@2.9.12
|
|
108
|
+
- @prosopo/user-access-policy@3.8.1
|
|
109
|
+
|
|
3
110
|
## 4.8.1
|
|
4
111
|
### Patch Changes
|
|
5
112
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiAdminRoutesProvider.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiAdminRoutesProvider.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAgBlD,cAAM,sBAAuB,YAAW,iBAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAEzC,SAAS,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"apiAdminRoutesProvider.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiAdminRoutesProvider.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAgBlD,cAAM,sBAAuB,YAAW,iBAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAEzC,SAAS,IAAI,SAAS;CA0C7B;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -48,7 +48,10 @@ class ApiAdminRoutesProvider {
|
|
|
48
48
|
this.tasks.clientTaskManager
|
|
49
49
|
),
|
|
50
50
|
[AdminApiPaths.ToggleMaintenanceMode]: new ApiToggleMaintenanceModeEndpoint(),
|
|
51
|
-
[AdminApiPaths.DnsEvent]: new ApiDnsEventEndpoint(
|
|
51
|
+
[AdminApiPaths.DnsEvent]: new ApiDnsEventEndpoint(
|
|
52
|
+
this.tasks.db,
|
|
53
|
+
this.tasks.env.ipInfoService
|
|
54
|
+
)
|
|
52
55
|
};
|
|
53
56
|
}
|
|
54
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiAdminRoutesProvider.js","sourceRoot":"","sources":["../../../src/api/admin/apiAdminRoutesProvider.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,sBAAsB;IAC3B,YAAoC,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE7C,SAAS;QACf,OAAO;YACN,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,IAAI,0BAA0B,CAC9D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,2BAA2B,CAChE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,4BAA4B,CAClE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,4BAA4B,CAClE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnE,CAAC,aAAa,CAAC,sBAAsB,CAAC,EACrC,IAAI,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACpE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,IAAI,6BAA6B,CACpE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnE,CAAC,aAAa,CAAC,yBAAyB,CAAC,EACxC,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACvE,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,2BAA2B,CAChE,IAAI,CAAC,KAAK,CAAC,aAAa,CACxB;YACD,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,IAAI,wBAAwB,CAC1D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,IAAI,yBAAyB,CAC5D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,EAAE;YACvC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,mBAAmB,
|
|
1
|
+
{"version":3,"file":"apiAdminRoutesProvider.js","sourceRoot":"","sources":["../../../src/api/admin/apiAdminRoutesProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ApiEndpoint, type ApiEndpointResponse } from "@prosopo/api-route";
|
|
2
|
+
import type { IIpInfoService } from "@prosopo/ipinfo";
|
|
2
3
|
import { type Logger } from "@prosopo/logger";
|
|
3
4
|
import { type DnsEvent, DnsEventBatchSchema } from "@prosopo/types";
|
|
4
5
|
import type { IProviderDatabase } from "@prosopo/types-database";
|
|
@@ -11,9 +12,11 @@ export declare const dnsEventToFields: (event: DnsEvent) => {
|
|
|
11
12
|
};
|
|
12
13
|
declare class ApiDnsEventEndpoint implements ApiEndpoint<DnsEventBatchSchemaType> {
|
|
13
14
|
private readonly db;
|
|
14
|
-
|
|
15
|
+
private readonly ipInfoService?;
|
|
16
|
+
constructor(db: IProviderDatabase, ipInfoService?: IIpInfoService | undefined);
|
|
15
17
|
processRequest(args: z.infer<DnsEventBatchSchemaType>, logger?: Logger): Promise<ApiEndpointResponse>;
|
|
16
18
|
getRequestArgsSchema(): DnsEventBatchSchemaType;
|
|
19
|
+
private recomputeDnsAsymmetry;
|
|
17
20
|
}
|
|
18
21
|
export { ApiDnsEventEndpoint };
|
|
19
22
|
//# sourceMappingURL=apiDnsEventEndpoint.d.ts.map
|
|
@@ -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,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
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,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,KAAK,uBAAuB,GAAG,OAAO,mBAAmB,CAAC;AAG1D,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;IA8CxB,oBAAoB,IAAI,uBAAuB;YAIxC,qBAAqB;CA8BnC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApiEndpointResponseStatus } from "@prosopo/api-route";
|
|
2
2
|
import { getLogger } from "@prosopo/logger";
|
|
3
3
|
import { DnsEventBatchSchema } from "@prosopo/types";
|
|
4
|
+
import { enrichDnsEvent, computeDnsAsymmetry } from "../../tasks/dnsEvent/enrichDnsEvent.js";
|
|
4
5
|
const dnsEventToFields = (event) => {
|
|
5
6
|
if (event.kind === "dns") {
|
|
6
7
|
return { resolverIp: event.src_ip };
|
|
@@ -14,8 +15,9 @@ const dnsEventToFields = (event) => {
|
|
|
14
15
|
return out;
|
|
15
16
|
};
|
|
16
17
|
class ApiDnsEventEndpoint {
|
|
17
|
-
constructor(db) {
|
|
18
|
+
constructor(db, ipInfoService) {
|
|
18
19
|
this.db = db;
|
|
20
|
+
this.ipInfoService = ipInfoService;
|
|
19
21
|
}
|
|
20
22
|
async processRequest(args, logger) {
|
|
21
23
|
logger = logger || getLogger("info", import.meta.url);
|
|
@@ -37,6 +39,7 @@ class ApiDnsEventEndpoint {
|
|
|
37
39
|
);
|
|
38
40
|
if (matched) {
|
|
39
41
|
stored += 1;
|
|
42
|
+
await this.recomputeDnsAsymmetry(sessionId, logger);
|
|
40
43
|
}
|
|
41
44
|
} catch (err) {
|
|
42
45
|
errors += 1;
|
|
@@ -59,6 +62,33 @@ class ApiDnsEventEndpoint {
|
|
|
59
62
|
getRequestArgsSchema() {
|
|
60
63
|
return DnsEventBatchSchema;
|
|
61
64
|
}
|
|
65
|
+
async recomputeDnsAsymmetry(sessionId, logger) {
|
|
66
|
+
if (!this.ipInfoService) return;
|
|
67
|
+
try {
|
|
68
|
+
const session = await this.db.getSessionRecordBySessionId(sessionId);
|
|
69
|
+
if (!session?.dnsEvent) return;
|
|
70
|
+
const enriched = await enrichDnsEvent(
|
|
71
|
+
session.dnsEvent,
|
|
72
|
+
this.ipInfoService,
|
|
73
|
+
session.ipInfo?.ip
|
|
74
|
+
);
|
|
75
|
+
const dnsAsymmetry = computeDnsAsymmetry(enriched, session.ipInfo);
|
|
76
|
+
if (dnsAsymmetry > 0) {
|
|
77
|
+
await this.db.updateSessionRecord(sessionId, {
|
|
78
|
+
scoreComponents: {
|
|
79
|
+
...session.scoreComponents,
|
|
80
|
+
dnsAsymmetry
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
} catch (err) {
|
|
85
|
+
logger.warn(() => ({
|
|
86
|
+
err,
|
|
87
|
+
data: { sessionId },
|
|
88
|
+
msg: "Failed to recompute dnsAsymmetry after DNS event merge"
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
62
92
|
}
|
|
63
93
|
export {
|
|
64
94
|
ApiDnsEventEndpoint,
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"apiDnsEventEndpoint.js","sourceRoot":"","sources":["../../../src/api/admin/apiDnsEventEndpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiRemoveDetectorKeyEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiRemoveDetectorKeyEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,KAAK,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAElE,cAAM,4BACL,YAAW,WAAW,CAAC,yBAAyB,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAElE,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACxC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA0BxB,oBAAoB;
|
|
1
|
+
{"version":3,"file":"apiRemoveDetectorKeyEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiRemoveDetectorKeyEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,KAAK,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAElE,cAAM,4BACL,YAAW,WAAW,CAAC,yBAAyB,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAElE,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACxC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA0BxB,oBAAoB;qBAM6vkG,EAAG,SAAS;;;;;;;;;CAHpykG;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blacklistRequestInspector.d.ts","sourceRoot":"","sources":["../../src/api/blacklistRequestInspector.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,eAAe,EAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,mBAAmB,mBACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACjC,MAAM,OACP,MAAM,SACJ,MAAM,aACF,MAAM,WACR,MAAM,gBACD,MAAM,QACd,MAAM,KACV,IAAI,CACN,eAAe,EACb,QAAQ,GACR,SAAS,GACT,WAAW,GACX,IAAI,GACJ,UAAU,GACV,QAAQ,GACR,aAAa,GACb,KAAK,CAgBP,CAAC;AA+FF,eAAO,MAAM,kBAAkB,UACvB,UAAU,EAAE,WACV,SAAS,mBACD,MAAM,GAAG,SAAS,KACjC,UAAU,EAWT,CAAC;AAaL,eAAO,MAAM,wBAAwB,2BACZ,kBAAkB,aAC/B,SAAS,GAAG,eAAe,aAC3B,MAAM,KACf,OAAO,CAAC,UAAU,EAAE,CAqBtB,CAAC;AAEF,qBAAa,yBAAyB;IAEpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAD1B,sBAAsB,EAAE,kBAAkB,EAC1C,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAGpD,2BAA2B,CACvC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC;IAyBH,kBAAkB,CAC9B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"blacklistRequestInspector.d.ts","sourceRoot":"","sources":["../../src/api/blacklistRequestInspector.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,eAAe,EAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,mBAAmB,mBACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACjC,MAAM,OACP,MAAM,SACJ,MAAM,aACF,MAAM,WACR,MAAM,gBACD,MAAM,QACd,MAAM,KACV,IAAI,CACN,eAAe,EACb,QAAQ,GACR,SAAS,GACT,WAAW,GACX,IAAI,GACJ,UAAU,GACV,QAAQ,GACR,aAAa,GACb,KAAK,CAgBP,CAAC;AA+FF,eAAO,MAAM,kBAAkB,UACvB,UAAU,EAAE,WACV,SAAS,mBACD,MAAM,GAAG,SAAS,KACjC,UAAU,EAWT,CAAC;AAaL,eAAO,MAAM,wBAAwB,2BACZ,kBAAkB,aAC/B,SAAS,GAAG,eAAe,aAC3B,MAAM,KACf,OAAO,CAAC,UAAU,EAAE,CAqBtB,CAAC;AAEF,qBAAa,yBAAyB;IAEpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAD1B,sBAAsB,EAAE,kBAAkB,EAC1C,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAGpD,2BAA2B,CACvC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC;IAyBH,kBAAkB,CAC9B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC;IAyEnB,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInD,SAAS,CAAC,qBAAqB,CAC9B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC;QACF,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B;IAcD,SAAS,CAAC,cAAc,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,GACT,OAAO;CAGV"}
|
|
@@ -157,10 +157,13 @@ class BlacklistRequestInspector {
|
|
|
157
157
|
),
|
|
158
158
|
clientId
|
|
159
159
|
);
|
|
160
|
-
|
|
160
|
+
const enforceable = (accessPolicies ?? []).filter(
|
|
161
|
+
(p) => !p.deferToVerify
|
|
162
|
+
);
|
|
163
|
+
if (enforceable.length === 0 || !enforceable[0]) {
|
|
161
164
|
return false;
|
|
162
165
|
}
|
|
163
|
-
const accessPolicy =
|
|
166
|
+
const accessPolicy = enforceable[0];
|
|
164
167
|
return AccessPolicyType.Block === accessPolicy.type;
|
|
165
168
|
} catch (err) {
|
|
166
169
|
logger.error(() => ({
|