@prosopo/provider 5.10.3 → 5.11.0

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