@prosopo/provider 5.10.0 → 5.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +14 -13
  2. package/.turbo/turbo-build$colon$tsc.log +27 -27
  3. package/.turbo/turbo-build.log +15 -14
  4. package/CHANGELOG.md +126 -0
  5. package/dist/api/captcha/assignDetectorBundle.d.ts.map +1 -1
  6. package/dist/api/captcha/assignDetectorBundle.js +27 -9
  7. package/dist/api/captcha/assignDetectorBundle.js.map +1 -1
  8. package/dist/api/captcha/assignDetectorBundle.unit.test.d.ts +2 -0
  9. package/dist/api/captcha/assignDetectorBundle.unit.test.d.ts.map +1 -0
  10. package/dist/api/captcha/assignDetectorBundle.unit.test.js +153 -0
  11. package/dist/api/captcha/assignDetectorBundle.unit.test.js.map +1 -0
  12. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  13. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +6 -2
  14. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  15. package/dist/api/captcha/submitPoWCaptchaSolution.js +51 -11
  16. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  17. package/dist/cjs/api/captcha/assignDetectorBundle.cjs +26 -8
  18. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +6 -2
  19. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +51 -11
  20. package/dist/cjs/services/ipComparison.cjs +4 -2
  21. package/dist/cjs/tasks/captchaManager.cjs +34 -3
  22. package/dist/cjs/tasks/detection/assignSecret.cjs +45 -0
  23. package/dist/cjs/tasks/detection/bundlePool.cjs +11 -7
  24. package/dist/cjs/tasks/detection/decodePayload.cjs +1147 -988
  25. package/dist/cjs/tasks/detection/decodePayload.js +1 -2
  26. package/dist/cjs/tasks/detection/getBotScore.cjs +30 -1
  27. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +95 -82
  28. package/dist/cjs/util.cjs +4 -9
  29. package/dist/services/ipComparison.d.ts.map +1 -1
  30. package/dist/services/ipComparison.js +4 -2
  31. package/dist/services/ipComparison.js.map +1 -1
  32. package/dist/tasks/captchaManager.d.ts +1 -0
  33. package/dist/tasks/captchaManager.d.ts.map +1 -1
  34. package/dist/tasks/captchaManager.js +34 -3
  35. package/dist/tasks/captchaManager.js.map +1 -1
  36. package/dist/tasks/detection/assignSecret.d.ts +8 -0
  37. package/dist/tasks/detection/assignSecret.d.ts.map +1 -0
  38. package/dist/tasks/detection/assignSecret.js +45 -0
  39. package/dist/tasks/detection/assignSecret.js.map +1 -0
  40. package/dist/tasks/detection/bundlePool.d.ts +2 -1
  41. package/dist/tasks/detection/bundlePool.d.ts.map +1 -1
  42. package/dist/tasks/detection/bundlePool.js +11 -8
  43. package/dist/tasks/detection/bundlePool.js.map +1 -1
  44. package/dist/tasks/detection/bundlePool.test.js +4 -3
  45. package/dist/tasks/detection/bundlePool.test.js.map +1 -1
  46. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  47. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  48. package/dist/tasks/detection/decodePayload.js +1 -2
  49. package/dist/tasks/detection/decodePayload.js.map +1 -1
  50. package/dist/tasks/detection/getBotScore.d.ts +11 -0
  51. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  52. package/dist/tasks/detection/getBotScore.js +32 -4
  53. package/dist/tasks/detection/getBotScore.js.map +1 -1
  54. package/dist/tasks/frictionless/frictionlessTasks.d.ts +7 -3
  55. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  56. package/dist/tasks/frictionless/frictionlessTasks.js +95 -82
  57. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  58. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +26 -2
  59. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
  60. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +49 -38
  61. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
  62. package/dist/tests/unit/services/ipComparison.unit.test.js +27 -0
  63. package/dist/tests/unit/services/ipComparison.unit.test.js.map +1 -1
  64. package/dist/tests/unit/tasks/captchaManager.unit.test.js +46 -0
  65. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  66. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +44 -1
  67. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
  68. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +4 -0
  69. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -1
  70. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +78 -2
  71. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  72. package/dist/tests/unit/util.deepValidateIpAddress.rules.unit.test.d.ts +2 -0
  73. package/dist/tests/unit/util.deepValidateIpAddress.rules.unit.test.d.ts.map +1 -0
  74. package/dist/tests/unit/util.deepValidateIpAddress.rules.unit.test.js +115 -0
  75. package/dist/tests/unit/util.deepValidateIpAddress.rules.unit.test.js.map +1 -0
  76. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +70 -0
  77. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +1 -1
  78. package/dist/util.d.ts.map +1 -1
  79. package/dist/util.js +4 -9
  80. package/dist/util.js.map +1 -1
  81. package/package.json +16 -16
  82. package/dist/api/captcha/assignDetectorBundle.test.d.ts +0 -2
  83. package/dist/api/captcha/assignDetectorBundle.test.d.ts.map +0 -1
  84. package/dist/api/captcha/assignDetectorBundle.test.js +0 -71
  85. package/dist/api/captcha/assignDetectorBundle.test.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/provider@5.10.0 build:cjs
