@prosopo/provider 4.15.17 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +102 -101
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +103 -102
  4. package/CHANGELOG.md +137 -0
  5. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -1
  6. package/dist/api/admin/apiAdminRoutesProvider.js +3 -5
  7. package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -1
  8. package/dist/api/admin/apiReplaceDetectorPoolEndpoint.d.ts +11 -0
  9. package/dist/api/admin/apiReplaceDetectorPoolEndpoint.d.ts.map +1 -0
  10. package/dist/api/admin/apiReplaceDetectorPoolEndpoint.js +56 -0
  11. package/dist/api/admin/apiReplaceDetectorPoolEndpoint.js.map +1 -0
  12. package/dist/api/captcha/assignDetectorBundle.d.ts +6 -0
  13. package/dist/api/captcha/assignDetectorBundle.d.ts.map +1 -0
  14. package/dist/api/captcha/assignDetectorBundle.js +50 -0
  15. package/dist/api/captcha/assignDetectorBundle.js.map +1 -0
  16. package/dist/api/captcha/assignDetectorBundle.test.d.ts +2 -0
  17. package/dist/api/captcha/assignDetectorBundle.test.d.ts.map +1 -0
  18. package/dist/api/captcha/assignDetectorBundle.test.js +71 -0
  19. package/dist/api/captcha/assignDetectorBundle.test.js.map +1 -0
  20. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts +3 -0
  21. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts.map +1 -1
  22. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js.map +1 -1
  23. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts +1 -0
  24. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
  25. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +59 -2
  26. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.d.ts +1 -1
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.d.ts.map +1 -1
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js +3 -3
  30. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js.map +1 -1
  31. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  32. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +16 -8
  33. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  34. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts +2 -0
  35. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
  36. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +45 -18
  37. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
  38. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.d.ts +2 -0
  39. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.d.ts.map +1 -0
  40. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.js +77 -0
  41. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.js.map +1 -0
  42. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  43. package/dist/api/captcha/submitPoWCaptchaSolution.js +1 -1
  44. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  45. package/dist/api/captcha.d.ts.map +1 -1
  46. package/dist/api/captcha.js +6 -0
  47. package/dist/api/captcha.js.map +1 -1
  48. package/dist/api/startProviderApi.d.ts.map +1 -1
  49. package/dist/api/startProviderApi.js +50 -17
  50. package/dist/api/startProviderApi.js.map +1 -1
  51. package/dist/api/verify.d.ts.map +1 -1
  52. package/dist/api/verify.js +1 -1
  53. package/dist/api/verify.js.map +1 -1
  54. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +3 -5
  55. package/dist/cjs/api/admin/apiReplaceDetectorPoolEndpoint.cjs +56 -0
  56. package/dist/cjs/api/captcha/assignDetectorBundle.cjs +50 -0
  57. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +59 -2
  58. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.cjs +3 -3
  59. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +15 -7
  60. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +45 -17
  61. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +1 -1
  62. package/dist/cjs/api/captcha.cjs +6 -0
  63. package/dist/cjs/api/startProviderApi.cjs +53 -19
  64. package/dist/cjs/api/verify.cjs +1 -1
  65. package/dist/cjs/tasks/captchaManager.cjs +76 -59
  66. package/dist/cjs/tasks/client/clientTasks.cjs +1 -29
  67. package/dist/cjs/tasks/detection/bundlePool.cjs +220 -0
  68. package/dist/cjs/tasks/detection/decodeBehavior.cjs +644 -362
  69. package/dist/cjs/tasks/detection/decodeBehavior.js +1 -1
  70. package/dist/cjs/tasks/detection/decodePayload.cjs +956 -617
  71. package/dist/cjs/tasks/detection/decodePayload.js +1 -1
  72. package/dist/cjs/tasks/detection/decodeSimd.cjs +723 -411
  73. package/dist/cjs/tasks/detection/decodeSimd.js +1 -1
  74. package/dist/cjs/tasks/detection/getBotScore.cjs +2 -2
  75. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +35 -12
  76. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +1 -2
  77. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +37 -7
  78. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +33 -3
  79. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +36 -4
  80. package/dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs +23 -0
  81. package/dist/tasks/captchaManager.d.ts +12 -4
  82. package/dist/tasks/captchaManager.d.ts.map +1 -1
  83. package/dist/tasks/captchaManager.js +76 -59
  84. package/dist/tasks/captchaManager.js.map +1 -1
  85. package/dist/tasks/client/clientTasks.d.ts +0 -2
  86. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  87. package/dist/tasks/client/clientTasks.js +1 -29
  88. package/dist/tasks/client/clientTasks.js.map +1 -1
  89. package/dist/tasks/detection/bundlePool.d.ts +32 -0
  90. package/dist/tasks/detection/bundlePool.d.ts.map +1 -0
  91. package/dist/tasks/detection/bundlePool.js +215 -0
  92. package/dist/tasks/detection/bundlePool.js.map +1 -0
  93. package/dist/tasks/detection/bundlePool.test.d.ts +2 -0
  94. package/dist/tasks/detection/bundlePool.test.d.ts.map +1 -0
  95. package/dist/tasks/detection/bundlePool.test.js +178 -0
  96. package/dist/tasks/detection/bundlePool.test.js.map +1 -0
  97. package/dist/tasks/detection/decodeBehavior.d.ts +2 -2
  98. package/dist/tasks/detection/decodeBehavior.d.ts.map +1 -1
  99. package/dist/tasks/detection/decodeBehavior.js +1 -1
  100. package/dist/tasks/detection/decodeBehavior.js.map +1 -1
  101. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  102. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  103. package/dist/tasks/detection/decodePayload.js +1 -1
  104. package/dist/tasks/detection/decodePayload.js.map +1 -1
  105. package/dist/tasks/detection/decodeSimd.d.ts +2 -2
  106. package/dist/tasks/detection/decodeSimd.d.ts.map +1 -1
  107. package/dist/tasks/detection/decodeSimd.js +1 -1
  108. package/dist/tasks/detection/decodeSimd.js.map +1 -1
  109. package/dist/tasks/detection/getBotScore.d.ts +1 -1
  110. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  111. package/dist/tasks/detection/getBotScore.js +3 -3
  112. package/dist/tasks/detection/getBotScore.js.map +1 -1
  113. package/dist/tasks/frictionless/frictionlessTasks.d.ts +10 -2
  114. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  115. package/dist/tasks/frictionless/frictionlessTasks.js +35 -12
  116. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  117. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +1 -1
  118. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +1 -1
  119. package/dist/tasks/frictionless/frictionlessTasksUtils.js +1 -2
  120. package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +1 -1
  121. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  122. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +38 -8
  123. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  124. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  125. package/dist/tasks/powCaptcha/powTasks.js +34 -4
  126. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  127. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts +2 -2
  128. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  129. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +36 -4
  130. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  131. package/dist/tasks/spam/evaluateEmailSpamRules.d.ts +1 -0
  132. package/dist/tasks/spam/evaluateEmailSpamRules.d.ts.map +1 -1
  133. package/dist/tasks/spam/evaluateEmailSpamRules.js +23 -1
  134. package/dist/tasks/spam/evaluateEmailSpamRules.js.map +1 -1
  135. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +23 -1
  136. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  137. package/dist/tests/integration/decisionMachines.integration.test.js +3 -56
  138. package/dist/tests/integration/decisionMachines.integration.test.js.map +1 -1
  139. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +2 -2
  140. package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
  141. package/dist/tests/integration/imgCaptcha.integration.test.js +3 -56
  142. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  143. package/dist/tests/integration/maintenanceModeAdmin.integration.test.js +2 -29
  144. package/dist/tests/integration/maintenanceModeAdmin.integration.test.js.map +1 -1
  145. package/dist/tests/integration/powCaptcha.integration.test.js +3 -56
  146. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  147. package/dist/tests/integration/routingDecisionMachines.integration.test.js +2 -2
  148. package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
  149. package/dist/tests/integration/testUtils.d.ts +1 -0
  150. package/dist/tests/integration/testUtils.d.ts.map +1 -1
  151. package/dist/tests/integration/testUtils.js +14 -0
  152. package/dist/tests/integration/testUtils.js.map +1 -1
  153. package/dist/tests/integration/testUtils.unit.test.d.ts +2 -0
  154. package/dist/tests/integration/testUtils.unit.test.d.ts.map +1 -0
  155. package/dist/tests/integration/testUtils.unit.test.js +30 -0
  156. package/dist/tests/integration/testUtils.unit.test.js.map +1 -0
  157. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +1 -0
  158. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  159. package/dist/tests/unit/api/adminRoutes.unit.test.js +0 -46
  160. package/dist/tests/unit/api/adminRoutes.unit.test.js.map +1 -1
  161. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.js +101 -0
  162. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.unit.test.js.map +1 -1
  163. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.js +12 -12
  164. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.unit.test.js.map +1 -1
  165. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +15 -1
  166. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  167. package/dist/tests/unit/tasks/captchaManager.unit.test.js +14 -30
  168. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  169. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +3 -3
  170. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
  171. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +25 -7
  172. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -1
  173. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +0 -1
  174. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  175. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +6 -14
  176. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +1 -1
  177. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +99 -0
  178. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  179. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +108 -0
  180. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  181. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +102 -1
  182. package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
  183. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.js +37 -1
  184. package/dist/tests/unit/tasks/spam/evaluateEmailSpamRules.unit.test.js.map +1 -1
  185. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js +0 -2
  186. package/dist/tests/unit/tasks/writeQueueIntegration.unit.test.js.map +1 -1
  187. package/fixtures/detector-pool/bundle-0.js +15 -0
  188. package/fixtures/detector-pool/bundle-0.json +1 -0
  189. package/package.json +19 -19
  190. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +0 -23
  191. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +0 -1
  192. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +0 -32
  193. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +0 -1
  194. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +0 -14
  195. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +0 -1
  196. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +0 -39
  197. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +0 -1
  198. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +0 -32
  199. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +0 -39
  200. package/dist/tasks/detection/getBehavioralData.d.ts +0 -4
  201. package/dist/tasks/detection/getBehavioralData.d.ts.map +0 -1
  202. package/dist/tasks/detection/getBehavioralData.js +0 -51
  203. package/dist/tasks/detection/getBehavioralData.js.map +0 -1
  204. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.d.ts +0 -2
  205. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.d.ts.map +0 -1
  206. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.js +0 -57
  207. package/dist/tests/unit/api/admin/apiRemoveDetectorKeyEndpoint.unit.test.js.map +0 -1
  208. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.d.ts +0 -2
  209. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.d.ts.map +0 -1
  210. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.js +0 -60
  211. package/dist/tests/unit/api/admin/apiUpdateDetectorKeyEndpoint.unit.test.js.map +0 -1
  212. package/dist/tests/unit/tasks/detection/getBehavioralData.unit.test.d.ts +0 -2
  213. package/dist/tests/unit/tasks/detection/getBehavioralData.unit.test.d.ts.map +0 -1
  214. package/dist/tests/unit/tasks/detection/getBehavioralData.unit.test.js +0 -109
  215. package/dist/tests/unit/tasks/detection/getBehavioralData.unit.test.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,142 @@
