@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.
Files changed (133) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +20 -19
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +21 -20
  4. package/CHANGELOG.md +107 -0
  5. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -1
  6. package/dist/api/admin/apiAdminRoutesProvider.js +4 -1
  7. package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -1
  8. package/dist/api/admin/apiDnsEventEndpoint.d.ts +4 -1
  9. package/dist/api/admin/apiDnsEventEndpoint.d.ts.map +1 -1
  10. package/dist/api/admin/apiDnsEventEndpoint.js +31 -1
  11. package/dist/api/admin/apiDnsEventEndpoint.js.map +1 -1
  12. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  13. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  14. package/dist/api/blacklistRequestInspector.js +5 -2
  15. package/dist/api/blacklistRequestInspector.js.map +1 -1
  16. package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -1
  17. package/dist/api/captcha/checkSpamEmail.js +9 -1
  18. package/dist/api/captcha/checkSpamEmail.js.map +1 -1
  19. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  20. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +5 -5
  21. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  22. package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
  23. package/dist/api/captcha/getImageCaptchaChallenge.js +10 -1
  24. package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
  25. package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
  26. package/dist/api/captcha/getPoWCaptchaChallenge.js +2 -2
  27. package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
  28. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  29. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +2 -2
  30. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  31. package/dist/api/captcha/maintenanceModeResponses.d.ts +2 -1
  32. package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
  33. package/dist/api/captcha/maintenanceModeResponses.js +10 -0
  34. package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
  35. package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
  36. package/dist/api/captcha/submitImageCaptchaSolution.js +1 -1
  37. package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
  38. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  39. package/dist/api/captcha/submitPoWCaptchaSolution.js +3 -4
  40. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  41. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -1
  42. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +3 -4
  43. package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
  44. package/dist/api/verify.d.ts.map +1 -1
  45. package/dist/api/verify.js +7 -7
  46. package/dist/api/verify.js.map +1 -1
  47. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +4 -1
  48. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +31 -1
  49. package/dist/cjs/api/blacklistRequestInspector.cjs +5 -2
  50. package/dist/cjs/api/captcha/checkSpamEmail.cjs +9 -1
  51. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +5 -5
  52. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +10 -1
  53. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +2 -2
  54. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +2 -2
  55. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +10 -0
  56. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +1 -1
  57. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +3 -4
  58. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +3 -4
  59. package/dist/cjs/api/verify.cjs +7 -7
  60. package/dist/cjs/pairs.cjs +14 -0
  61. package/dist/cjs/tasks/captchaManager.cjs +10 -3
  62. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +62 -0
  63. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +70 -34
  64. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +46 -17
  65. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +46 -17
  66. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +19 -2
  67. package/dist/cjs/tasks/tasks.cjs +1 -0
  68. package/dist/cjs/util/usageCounters.cjs +18 -1
  69. package/dist/cjs/util.cjs +11 -1
  70. package/dist/pairs.d.ts +4 -0
  71. package/dist/pairs.d.ts.map +1 -1
  72. package/dist/pairs.js +15 -1
  73. package/dist/pairs.js.map +1 -1
  74. package/dist/tasks/captchaManager.d.ts +2 -2
  75. package/dist/tasks/captchaManager.d.ts.map +1 -1
  76. package/dist/tasks/captchaManager.js +10 -3
  77. package/dist/tasks/captchaManager.js.map +1 -1
  78. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts +8 -0
  79. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -0
  80. package/dist/tasks/dnsEvent/enrichDnsEvent.js +62 -0
  81. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -0
  82. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  83. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +71 -35
  84. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  85. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  86. package/dist/tasks/powCaptcha/powTasks.js +46 -17
  87. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  88. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  89. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +46 -17
  90. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  91. package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -1
  92. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  93. package/dist/tasks/spam/checkTrafficFilter.js +19 -2
  94. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  95. package/dist/tasks/tasks.d.ts +1 -0
  96. package/dist/tasks/tasks.d.ts.map +1 -1
  97. package/dist/tasks/tasks.js +1 -0
  98. package/dist/tasks/tasks.js.map +1 -1
  99. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +2 -0
  100. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  101. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +1 -0
  102. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  103. package/dist/tests/integration/powCaptcha.integration.test.js +0 -4
  104. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  105. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +1 -0
  106. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  107. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +37 -0
  108. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
  109. package/dist/tests/unit/pairs.unit.test.js +79 -1
  110. package/dist/tests/unit/pairs.unit.test.js.map +1 -1
  111. package/dist/tests/unit/tasks/captchaManager.unit.test.js +29 -0
  112. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  113. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts +2 -0
  114. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts.map +1 -0
  115. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js +94 -0
  116. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js.map +1 -0
  117. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +16 -0
  118. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  119. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +36 -3
  120. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  121. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +8 -1
  122. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
  123. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +68 -0
  124. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  125. package/dist/util/usageCounters.d.ts +1 -1
  126. package/dist/util/usageCounters.d.ts.map +1 -1
  127. package/dist/util/usageCounters.js +18 -1
  128. package/dist/util/usageCounters.js.map +1 -1
  129. package/dist/util.d.ts +1 -1
  130. package/dist/util.d.ts.map +1 -1
  131. package/dist/util.js +11 -1
  132. package/dist/util.js.map +1 -1
  133. package/package.json +13 -12
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/provider@4.8.1 build:cjs
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
- ✓ 91 modules transformed.
56
+ ✓ 92 modules transformed.
57
57
  Entry 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.