2
+ > @prosopo/provider@5.10.2 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -59,7 +59,7 @@ ViteCommonJSConfig: .
59
59
  vite v8.1.5 building ssr environment for production...
60
60
  Bundle build started
61
61
  
62
- ✓ 110 modules transformed.
62
+ ✓ 111 modules transformed.
63
63
  rendering chunks...
64
64
  computing gzip size...
65
65
  dist/cjs/tasks/index.cjs 0.08 kB │ gzip: 0.07 kB
@@ -99,8 +99,8 @@ dist/cjs/tasks/puzzle/backgroundBuffer.cjs 1
99
99
  dist/cjs/pairs.cjs 1.39 kB │ gzip: 0.60 kB
100
100
  dist/cjs/tasks/dataset/datasetTasksUtils.cjs 1.42 kB │ gzip: 0.49 kB
101
101
  dist/cjs/utils/clientMetaData.cjs 1.48 kB │ gzip: 0.72 kB
102
+ dist/cjs/tasks/detection/assignSecret.cjs 1.48 kB │ gzip: 0.75 kB
102
103
  dist/cjs/compositeIpAddress.cjs 1.55 kB │ gzip: 0.57 kB
103
- dist/cjs/tasks/detection/getBotScore.cjs 1.58 kB │ gzip: 0.55 kB
104
104
  dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs 1.59 kB │ gzip: 0.60 kB
105
105
  dist/cjs/schedulers/updateSpamEmailDomains.cjs 1.64 kB │ gzip: 0.62 kB
106
106
  dist/cjs/utils/honeypot/encoders.cjs 1.66 kB │ gzip: 0.67 kB
@@ -115,7 +115,6 @@ dist/cjs/utils/honeypot/phraseBank.cjs 1
115
115
  dist/cjs/api/handshakeTimingMiddleware.cjs 1.88 kB │ gzip: 0.71 kB
116
116
  dist/cjs/api/captcha/signedAssetsResolver.cjs 1.96 kB │ gzip: 0.96 kB
117
117
  dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs 2.01 kB │ gzip: 0.78 kB
118
- dist/cjs/api/captcha/assignDetectorBundle.cjs 2.03 kB │ gzip: 0.86 kB
119
118
  dist/cjs/tasks/frictionless/ipMatch.cjs 2.03 kB │ gzip: 1.03 kB
120
119
  dist/cjs/tasks/spam/updateSpamEmailDomains.cjs 2.12 kB │ gzip: 0.85 kB
121
120
  dist/cjs/tasks/frictionless/routingMachine.cjs 2.17 kB │ gzip: 0.91 kB
@@ -124,20 +123,22 @@ dist/cjs/tasks/puzzle/stratifiedSampler.cjs 2
124
123
  dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs 2.21 kB │ gzip: 1.10 kB
125
124
  dist/cjs/tasks/captchaTypeSelection.cjs 2.44 kB │ gzip: 1.04 kB
126
125
  dist/cjs/api/admin/apiDnsEventEndpoint.cjs 2.59 kB │ gzip: 1.00 kB
126
+ dist/cjs/tasks/detection/getBotScore.cjs 2.63 kB │ gzip: 0.96 kB
127
127
  dist/cjs/utils/dns.cjs 2.66 kB │ gzip: 1.02 kB
128
128
  dist/cjs/api/forwardVerify.cjs 2.66 kB │ gzip: 1.12 kB
129
129
  dist/cjs/tasks/puzzle/puzzleDifficulty.cjs 2.66 kB │ gzip: 1.10 kB
130
130
  dist/cjs/api/public.cjs 2.67 kB │ gzip: 1.05 kB
131
131
  dist/cjs/api/captcha/checkSpamEmail.cjs 2.73 kB │ gzip: 0.95 kB
132
132
  dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs 2.77 kB │ gzip: 0.99 kB
133
+ dist/cjs/api/captcha/assignDetectorBundle.cjs 2.90 kB │ gzip: 1.15 kB
133
134
  dist/cjs/api/captcha/maintenanceModeResponses.cjs 2.91 kB │ gzip: 0.77 kB
134
135
  dist/cjs/api/captcha/submitImageCaptchaSolution.cjs 2.93 kB │ gzip: 1.03 kB
135
136
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs 3.66 kB │ gzip: 1.35 kB
136
137
  dist/cjs/api/admin/apiAdminRoutesProvider.cjs 3.67 kB │ gzip: 0.62 kB
137
138
  dist/cjs/api/rawTlsSignalsMiddleware.cjs 3.84 kB │ gzip: 1.16 kB