1
1
  # @prosopo/provider
2
2
 
3
+ ## 5.0.1
4
+ ### Patch Changes
5
+
6
+ - ce2ac41: `startProviderApi` now resolves once the server is actually listening, and rejects if the bind fails. It previously returned the server straight from `.listen()`, which resolves before the socket is bound — a bind failure such as `EADDRINUSE` then surfaced as an `'error'` event with nothing waiting on it, i.e. an uncaught exception rather than a rejection the caller could handle.
7
+
8
+ Integration suites reserve a port from the OS instead of guessing one. Six suites picked a port from `process.pid` plus a random offset with no availability check, while CI runs a real provider alongside the tests; a collision failed the whole run with an uncaught `EADDRINUSE` even though every test passed. The retry loops that tried to work around this are gone — they retried into another unchecked port and, because the failure was never a rejection, never ran at all.
9
+ - 2aabe73: Remove the client-controlled `detectorUnavailable` frictionless bypass. A client could set the flag and be handed a PoW challenge without any detection running. The flag is gone from the wire format, the API client and the widget; the only remaining bypasses are provider-side (maintenance mode, empty detector bundle pool).
10
+
11
+ The frictionless decision machine now gates on payload presence after the access-rule ladder: no token serves a 3-round image captcha, a token without its head hash serves a 2-round one.
12
+ - bcef918: Adds a per-email submission-count rate limit on the verify pipeline. Site operators can now cap how many server-checked captcha submissions any one normalised email (Gmail dot / `+tag` tricks collapsed across providers) may back before further submissions from that address are rejected with `API.SPAM_EMAIL_COUNT_EXCEEDED`.
13
+
14
+ - New `spamFilter.emailRules.maxEmailSubmissionCount` (int, min 1, optional) on `ClientSettingsSchema`.
15
+ - New `metadata.emailNormalised` field on all three captcha records (image / PoW / puzzle) — written alongside `metadata.email` whenever `storeMetadata` is on. Backed by a partial index (`spamEmailCount_partial`) on each collection.
16
+ - New DB method `countCommitmentsByNormalisedEmail(dappAccount, emailNormalised)` sums the three per-collection counts so limits span captcha types.
17
+ - Puzzle verify gains a `spamFilter` parameter to bring it to parity with img/pow for the count check.
18
+ - English + all 31 non-English locales gain the `API.SPAM_EMAIL_COUNT_EXCEEDED` translation.
19
+ - Fixes silent-drift bug: `UserSettingsSchema.spamFilter.emailRules` was missing `maxEmailSubmissionCount` on the mongoose side, which strict mode would have dropped on `$set`.
20
+ - Updated dependencies [38396b4]
21
+ - Updated dependencies [9fec7bd]
22
+ - Updated dependencies [2aabe73]
23
+ - Updated dependencies [bcef918]
24
+ - @prosopo/env@3.6.24
25
+ - @prosopo/common@3.1.49
26
+ - @prosopo/types@5.0.1
27
+ - @prosopo/api@4.0.1
28
+ - @prosopo/logger@2.0.5
29
+ - @prosopo/types-database@5.0.1
30
+ - @prosopo/database@4.0.1
31
+ - @prosopo/locale@3.2.9
32
+ - @prosopo/api-express-router@3.1.55
33
+ - @prosopo/api-route@2.6.54
34
+ - @prosopo/datasets@3.1.57
35
+ - @prosopo/ipinfo@0.3.2
36
+ - @prosopo/keyring@2.9.64
37
+ - @prosopo/load-balancer@2.10.18
38
+ - @prosopo/redis-client@1.0.31
39
+ - @prosopo/types-env@2.10.21
40
+ - @prosopo/user-access-policy@3.12.12
41
+
42
+ ## 5.0.0
43
+ ### Major Changes
44
+
45
+ - 787017b: chore(detector): remove the legacy detector-key rotation machinery
46
+
47
+ Nothing has read these keys since the detector moved to per-session provider
48
+ bundles — the decrypt paths resolve a bundle's own keypair instead. Rotating
49
+ them was already a no-op, so the whole surface is removed rather than left
50
+ looking live.
51
+
52
+ **Breaking — the admin API loses two endpoints:**
53
+
54
+ - `POST /v1/prosopo/provider/admin/detector/update` (`AdminApiPaths.UpdateDetectorKey`)
55
+ - `POST /v1/prosopo/provider/admin/detector/remove` (`AdminApiPaths.RemoveDetectorKey`)
56
+
57
+ Also removed: `ProviderApi.updateDetectorKey` / `.removeDetectorKey`;
58
+ `ClientTaskManager.updateDetectorKey` / `.removeDetectorKey`;
59
+ `IProviderDatabase.storeDetectorKey` / `.getDetectorKeys` / `.removeDetectorKey`;
60
+ the `detector` Mongo collection and its `DetectorRecordSchema` / `DetectorSchema`
61
+ / `DetectorKey` types; the `UpdateDetectorKeyBody` / `RemoveDetectorKeyBodySpec`
62
+ / `UpdateDetectorKeyResponse` API types; and the rate-limit config for both
63
+ paths.
64
+
65
+ The `detector` collection itself is left in place on existing deployments — no
66
+ migration drops it. It can be dropped manually once the pool rollout is
67
+ confirmed.
68
+
69
+ ### Minor Changes
70
+
71
+ - 787017b: feat(detector): serve the detector only from per-session provider bundles; PoW fallback
72
+
73
+ The detector now lives ONLY in the provider-served, precomputed pool bundles — there is no detector bundled into the widget and no legacy detector-key pool. Each session's bundle encrypts everything it produces (bot score, SIMD readings, behavioural data) with its own RSA keypair + inner ChaCha20-Poly1305 cipher; the provider decrypts each payload with that exact bundle, resolved per session.
74
+
75
+ - `DetectorBundlePool`: loads precomputed `{id}.js`/`{id}.json` bundle pairs from disk, uniform-random per-session selection, hot-swap `replace()` for the admin push channel.
76
+ - The pool is ALWAYS initialised at boot (a missing/empty dir yields an empty pool), collapsing the old three states into two: bundles present ⇒ per-session serving; no bundles ⇒ always PoW.
77
+ - Redis short-TTL `detectorSessionId → bundleId` binding; the resolved `bundleId` is promoted onto the durable session record so later hops (SIMD attach, PoW/puzzle/image solution submit) decrypt with the same bundle.
78
+ - Client: removed the inlined `@prosopo/detector` runtime import (now type-only). When no provider bundle can be obtained/run, the client signals `detectorUnavailable` and the provider serves a PoW challenge.
79
+ - All server decrypt paths (score, SIMD readings, behavioural data) resolve the session's bundle and pass its inner cipher; the legacy key-pool brute force and its env fallback are removed from the detection paths. Decrypt failures fail closed (treated as bot ⇒ PoW).
80
+ - 787017b: feat(detector-pool): persist pushed pools, stamp releases, fix the failed-decrypt path
81
+
82
+ - `ReplaceDetectorPool` gets a dedicated 128 MB body limit (~86 MB for a
83
+ 100-bundle pool); every other route keeps the 1 MB backstop.
84
+ - A pushed pool is now written to the pool directory (staged + renamed) so it
85
+ survives a restart instead of living only in process memory. The response
86
+ reports `persisted` so an unpersisted push can be alarmed on. The provider
87
+ containers gain a host-mounted volume for it — the pool is never baked into
88
+ the image, which is public on Docker Hub.
89
+ - Bundles carry the release they were built from; providers skip bundles from
90
+ another release (`PROSOPO_DETECTOR_POOL_RELEASE`). The widget carries no
91
+ detector of its own, so nothing else tied the two together.
92
+ - Failed decryption is now its own decision (`DECRYPTION_FAILED`, 3 image
93
+ rounds) evaluated before every other check. Previously the synthetic
94
+ `userAgent: undefined` / `baseBotScore: 1` / `timestamp: 0` that
95
+ `decryptPayload` substitutes made these sessions land in USER_AGENT_MISMATCH
96
+ (6 rounds), or a 401 on sitekeys with `autoBanScoreThreshold` set.
97
+ `timestampDecayFunction` loses its now-unreachable `decryptionFailed` arm.
98
+
99
+ ### Patch Changes
100
+
101
+ - 787017b: perf(caddy): compress proxied provider responses with zstd/gzip
102
+
103
+ `docker/provider.Caddyfile` had no `encode` directive, and Caddy does not
104
+ compress by default, so every proxied response went out uncompressed. The
105
+ detector-pool bundle makes that expensive: ~830 KB of obfuscated JS returned
106
+ inline from `/detector/assign` once per frictionless session.
107
+
108
+ Obfuscated output still compresses well (the obfuscator's string-array encoding
109
+ is highly repetitive) — 2.6x with gzip, 3.1x with zstd. At 15k sessions/hour a
110
+ single provider drops from ~9.15 TB/month of egress to ~3 TB.
111
+
112
+ zstd is preferred with gzip as the fallback. Responses below `minimum_length`
113
+ (512 bytes) are untouched, which covers every small JSON reply the API returns.
114
+ - 787017b: fix(detector-pool): persist into the pool directory instead of replacing it
115
+
116
+ The previous stage-and-rename persist was destructive against the provider's
117
+ bind-mounted pool directory: it deleted the mount's contents and then failed
118
+ with EBUSY renaming over the mount point, wiping the on-disk pool while still
119
+ reporting the push as successful. Now writes each bundle via a per-file temp +
120
+ rename within the directory and prunes removed bundles, never touching the
121
+ directory itself.
122
+ - Updated dependencies [787017b]
123
+ - Updated dependencies [787017b]
124
+ - Updated dependencies [787017b]
125
+ - Updated dependencies [d107d65]
126
+ - Updated dependencies [6f19cde]
127
+ - @prosopo/database@4.0.0
128
+ - @prosopo/types@5.0.0
129
+ - @prosopo/types-database@5.0.0
130
+ - @prosopo/api@4.0.0
131
+ - @prosopo/api-express-router@3.1.54
132
+ - @prosopo/datasets@3.1.56
133
+ - @prosopo/env@3.6.23
134
+ - @prosopo/ipinfo@0.3.1
135
+ - @prosopo/keyring@2.9.63
136
+ - @prosopo/load-balancer@2.10.17
137
+ - @prosopo/types-env@2.10.20
138
+ - @prosopo/user-access-policy@3.12.11
139
+
3
140
  ## 4.15.17