58
58
  Entry 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.
59
59
  rendering chunks...
@@ -75,7 +75,6 @@ rendering chunks...
75
75
  dist/cjs/api/captcha/contextAwareValidation.cjs  0.75 kB
76
76
  dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs  0.84 kB
77
77
  dist/cjs/api/validateAddress.cjs  0.84 kB
78
- dist/cjs/pairs.cjs  0.87 kB
79
78
  dist/cjs/utils/normalizeRequestIp.cjs  0.89 kB
80
79
  dist/cjs/api/block.cjs  0.91 kB
81
80
  dist/cjs/tasks/dataset/datasetTasks.cjs  0.96 kB
@@ -93,6 +92,7 @@ rendering chunks...
93
92
  dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs  1.31 kB
94
93
  dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs  1.32 kB
95
94
  dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs  1.34 kB
95
+ dist/cjs/pairs.cjs  1.37 kB
96
96
  dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs  1.46 kB
97
97
  dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs  1.47 kB
98
98
  dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs  1.48 kB
@@ -102,53 +102,54 @@ rendering chunks...
102
102
  dist/cjs/schedulers/updateSpamEmailDomains.cjs  1.65 kB
103
103
  dist/cjs/utils/honeypot/phraseBank.cjs  1.71 kB
104
104
  dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs  1.72 kB
105
- dist/cjs/tasks/spam/checkTrafficFilter.cjs  1.72 kB
106
105
  dist/cjs/api/public.cjs  1.74 kB
107
106
  dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs  1.78 kB
108
107
  dist/cjs/api/admin/apiUpdateDecisionMachineEndpoint.cjs  1.79 kB
109
- dist/cjs/api/captcha/maintenanceModeResponses.cjs  1.81 kB
110
108
  dist/cjs/utils/honeypot/encoders.cjs  1.82 kB
111
109
  dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs  1.84 kB
112
110
  dist/cjs/tasks/frictionless/routingMachine.cjs  1.86 kB
113
- dist/cjs/api/captcha/checkSpamEmail.cjs  2.10 kB
114
111
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs  2.11 kB
115
- dist/cjs/api/admin/apiDnsEventEndpoint.cjs  2.12 kB
116
112
  dist/cjs/tasks/spam/updateSpamEmailDomains.cjs  2.13 kB
113
+ dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs  2.16 kB
114
+ dist/cjs/api/captcha/maintenanceModeResponses.cjs  2.20 kB
115
+ dist/cjs/tasks/spam/checkTrafficFilter.cjs  2.24 kB
116
+ dist/cjs/api/captcha/checkSpamEmail.cjs  2.47 kB
117
117
  dist/cjs/api/captcha.cjs  2.66 kB
