@prosopo/provider 4.8.1 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +15 -14
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +16 -15
  4. package/CHANGELOG.md +25 -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/cjs/api/admin/apiAdminRoutesProvider.cjs +4 -1
  13. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +31 -1
  14. package/dist/cjs/pairs.cjs +14 -0
  15. package/dist/cjs/tasks/captchaManager.cjs +9 -2
  16. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +62 -0
  17. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +66 -33
  18. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +42 -15
  19. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +42 -15
  20. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +19 -2
  21. package/dist/cjs/tasks/tasks.cjs +1 -0
  22. package/dist/cjs/util/usageCounters.cjs +18 -1
  23. package/dist/cjs/util.cjs +11 -1
  24. package/dist/pairs.d.ts +4 -0
  25. package/dist/pairs.d.ts.map +1 -1
  26. package/dist/pairs.js +15 -1
  27. package/dist/pairs.js.map +1 -1
  28. package/dist/tasks/captchaManager.d.ts +2 -2
  29. package/dist/tasks/captchaManager.d.ts.map +1 -1
  30. package/dist/tasks/captchaManager.js +9 -2
  31. package/dist/tasks/captchaManager.js.map +1 -1
  32. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts +8 -0
  33. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -0
  34. package/dist/tasks/dnsEvent/enrichDnsEvent.js +62 -0
  35. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -0
  36. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  37. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +67 -34
  38. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  39. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  40. package/dist/tasks/powCaptcha/powTasks.js +42 -15
  41. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  42. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  43. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +42 -15
  44. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  45. package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -1
  46. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  47. package/dist/tasks/spam/checkTrafficFilter.js +19 -2
  48. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  49. package/dist/tasks/tasks.d.ts +1 -0
  50. package/dist/tasks/tasks.d.ts.map +1 -1
  51. package/dist/tasks/tasks.js +1 -0
  52. package/dist/tasks/tasks.js.map +1 -1
  53. package/dist/tests/unit/pairs.unit.test.js +79 -1
  54. package/dist/tests/unit/pairs.unit.test.js.map +1 -1
  55. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts +2 -0
  56. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.d.ts.map +1 -0
  57. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js +94 -0
  58. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js.map +1 -0
  59. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +68 -0
  60. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  61. package/dist/util/usageCounters.d.ts +1 -1
  62. package/dist/util/usageCounters.d.ts.map +1 -1
  63. package/dist/util/usageCounters.js +18 -1
  64. package/dist/util/usageCounters.js.map +1 -1
  65. package/dist/util.d.ts +1 -1
  66. package/dist/util.d.ts.map +1 -1
  67. package/dist/util.js +11 -1
  68. package/dist/util.js.map +1 -1
  69. package/package.json +13 -12
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/provider@4.8.1 build:cjs
2
+ > @prosopo/provider@4.9.0 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -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,7 +102,6 @@ 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
@@ -112,24 +111,26 @@ rendering chunks...
112
111
  dist/cjs/tasks/frictionless/routingMachine.cjs  1.86 kB
113
112
  dist/cjs/api/captcha/checkSpamEmail.cjs  2.10 kB
114
113
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs  2.11 kB
115
- dist/cjs/api/admin/apiDnsEventEndpoint.cjs  2.12 kB
116
114
  dist/cjs/tasks/spam/updateSpamEmailDomains.cjs  2.13 kB
115
+ dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs  2.16 kB
116
+ dist/cjs/tasks/spam/checkTrafficFilter.cjs  2.24 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
131
+ dist/cjs/tasks/tasks.cjs  5.35 kB
132
132
  dist/cjs/api/captcha/getImageCaptchaChallenge.cjs  5.53 kB
133
+ dist/cjs/util/usageCounters.cjs  5.80 kB
133
134
  dist/cjs/api/blacklistRequestInspector.cjs  6.05 kB
134
135
  dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs  6.23 kB
135
136
  dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs  6.42 kB