4
141
  ### Patch Changes
5
142
 
@@ -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;CA0C7B;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;AAelD,cAAM,sBAAuB,YAAW,iBAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAEzC,SAAS,IAAI,SAAS;CAqC7B;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -7,11 +7,10 @@ import { ApiRegisterSiteKeyEndpoint } from "./apiRegisterSiteKeyEndpoint.js";
7
7
  import { ApiRegisterSiteKeysEndpoint } from "./apiRegisterSiteKeysEndpoint.js";
8
8
  import { ApiRemoveAllDecisionMachinesEndpoint } from "./apiRemoveAllDecisionMachinesEndpoint.js";
9
9
  import { ApiRemoveDecisionMachineEndpoint } from "./apiRemoveDecisionMachineEndpoint.js";
10
- import { ApiRemoveDetectorKeyEndpoint } from "./apiRemoveDetectorKeyEndpoint.js";
11
10
  import { ApiRemoveSiteKeyEndpoint } from "./apiRemoveSiteKeyEndpoint.js";
12
11
  import { ApiRemoveSiteKeysEndpoint } from "./apiRemoveSiteKeysEndpoint.js";
12
+ import { ApiReplaceDetectorPoolEndpoint } from "./apiReplaceDetectorPoolEndpoint.js";
13
13
  import { ApiUpdateDecisionMachineEndpoint } from "./apiUpdateDecisionMachineEndpoint.js";