118
118
  dist/cjs/api/ja4Middleware.cjs  2.74 kB
119
119
  dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs  2.85 kB
120
120
  dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs  3.03 kB
121
+ dist/cjs/api/admin/apiDnsEventEndpoint.cjs  3.15 kB
121
122
  dist/cjs/api/captcha/submitImageCaptchaSolution.cjs  3.20 kB
122
123
  dist/cjs/utils/dns.cjs  3.38 kB
123
- dist/cjs/api/admin/apiAdminRoutesProvider.cjs  3.56 kB
124
+ dist/cjs/api/admin/apiAdminRoutesProvider.cjs  3.61 kB
124
125
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs  3.78 kB
125
126
  dist/cjs/api/domainMiddleware.cjs  3.91 kB
126
127
  dist/cjs/index.cjs  4.01 kB
127
128
  dist/cjs/services/ipComparison.cjs  4.10 kB
128
129
  dist/cjs/tasks/spam/checkSpamEmail.cjs  4.32 kB
129
130
  dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs  5.20 kB
130
- dist/cjs/tasks/tasks.cjs  5.33 kB
131
- dist/cjs/util/usageCounters.cjs  5.40 kB
132
- dist/cjs/api/captcha/getImageCaptchaChallenge.cjs  5.53 kB
133
- dist/cjs/api/blacklistRequestInspector.cjs  6.05 kB
131
+ dist/cjs/tasks/tasks.cjs  5.35 kB
132
+ dist/cjs/util/usageCounters.cjs  5.80 kB
133
+ dist/cjs/api/captcha/getImageCaptchaChallenge.cjs  6.00 kB
134
+ dist/cjs/api/blacklistRequestInspector.cjs  6.12 kB
134
135
  dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs  6.23 kB
135
136
  dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs  6.42 kB
136
137
  dist/cjs/api/startProviderApi.cjs  9.53 kB
137
138
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs  9.54 kB
138
139
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 10.10 kB
139
140
  dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 10.19 kB
140
- dist/cjs/api/verify.cjs 10.85 kB
141
- dist/cjs/util.cjs 12.22 kB
141
+ dist/cjs/api/verify.cjs 10.86 kB
142
+ dist/cjs/util.cjs 12.59 kB
142
143
  dist/cjs/tasks/client/clientTasks.cjs 15.63 kB
143
- dist/cjs/tasks/captchaManager.cjs 15.75 kB
144
+ dist/cjs/tasks/captchaManager.cjs 16.08 kB
144
145
  dist/cjs/tasks/frictionless/frictionlessTasks.cjs 16.20 kB
145
146
  dist/cjs/tasks/detection/decodeSimd.cjs 18.20 kB
146
- dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 19.08 kB
147
147
  dist/cjs/tasks/detection/decodeBehavior.cjs 19.16 kB
148
- dist/cjs/tasks/powCaptcha/powTasks.cjs 21.06 kB
149
- dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 26.91 kB
148
+ dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 20.40 kB
149
+ dist/cjs/tasks/powCaptcha/powTasks.cjs 22.39 kB
150
+ dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 28.48 kB
150
151
  dist/cjs/tasks/detection/decodePayload.cjs 44.26 kB
151
- ✓ built in 750ms
152
+ ✓ built in 735ms
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.8.1 build:tsc
2
+ > @prosopo/provider@4.9.1 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 1:25:10 PM - Projects in this build:
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
- 1:25:10 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
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
- 1:25:10 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'
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
- 1:25:10 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
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
- 1:25:10 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'
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
- 1:25:10 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/integration/ipInfoPersistence.integration.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
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
- 1:25:10 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'
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
- 1:25:10 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/env.ts' is older than output '../env/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/errorHandler.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/mocks/data/captchas.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
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
- 1:25:10 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
68
+ 11:35:01 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
69
69
 
70
- 1:25:10 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
70
+ 11:35:01 AM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
71
71
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/provider@4.8.1 build
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.8.1 build:cross-env
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
- ✓ 91 modules transformed.
60
+ ✓ 92 modules transformed.
61
61
  rendering chunks...