138
139
  dist/cjs/api/domainMiddleware.cjs 3.85 kB │ gzip: 1.26 kB
139
- dist/cjs/services/ipComparison.cjs 3.98 kB │ gzip: 1.20 kB
140
140
  dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs 4.03 kB │ gzip: 1.60 kB
141
+ dist/cjs/services/ipComparison.cjs 4.06 kB │ gzip: 1.22 kB
141
142
  dist/cjs/tasks/spam/checkSpamEmail.cjs 4.14 kB │ gzip: 1.14 kB
142
143
  dist/cjs/api/captcha/trafficFilterRequestTime.cjs 4.17 kB │ gzip: 1.53 kB
143
144
  dist/cjs/tasks/puzzle/puzzleRenderer.cjs 4.25 kB │ gzip: 1.51 kB
@@ -154,26 +155,26 @@ dist/cjs/api/captcha/getImageCaptchaChallenge.cjs 7
154
155
  dist/cjs/tasks/spam/checkTrafficFilter.cjs 7.47 kB │ gzip: 2.48 kB
155
156
  dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs 7.56 kB │ gzip: 2.03 kB
156
157
  dist/cjs/api/metrics.cjs 7.96 kB │ gzip: 2.23 kB
157
- dist/cjs/tasks/detection/bundlePool.cjs 8.72 kB │ gzip: 3.26 kB
158
- dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 8.93 kB │ gzip: 2.68 kB
158
+ dist/cjs/tasks/detection/bundlePool.cjs 8.89 kB │ gzip: 3.29 kB
159
+ dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs 9.54 kB │ gzip: 2.81 kB
159
160
  dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs 10.33 kB │ gzip: 1.82 kB
160
161
  dist/cjs/api/startProviderApi.cjs 11.62 kB │ gzip: 3.70 kB
161
162
  dist/cjs/tasks/client/clientTasks.cjs 11.73 kB │ gzip: 3.04 kB
162
163
  dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs 12.32 kB │ gzip: 3.81 kB
163
164
  dist/cjs/api/blacklistRequestInspector.cjs 13.10 kB │ gzip: 4.41 kB
164
- dist/cjs/util.cjs 13.33 kB │ gzip: 3.24 kB
165
+ dist/cjs/util.cjs 13.15 kB │ gzip: 3.26 kB
165
166
  dist/cjs/api/verify.cjs 16.79 kB │ gzip: 2.93 kB
166
- dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 20.51 kB │ gzip: 4.70 kB
167
- dist/cjs/tasks/captchaManager.cjs 22.43 kB │ gzip: 6.38 kB
168
- dist/cjs/tasks/frictionless/frictionlessTasks.cjs 24.02 kB │ gzip: 6.40 kB
167
+ dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs 20.65 kB │ gzip: 4.74 kB
168
+ dist/cjs/tasks/frictionless/frictionlessTasks.cjs 20.69 kB │ gzip: 5.49 kB
169
+ dist/cjs/tasks/captchaManager.cjs 23.52 kB │ gzip: 6.78 kB
169
170
  dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs 24.03 kB │ gzip: 5.15 kB
170
171
  dist/cjs/tasks/powCaptcha/powTasks.cjs 24.84 kB │ gzip: 5.97 kB
171
172
  dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs 27.96 kB │ gzip: 6.37 kB
172
173
  dist/cjs/tasks/detection/decodeBehavior.cjs 32.24 kB │ gzip: 10.32 kB
173
174
  dist/cjs/tasks/detection/decodeSimd.cjs 36.03 kB │ gzip: 11.96 kB
174
- dist/cjs/tasks/detection/decodePayload.cjs 49.79 kB │ gzip: 16.98 kB
175
+ dist/cjs/tasks/detection/decodePayload.cjs 53.96 kB │ gzip: 18.08 kB
175
176
 