14
- import { ApiUpdateDetectorKeyEndpoint } from "./apiUpdateDetectorKeyEndpoint.js";
15
14
  import { AdminApiPaths } from "@prosopo/types";
16
15
  //#region src/api/admin/apiAdminRoutesProvider.ts
17
16
  var ApiAdminRoutesProvider = class {
@@ -22,8 +21,6 @@ var ApiAdminRoutesProvider = class {
22
21
  return {
23
22
  [AdminApiPaths.SiteKeyRegister]: new ApiRegisterSiteKeyEndpoint(this.tasks.clientTaskManager),
24
23
  [AdminApiPaths.SiteKeysRegister]: new ApiRegisterSiteKeysEndpoint(this.tasks.clientTaskManager),
25
- [AdminApiPaths.UpdateDetectorKey]: new ApiUpdateDetectorKeyEndpoint(this.tasks.clientTaskManager),
26
- [AdminApiPaths.RemoveDetectorKey]: new ApiRemoveDetectorKeyEndpoint(this.tasks.clientTaskManager),
27
24
  [AdminApiPaths.UpdateDecisionMachine]: new ApiUpdateDecisionMachineEndpoint(this.tasks.clientTaskManager),
28
25
  [AdminApiPaths.GetAllDecisionMachines]: new ApiGetAllDecisionMachinesEndpoint(this.tasks.clientTaskManager),
29
26
  [AdminApiPaths.GetDecisionMachine]: new ApiGetDecisionMachineEndpoint(this.tasks.clientTaskManager),
@@ -33,7 +30,8 @@ var ApiAdminRoutesProvider = class {
33
30
  [AdminApiPaths.SiteKeyRemove]: new ApiRemoveSiteKeyEndpoint(this.tasks.clientTaskManager),
34
31
  [AdminApiPaths.SiteKeysRemove]: new ApiRemoveSiteKeysEndpoint(this.tasks.clientTaskManager),
35
32
  [AdminApiPaths.ToggleMaintenanceMode]: new ApiToggleMaintenanceModeEndpoint(),
36
- [AdminApiPaths.DnsEvent]: new ApiDnsEventEndpoint(this.tasks.db, this.tasks.env.ipInfoService)
33
+ [AdminApiPaths.DnsEvent]: new ApiDnsEventEndpoint(this.tasks.db, this.tasks.env.ipInfoService),
34
+ [AdminApiPaths.ReplaceDetectorPool]: new ApiReplaceDetectorPoolEndpoint()
37
35
  };
38
36
  }
39
37
  };
@@ -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":"AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAEzF,MAAM,sBAAsB;IAC3B,YAAoC,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE7C,SAAS;QACf,OAAO;YACN,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,IAAI,0BAA0B,CAC9D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,2BAA2B,CAChE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnE,CAAC,aAAa,CAAC,sBAAsB,CAAC,EACrC,IAAI,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACpE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,IAAI,6BAA6B,CACpE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnE,CAAC,aAAa,CAAC,yBAAyB,CAAC,EACxC,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACvE,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,2BAA2B,CAChE,IAAI,CAAC,KAAK,CAAC,aAAa,CACxB;YACD,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,IAAI,wBAAwB,CAC1D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,IAAI,yBAAyB,CAC5D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC5B;YACD,CAAC,aAAa,CAAC,qBAAqB,CAAC,EACpC,IAAI,gCAAgC,EAAE;YACvC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,mBAAmB,CAChD,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAC5B;YACD,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,IAAI,8BAA8B,EAAE;SACzE,CAAC;IACH,CAAC;CACD;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ApiEndpoint, type ApiEndpointResponse } from "@prosopo/api-route";
2
+ import { type Logger } from "@prosopo/logger";
3
+ import { ReplaceDetectorPoolBody } from "@prosopo/types";
4
+ import type { z } from "zod";
5
+ type ReplaceDetectorPoolBodyType = typeof ReplaceDetectorPoolBody;
6
+ declare class ApiReplaceDetectorPoolEndpoint implements ApiEndpoint<ReplaceDetectorPoolBodyType> {
7
+ processRequest(args: z.infer<ReplaceDetectorPoolBodyType>, logger?: Logger): Promise<ApiEndpointResponse>;
8
+ getRequestArgsSchema(): ReplaceDetectorPoolBodyType;
9
+ }
10
+ export { ApiReplaceDetectorPoolEndpoint };
11
+ //# sourceMappingURL=apiReplaceDetectorPoolEndpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiReplaceDetectorPoolEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiReplaceDetectorPoolEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,KAAK,2BAA2B,GAAG,OAAO,uBAAuB,CAAC;AAQlE,cAAM,8BACL,YAAW,WAAW,CAAC,2BAA2B,CAAC;IAE7C,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAC1C,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IAiCxB,oBAAoB,IAAI,2BAA2B;CAG1D;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { replaceDetectorBundlePool } from "../../tasks/detection/bundlePool.js";
2
+ import { getLogger } from "@prosopo/logger";
3
+ import { ReplaceDetectorPoolBody } from "@prosopo/types";
4
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
5
+ //#region src/api/admin/apiReplaceDetectorPoolEndpoint.ts
6
+ /**
7
+ * Hot-swaps the in-memory detector bundle pool with a freshly-pushed set of
8
+ * bundles. The emergency rotation channel — lets the cycle script swap the pool
9
+ * without a provider redeploy. Bundles never touch disk here; they live only in
10
+ * process memory.
11
+ */
12
+ var ApiReplaceDetectorPoolEndpoint = class {
13
+ async processRequest(args, logger) {
14
+ logger = logger || getLogger("info", "");
15
+ try {
16
+ const bundles = new Map(Object.entries(args.bundles));
17
+ const activeLogger = logger;
18
+ const { count, persisted } = replaceDetectorBundlePool(bundles, {
19
+ warn: (msg, data) => activeLogger.warn(() => ({
20
+ msg,
21
+ data
22
+ })),
23
+ info: (msg, data) => activeLogger.info(() => ({
24
+ msg,
25
+ data
26
+ }))
27
+ });
28
+ logger.info(() => ({
29
+ msg: "Detector bundle pool replaced",
30
+ count,
31
+ persisted
32
+ }));
33
+ return {
34
+ status: ApiEndpointResponseStatus.SUCCESS,
35
+ data: {
36
+ count,
37
+ persisted
38
+ }
39
+ };
40
+ } catch (error) {
41
+ logger.error(() => ({
42
+ msg: "Error replacing detector bundle pool",
43
+ err: error
44
+ }));
45
+ return {
46
+ status: ApiEndpointResponseStatus.FAIL,
47
+ error: error.message
48
+ };
49
+ }
50
+ }
51
+ getRequestArgsSchema() {
52
+ return ReplaceDetectorPoolBody;
53
+ }
54
+ };
55
+ //#endregion
56
+ export { ApiReplaceDetectorPoolEndpoint };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiReplaceDetectorPoolEndpoint.js","sourceRoot":"","sources":["../../../src/api/admin/apiReplaceDetectorPoolEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAEN,yBAAyB,GACzB,MAAM,qCAAqC,CAAC;AAU7C,MAAM,8BAA8B;IAGnC,KAAK,CAAC,cAAc,CACnB,IAA0C,EAC1C,MAAe;QAEf,MAAM,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAqB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,MAAM,YAAY,GAAG,MAAM,CAAC;YAC5B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,OAAO,EAAE;gBAC/D,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7D,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClB,GAAG,EAAE,+BAA+B;gBACpC,KAAK;gBAIL,SAAS;aACT,CAAC,CAAC,CAAC;YACJ,OAAO;gBACN,MAAM,EAAE,yBAAyB,CAAC,OAAO;gBACzC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;aAC1B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnB,GAAG,EAAE,sCAAsC;gBAC3C,GAAG,EAAE,KAAK;aACV,CAAC,CAAC,CAAC;YACJ,OAAO;gBACN,MAAM,EAAE,yBAAyB,CAAC,IAAI;gBACtC,KAAK,EAAG,KAAyB,CAAC,OAAO;aACzC,CAAC;QACH,CAAC;IACF,CAAC;IAEM,oBAAoB;QAC1B,OAAO,uBAAuB,CAAC;IAChC,CAAC;CACD;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ import type { NextFunction, Request, Response } from "express";
3
+ import type { AugmentedRequest } from "../../express.js";
4
+ declare const _default: (env: ProviderEnvironment) => (req: Request & AugmentedRequest, res: Response, _next: NextFunction) => Promise<Response>;
5
+ export default _default;
6
+ //# sourceMappingURL=assignDetectorBundle.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,50 @@
1
+ import { getDetectorBundlePool } from "../../tasks/detection/bundlePool.js";
2
+ import { Tasks } from "../../tasks/tasks.js";
3
+ import { ApiParams } from "@prosopo/types";
4
+ import { v4 } from "uuid";
5
+ //#region src/api/captcha/assignDetectorBundle.ts
6
+ /**
7
+ * Assigns a precomputed detector bundle for this detection session.
8
+ *
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.
12
+ *
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.
17
+ */
18
+ var assignDetectorBundle_default = (env) => async (req, res, _next) => {
19
+ try {
20
+ const noBundle = {
21
+ [ApiParams.useProviderBundle]: false,
22
+ status: "ok"
23
+ };
24
+ const pool = getDetectorBundlePool();
25
+ if (!pool || pool.size() === 0) return res.json(noBundle);
26
+ const { bundleId, bundle } = pool.pickRandom();
27
+ const detectorSessionId = `det-${v4()}`;
28
+ const writeQueue = new Tasks(env, req.logger).frictionlessManager.writeQueue;
29
+ if (!writeQueue) return res.json(noBundle);
30
+ if (!await writeQueue.cacheDetectorBundle(detectorSessionId, bundleId)) return res.json(noBundle);
31
+ const response = {
32
+ [ApiParams.useProviderBundle]: true,
33
+ [ApiParams.detectorSessionId]: detectorSessionId,
34
+ [ApiParams.detectorScript]: bundle.js,
35
+ status: "ok"
36
+ };
37
+ return res.json(response);
38
+ } catch (err) {
39
+ req.logger.warn(() => ({
40
+ msg: "assignDetectorBundle failed; falling back to bundled detector",
41
+ err
42
+ }));
43
+ return res.json({
44
+ [ApiParams.useProviderBundle]: false,
45
+ status: "ok"
46
+ });
47
+ }
48
+ };
49
+ //#endregion
50
+ export { assignDetectorBundle_default as default };
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assignDetectorBundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignDetectorBundle.test.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { initDetectorBundlePool } from "../../tasks/detection/bundlePool.js";
6
+ import assignDetectorBundle from "./assignDetectorBundle.js";
7
+ const cacheDetectorBundle = vi.fn(async (_detectorSessionId, _bundleId) => true);
8
+ vi.mock("../../tasks/index.js", () => ({
9
+ Tasks: vi.fn().mockImplementation(() => ({
10
+ frictionlessManager: { writeQueue: { cacheDetectorBundle } },
11
+ })),
12
+ }));
13
+ const makeReq = () => ({
14
+ body: { dapp: "site-key" },
15
+ logger: { warn: vi.fn(), info: vi.fn() },
16
+ });
17
+ const makeRes = () => {
18
+ const json = vi.fn((body) => body);
19
+ return { res: { json }, json };
20
+ };
21
+ const env = {};
22
+ const next = vi.fn();
23
+ describe("assignDetectorBundle", () => {
24
+ let dir;
25
+ beforeEach(() => {
26
+ dir = mkdtempSync(join(tmpdir(), "assign-"));
27
+ cacheDetectorBundle.mockClear();
28
+ });
29
+ afterEach(() => {
30
+ rmSync(dir, { recursive: true, force: true });
31
+ vi.clearAllMocks();
32
+ });
33
+ it("returns useProviderBundle:false when the pool is empty", async () => {
34
+ initDetectorBundlePool(dir);
35
+ const { res, json } = makeRes();
36
+ await assignDetectorBundle(env)(makeReq(), res, next);
37
+ expect(json).toHaveBeenCalledWith({
38
+ useProviderBundle: false,
39
+ status: "ok",
40
+ });
41
+ expect(cacheDetectorBundle).not.toHaveBeenCalled();
42
+ });
43
+ it("assigns a bundle, stores the binding, and returns the script", async () => {
44
+ writeFileSync(join(dir, "bundle-0.js"), "export default 1;");
45
+ writeFileSync(join(dir, "bundle-0.json"), JSON.stringify({ privateKey: "PK", innerConfig: "C" }));
46
+ initDetectorBundlePool(dir);
47
+ const { res, json } = makeRes();
48
+ await assignDetectorBundle(env)(makeReq(), res, next);
49
+ expect(cacheDetectorBundle).toHaveBeenCalledTimes(1);
50
+ const [detSessionId, bundleId] = cacheDetectorBundle.mock.calls[0];
51
+ expect(bundleId).toBe("bundle-0");
52
+ expect(detSessionId).toMatch(/^det-/);
53
+ const body = json.mock.calls[0]?.[0];
54
+ expect(body.useProviderBundle).toBe(true);
55
+ expect(body.detectorScript).toBe("export default 1;");
56
+ expect(body.detectorSessionId).toBe(detSessionId);
57
+ });
58
+ it("falls back to bundled when the Redis binding cannot be stored", async () => {
59
+ writeFileSync(join(dir, "bundle-0.js"), "JS");
60
+ writeFileSync(join(dir, "bundle-0.json"), JSON.stringify({ privateKey: "PK", innerConfig: "C" }));
61
+ initDetectorBundlePool(dir);
62
+ cacheDetectorBundle.mockResolvedValueOnce(false);
63
+ const { res, json } = makeRes();
64
+ await assignDetectorBundle(env)(makeReq(), res, next);
65
+ expect(json).toHaveBeenCalledWith({
66
+ useProviderBundle: false,
67
+ status: "ok",
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=assignDetectorBundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignDetectorBundle.test.js","sourceRoot":"","sources":["../../../src/api/captcha/assignDetectorBundle.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  export declare const DEFAULT_FRICTIONLESS_THRESHOLD = 0.5;
2
+ export declare const DECRYPTION_FAILED_IMAGE_ROUNDS = 3;
3
+ export declare const MISSING_TOKEN_IMAGE_ROUNDS = 3;
4
+ export declare const MISSING_HEAD_HASH_IMAGE_ROUNDS = 2;
2
5
  export declare const getRoundsFromSimScore: (simScore: number) => number;
3
6
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/constants.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,eAAO,MAAM,qBAAqB,aAAc,MAAM,KAAG,MAOxD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/constants.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAWlD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAOhD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAM5C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,eAAO,MAAM,qBAAqB,aAAc,MAAM,KAAG,MAOxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/constants.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACjE,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACV,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/constants.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAWlD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAOhD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAM5C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACjE,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACV,CAAC,CAAC"}
@@ -23,6 +23,7 @@ export type DecisionMachineInput = {
23
23
  botScore: number;
24
24
  scoreComponents: ScoreComponents;
25
25
  token: string;
26
+ headHash: string;
26
27
  botThreshold: number;
27
28
  currentUrl: string | undefined;
28
29
  iframeUrl: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"decisionMachine.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"AAeA,OAAO,EAGN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,mBAAmB,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAIrB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChC,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAIF,eAAO,MAAM,kBAAkB,UACvB,oBAAoB,UACnB,aAAa,KACnB,OAAO,CAAC,OAAO,CA2MjB,CAAC"}
1
+ {"version":3,"file":"decisionMachine.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"AAeA,OAAO,EAGN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAerD,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,mBAAmB,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IAGd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAIrB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChC,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAKF,eAAO,MAAM,kBAAkB,UACvB,oBAAoB,UACnB,aAAa,KACnB,OAAO,CAAC,OAAO,CAqSjB,CAAC"}
@@ -13,6 +13,63 @@ var runDecisionMachine = async (input, handle) => {
13
13
  const { tasks, env, clientRecord, dapp, userSitekeyIpHash, flatHeaders, ipInfo } = input;
14
14
  const { req, res } = handle;
15
15
  let { botScore, scoreComponents } = input;
16
+ if (!input.token) {
17
+ req.logger.info(() => ({
18
+ msg: "Frictionless decision",
19
+ data: {
20
+ decision: "missing_token",
21
+ captchaType: CaptchaType.image
22
+ }
23
+ }));
24
+ recordFrictionlessDecision("missing_token");
25
+ attachHoneypot(res, clientRecord);
26
+ return res.json(await tasks.frictionlessManager.sendImageCaptcha({
27
+ solvedImagesCount: Math.min(3, clientRecord.settings.imageMaxRounds),
28
+ userSitekeyIpHash,
29
+ reason: FrictionlessReason$1.MISSING_TOKEN,
30
+ siteKey: dapp,
31
+ ipInfo,
32
+ headers: flatHeaders
33
+ }));
34
+ }
35
+ if (!input.headHash) {
36
+ req.logger.info(() => ({
37
+ msg: "Frictionless decision",
38
+ data: {
39
+ decision: "missing_head_hash",
40
+ captchaType: CaptchaType.image
41
+ }
42
+ }));
43
+ recordFrictionlessDecision("missing_head_hash");
44
+ attachHoneypot(res, clientRecord);
45
+ return res.json(await tasks.frictionlessManager.sendImageCaptcha({
46
+ solvedImagesCount: Math.min(2, clientRecord.settings.imageMaxRounds),
47
+ userSitekeyIpHash,
48
+ reason: FrictionlessReason$1.MISSING_HEAD_HASH,
49
+ siteKey: dapp,
50
+ ipInfo,
51
+ headers: flatHeaders
52
+ }));
53
+ }
54
+ if (input.decryptionFailed) {
55
+ req.logger.info(() => ({
56
+ msg: "Frictionless decision",
57
+ data: {
58
+ decision: "decryption_failed",
59
+ captchaType: CaptchaType.image
60
+ }
61
+ }));
62
+ recordFrictionlessDecision("decryption_failed");
63
+ attachHoneypot(res, clientRecord);
64
+ return res.json(await tasks.frictionlessManager.sendImageCaptcha({
65
+ solvedImagesCount: Math.min(3, clientRecord.settings.imageMaxRounds),
66
+ userSitekeyIpHash,
67
+ reason: FrictionlessReason$1.DECRYPTION_FAILED,
68
+ siteKey: dapp,
69
+ ipInfo,
70
+ headers: flatHeaders
71
+ }));
72
+ }
16
73
  const userAgentMismatchResponse = await runUserAgentMismatchCheck(input, handle);
17
74
  if (userAgentMismatchResponse) return userAgentMismatchResponse;
18
75
  const contextResponse = await runContextAwareValidation(input, handle);
@@ -84,7 +141,7 @@ var runDecisionMachine = async (input, handle) => {
84
141
  recordFrictionlessDecision("timestamp_too_old");
85
142
  attachHoneypot(res, clientRecord);
86
143
  return res.json(await tasks.frictionlessManager.sendImageCaptcha({
87
- solvedImagesCount: timestampDecayFunction(input.timestamp, input.decryptionFailed, clientRecord.settings.imageMaxRounds),
144
+ solvedImagesCount: timestampDecayFunction(input.timestamp, clientRecord.settings.imageMaxRounds),
88
145
  userSitekeyIpHash,
89
146
  reason: FrictionlessReason$1.OLD_TIMESTAMP,
90
147
  siteKey: dapp,
@@ -181,7 +238,7 @@ var runUserAgentMismatchCheck = async (input, handle) => {
181
238
  recordFrictionlessDecision("user_agent_mismatch");
182
239
  attachHoneypot(res, input.clientRecord);
183
240
  return res.json(await input.tasks.frictionlessManager.sendImageCaptcha({
184
- solvedImagesCount: timestampDecayFunction(input.timestamp, input.decryptionFailed, input.clientRecord.settings.imageMaxRounds),
241
+ solvedImagesCount: timestampDecayFunction(input.timestamp, input.clientRecord.settings.imageMaxRounds),
185
242
  userSitekeyIpHash: input.userSitekeyIpHash,
186
243
  reason: FrictionlessReason$1.USER_AGENT_MISMATCH,
187
244
  siteKey: input.dapp,
@@ -1 +1 @@
1
- {"version":3,"file":"decisionMachine.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decisionMachine.js","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { SimdReadings } from "@prosopo/types";
2
2
  import type { FrictionlessManager } from "../../../tasks/frictionless/frictionlessTasks.js";
3
- export declare const decryptIncomingSimdReadings: (manager: FrictionlessManager, encrypted: string | undefined) => Promise<SimdReadings | undefined>;
3
+ export declare const decryptIncomingSimdReadings: (manager: FrictionlessManager, encrypted: string | undefined, detectorSessionId: string | undefined) => Promise<SimdReadings | undefined>;
4
4
  //# sourceMappingURL=decryptSimdReadings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decryptSimdReadings.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAE5F,eAAO,MAAM,2BAA2B,YAC9B,mBAAmB,aACjB,MAAM,GAAG,SAAS,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAWlC,CAAC"}
1
+ {"version":3,"file":"decryptSimdReadings.d.ts","sourceRoot":"","sources":["../../../../src/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAE5F,eAAO,MAAM,2BAA2B,YAC9B,mBAAmB,aACjB,MAAM,GAAG,SAAS,qBACV,MAAM,GAAG,SAAS,KACnC,OAAO,CAAC,YAAY,GAAG,SAAS,CAWlC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  //#region src/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.ts
2
- var decryptIncomingSimdReadings = async (manager, encrypted) => {
2
+ var decryptIncomingSimdReadings = async (manager, encrypted, detectorSessionId) => {
3
3
  if (!encrypted) return void 0;
4
- const decryptKeys = [...await manager.getDetectorKeys(), process.env.BOT_DECRYPTION_KEY];
5
- const decrypted = await manager.decryptSimdReadings(encrypted, decryptKeys);
4
+ const bundle = await manager.resolveBundleByDetectorSession(detectorSessionId);
5
+ const decrypted = await manager.decryptSimdReadings(encrypted, bundle);
6
6
  if (!decrypted) return void 0;
7
7
  const { timestamp: _ignored, ...readings } = decrypted;
8
8
  return readings;