62
62
  dist/tasks/index.js  0.06 kB
63
63
  dist/api/captcha/getFrictionlessCaptchaChallenge.js  0.12 kB
@@ -76,7 +76,6 @@ rendering chunks...
76
76
  dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js  0.55 kB
77
77
  dist/api/captcha/contextAwareValidation.js  0.63 kB
78
78
  dist/api/validateAddress.js  0.71 kB
79
- dist/pairs.js  0.72 kB
80
79
  dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js  0.74 kB
81
80
  dist/api/block.js  0.78 kB
82
81
  dist/utils/normalizeRequestIp.js  0.79 kB
@@ -95,6 +94,7 @@ rendering chunks...
95
94
  dist/schedulers/getClientList.js  1.10 kB
96
95
  dist/schedulers/setClientEntropy.js  1.13 kB
97
96
  dist/schedulers/captchaScheduler.js  1.16 kB
97
+ dist/pairs.js  1.18 kB
98
98
  dist/api/admin/apiUpdateDetectorKeyEndpoint.js  1.18 kB
99
99
  dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js  1.19 kB
100
100
  dist/api/admin/apiToggleMaintenanceModeEndpoint.js  1.19 kB
@@ -103,54 +103,55 @@ rendering chunks...
103
103
  dist/tasks/dataset/datasetTasksUtils.js  1.36 kB
104
104
  dist/api/admin/apiGetAllDecisionMachinesEndpoint.js  1.43 kB
105
105
  dist/compositeIpAddress.js  1.44 kB
106
- dist/api/captcha/maintenanceModeResponses.js  1.47 kB
107
106
  dist/schedulers/updateSpamEmailDomains.js  1.50 kB
108
107
  dist/utils/honeypot/phraseBank.js  1.57 kB
109
108
  dist/api/public.js  1.60 kB
110
- dist/tasks/spam/checkTrafficFilter.js  1.61 kB
111
- dist/api/admin/apiDnsEventEndpoint.js  1.64 kB
112
109
  dist/api/admin/apiClearAllCountersEndpoint.js  1.66 kB
113
110
  dist/api/admin/apiUpdateDecisionMachineEndpoint.js  1.67 kB
114
111
  dist/utils/honeypot/encoders.js  1.71 kB
115
112
  dist/tasks/frictionless/routingMachine.js  1.76 kB
113
+ dist/api/captcha/maintenanceModeResponses.js  1.78 kB
116
114
  dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js  1.95 kB
115
+ dist/tasks/dnsEvent/enrichDnsEvent.js  1.97 kB
117
116
  dist/tasks/spam/updateSpamEmailDomains.js  2.03 kB
118
- dist/api/captcha/checkSpamEmail.js  2.08 kB
117
+ dist/tasks/spam/checkTrafficFilter.js  2.14 kB
119
118
  dist/api/ja4Middleware.js  2.19 kB
119
+ dist/api/captcha/checkSpamEmail.js  2.39 kB
120
120
  dist/api/captcha.js  2.49 kB
121
121
  dist/utils/dns.js  2.57 kB
122
122
  dist/index.js  2.66 kB
123
+ dist/api/admin/apiDnsEventEndpoint.js  2.66 kB
123
124
  dist/api/captcha/submitPuzzleCaptchaSolution.js  2.78 kB
124
125
  dist/tasks/spam/evaluateEmailSpamRules.js  2.84 kB
125
- dist/api/admin/apiAdminRoutesProvider.js  2.93 kB
126
+ dist/api/admin/apiAdminRoutesProvider.js  2.99 kB
126
127
  dist/api/captcha/submitImageCaptchaSolution.js  3.07 kB
127
128
  dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js  3.59 kB
128
129
  dist/api/domainMiddleware.js  3.71 kB
129
130
  dist/services/ipComparison.js  4.00 kB
130
131
  dist/tasks/spam/checkSpamEmail.js  4.26 kB
131
132
  dist/api/captcha/submitPoWCaptchaSolution.js  5.09 kB