@@ -138,17 +139,17 @@ rendering chunks...
138
139
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 10.10 kB
139
140
  dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 10.19 kB
140
141
  dist/cjs/api/verify.cjs 10.85 kB
141
- dist/cjs/util.cjs 12.22 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.05 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.22 kB
149
+ dist/cjs/tasks/powCaptcha/powTasks.cjs 22.20 kB
150
+ dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 28.30 kB
150
151
  dist/cjs/tasks/detection/decodePayload.cjs 44.26 kB
151
- ✓ built in 750ms
152
+ ✓ built in 754ms
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.0 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 1:25:10 PM - Projects in this build:
5
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
29
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
+ 5:56:48 PM - 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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
35
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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
39
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
+ 5:56:48 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/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
+ 5:56:48 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
47
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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
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
+ 5:56:48 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'
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
+ 5:56:48 PM - 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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
59
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
+ 5:56:48 PM - 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
+ 5:56:48 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/apiExpressRouterFactory.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
63
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
+ 5:56:48 PM - 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
+ 5:56:48 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'
67
67
 
68
- 1:25:10 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
68
+ 5:56:48 PM - 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
+ 5:56:48 PM - 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.0 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.0 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
@@ -107,31 +107,32 @@ rendering chunks...
107
107
  dist/schedulers/updateSpamEmailDomains.js  1.50 kB
108
108
  dist/utils/honeypot/phraseBank.js  1.57 kB
109
109
  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
110
  dist/api/admin/apiClearAllCountersEndpoint.js  1.66 kB
113
111
  dist/api/admin/apiUpdateDecisionMachineEndpoint.js  1.67 kB
114
112
  dist/utils/honeypot/encoders.js  1.71 kB
115
113
  dist/tasks/frictionless/routingMachine.js  1.76 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
117
  dist/api/captcha/checkSpamEmail.js  2.08 kB
118
+ dist/tasks/spam/checkTrafficFilter.js  2.14 kB
119
119
  dist/api/ja4Middleware.js  2.19 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
133
+ dist/tasks/tasks.js  5.15 kB
134
134
  dist/api/captcha/getImageCaptchaChallenge.js  5.41 kB
135
+ dist/util/usageCounters.js  5.69 kB
135
136
  dist/api/blacklistRequestInspector.js  5.80 kB
136
137
  dist/api/captcha/getPoWCaptchaChallenge.js  6.00 kB
137
138
  dist/api/captcha/getPuzzleCaptchaChallenge.js  6.17 kB
@@ -140,17 +141,17 @@ rendering chunks...
140
141
  dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js  9.76 kB
141
142
  dist/tasks/decisionMachine/decisionMachineRunner.js 10.14 kB
142
143
  dist/api/verify.js 10.43 kB
143
- dist/util.js 11.79 kB
144
- dist/tasks/captchaManager.js 15.10 kB
144
+ dist/util.js 12.17 kB
145
145
  dist/tasks/client/clientTasks.js 15.37 kB
146
+ dist/tasks/captchaManager.js 15.41 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 19.91 kB
151
+ dist/tasks/powCaptcha/powTasks.js 21.79 kB
152
+ dist/tasks/imgCaptcha/imgCaptchaTasks.js 27.86 kB
152
153
  dist/tasks/detection/decodePayload.js 44.24 kB
153
- ✓ built in 906ms
154
+ ✓ built in 1.50s
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,30 @@
1
1
  # @prosopo/provider
2
2
 
