@prosopo/provider 5.14.0 → 5.16.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 (303) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +62 -46
  2. package/.turbo/turbo-build$colon$tsc.log +37 -34
  3. package/.turbo/turbo-build.log +63 -50
  4. package/CHANGELOG.md +193 -0
  5. package/LICENSE +201 -0
  6. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +4 -0
  7. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +1 -1
  8. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +63 -3
  9. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +1 -1
  10. package/dist/api/blacklistRequestInspector.js +2 -2
  11. package/dist/api/captcha/getAudioCaptchaChallenge.d.ts +5 -0
  12. package/dist/api/captcha/getAudioCaptchaChallenge.d.ts.map +1 -0
  13. package/dist/api/captcha/getAudioCaptchaChallenge.js +37 -0
  14. package/dist/api/captcha/getAudioCaptchaChallenge.js.map +1 -0
  15. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts +2 -1
  16. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts.map +1 -1
  17. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +11 -2
  18. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js.map +1 -1
  19. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +1 -1
  20. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  21. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +26 -15
  22. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  23. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts +5 -0
  24. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts.map +1 -0
  25. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js +20 -0
  26. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js.map +1 -0
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +1 -0
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
  30. package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts +5 -0
  31. package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts.map +1 -0
  32. package/dist/api/captcha/getIconOrderCaptchaChallenge.js +37 -0
  33. package/dist/api/captcha/getIconOrderCaptchaChallenge.js.map +1 -0
  34. package/dist/api/captcha/getImageCaptchaChallenge.js +2 -2
  35. package/dist/api/captcha/getPoWCaptchaChallenge.js +4 -4
  36. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +1 -3
  37. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +53 -146
  39. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  40. package/dist/api/captcha/interactiveCaptchaChallenge.d.ts +42 -0
  41. package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -0
  42. package/dist/api/captcha/interactiveCaptchaChallenge.js +154 -0
  43. package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -0
  44. package/dist/api/captcha/interactiveCaptchaSolution.d.ts +14 -0
  45. package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -0
  46. package/dist/api/captcha/interactiveCaptchaSolution.js +77 -0
  47. package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -0
  48. package/dist/api/captcha/maintenanceModeResponses.d.ts +4 -2
  49. package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
  50. package/dist/api/captcha/maintenanceModeResponses.js +28 -1
  51. package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
  52. package/dist/api/captcha/submitAudioCaptchaSolution.d.ts +4 -0
  53. package/dist/api/captcha/submitAudioCaptchaSolution.d.ts.map +1 -0
  54. package/dist/api/captcha/submitAudioCaptchaSolution.js +11 -0
  55. package/dist/api/captcha/submitAudioCaptchaSolution.js.map +1 -0
  56. package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts +4 -0
  57. package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts.map +1 -0
  58. package/dist/api/captcha/submitIconOrderCaptchaSolution.js +11 -0
  59. package/dist/api/captcha/submitIconOrderCaptchaSolution.js.map +1 -0
  60. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts +4 -11
  61. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  62. package/dist/api/captcha/submitPoWCaptchaSolution.js +13 -18
  63. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  64. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts +1 -3
  65. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -1
  66. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +6 -73
  67. package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
  68. package/dist/api/captcha/trafficFilterRequestTime.d.ts +4 -1
  69. package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
  70. package/dist/api/captcha/trafficFilterRequestTime.js +3 -0
  71. package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
  72. package/dist/api/captcha.d.ts.map +1 -1
  73. package/dist/api/captcha.js +8 -0
  74. package/dist/api/captcha.js.map +1 -1
  75. package/dist/api/domainMiddleware.js +1 -1
  76. package/dist/api/ja4Middleware.js +1 -1
  77. package/dist/api/rawTlsSignalsMiddleware.d.ts +14 -1
  78. package/dist/api/rawTlsSignalsMiddleware.d.ts.map +1 -1
  79. package/dist/api/rawTlsSignalsMiddleware.js +111 -23
  80. package/dist/api/rawTlsSignalsMiddleware.js.map +1 -1
  81. package/dist/api/startProviderApi.js +2 -2
  82. package/dist/api/verify.d.ts.map +1 -1
  83. package/dist/api/verify.js +153 -96
  84. package/dist/api/verify.js.map +1 -1
  85. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +65 -2
  86. package/dist/cjs/api/blacklistRequestInspector.cjs +2 -2
  87. package/dist/cjs/api/captcha/getAudioCaptchaChallenge.cjs +37 -0
  88. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +10 -0
  89. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +1 -1
  90. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +25 -14
  91. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.cjs +20 -0
  92. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +1 -0
  93. package/dist/cjs/api/captcha/getIconOrderCaptchaChallenge.cjs +37 -0
  94. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +2 -2
  95. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +4 -4
  96. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +52 -145
  97. package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +154 -0
  98. package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +77 -0
  99. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +29 -0
  100. package/dist/cjs/api/captcha/submitAudioCaptchaSolution.cjs +11 -0
  101. package/dist/cjs/api/captcha/submitIconOrderCaptchaSolution.cjs +11 -0
  102. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +11 -16
  103. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +6 -73
  104. package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +3 -0
  105. package/dist/cjs/api/captcha.cjs +8 -0
  106. package/dist/cjs/api/domainMiddleware.cjs +1 -1
  107. package/dist/cjs/api/ja4Middleware.cjs +1 -1
  108. package/dist/cjs/api/rawTlsSignalsMiddleware.cjs +111 -22
  109. package/dist/cjs/api/startProviderApi.cjs +2 -2
  110. package/dist/cjs/api/verify.cjs +152 -95
  111. package/dist/cjs/compositeIpAddress.cjs +21 -7
  112. package/dist/cjs/index.cjs +1 -1
  113. package/dist/cjs/tasks/audio/audioBuffer.cjs +72 -0
  114. package/dist/cjs/tasks/audio/audioRenderer.cjs +32 -0
  115. package/dist/cjs/tasks/audioAlternative.cjs +23 -0
  116. package/dist/cjs/tasks/audioCaptcha/audioTasks.cjs +65 -0
  117. package/dist/cjs/tasks/audioCaptcha/audioTasksUtils.cjs +19 -0
  118. package/dist/cjs/tasks/captchaManager.cjs +28 -1
  119. package/dist/cjs/tasks/captchaTypeSelection.cjs +31 -3
  120. package/dist/cjs/tasks/client/clientTasks.cjs +2 -2
  121. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +49 -26
  122. package/dist/cjs/tasks/iconOrder/iconOrderRenderer.cjs +42 -0
  123. package/dist/cjs/tasks/iconOrderCaptcha/iconOrderTasks.cjs +69 -0
  124. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +10 -17
  125. package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +423 -0
  126. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +15 -19
  127. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +3 -1
  128. package/dist/cjs/tasks/puzzle/backgroundBuffer.cjs +3 -3
  129. package/dist/cjs/tasks/puzzle/nativeBackground.cjs +12 -5
  130. package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +4 -3
  131. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +40 -493
  132. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +18 -1
  133. package/dist/cjs/tasks/tasks.cjs +6 -0
  134. package/dist/cjs/util.cjs +1 -1
  135. package/dist/compositeIpAddress.d.ts.map +1 -1
  136. package/dist/compositeIpAddress.js +21 -7
  137. package/dist/compositeIpAddress.js.map +1 -1
  138. package/dist/index.js +2 -2
  139. package/dist/tasks/audio/audioBuffer.d.ts +23 -0
  140. package/dist/tasks/audio/audioBuffer.d.ts.map +1 -0
  141. package/dist/tasks/audio/audioBuffer.js +70 -0
  142. package/dist/tasks/audio/audioBuffer.js.map +1 -0
  143. package/dist/tasks/audio/audioRenderer.d.ts +11 -0
  144. package/dist/tasks/audio/audioRenderer.d.ts.map +1 -0
  145. package/dist/tasks/audio/audioRenderer.js +31 -0
  146. package/dist/tasks/audio/audioRenderer.js.map +1 -0
  147. package/dist/tasks/audioAlternative.d.ts +8 -0
  148. package/dist/tasks/audioAlternative.d.ts.map +1 -0
  149. package/dist/tasks/audioAlternative.js +20 -0
  150. package/dist/tasks/audioAlternative.js.map +1 -0
  151. package/dist/tasks/audioCaptcha/audioTasks.d.ts +19 -0
  152. package/dist/tasks/audioCaptcha/audioTasks.d.ts.map +1 -0
  153. package/dist/tasks/audioCaptcha/audioTasks.js +65 -0
  154. package/dist/tasks/audioCaptcha/audioTasks.js.map +1 -0
  155. package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts +3 -0
  156. package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts.map +1 -0
  157. package/dist/tasks/audioCaptcha/audioTasksUtils.js +18 -0
  158. package/dist/tasks/audioCaptcha/audioTasksUtils.js.map +1 -0
  159. package/dist/tasks/captchaManager.d.ts +9 -3
  160. package/dist/tasks/captchaManager.d.ts.map +1 -1
  161. package/dist/tasks/captchaManager.js +29 -2
  162. package/dist/tasks/captchaManager.js.map +1 -1
  163. package/dist/tasks/captchaTypeSelection.d.ts +4 -2
  164. package/dist/tasks/captchaTypeSelection.d.ts.map +1 -1
  165. package/dist/tasks/captchaTypeSelection.js +32 -5
  166. package/dist/tasks/captchaTypeSelection.js.map +1 -1
  167. package/dist/tasks/client/clientTasks.js +2 -2
  168. package/dist/tasks/frictionless/frictionlessTasks.d.ts +6 -1
  169. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  170. package/dist/tasks/frictionless/frictionlessTasks.js +51 -28
  171. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  172. package/dist/tasks/frictionless/routingMachine.d.ts +1 -2
  173. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
  174. package/dist/tasks/frictionless/routingMachine.js.map +1 -1
  175. package/dist/tasks/iconOrder/iconOrderRenderer.d.ts +12 -0
  176. package/dist/tasks/iconOrder/iconOrderRenderer.d.ts.map +1 -0
  177. package/dist/tasks/iconOrder/iconOrderRenderer.js +40 -0
  178. package/dist/tasks/iconOrder/iconOrderRenderer.js.map +1 -0
  179. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts +22 -0
  180. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts.map +1 -0
  181. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js +69 -0
  182. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js.map +1 -0
  183. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  184. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +10 -17
  185. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  186. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts +52 -0
  187. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -0
  188. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +423 -0
  189. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -0
  190. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  191. package/dist/tasks/powCaptcha/powTasks.js +15 -19
  192. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  193. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +1 -0
  194. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  195. package/dist/tasks/powCaptcha/powTasksUtils.js +3 -2
  196. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  197. package/dist/tasks/puzzle/backgroundBuffer.d.ts +3 -2
  198. package/dist/tasks/puzzle/backgroundBuffer.d.ts.map +1 -1
  199. package/dist/tasks/puzzle/backgroundBuffer.js +3 -3
  200. package/dist/tasks/puzzle/backgroundBuffer.js.map +1 -1
  201. package/dist/tasks/puzzle/nativeBackground.d.ts +5 -1
  202. package/dist/tasks/puzzle/nativeBackground.d.ts.map +1 -1
  203. package/dist/tasks/puzzle/nativeBackground.js +12 -5
  204. package/dist/tasks/puzzle/nativeBackground.js.map +1 -1
  205. package/dist/tasks/puzzle/puzzleRenderer.d.ts +2 -0
  206. package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -1
  207. package/dist/tasks/puzzle/puzzleRenderer.js +4 -3
  208. package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -1
  209. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts +14 -16
  210. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  211. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +41 -494
  212. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  213. package/dist/tasks/spam/checkTrafficFilter.d.ts +4 -1
  214. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  215. package/dist/tasks/spam/checkTrafficFilter.js +18 -1
  216. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  217. package/dist/tasks/tasks.d.ts +4 -0
  218. package/dist/tasks/tasks.d.ts.map +1 -1
  219. package/dist/tasks/tasks.js +6 -0
  220. package/dist/tasks/tasks.js.map +1 -1
  221. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +7 -3
  222. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  223. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +44 -2
  224. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  225. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +4 -2
  226. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  227. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js +76 -1
  228. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js.map +1 -1
  229. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js +54 -2
  230. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js.map +1 -1
  231. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.d.ts +2 -0
  232. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.d.ts.map +1 -0
  233. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js +45 -0
  234. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js.map +1 -0
  235. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +20 -0
  236. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  237. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +15 -1
  238. package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
  239. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +174 -0
  240. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  241. package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js +96 -1
  242. package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js.map +1 -1
  243. package/dist/tests/unit/compositeIpAddress.unit.test.js +12 -3
  244. package/dist/tests/unit/compositeIpAddress.unit.test.js.map +1 -1
  245. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts +2 -0
  246. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts.map +1 -0
  247. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js +105 -0
  248. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js.map +1 -0
  249. package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts +2 -0
  250. package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts.map +1 -0
  251. package/dist/tests/unit/tasks/audioAlternative.unit.test.js +76 -0
  252. package/dist/tests/unit/tasks/audioAlternative.unit.test.js.map +1 -0
  253. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts +2 -0
  254. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts.map +1 -0
  255. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js +259 -0
  256. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js.map +1 -0
  257. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts +2 -0
  258. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts.map +1 -0
  259. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js +52 -0
  260. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js.map +1 -0
  261. package/dist/tests/unit/tasks/captchaManager.unit.test.js +171 -2
  262. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  263. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js +68 -6
  264. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js.map +1 -1
  265. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.d.ts +2 -0
  266. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.d.ts.map +1 -0
  267. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js +123 -0
  268. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js.map +1 -0
  269. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +31 -0
  270. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  271. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.d.ts +2 -0
  272. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.d.ts.map +1 -0
  273. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js +103 -0
  274. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js.map +1 -0
  275. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +28 -0
  276. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -1
  277. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts +2 -0
  278. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts.map +1 -0
  279. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js +60 -0
  280. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js.map +1 -0
  281. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts +2 -0
  282. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts.map +1 -0
  283. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js +225 -0
  284. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js.map +1 -0
  285. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +23 -1
  286. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  287. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js +1 -4
  288. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js.map +1 -1
  289. package/dist/tests/unit/tasks/puzzle/nativeBackground.unit.test.js +10 -3
  290. package/dist/tests/unit/tasks/puzzle/nativeBackground.unit.test.js.map +1 -1
  291. package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.d.ts +2 -0
  292. package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.d.ts.map +1 -0
  293. package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.js +35 -0
  294. package/dist/tests/unit/tasks/puzzle/puzzleRenderer.unit.test.js.map +1 -0
  295. package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.d.ts +2 -0
  296. package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.d.ts.map +1 -0
  297. package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.js +49 -0
  298. package/dist/tests/unit/tasks/puzzleDifficultyDeviceCap.unit.test.js.map +1 -0
  299. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +17 -14
  300. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts.map +1 -1
  301. package/dist/tests/unit/testUtils/mockProviderEnv.js.map +1 -1
  302. package/dist/util.js +1 -1
  303. package/package.json +107 -103