132
- dist/tasks/tasks.js  5.13 kB
133
- dist/util/usageCounters.js  5.29 kB
134
- dist/api/captcha/getImageCaptchaChallenge.js  5.41 kB
135
- dist/api/blacklistRequestInspector.js  5.80 kB
133
+ dist/tasks/tasks.js  5.15 kB
134
+ dist/util/usageCounters.js  5.69 kB
135
+ dist/api/captcha/getImageCaptchaChallenge.js  5.81 kB
136
+ dist/api/blacklistRequestInspector.js  5.87 kB
136
137
  dist/api/captcha/getPoWCaptchaChallenge.js  6.00 kB
137
138
  dist/api/captcha/getPuzzleCaptchaChallenge.js  6.17 kB
138
139
  dist/api/startProviderApi.js  7.65 kB
139
140
  dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js  9.17 kB
140
141
  dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js  9.76 kB
141
142
  dist/tasks/decisionMachine/decisionMachineRunner.js 10.14 kB
142
- dist/api/verify.js 10.43 kB
143
- dist/util.js 11.79 kB
144
- dist/tasks/captchaManager.js 15.10 kB
143
+ dist/api/verify.js 10.44 kB
144
+ dist/util.js 12.17 kB
145
145
  dist/tasks/client/clientTasks.js 15.37 kB
146
+ dist/tasks/captchaManager.js 15.43 kB
146
147
  dist/tasks/frictionless/frictionlessTasks.js 15.89 kB
147
148
  dist/tasks/detection/decodeSimd.js 18.06 kB
148
- dist/tasks/puzzleCaptcha/puzzleTasks.js 18.83 kB
149
149
  dist/tasks/detection/decodeBehavior.js 19.03 kB
150
- dist/tasks/powCaptcha/powTasks.js 20.71 kB
151
- dist/tasks/imgCaptcha/imgCaptchaTasks.js 26.52 kB
150
+ dist/tasks/puzzleCaptcha/puzzleTasks.js 20.10 kB
151
+ dist/tasks/powCaptcha/powTasks.js 21.98 kB
152
+ dist/tasks/imgCaptcha/imgCaptchaTasks.js 28.04 kB
152
153
  dist/tasks/detection/decodePayload.js 44.24 kB
153
- ✓ built in 906ms
154
+ ✓ built in 1.27s
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;CAuC7B;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
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(this.tasks.db)
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":"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"}
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
- constructor(db: IProviderDatabase);
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;AAE7B,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;IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAEnD,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,EACtC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA6CxB,oBAAoB,IAAI,uBAAuB;CAGtD;AAED,OAAO,EAAE,mBAAmB,EAAE,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;AAC5B,OAAO,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAiB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAOpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,KAAe,EACiD,EAAE;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,GAAG,GAA4C;QACpD,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;IACF,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3C,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,mBAAmB;IACxB,YAAoC,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7D,KAAK,CAAC,cAAc,CACnB,IAAsC,EACtC,MAAe;QAEf,MAAM,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;YAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,SAAS;YACV,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CACjD,SAAS,EACT,MAAM,EACN,GAAG,CACH,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,CAAC;gBACb,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,GAAG;oBACH,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;oBACrC,GAAG,EAAE,wCAAwC;iBAC7C,CAAC,CAAC,CAAC;YACL,CAAC;QACF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YACjD,GAAG,EAAE,2BAA2B;SAChC,CAAC,CAAC,CAAC;QAEJ,OAAO;YACN,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SACxB,CAAC;IACH,CAAC;IAEM,oBAAoB;QAC1B,OAAO,mBAAmB,CAAC;IAC5B,CAAC;CACD;AAED,OAAO,EAAE,mBAAmB,EAAE,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;qBAMu0kG,EAAG,SAAS;;;;;;;;;CAH92kG;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
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;IAqEnB,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"}
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
- if (!accessPolicies || accessPolicies.length === 0 || !accessPolicies[0]) {
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 = accessPolicies[0];
166
+ const accessPolicy = enforceable[0];
164
167
  return AccessPolicyType.Block === accessPolicy.type;
165
168
  } catch (err) {
166
169
  logger.error(() => ({