176
- ✓ built in 195ms
177
+ ✓ built in 173ms
177
178
  [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
178
179
  [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
179
180
  [copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodeSimd.js
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/provider@5.10.0 build:tsc
2
+ > @prosopo/provider@5.10.2 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 7:32:36 PM - Projects in this build:
5
+ 5:39:46 AM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../util/tsconfig.json
8
8
  * ../logger/tsconfig.json
@@ -28,53 +28,53 @@
28
28
  * ../web-bot-auth/tsconfig.json
29
29
  * tsconfig.json
30
30
 
31
- 7:32:36 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'
31
+ 5:39:46 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'
32
32
 
33
- 7:32:36 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/util.ts' is older than output '../util/tsconfig.tsbuildinfo'
33
+ 5:39:46 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
34
34
 
35
- 7:32:37 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../logger/tsconfig.tsbuildinfo'
35
+ 5:39:46 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
36
36
 
37
- 7:32:37 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/tests/apiRoute.unit.test.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
37
+ 5:39:46 AM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
38
38
 
39
- 7:32:37 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
39
+ 5:39:46 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
40
40
 
41
- 7:32:37 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'
41
+ 5:39:46 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
42
42
 
43
- 7:32:37 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
43
+ 5:39:46 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
44
44
 
45
- 7:32:37 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/objectUtils.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
45
+ 5:39:46 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
46
46
 
47
- 7:32:37 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
47
+ 5:39:46 AM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/types.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
48
48
 
49
- 7:32:37 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'
49
+ 5:39:46 AM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
50
50
 
51
- 7:32:37 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/tsconfig.tsbuildinfo'
51
+ 5:39:46 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
52
52
 
53
- 7:32:37 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'
53
+ 5:39:47 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'
54
54
 
55
- 7:32:37 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types.test-d.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
55
+ 5:39:47 AM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
56
56
 
57
- 7:32:37 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
57
+ 5:39:47 AM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/mongoGlobalSetup.ts' is older than output '../database/tsconfig.tsbuildinfo'
58
58
 
59
- 7:32:37 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
59
+ 5:39:47 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
60
60
 
61
- 7:32:37 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'
61
+ 5:39:47 AM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
62
62
 
63
- 7:32:37 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/index.ts' is older than output '../env/tsconfig.tsbuildinfo'
63
+ 5:39:47 AM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/tests/env.maintenance.unit.test.ts' is older than output '../env/tsconfig.tsbuildinfo'
64
64
 
65
- 7:32:37 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'
65
+ 5:39:47 AM - 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'
66
66
 
67
- 7:32:37 PM - Project '../captcha-severity/tsconfig.json' is up to date because newest input '../captcha-severity/src/index.test.ts' is older than output '../captcha-severity/tsconfig.tsbuildinfo'
67
+ 5:39:47 AM - Project '../captcha-severity/tsconfig.json' is up to date because newest input '../captcha-severity/src/index.test.ts' is older than output '../captcha-severity/tsconfig.tsbuildinfo'
68
68
 
69
- 7:32:37 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'
69
+ 5:39:47 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
70
70
 
71
- 7:32:37 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'
71
+ 5:39:47 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/tests/productionProviderList.unit.test.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
72
72
 
73
- 7:32:37 PM - Project '../puzzle-assets/tsconfig.json' is up to date because newest input '../puzzle-assets/src/background.ts' is older than output '../puzzle-assets/tsconfig.tsbuildinfo'
73
+ 5:39:47 AM - Project '../puzzle-assets/tsconfig.json' is up to date because newest input '../puzzle-assets/src/background.ts' is older than output '../puzzle-assets/tsconfig.tsbuildinfo'
74
74
 
75
- 7:32:37 PM - Project '../web-bot-auth/tsconfig.json' is up to date because newest input '../web-bot-auth/src/base64.ts' is older than output '../web-bot-auth/tsconfig.tsbuildinfo'
75
+ 5:39:47 AM - Project '../web-bot-auth/tsconfig.json' is up to date because newest input '../web-bot-auth/src/base64.ts' is older than output '../web-bot-auth/tsconfig.tsbuildinfo'
76
76
 
77
- 7:32:37 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
77
+ 5:39:47 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
78
78
 
79
- 7:32:37 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
79
+ 5:39:47 AM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
80
80
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/provider@5.10.0 build
2
+ > @prosopo/provider@5.10.2 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/provider@5.10.0 build:cross-env
6
+ > @prosopo/provider@5.10.2 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -63,7 +63,7 @@ ViteEsmConfig: .
63
63
  vite v8.1.5 building ssr environment for production...
64
64
  Bundle build started
65
65
  
66
- ✓ 110 modules transformed.
66
+ ✓ 111 modules transformed.
67
67
  rendering chunks...
68
68
  computing gzip size...
69
69
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
@@ -103,10 +103,10 @@ dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js 1.27 k
103
103
  dist/api/admin/apiRemoveDecisionMachineEndpoint.js 1.29 kB │ gzip: 0.51 kB
104
104
  dist/tasks/dataset/datasetTasksUtils.js 1.30 kB │ gzip: 0.48 kB
105
105
  dist/compositeIpAddress.js 1.36 kB │ gzip: 0.55 kB
106
+ dist/tasks/detection/assignSecret.js 1.42 kB │ gzip: 0.74 kB
106
107
  dist/utils/clientMetaData.js 1.42 kB │ gzip: 0.72 kB
107
108
  dist/api/admin/apiGetAllDecisionMachinesEndpoint.js 1.48 kB │ gzip: 0.57 kB
108
109
  dist/schedulers/updateSpamEmailDomains.js 1.52 kB │ gzip: 0.60 kB
109
- dist/tasks/detection/getBotScore.js 1.53 kB │ gzip: 0.54 kB
110
110
  dist/api/admin/apiReplaceDetectorPoolEndpoint.js 1.57 kB │ gzip: 0.68 kB
111
111
  dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js 1.57 kB │ gzip: 0.69 kB
112
112
  dist/api/ja4Middleware.js 1.59 kB │ gzip: 0.75 kB
@@ -120,7 +120,6 @@ dist/api/handshakeTimingMiddleware.js 1.75 k
120
120
  dist/tasks/spam/updateSpamEmailDomains.js 1.87 kB │ gzip: 0.77 kB
121
121
  dist/api/captcha/signedAssetsResolver.js 1.89 kB │ gzip: 0.94 kB
122
122
  dist/api/admin/apiClearAllCountersEndpoint.js 1.89 kB │ gzip: 0.76 kB
123
- dist/api/captcha/assignDetectorBundle.js 1.90 kB │ gzip: 0.84 kB
124
123
  dist/tasks/frictionless/ipMatch.js 1.98 kB │ gzip: 1.02 kB
125
124
  dist/migrations/frictionlessLadder.js 2.12 kB │ gzip: 0.93 kB
126
125
  dist/tasks/puzzle/stratifiedSampler.js 2.14 kB │ gzip: 1.07 kB
@@ -133,9 +132,11 @@ dist/utils/dns.js 2.36 k
133
132
  dist/api/admin/apiDnsEventEndpoint.js 2.43 kB │ gzip: 0.96 kB
134
133
  dist/api/captcha/checkSpamEmail.js 2.47 kB │ gzip: 0.91 kB
135
134
  dist/tasks/puzzle/puzzleDifficulty.js 2.50 kB │ gzip: 1.09 kB
135
+ dist/tasks/detection/getBotScore.js 2.55 kB │ gzip: 0.95 kB
136
136
  dist/api/captcha/submitPuzzleCaptchaSolution.js 2.55 kB │ gzip: 0.96 kB
137
137
  dist/api/forwardVerify.js 2.59 kB │ gzip: 1.10 kB
138
138
  dist/api/captcha/submitImageCaptchaSolution.js 2.59 kB │ gzip: 1.00 kB
139
+ dist/api/captcha/assignDetectorBundle.js 2.69 kB │ gzip: 1.11 kB
139
140
  dist/api/admin/apiAdminRoutesProvider.js 2.78 kB │ gzip: 0.55 kB
140
141
  dist/index.js 2.92 kB │ gzip: 0.80 kB
141
142
  dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.39 kB │ gzip: 1.32 kB
@@ -144,7 +145,7 @@ dist/api/rawTlsSignalsMiddleware.js 3.69 k
144
145
  dist/tasks/spam/evaluateEmailSpamRules.js 3.84 kB │ gzip: 1.59 kB
145
146
  dist/tasks/puzzle/puzzleRenderer.js 3.91 kB │ gzip: 1.49 kB
146
147
  dist/api/captcha/trafficFilterRequestTime.js 3.94 kB │ gzip: 1.51 kB
147
- dist/services/ipComparison.js 3.96 kB │ gzip: 1.19 kB
148
+ dist/services/ipComparison.js 4.04 kB │ gzip: 1.21 kB
148
149
  dist/api/captcha.js 4.05 kB │ gzip: 1.31 kB
149
150
  dist/tasks/spam/checkSpamEmail.js 4.12 kB │ gzip: 1.12 kB
150
151
  dist/api/hardBlockVerdictCache.js 4.14 kB │ gzip: 1.69 kB
@@ -158,26 +159,26 @@ dist/api/captcha/getPuzzleCaptchaChallenge.js 6.84 k
158
159
  dist/api/healthzGeo.js 6.86 kB │ gzip: 2.68 kB
159
160
  dist/tasks/spam/checkTrafficFilter.js 7.16 kB │ gzip: 2.45 kB
160
161
  dist/api/metrics.js 7.36 kB │ gzip: 2.19 kB
161
- dist/tasks/detection/bundlePool.js 8.30 kB │ gzip: 3.21 kB
162
- dist/api/captcha/submitPoWCaptchaSolution.js 8.41 kB │ gzip: 2.63 kB
162
+ dist/tasks/detection/bundlePool.js 8.46 kB │ gzip: 3.25 kB
163
+ dist/api/captcha/submitPoWCaptchaSolution.js 9.02 kB │ gzip: 2.76 kB
163
164
  dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 9.36 kB │ gzip: 1.80 kB
164
165
  dist/api/startProviderApi.js 9.93 kB │ gzip: 3.42 kB
165
166
  dist/tasks/client/clientTasks.js 11.27 kB │ gzip: 3.00 kB
166
167
  dist/tasks/decisionMachine/decisionMachineRunner.js 11.93 kB │ gzip: 3.75 kB
167
168
  dist/api/blacklistRequestInspector.js 12.46 kB │ gzip: 4.37 kB
168
- dist/util.js 12.65 kB │ gzip: 3.18 kB
169
+ dist/util.js 12.47 kB │ gzip: 3.20 kB
169
170
  dist/api/verify.js 15.12 kB │ gzip: 2.82 kB
170
- dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 18.99 kB │ gzip: 4.59 kB
171
- dist/tasks/captchaManager.js 21.92 kB │ gzip: 6.32 kB
171
+ dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 19.13 kB │ gzip: 4.63 kB
172
+ dist/tasks/frictionless/frictionlessTasks.js 20.12 kB │ gzip: 5.46 kB
172
173
  dist/tasks/puzzleCaptcha/puzzleTasks.js 22.62 kB │ gzip: 5.10 kB
173
- dist/tasks/frictionless/frictionlessTasks.js 23.44 kB │ gzip: 6.36 kB
174
+ dist/tasks/captchaManager.js 23.01 kB │ gzip: 6.72 kB
174
175
  dist/tasks/powCaptcha/powTasks.js 23.47 kB │ gzip: 5.93 kB
175
176
  dist/tasks/imgCaptcha/imgCaptchaTasks.js 26.44 kB │ gzip: 6.31 kB
176
177
  dist/tasks/detection/decodeBehavior.js 32.26 kB │ gzip: 10.34 kB
177
178
  dist/tasks/detection/decodeSimd.js 36.06 kB │ gzip: 12.00 kB
178
- dist/tasks/detection/decodePayload.js 49.69 kB │ gzip: 16.96 kB
179
+ dist/tasks/detection/decodePayload.js 53.87 kB │ gzip: 18.06 kB
179
180
 
180
- ✓ built in 196ms
181
+ ✓ built in 170ms
181
182
  [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
182
183
  [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
183
184
  [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,131 @@
1
1
  # @prosopo/provider
2
2
 
3
+ ## 5.10.2
4
+ ### Patch Changes
5
+
6
+ - 98ab052: Serve a repeat caller the same detector bundle.
7
+
8
+ `/detector/assign` picked a bundle at random on every request. The provider now
9
+ records which bundle it served a caller and returns that one for a bounded
10
+ period, so a returning visitor gets a stable bundle instead of a fresh draw each
11
+ time. Any bundle performs identically, so this is not visible to users. If Redis
12
+ cannot answer, assign falls back to the previous behaviour rather than failing.
13
+
14
+ Also fixes the `assignDetectorBundle` tests, which were failing on main and had
15
+ gone unnoticed because the file was named `*.test.ts` while CI only runs
16
+ `*.unit.test.ts`. Renamed so it runs, and replaced the mock that
17
+ `clearAllMocks` was silently emptying.
18
+ - 028a158: Add optional field `dz` to detector payload
19
+ - 1f0598c: Derive the detector bundle for a caller instead of storing it.
20
+
21
+ `assignDetectorBundle` now picks the bundle with a keyed hash of the caller's
22
+ address, using a per-provider secret kept on the pool volume. Same caller, same
23
+ bundle, with nothing recorded and nothing to expire — which also means the
24
+ result no longer changes when the cache is unavailable.
25
+
26
+ Replaces the Redis client → bundle entry added in the previous patch, so
27
+ `bindDetectorBundleToClient` and its TTL constant are gone.
28
+ - 3958046: Keep a detector bundle binding for as long as its payload is accepted
29
+
30
+ The `detectorSessionId → bundleId` binding held the only key able to read a
31
+ detector payload, and expired after 60 seconds. The frictionless flow accepts a
32
+ payload for ten minutes (`DEFAULT_MAX_TIMESTAMP_AGE`). For nine of those ten
33
+ minutes the provider would therefore accept a payload it had already discarded
34
+ the means to decrypt: `resolveDecryptAttempts` returns an empty key list, the
35
+ decrypt loop never runs, the score is forced to 1 and the caller is challenged
36
+ despite nothing having been measured about them.
37
+
38
+ Sixty seconds is ample for the assign → submit gap in the normal case — it is
39
+ around 1.5s — but it only has to stall once to be lost, and a backgrounded
40
+ mobile tab is enough.
41
+
42
+ The two values are now one value. `DEFAULT_MAX_TIMESTAMP_AGE` moves from a
43
+ private constant in `frictionlessTasks` to `@prosopo/types`, the only package
44
+ both the provider and the database can see, and `DETECTOR_BUNDLE_TTL_SECONDS` is
45
+ derived from it instead of being written down a second time. A unit test pins
46
+ the relationship so they cannot drift apart again.
47
+
48
+ The TTL cannot now outlive the payload-age check, so this does not widen the
49
+ window in which any payload is usable. Bundle selection is unaffected: which
50
+ bundle a caller receives is derived from their IP and a server secret, not from
51
+ this binding's lifetime.
52
+ - 0cdf286: Log why a detector bundle could not be resolved
53
+
54
+ `resolveBundleByDetectorSession` returns undefined on three unrelated
55
+ conditions: the caller sent no detector session id, the
56
+ `detectorSessionId → bundleId` Redis binding was absent or had expired, or the
57
+ binding named a bundle this provider no longer holds in its pool.
58
+
59
+ All three surface downstream as the same thing — `resolveDecryptAttempts`
60
+ hands back an empty key list, the decrypt loop never runs, and the score is
61
+ forced to 1 with `DECRYPTION_FAILED`, so the caller is challenged despite
62
+ nothing having been measured about it. They need different fixes, but nothing
63
+ recorded which one had happened: the only line carrying that detail logged at
64
+ `debug`, which is below the level aggregated log search runs at, and it could
65
+ not have separated them anyway because `resolveDecryptAttempts` omits the
66
+ `bundleId` whenever the attempt list is empty.
67
+
68
+ Adds a single `info` line, `"Detector bundle not resolved"`, carrying a `cause`
69
+ of `noDetectorSession`, `noBinding` or `bundleNotInPool`, plus the `bundleId`
70
+ in the last case. It is emitted only on the failure path, so there is no cost
71
+ on the hot path, and the pool lookup now happens after the binding check rather
72
+ than before it.
73
+
74
+ No behavioural change — the same conditions return undefined as before.
75
+ - ea4e6aa: Persist the optional `cg` and `sm` session fields, which were not being written.
76
+ - 028a158: Add optional session field `dz`.
77
+ - Updated dependencies [98ab052]
78
+ - Updated dependencies [028a158]
79
+ - Updated dependencies [1f0598c]
80
+ - Updated dependencies [3958046]
81
+ - Updated dependencies [864ddde]
82
+ - Updated dependencies [028a158]
83
+ - @prosopo/database@4.0.33
84
+ - @prosopo/types-database@5.5.3
85
+ - @prosopo/types@5.8.3
86
+ - @prosopo/locale@3.4.2
87
+ - @prosopo/env@3.6.56
88
+ - @prosopo/types-env@2.11.2
89
+ - @prosopo/api@4.2.3
90
+ - @prosopo/api-express-router@3.1.87
91
+ - @prosopo/common@3.1.55
92
+ - @prosopo/datasets@3.1.82
93
+ - @prosopo/ipinfo@0.4.2
94
+ - @prosopo/keyring@2.9.89
95
+ - @prosopo/load-balancer@2.10.44
96
+ - @prosopo/user-access-policy@3.14.3
97
+
98
+ ## 5.10.1
99
+ ### Patch Changes
100
+
101
+ - fad87b7: Populate `abuserScore` on the IP comparison result so `ipValidationRules` can use it. The field was read when evaluating `abuseScoreExceedAction` but never set, so that rule never fired for any site. Also counts both IPs exceeding the threshold as one condition rather than two, which previously mis-counted under `requireAllConditions`.
102
+ - 477b4e7: Persist cv and sq from detector payload, and refresh the decoder bundle
103
+ - e4d6f06: Persist cg and sm opaque payload keys
104
+ - 24d6b7b: Persist `cv` and `sq` on the session record. Both were decoded from the detector
105
+ payload and copied onto the session params, but `createSession` had no entry for
106
+ them and dropped them before the write — the same hop where `b` was being lost.
107
+ Escalation sessions now carry them forward alongside `g` / `i` / `b`.
108
+
109
+ The client-supplied `b` signal map is bounded and stripped of keys Mongo cannot
110
+ store as field names before it reaches the record, so a malformed or oversized
111
+ payload can no longer fail the session insert and turn into a failed captcha
112
+ request.
113
+ - Updated dependencies [0d479f9]
114
+ - Updated dependencies [477b4e7]
115
+ - Updated dependencies [e4d6f06]
116
+ - @prosopo/load-balancer@2.10.43
117
+ - @prosopo/types-database@5.5.2
118
+ - @prosopo/types@5.8.2
119
+ - @prosopo/api@4.2.2
120
+ - @prosopo/api-express-router@3.1.86
121
+ - @prosopo/database@4.0.32
122
+ - @prosopo/datasets@3.1.81
123
+ - @prosopo/env@3.6.55
124
+ - @prosopo/ipinfo@0.4.1
125
+ - @prosopo/keyring@2.9.88
126
+ - @prosopo/types-env@2.11.1
127
+ - @prosopo/user-access-policy@3.14.2
128
+
3
129
  ## 5.10.0
4
130
  ### Minor Changes
5
131
 
@@ -1 +1 @@
1
- {"version":3,"file":"assignDetectorBundle.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;8BAgBpC,mBAAmB,WAEjC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,SACN,YAAY,KACjB,OAAO,CAAC,QAAQ,CAAC;AALrB,wBAwDG"}
1
+ {"version":3,"file":"assignDetectorBundle.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;8BA4BpC,mBAAmB,WAEjC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,SACN,YAAY,KACjB,OAAO,CAAC,QAAQ,CAAC;AALrB,wBA+DG"}
@@ -1,19 +1,27 @@
1
- import { getDetectorBundlePool } from "../../tasks/detection/bundlePool.js";
1
+ import { getDetectorBundlePool, getDetectorBundlePoolDir } from "../../tasks/detection/bundlePool.js";
2
2
  import { Tasks } from "../../tasks/tasks.js";
3
+ import { getAssignSecret } from "../../tasks/detection/assignSecret.js";
4
+ import { normalizeRequestIp } from "../../utils/normalizeRequestIp.js";
3
5
  import { ApiParams } from "@prosopo/types";
6
+ import { createHmac } from "node:crypto";
4
7
  import { v4 } from "uuid";
5
8
  //#region src/api/captcha/assignDetectorBundle.ts
9
+ /** Pool position for this caller: a keyed hash of their address. */
10
+ var clientIndex = (ip, secret) => createHmac("sha256", secret).update(ip).digest().readUIntBE(0, 6);
6
11
  /**
7
12
  * Assigns a precomputed detector bundle for this detection session.
8
13
  *
9
- * When the provider has a non-empty pool it picks a random bundle, records the
10
- * (short-TTL) `detectorSessionId → bundleId` binding in Redis, and returns the
11
- * obfuscated detector script inline.
14
+ * The bundle is derived from the caller's address and this provider's secret,
15
+ * so a repeat caller keeps getting the same one with nothing stored and nothing
16
+ * to expire. Any bundle detects equally well, so this is not visible to users.
12
17
  *
13
- * When it cannot (no pool loaded, or Redis unavailable so the binding could not
14
- * be persisted) it returns `useProviderBundle: false`. There is NO bundled
15
- * detector and no legacy key pool to fall back to — the client sends an empty
16
- * token on the frictionless hop and the provider decides what to serve.
18
+ * The `detectorSessionId → bundleId` binding is still written to Redis; the
19
+ * decrypt side resolves the session's bundle from it on the next hop.
20
+ *
21
+ * Returns `useProviderBundle: false` when there is no pool, no secret, or Redis
22
+ * could not store that binding. There is NO bundled detector to fall back to —
23
+ * the client sends an empty token on the frictionless hop and the provider
24
+ * decides what to serve.
17
25
  */
18
26
  var assignDetectorBundle_default = (env) => async (req, res, _next) => {
19
27
  try {
@@ -23,7 +31,17 @@ var assignDetectorBundle_default = (env) => async (req, res, _next) => {
23
31
  };
24
32
  const pool = getDetectorBundlePool();
25
33
  if (!pool || pool.size() === 0) return res.json(noBundle);
26
- const { bundleId, bundle } = pool.pickRandom();
34
+ const secret = getAssignSecret(getDetectorBundlePoolDir(), {
35
+ info: (msg, data) => req.logger.info(() => ({
36
+ msg,
37
+ data
38
+ })),
39
+ warn: (msg, data) => req.logger.warn(() => ({
40
+ msg,
41
+ data
42
+ }))
43
+ });
44
+ const { bundleId, bundle } = pool.at(clientIndex(normalizeRequestIp(req.ip, req.logger), secret));
27
45
  const detectorSessionId = `det-${v4()}`;
28
46
  const writeQueue = new Tasks(env, req.logger).frictionlessManager.writeQueue;
29
47
  if (!writeQueue) return res.json(noBundle);
@@ -1 +1 @@
1
- {"version":3,"file":"assignDetectorBundle.js","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAqC,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAc7C,eAAe,CAAC,GAAwB,EAAE,EAAE,CAC3C,KAAK,EACJ,GAA+B,EAC/B,GAAa,EACb,KAAmB,EACC,EAAE;IACtB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAiC;YAC9C,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,KAAK;YACpC,MAAM,EAAE,IAAI;SACZ,CAAC;QAEF,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,OAAO,MAAM,EAAE,EAAE,CAAC;QAM5C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,mBAAmB,CAClD,iBAAiB,EACjB,QAAQ,CACR,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,QAAQ,GAAiC;YAC9C,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI;YACnC,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;YAChD,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE;YACrC,MAAM,EAAE,IAAI;SACZ,CAAC;QACF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAGd,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACtB,GAAG,EAAE,+DAA+D;YACpE,GAAG;SACH,CAAC,CAAC,CAAC;QACJ,OAAO,GAAG,CAAC,IAAI,CAAC;YACf,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,KAAK;YACpC,MAAM,EAAE,IAAI;SAC2B,CAAC,CAAC;IAC3C,CAAC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"assignDetectorBundle.js","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assignDetectorBundle.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignDetectorBundle.unit.test.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.unit.test.ts"],"names":[],"mappings":""}