@@ -0,0 +1,77 @@
1
+ const require_validateAddress = require("../validateAddress.cjs");
2
+ const require_tasks = require("../../tasks/tasks.cjs");
3
+ const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
4
+ const require_testSiteKey = require("../testSiteKey.cjs");
5
+ const require_requestBodySummary = require("../requestBodySummary.cjs");
6
+ let _prosopo_common = require("@prosopo/common");
7
+ //#region src/api/captcha/interactiveCaptchaSolution.ts
8
+ /** Request handling shared by the solution endpoints of the interactive types. */
9
+ var interactiveSolutionHandler = (env, spec) => async (req, res, next) => {
10
+ if (require_apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
11
+ req.logger.info(() => ({ msg: "Maintenance mode active - returning verified" }));
12
+ return res.json({
13
+ status: "ok",
14
+ verified: true
15
+ });
16
+ }
17
+ let parsed;
18
+ const tasks = new require_tasks.Tasks(env, req.logger);
19
+ try {
20
+ parsed = spec.parse(req.body);
21
+ } catch (err) {
22
+ return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
23
+ context: {
24
+ code: 400,
25
+ error: err,
26
+ body: require_requestBodySummary.summariseRequestBody(req)
27
+ },
28
+ i18n: req.i18n,
29
+ logger: req.logger
30
+ }));
31
+ }
32
+ const { dapp, user } = parsed;
33
+ require_validateAddress.validateSiteKey(dapp);
34
+ require_validateAddress.validateAddr(user);
35
+ const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
36
+ if (testVerdict !== null) {
37
+ const response = {
38
+ status: "ok",
39
+ verified: testVerdict
40
+ };
41
+ return res.json(response);
42
+ }
43
+ try {
44
+ const clientRecord = await tasks.db.getClientRecord(dapp);
45
+ if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
46
+ context: {
47
+ code: 400,
48
+ siteKey: dapp
49
+ },
50
+ i18n: req.i18n,
51
+ logger: req.logger
52
+ }));
53
+ const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
54
+ const response = {
55
+ status: "ok",
56
+ verified: await spec.verify(tasks, parsed, submitWindowMs, req)
57
+ };
58
+ return res.json(response);
59
+ } catch (err) {
60
+ req.logger.error(() => ({
61
+ err,
62
+ body: require_requestBodySummary.summariseRequestBody(req),
63
+ msg: `Error in ${spec.label} captcha solution submission`
64
+ }));
65
+ return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
66
+ context: {
67
+ code: 500,
68
+ siteKey: req.body.dapp,
69
+ error: err
70
+ },
71
+ i18n: req.i18n,
72
+ logger: req.logger
73
+ }));
74
+ }
75
+ };
76
+ //#endregion
77
+ exports.interactiveSolutionHandler = interactiveSolutionHandler;
@@ -1,4 +1,6 @@
1
+ const require_audioRenderer = require("../../tasks/audio/audioRenderer.cjs");
1
2
  const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