3
+ ## 4.9.0
4
+ ### Minor Changes
5
+
6
+ - 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.
7
+ - 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.
8
+
9
+ ### Patch Changes
10
+
11
+ - 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.
12
+ - Updated dependencies [2972def]
13
+ - Updated dependencies [bc3813d]
14
+ - Updated dependencies [4d05e3f]
15
+ - @prosopo/types-database@4.9.0
16
+ - @prosopo/types@4.4.0
17
+ - @prosopo/database@3.13.10
18
+ - @prosopo/types-env@2.9.19
19
+ - @prosopo/api@3.4.10
20
+ - @prosopo/api-express-router@3.1.20
21
+ - @prosopo/datasets@3.1.30
22
+ - @prosopo/env@3.5.10
23
+ - @prosopo/ipinfo@0.2.16
24
+ - @prosopo/keyring@2.9.36
25
+ - @prosopo/load-balancer@2.9.12
26
+ - @prosopo/user-access-policy@3.8.1
27
+
3
28
  ## 4.8.1
4
29
  ### Patch Changes
5
30
 
@@ -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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"}
@@ -50,7 +50,10 @@ class ApiAdminRoutesProvider {
50
50
  this.tasks.clientTaskManager
51
51
  ),
52
52
  [types.AdminApiPaths.ToggleMaintenanceMode]: new apiToggleMaintenanceModeEndpoint.ApiToggleMaintenanceModeEndpoint(),
53
- [types.AdminApiPaths.DnsEvent]: new apiDnsEventEndpoint.ApiDnsEventEndpoint(this.tasks.db)
53
+ [types.AdminApiPaths.DnsEvent]: new apiDnsEventEndpoint.ApiDnsEventEndpoint(
54
+ this.tasks.db,
55
+ this.tasks.env.ipInfoService
56
+ )
54
57
  };
55
58
  }
56
59
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const apiRoute = require("@prosopo/api-route");
4
4
  const logger = require("@prosopo/logger");
5
5
  const types = require("@prosopo/types");