3
+ const require_iconOrderRenderer = require("../../tasks/iconOrder/iconOrderRenderer.cjs");
2
4
  let _prosopo_types = require("@prosopo/types");
3
5
  let node_crypto = require("node:crypto");
4
6
  //#region src/api/captcha/maintenanceModeResponses.ts
@@ -49,8 +51,35 @@ var buildPuzzleMaintenanceResponse = async (user, dapp) => {
49
51
  [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
50
52
  };
51
53
  };
54
+ var buildAudioMaintenanceResponse = async (user, dapp) => {
55
+ const timestamp = Date.now();
56
+ const rendered = require_audioRenderer.renderAudioClip(require_audioRenderer.resolveAudioRenderSettings());
57
+ return {
58
+ [_prosopo_types.ApiParams.status]: "ok",
59
+ [_prosopo_types.ApiParams.challenge]: buildChallenge(user, dapp),
60
+ [_prosopo_types.ApiParams.clip]: rendered.clip,
61
+ [_prosopo_types.ApiParams.characterCount]: rendered.characterCount,
62
+ [_prosopo_types.ApiParams.timestamp]: timestamp.toString(),
63
+ [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
64
+ };
65
+ };
66
+ var buildIconOrderMaintenanceResponse = async (user, dapp) => {
67
+ const timestamp = Date.now();
68
+ const images = await require_iconOrderRenderer.renderIconOrderImages();
69
+ return {
70
+ [_prosopo_types.ApiParams.status]: "ok",
71
+ [_prosopo_types.ApiParams.challenge]: buildChallenge(user, dapp),
72
+ [_prosopo_types.ApiParams.background]: images.background,
73
+ [_prosopo_types.ApiParams.legend]: images.legend,
74
+ [_prosopo_types.ApiParams.legendIconSize]: images.legendIconSize,
75
+ [_prosopo_types.ApiParams.timestamp]: timestamp.toString(),
76
+ [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
77
+ };
78
+ };
52
79
  //#endregion
80
+ exports.buildAudioMaintenanceResponse = buildAudioMaintenanceResponse;
53
81
  exports.buildFrictionlessMaintenanceResponse = buildFrictionlessMaintenanceResponse;
82
+ exports.buildIconOrderMaintenanceResponse = buildIconOrderMaintenanceResponse;
54
83
  exports.buildImageMaintenanceResponse = buildImageMaintenanceResponse;
55
84
  exports.buildMaintenanceVerificationResponse = buildMaintenanceVerificationResponse;
56
85
  exports.buildPowMaintenanceResponse = buildPowMaintenanceResponse;
@@ -0,0 +1,11 @@
1
+ const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
2
+ let _prosopo_types = require("@prosopo/types");
3
+ let _prosopo_util = require("@prosopo/util");
4
+ //#region src/api/captcha/submitAudioCaptchaSolution.ts
5
+ var submitAudioCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
6
+ label: "audio",
7
+ parse: (body) => _prosopo_types.SubmitAudioCaptchaSolutionBody.parse(body),
8
+ verify: (tasks, body, submitWindowMs, req) => tasks.audioCaptchaManager.verifyAudioCaptchaSolution(body.challenge, body.signature.provider.challenge, body.answer, body.replays ?? 0, body.audioEvents ?? [], submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
10
+ //#endregion
11
+ exports.default = submitAudioCaptchaSolution_default;
@@ -0,0 +1,11 @@
1
+ const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
2
+ let _prosopo_types = require("@prosopo/types");
3
+ let _prosopo_util = require("@prosopo/util");
4
+ //#region src/api/captcha/submitIconOrderCaptchaSolution.ts
5
+ var submitIconOrderCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
6
+ label: "icon-order",
7
+ parse: (body) => _prosopo_types.SubmitIconOrderCaptchaSolutionBody.parse(body),
8
+ verify: (tasks, body, submitWindowMs, req) => tasks.iconOrderCaptchaManager.verifyIconOrderCaptchaSolution(body.challenge, body.signature.provider.challenge, body.clicks, body.iconOrderEvents, submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
10
+ //#endregion
11
+ exports.default = submitIconOrderCaptchaSolution_default;
@@ -1,11 +1,11 @@
1
+ const require_rawTlsSignalsMiddleware = require("../rawTlsSignalsMiddleware.cjs");
2
+ const require_devicePlatform = require("../../utils/devicePlatform.cjs");
1
3
  const require_validateAddress = require("../validateAddress.cjs");
2
4
  const require_captchaTypeSelection = require("../../tasks/captchaTypeSelection.cjs");
3
5
  const require_puzzleDifficulty = require("../../tasks/puzzle/puzzleDifficulty.cjs");
4
- const require_devicePlatform = require("../../utils/devicePlatform.cjs");
5
6
  const require_tasks = require("../../tasks/tasks.cjs");
6
7
  const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
7
8
  const require_testSiteKey = require("../testSiteKey.cjs");
8
- const require_rawTlsSignalsMiddleware = require("../rawTlsSignalsMiddleware.cjs");
9
9
  const require_requestBodySummary = require("../requestBodySummary.cjs");
10
10
  let _prosopo_common = require("@prosopo/common");
11
11
  let _prosopo_types = require("@prosopo/types");
@@ -100,8 +100,9 @@ var submitPoWCaptchaSolution_default = (env) => async (req, res, next) => {
100
100
  chelloToHandshakeUs: req.chelloToHandshakeUs,
101
101
  ...require_rawTlsSignalsMiddleware.rawTlsSignalsForSession(req)
102
102
  }, {
103
- frictionlessTypes: clientRecord.settings?.frictionlessTypes,
104
- imageMaxRounds: clientRecord.settings?.imageMaxRounds
103
+ allowedCaptchaTypes: (0, _prosopo_types.resolveAllowedCaptchaTypes)(clientRecord.settings),
104
+ imageMaxRounds: clientRecord.settings?.imageMaxRounds,
105
+ puzzleMaxDifficulty: clientRecord.settings?.puzzleMaxDifficulty
105
106
  });
106
107
  const response = {
107
108
  status: "ok",
@@ -144,17 +145,19 @@ var buildEscalation = async (tasks, result, challenge, perConnectionSignals, sit
144
145
  const originSession = await tasks.db.getSessionRecordBySessionId(powRecord.sessionId);
145
146
  if (!originSession) return void 0;
146
147
  const routed = result.routingOutput;
147
- const escalatedType = require_captchaTypeSelection.coerceToEnabledCaptchaType(routed.captchaType, siteConstraints?.frictionlessTypes);
148
+ const escalatedType = require_captchaTypeSelection.coerceToEnabledCaptchaType(routed.captchaType, siteConstraints?.allowedCaptchaTypes);
148
149
  if (escalatedType === _prosopo_types.CaptchaType.pow) return void 0;
149
150
  const imageMaxRounds = siteConstraints?.imageMaxRounds ?? _prosopo_types.imageMaxRoundsDefault;
150
151
  const escalationPuzzleOverrides = (() => {
151
152
  if (escalatedType !== _prosopo_types.CaptchaType.puzzle) return void 0;
152
- const level = (0, _prosopo_captcha_severity.severityToPuzzleDifficulty)(routed.solvedImagesCount ?? originSession.solvedImagesCount, tasks.config.captchas.solved.count);
153
+ const { isMobile } = require_devicePlatform.derivePlatform(originSession.headers?.["user-agent"] ?? "", originSession.webView);
154
+ const level = (0, _prosopo_captcha_severity.severityToPuzzleDifficulty)(routed.solvedImagesCount ?? originSession.solvedImagesCount, tasks.config.captchas.solved.count, (0, _prosopo_captcha_severity.resolveMaxEscalationLevel)(siteConstraints?.puzzleMaxDifficulty, isMobile));
153
155
  if (level === 0) return void 0;
154
156
  const difficulty = require_puzzleDifficulty.samplePuzzleDifficulty(level, _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS.holeDarken);
155
157
  return {
156
158
  puzzleTolerance: difficulty.tolerance,
157
- puzzle: difficulty.puzzle
159
+ puzzle: difficulty.puzzle,
160
+ puzzleLevel: difficulty.level
158
161
  };
159
162
  })();
160
163
  const selectionReason = routed.reason ?? originSession.reason;
@@ -185,15 +188,7 @@ var buildEscalation = async (tasks, result, challenge, perConnectionSignals, sit
185
188
  originSessionId: originSession.sessionId,
186
189
  tcpToChelloUs: perConnectionSignals?.tcpToChelloUs,
187
190
  chelloToHandshakeUs: perConnectionSignals?.chelloToHandshakeUs,
188
- synNs: perConnectionSignals?.synNs,
189
- synackNs: perConnectionSignals?.synackNs,
190
- ackNs: perConnectionSignals?.ackNs,
191
- observedTtl: perConnectionSignals?.observedTtl,
192
- tcpMss: perConnectionSignals?.tcpMss,
193
- tcpWscale: perConnectionSignals?.tcpWscale,
194
- tcpOptsFlags: perConnectionSignals?.tcpOptsFlags,
195
- tcpOptsOrder: perConnectionSignals?.tcpOptsOrder,
196
- tcpWindow: perConnectionSignals?.tcpWindow,
191
+ ...require_rawTlsSignalsMiddleware.rawTlsSignalsFromRecord(perConnectionSignals),
197
192
  puzzleTolerance: escalationPuzzleOverrides?.puzzleTolerance,
198
193
  puzzle: escalationPuzzleOverrides?.puzzle,
199
194
  clientMetaData: originSession.clientMetaData
@@ -1,78 +1,11 @@
1
- const require_validateAddress = require("../validateAddress.cjs");
2
- const require_tasks = require("../../tasks/tasks.cjs");
3
- const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
4
- const require_testSiteKey = require("../testSiteKey.cjs");
5
- const require_requestBodySummary = require("../requestBodySummary.cjs");
6
- let _prosopo_common = require("@prosopo/common");
1
+ const require_interactiveCaptchaSolution = require("./interactiveCaptchaSolution.cjs");
7
2
  let _prosopo_types = require("@prosopo/types");
8
3
  let _prosopo_util = require("@prosopo/util");
9
4
  //#region src/api/captcha/submitPuzzleCaptchaSolution.ts
10
- var submitPuzzleCaptchaSolution_default = (env) => async (req, res, next) => {
11
- if (require_apiToggleMaintenanceModeEndpoint.getMaintenanceMode()) {
12
- req.logger.info(() => ({ msg: "Maintenance mode active - returning verified" }));
13
- return res.json({
14
- status: "ok",
15
- verified: true
16
- });
17
- }
18
- let parsed;
19
- const tasks = new require_tasks.Tasks(env, req.logger);
20
- try {
21
- parsed = _prosopo_types.SubmitPuzzleCaptchaSolutionBody.parse(req.body);
22
- } catch (err) {
23
- return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
24
- context: {
25
- code: 400,
26
- error: err,
27
- body: require_requestBodySummary.summariseRequestBody(req)
28
- },
29
- i18n: req.i18n,
30
- logger: req.logger
31
- }));
32
- }
33
- const { challenge, signature, finalX, finalY, puzzleEvents, dapp, user, behavioralData, salt, simdReadings, clientMetaData } = parsed;
34
- require_validateAddress.validateSiteKey(dapp);
35
- require_validateAddress.validateAddr(user);
36
- const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
37
- if (testVerdict !== null) {
38
- const response = {
39
- status: "ok",
40
- verified: testVerdict
41
- };
42
- return res.json(response);
43
- }
44
- try {
45
- const clientRecord = await tasks.db.getClientRecord(dapp);
46
- if (!clientRecord) return next(new _prosopo_common.ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
47
- context: {
48
- code: 400,
49
- siteKey: dapp
50
- },
51
- i18n: req.i18n,
52
- logger: req.logger
53
- }));
54
- const submitWindowMs = clientRecord.settings.solutionTimeout ?? clientRecord.settings.verifiedTimeout;
55
- const response = {
56
- status: "ok",
57
- verified: await tasks.puzzleCaptchaManager.verifyPuzzleCaptchaSolution(challenge, signature.provider.challenge, finalX, finalY, puzzleEvents, submitWindowMs, signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), behavioralData, salt, simdReadings, clientMetaData)
58
- };
59
- return res.json(response);
60
- } catch (err) {
61
- req.logger.error(() => ({
62
- err,
63
- body: require_requestBodySummary.summariseRequestBody(req),
64
- msg: "Error in puzzle captcha solution submission"
65
- }));
66
- return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", {
67
- context: {
68
- code: 500,
69
- siteKey: req.body.dapp,
70
- error: err
71
- },
72
- i18n: req.i18n,
73
- logger: req.logger
74
- }));
75
- }
76
- };
5
+ var submitPuzzleCaptchaSolution_default = (env) => require_interactiveCaptchaSolution.interactiveSolutionHandler(env, {
6
+ label: "puzzle",
7
+ parse: (body) => _prosopo_types.SubmitPuzzleCaptchaSolutionBody.parse(body),
8
+ verify: (tasks, body, submitWindowMs, req) => tasks.puzzleCaptchaManager.verifyPuzzleCaptchaSolution(body.challenge, body.signature.provider.challenge, body.finalX, body.finalY, body.puzzleEvents, submitWindowMs, body.signature.user.timestamp, (0, _prosopo_util.getIPAddress)(req.ip || ""), (0, _prosopo_util.flatten)(req.headers), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
77
10
  //#endregion
78
11
  exports.default = submitPuzzleCaptchaSolution_default;
@@ -41,6 +41,9 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
41
41
  puzzleTolerance: resolved.puzzleTolerance,
42
42
  padBytes,
43
43
  puzzleSettings: resolved.puzzleSettings,
44
+ audioSettings: resolved.audioSettings,
45
+ iconOrderTolerance: resolved.iconOrderTolerance,
46
+ iconOrderSettings: resolved.iconOrderSettings,
44
47
  sourceCategories: resolved.sourceCategories
45
48
  };
46
49
  };
@@ -2,10 +2,14 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  const require_tarpitPadding = require("../utils/tarpitPadding.cjs");
3
3
  const require_assignDetectorBundle = require("./captcha/assignDetectorBundle.cjs");
4
4
  const require_checkSpamEmail = require("./captcha/checkSpamEmail.cjs");
5
+ const require_getAudioCaptchaChallenge = require("./captcha/getAudioCaptchaChallenge.cjs");
5
6
  const require_handler = require("./captcha/getFrictionlessCaptchaChallenge/handler.cjs");
7
+ const require_getIconOrderCaptchaChallenge = require("./captcha/getIconOrderCaptchaChallenge.cjs");
6
8
  const require_getImageCaptchaChallenge = require("./captcha/getImageCaptchaChallenge.cjs");
7
9
  const require_getPoWCaptchaChallenge = require("./captcha/getPoWCaptchaChallenge.cjs");
8
10
  const require_getPuzzleCaptchaChallenge = require("./captcha/getPuzzleCaptchaChallenge.cjs");
11
+ const require_submitAudioCaptchaSolution = require("./captcha/submitAudioCaptchaSolution.cjs");
12
+ const require_submitIconOrderCaptchaSolution = require("./captcha/submitIconOrderCaptchaSolution.cjs");
9
13
  const require_submitImageCaptchaSolution = require("./captcha/submitImageCaptchaSolution.cjs");
10
14
  const require_submitPoWCaptchaSolution = require("./captcha/submitPoWCaptchaSolution.cjs");
11
15
  const require_submitPuzzleCaptchaSolution = require("./captcha/submitPuzzleCaptchaSolution.cjs");
@@ -80,6 +84,10 @@ function prosopoRouter(env) {
80
84
  * Verifies a user's Puzzle solution as being approved or not
81
85
  */
82
86
  router.post(_prosopo_types.ClientApiPaths.SubmitPuzzleCaptchaSolution, asyncHandler(require_submitPuzzleCaptchaSolution.default(env)));
87
+ router.post(_prosopo_types.ClientApiPaths.GetAudioCaptchaChallenge, asyncHandler(require_getAudioCaptchaChallenge.default(env, userAccessRulesStorage)));
88
+ router.post(_prosopo_types.ClientApiPaths.SubmitAudioCaptchaSolution, asyncHandler(require_submitAudioCaptchaSolution.default(env)));
89
+ router.post(_prosopo_types.ClientApiPaths.GetIconOrderCaptchaChallenge, asyncHandler(require_getIconOrderCaptchaChallenge.default(env, userAccessRulesStorage)));
90
+ router.post(_prosopo_types.ClientApiPaths.SubmitIconOrderCaptchaSolution, asyncHandler(require_submitIconOrderCaptchaSolution.default(env)));
83
91
  /**
84
92
  * Checks if an email domain is spam
85
93
  */
@@ -4,9 +4,9 @@ const require_apiToggleMaintenanceModeEndpoint = require("./admin/apiToggleMaint
4
4
  const require_testSiteKey = require("./testSiteKey.cjs");
5
5
  let _prosopo_common = require("@prosopo/common");
6
6
  let _prosopo_util = require("@prosopo/util");
7
+ let _prosopo_api_express_router = require("@prosopo/api-express-router");
7
8
  let _prosopo_util_crypto = require("@prosopo/util-crypto");
8
9
  let zod = require("zod");
9
- let _prosopo_api_express_router = require("@prosopo/api-express-router");
10
10
  //#region src/api/domainMiddleware.ts
11
11
  var domainMiddleware = (env) => {
12
12
  let cachedTasks;
@@ -1,7 +1,7 @@
1
1
  const require_ja4 = require("./ja4.cjs");
2
2
  let _prosopo_logger = require("@prosopo/logger");
3
- let _prosopo_util_crypto = require("@prosopo/util-crypto");
4
3
  let _prosopo_api_express_router = require("@prosopo/api-express-router");
4
+ let _prosopo_util_crypto = require("@prosopo/util-crypto");
5
5
  //#region src/api/ja4Middleware.ts
6
6
  var DEFAULT_JA4 = "ja4";
7
7
  var getJA4 = async (headers, logger) => {
@@ -7,9 +7,44 @@ var HEADER_ACK_NS = "x-tls-ack-ns";
7
7
  var HEADER_OBSERVED_TTL = "x-tls-observed-ttl";
8
8
  var HEADER_TCP_MSS = "x-tls-tcp-mss";
9
9
  var HEADER_TCP_WSCALE = "x-tls-tcp-wscale";
10
+ var HEADER_TCP_WINDOW = "x-tls-tcp-window";
11
+ var HEADER_TCP_OPTS_KINDS = "x-tls-tcp-opts-kinds";
12
+ var HEADER_TCP_OPTS_PRESENT = "x-tls-tcp-opts-present";
13
+ var HEADER_TCP_OPTS_COUNT = "x-tls-tcp-opts-count";
14
+ var HEADER_TCP_TSVAL = "x-tls-tcp-tsval";
15
+ var HEADER_TCP_TSECR = "x-tls-tcp-tsecr";
16
+ var HEADER_TCP_FLAGS = "x-tls-tcp-flags";
17
+ var HEADER_TCP_DATA_OFFSET_RESV = "x-tls-tcp-data-offset-resv";
18
+ var HEADER_TCP_URG_PTR = "x-tls-tcp-urg-ptr";
19
+ var HEADER_IP_IDENT = "x-tls-ip-ident";
20
+ var HEADER_IP_TOTAL_LEN = "x-tls-ip-total-len";
21
+ var HEADER_IP_FRAG_FLAGS = "x-tls-ip-frag-flags";
22
+ var HEADER_IP_TOS = "x-tls-ip-tos";
10
23
  var HEADER_TCP_OPTS_FLAGS = "x-tls-tcp-opts-flags";
11
24
  var HEADER_TCP_OPTS_ORDER = "x-tls-tcp-opts-order";
12
- var HEADER_TCP_WINDOW = "x-tls-tcp-window";
25
+ var RAW_TLS_SIGNAL_KEYS = [
26
+ "synNs",
27
+ "synackNs",
28
+ "ackNs",
29
+ "observedTtl",
30
+ "tcpMss",
31
+ "tcpWscale",
32
+ "tcpWindow",
33
+ "tcpOptsKinds",
34
+ "tcpOptsPresent",
35
+ "tcpOptsCount",
36
+ "tcpTsval",
37
+ "tcpTsecr",
38
+ "tcpFlags",
39
+ "tcpDataOffsetResv",
40
+ "tcpUrgPtr",
41
+ "ipIdent",
42
+ "ipTotalLen",
43
+ "ipFragFlags",
44
+ "ipTos",
45
+ "tcpOptsFlags",
46
+ "tcpOptsOrder"
47
+ ];
13
48
  var parseIntHeader = (raw, logger, headerName, max) => {
14
49
  if (raw === void 0) return;
15
50
  const value = Array.isArray(raw) ? raw[0] : raw;
@@ -31,6 +66,46 @@ var MAX_NS = 2 ** 63;
31
66
  var MAX_U8 = 255;
32
67
  var MAX_U16 = 65535;
33
68
  var MAX_U32 = 4294967295;
69
+ var OPTS_KINDS_SLOTS = 8;
70
+ var MAX_U64 = (1n << 64n) - 1n;
71
+ var parseOptsKindsHeader = (raw, logger) => {
72
+ if (raw === void 0) return;
73
+ const value = Array.isArray(raw) ? raw[0] : raw;
74
+ if (value === void 0 || !/^\d+$/.test(value)) {
75
+ if (value !== void 0) logger.debug(() => ({
76
+ msg: "Ignoring malformed raw TLS signal header",
77
+ data: {
78
+ header: HEADER_TCP_OPTS_KINDS,
79
+ raw: value
80
+ }
81
+ }));
82
+ return;
83
+ }
84
+ let packed;
85
+ try {
86
+ packed = BigInt(value);
87
+ } catch {
88
+ return;
89
+ }
90
+ if (packed > MAX_U64) {
91
+ logger.debug(() => ({
92
+ msg: "Ignoring out-of-range raw TLS signal header",
93
+ data: {
94
+ header: HEADER_TCP_OPTS_KINDS,
95
+ raw: value
96
+ }
97
+ }));
98
+ return;
99
+ }
100
+ if (packed === 0n) return;
101
+ const kinds = [];
102
+ for (let slot = 0; slot < OPTS_KINDS_SLOTS; slot++) {
103
+ const kind = Number(packed >> BigInt(slot * 8) & 255n);
104
+ if (kind === 0) break;
105
+ kinds.push(kind);
106
+ }
107
+ return kinds.length > 0 ? kinds : void 0;
108
+ };
34
109
  var getRawTlsSignals = (headers, logger) => {
35
110
  const log = logger ?? (0, _prosopo_logger.getLogger)("info", "provider:raw-tls-signals");
36
111
  return {
@@ -40,37 +115,50 @@ var getRawTlsSignals = (headers, logger) => {
40
115
  observedTtl: parseIntHeader(headers[HEADER_OBSERVED_TTL], log, HEADER_OBSERVED_TTL, MAX_U8),
41
116
  tcpMss: parseIntHeader(headers[HEADER_TCP_MSS], log, HEADER_TCP_MSS, MAX_U16),
42
117
  tcpWscale: parseIntHeader(headers[HEADER_TCP_WSCALE], log, HEADER_TCP_WSCALE, MAX_U8),
118
+ tcpWindow: parseIntHeader(headers[HEADER_TCP_WINDOW], log, HEADER_TCP_WINDOW, MAX_U16),
119
+ tcpOptsKinds: parseOptsKindsHeader(headers[HEADER_TCP_OPTS_KINDS], log),
120
+ tcpOptsPresent: parseIntHeader(headers[HEADER_TCP_OPTS_PRESENT], log, HEADER_TCP_OPTS_PRESENT, MAX_U16),
121
+ tcpOptsCount: parseIntHeader(headers[HEADER_TCP_OPTS_COUNT], log, HEADER_TCP_OPTS_COUNT, MAX_U8),
122
+ tcpTsval: parseIntHeader(headers[HEADER_TCP_TSVAL], log, HEADER_TCP_TSVAL, MAX_U32),
123
+ tcpTsecr: parseIntHeader(headers[HEADER_TCP_TSECR], log, HEADER_TCP_TSECR, MAX_U32),
124
+ tcpFlags: parseIntHeader(headers[HEADER_TCP_FLAGS], log, HEADER_TCP_FLAGS, MAX_U8),
125
+ tcpDataOffsetResv: parseIntHeader(headers[HEADER_TCP_DATA_OFFSET_RESV], log, HEADER_TCP_DATA_OFFSET_RESV, MAX_U8),
126
+ tcpUrgPtr: parseIntHeader(headers[HEADER_TCP_URG_PTR], log, HEADER_TCP_URG_PTR, MAX_U16),
127
+ ipIdent: parseIntHeader(headers[HEADER_IP_IDENT], log, HEADER_IP_IDENT, MAX_U16),
128
+ ipTotalLen: parseIntHeader(headers[HEADER_IP_TOTAL_LEN], log, HEADER_IP_TOTAL_LEN, MAX_U16),
129
+ ipFragFlags: parseIntHeader(headers[HEADER_IP_FRAG_FLAGS], log, HEADER_IP_FRAG_FLAGS, MAX_U16),
130
+ ipTos: parseIntHeader(headers[HEADER_IP_TOS], log, HEADER_IP_TOS, MAX_U8),
43
131
  tcpOptsFlags: parseIntHeader(headers[HEADER_TCP_OPTS_FLAGS], log, HEADER_TCP_OPTS_FLAGS, MAX_U8),
44
- tcpOptsOrder: parseIntHeader(headers[HEADER_TCP_OPTS_ORDER], log, HEADER_TCP_OPTS_ORDER, MAX_U32),
45
- tcpWindow: parseIntHeader(headers[HEADER_TCP_WINDOW], log, HEADER_TCP_WINDOW, MAX_U16)
132
+ tcpOptsOrder: parseIntHeader(headers[HEADER_TCP_OPTS_ORDER], log, HEADER_TCP_OPTS_ORDER, MAX_U32)
46
133
  };
47
134
  };
48
- var rawTlsSignalsForSession = (req) => {
135
+ var rawTlsSignalsForSession = (req) => rawTlsSignalsFromRecord(req);
136
+ /**
137
+ * Pull the raw TLS signals out of a persisted Session — or anything shaped
138
+ * like one — for a decision machine's `raw` bag, or to carry forward onto a
139
+ * new Session record.
140
+ *
141
+ * Six call sites used to name every field by hand, so adding one to the
142
+ * probe meant remembering six places; the fields that were forgotten read as
143
+ * `undefined` and the rules gating on them silently never fired.
144
+ */
145
+ var rawTlsSignalsFromRecord = (record) => {
49
146
  const out = {};
50
- if (req.synNs !== void 0) out.synNs = req.synNs;
51
- if (req.synackNs !== void 0) out.synackNs = req.synackNs;
52
- if (req.ackNs !== void 0) out.ackNs = req.ackNs;
53
- if (req.observedTtl !== void 0) out.observedTtl = req.observedTtl;
54
- if (req.tcpMss !== void 0) out.tcpMss = req.tcpMss;
55
- if (req.tcpWscale !== void 0) out.tcpWscale = req.tcpWscale;
56
- if (req.tcpOptsFlags !== void 0) out.tcpOptsFlags = req.tcpOptsFlags;
57
- if (req.tcpOptsOrder !== void 0) out.tcpOptsOrder = req.tcpOptsOrder;
58
- if (req.tcpWindow !== void 0) out.tcpWindow = req.tcpWindow;
147
+ if (!record) return out;
148
+ for (const key of RAW_TLS_SIGNAL_KEYS) {
149
+ const value = record[key];
150
+ if (value !== void 0) Object.assign(out, { [key]: value });
151
+ }
59
152
  return out;
60
153
  };
61
154
  var rawTlsSignalsMiddleware = (env) => {
62
155
  return async (req, res, next) => {
63
156
  try {
64
157
  const signals = getRawTlsSignals(req.headers, req.logger);
65
- if (signals.synNs !== void 0) req.synNs = signals.synNs;
66
- if (signals.synackNs !== void 0) req.synackNs = signals.synackNs;
67
- if (signals.ackNs !== void 0) req.ackNs = signals.ackNs;
68
- if (signals.observedTtl !== void 0) req.observedTtl = signals.observedTtl;
69
- if (signals.tcpMss !== void 0) req.tcpMss = signals.tcpMss;
70
- if (signals.tcpWscale !== void 0) req.tcpWscale = signals.tcpWscale;
71
- if (signals.tcpOptsFlags !== void 0) req.tcpOptsFlags = signals.tcpOptsFlags;
72
- if (signals.tcpOptsOrder !== void 0) req.tcpOptsOrder = signals.tcpOptsOrder;
73
- if (signals.tcpWindow !== void 0) req.tcpWindow = signals.tcpWindow;
158
+ for (const key of RAW_TLS_SIGNAL_KEYS) {
159
+ const value = signals[key];
160
+ if (value !== void 0) Object.assign(req, { [key]: value });
161
+ }
74
162
  if (Object.values(signals).some((v) => v !== void 0)) req.logger = req.logger.with(signals, "rawTlsSignals");
75
163
  next();
76
164
  } catch (err) {
@@ -81,4 +169,5 @@ var rawTlsSignalsMiddleware = (env) => {
81
169
  //#endregion
82
170
  exports.getRawTlsSignals = getRawTlsSignals;
83
171
  exports.rawTlsSignalsForSession = rawTlsSignalsForSession;
172
+ exports.rawTlsSignalsFromRecord = rawTlsSignalsFromRecord;
84
173
  exports.rawTlsSignalsMiddleware = rawTlsSignalsMiddleware;
@@ -1,9 +1,9 @@
1
1
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_rawTlsSignalsMiddleware = require("./rawTlsSignalsMiddleware.cjs");
2
3
  const require_metrics = require("./metrics.cjs");
3
4
  const require_blacklistRequestInspector = require("./blacklistRequestInspector.cjs");
4
5
  const require_bundlePool = require("../tasks/detection/bundlePool.cjs");
5
6
  const require_block = require("./block.cjs");
6
- const require_rawTlsSignalsMiddleware = require("./rawTlsSignalsMiddleware.cjs");
7
7
  const require_captcha = require("./captcha.cjs");
8
8
  const require_verify = require("./verify.cjs");
9
9
  const require_ja4Middleware = require("./ja4Middleware.cjs");
@@ -20,13 +20,13 @@ const require_ipInfoMiddleware = require("./ipInfoMiddleware.cjs");
20
20
  const require_robotsMiddleware = require("./robotsMiddleware.cjs");
21
21
  let _prosopo_logger = require("@prosopo/logger");
22
22
  let _prosopo_types = require("@prosopo/types");
23
+ let _prosopo_api_express_router = require("@prosopo/api-express-router");
23
24
  let node_fs = require("node:fs");
24
25
  node_fs = require_runtime.__toESM(node_fs, 1);
25
26
  let node_path = require("node:path");
26
27
  node_path = require_runtime.__toESM(node_path, 1);
27
28
  let node_https = require("node:https");
28
29
  node_https = require_runtime.__toESM(node_https, 1);
29
- let _prosopo_api_express_router = require("@prosopo/api-express-router");
30
30
  let express = require("express");
31
31
  express = require_runtime.__toESM(express, 1);
32
32
  let node_url = require("node:url");