6
+ const enrichDnsEvent = require("../../tasks/dnsEvent/enrichDnsEvent.cjs");
6
7
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
7
8
  const dnsEventToFields = (event) => {
8
9
  if (event.kind === "dns") {
@@ -17,8 +18,9 @@ const dnsEventToFields = (event) => {
17
18
  return out;
18
19
  };
19
20
  class ApiDnsEventEndpoint {
20
- constructor(db) {
21
+ constructor(db, ipInfoService) {
21
22
  this.db = db;
23
+ this.ipInfoService = ipInfoService;
22
24
  }
23
25
  async processRequest(args, logger$1) {
24
26
  logger$1 = logger$1 || logger.getLogger("info", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("api/admin/apiDnsEventEndpoint.cjs", document.baseURI).href);
@@ -40,6 +42,7 @@ class ApiDnsEventEndpoint {
40
42
  );
41
43
  if (matched) {
42
44
  stored += 1;
45
+ await this.recomputeDnsAsymmetry(sessionId, logger$1);
43
46
  }
44
47
  } catch (err) {
45
48
  errors += 1;
@@ -62,6 +65,33 @@ class ApiDnsEventEndpoint {
62
65
  getRequestArgsSchema() {
63
66
  return types.DnsEventBatchSchema;
64
67
  }
68
+ async recomputeDnsAsymmetry(sessionId, logger2) {
69
+ if (!this.ipInfoService) return;
70
+ try {
71
+ const session = await this.db.getSessionRecordBySessionId(sessionId);
72
+ if (!session?.dnsEvent) return;
73
+ const enriched = await enrichDnsEvent.enrichDnsEvent(
74
+ session.dnsEvent,
75
+ this.ipInfoService,
76
+ session.ipInfo?.ip
77
+ );
78
+ const dnsAsymmetry = enrichDnsEvent.computeDnsAsymmetry(enriched, session.ipInfo);
79
+ if (dnsAsymmetry > 0) {
80
+ await this.db.updateSessionRecord(sessionId, {
81
+ scoreComponents: {
82
+ ...session.scoreComponents,
83
+ dnsAsymmetry
84
+ }
85
+ });
86
+ }
87
+ } catch (err) {
88
+ logger2.warn(() => ({
89
+ err,
90
+ data: { sessionId },
91
+ msg: "Failed to recompute dnsAsymmetry after DNS event merge"
92
+ }));
93
+ }
94
+ }
65
95
  }
66
96
  exports.ApiDnsEventEndpoint = ApiDnsEventEndpoint;
67
97
  exports.dnsEventToFields = dnsEventToFields;
@@ -11,6 +11,19 @@ const constructPairList = (list) => {
11
11
  }
12
12
  return pairList;
13
13
  };
14
+ const peelCheckboxPrefix = (flat, solutionLengths) => {
15
+ const firstFlat = flat[0];
16
+ const firstLen = solutionLengths[0];
17
+ if (firstFlat === void 0 || firstLen === void 0) {
18
+ return { flat };
19
+ }
20
+ if (firstFlat.length === 2 * firstLen + 2) {
21
+ const checkbox = [util.at(firstFlat, 0), util.at(firstFlat, 1)];
22
+ const stripped = [firstFlat.slice(2), ...flat.slice(1)];
23
+ return { checkbox, flat: stripped };
24
+ }
25
+ return { flat };
26
+ };
14
27
  const containsIdenticalPairs = (pairsLists) => {
15
28
  const set = /* @__PURE__ */ new Set();
16
29
  for (const pairList of pairsLists) {
@@ -25,3 +38,4 @@ const containsIdenticalPairs = (pairsLists) => {
25
38
  };
26
39
  exports.constructPairList = constructPairList;
27
40
  exports.containsIdenticalPairs = containsIdenticalPairs;
41
+ exports.peelCheckboxPrefix = peelCheckboxPrefix;
@@ -5,6 +5,7 @@ const types = require("@prosopo/types");
5
5
  const userAccessPolicy = require("@prosopo/user-access-policy");
6
6
  const blacklistRequestInspector = require("../api/blacklistRequestInspector.cjs");
7
7
  const compositeIpAddress = require("../compositeIpAddress.cjs");
8
+ const enrichDnsEvent = require("./dnsEvent/enrichDnsEvent.cjs");
8
9
  const checkSpamEmail = require("./spam/checkSpamEmail.cjs");
9
10
  const checkTrafficFilter = require("./spam/checkTrafficFilter.cjs");
10
11
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
@@ -400,6 +401,8 @@ class CaptchaManager {
400
401
  * - If the dapp's server passed up the end user's current IP via the
401
402
  * verify call, look that up fresh — it's the "now" IP for filtering
402
403
  * and may differ from the IP that originally requested the captcha.
404
+ * - When the session carries a `dnsEvent`, its `peerIp` and `resolverIp`
405
+ * are enriched and passed alongside the primary IP.
403
406
  * - `blockAbuser` defaults to true so abusive networks are always
404
407
  * blocked even when the site hasn't configured a trafficFilter.
405
408
  * - Returns `{ isBlocked: false }` if every filter flag is off, without
@@ -409,14 +412,18 @@ class CaptchaManager {
409
412
  * updates record / session state differently); this helper just returns
410
413
  * the verdict.
411
414
  */
412
- async resolveTrafficFilterCheck(env, recordIpInfo, trafficFilter, currentIp) {
415
+ async resolveTrafficFilterCheck(env, recordIpInfo, trafficFilter, currentIp, enrichedDnsEvent) {
413
416
  const effective = { blockAbuser: true, ...trafficFilter };
414
417
  const hasAny = Object.values(effective).some((v) => v);
415
418
  if (!hasAny) {
416
419
  return { isBlocked: false };
417
420
  }
418
421
  const ipInfo = currentIp ? await env.ipInfoService.lookup(currentIp) : recordIpInfo;
419
- return checkTrafficFilter.checkTrafficFilter(ipInfo, effective);
422
+ return checkTrafficFilter.checkTrafficFilter(
423
+ ipInfo,
424
+ effective,
425
+ enrichDnsEvent.extraIpInfosFromEnrichedDnsEvent(enrichedDnsEvent)
426
+ );
420
427
  }
421
428
  static canClientSeeScore(tier, score) {
422
429
  return score && tier && tier !== types.Tier.Free;