@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
@@ -1,61 +1,59 @@
1
-
2
- > @prosopo/provider@5.14.0 build
3
- > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
-
5
-
6
- > @prosopo/provider@5.14.0 build:cross-env
7
- > vite build --config vite.esm.config.ts --mode production
8
-
1
+ $ pnpm run build:cross-env --mode ${NODE_ENV:-development}
2
+ $ vite build --config vite.esm.config.ts --mode production
9
3
  ViteEsmConfig: .
10
4
  {
11
5
  tsConfigPaths: [
12
- '/home/runner/work/captcha/captcha/packages/api-route/tsconfig.json',
13
- '/home/runner/work/captcha/captcha/packages/logger/tsconfig.json',
6
+ '/home/runner/work/captcha/captcha/packages/api/tsconfig.json',
7
+ '/home/runner/work/captcha/captcha/packages/types/tsconfig.json',
8
+ '/home/runner/work/captcha/captcha/packages/locale/tsconfig.json',
14
9
  '/home/runner/work/captcha/captcha/packages/util/tsconfig.json',
10
+ '/home/runner/work/captcha/captcha/packages/util-crypto/tsconfig.json',
15
11
  '/home/runner/work/captcha/captcha/packages/api-express-router/tsconfig.json',
12
+ '/home/runner/work/captcha/captcha/packages/api-route/tsconfig.json',
13
+ '/home/runner/work/captcha/captcha/packages/logger/tsconfig.json',
16
14
  '/home/runner/work/captcha/captcha/packages/common/tsconfig.json',
17
- '/home/runner/work/captcha/captcha/packages/locale/tsconfig.json',
18
- '/home/runner/work/captcha/captcha/packages/types/tsconfig.json',
19
- '/home/runner/work/captcha/captcha/packages/util-crypto/tsconfig.json',
20
15
  '/home/runner/work/captcha/captcha/packages/env/tsconfig.json',
21
16
  '/home/runner/work/captcha/captcha/packages/ipinfo/tsconfig.json',
22
17
  '/home/runner/work/captcha/captcha/packages/database/tsconfig.json',
23
18
  '/home/runner/work/captcha/captcha/packages/types-database/tsconfig.json',
24
19
  '/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json',
25
20
  '/home/runner/work/captcha/captcha/packages/redis-client/tsconfig.json',
26
- '/home/runner/work/captcha/captcha/packages/api/tsconfig.json',
27
21
  '/home/runner/work/captcha/captcha/packages/types-env/tsconfig.json',
28
22
  '/home/runner/work/captcha/captcha/packages/keyring/tsconfig.json',
23
+ '/home/runner/work/captcha/captcha/packages/audio-assets/tsconfig.json',
24
+ '/home/runner/work/captcha/captcha/packages/puzzle-assets/tsconfig.json',
29
25
  '/home/runner/work/captcha/captcha/packages/captcha-severity/tsconfig.json',
30
26
  '/home/runner/work/captcha/captcha/packages/datasets/tsconfig.json',
27
+ '/home/runner/work/captcha/captcha/packages/icon-order-assets/tsconfig.json',
31
28
  '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json',
32
- '/home/runner/work/captcha/captcha/packages/puzzle-assets/tsconfig.json',
33
29
  '/home/runner/work/captcha/captcha/packages/web-bot-auth/tsconfig.json'
34
30
  ]
35
31
  }
36
32
  {
37
33
  externals: [
38
- '@prosopo/api-route',
39
- '@prosopo/logger',
34
+ '@prosopo/api',
35
+ '@prosopo/types',
36
+ '@prosopo/locale',
40
37
  '@prosopo/util',
38
+ '@prosopo/util-crypto',
41
39
  '@prosopo/api-express-router',
40
+ '@prosopo/api-route',
41
+ '@prosopo/logger',
42
42
  '@prosopo/common',
43
- '@prosopo/locale',
44
- '@prosopo/types',
45
- '@prosopo/util-crypto',
46
43
  '@prosopo/env',
47
44
  '@prosopo/ipinfo',
48
45
  '@prosopo/database',
49
46
  '@prosopo/types-database',
50
47
  '@prosopo/user-access-policy',
51
48
  '@prosopo/redis-client',
52
- '@prosopo/api',
53
49
  '@prosopo/types-env',
54
50
  '@prosopo/keyring',
51
+ '@prosopo/audio-assets',
52
+ '@prosopo/puzzle-assets',
55
53
  '@prosopo/captcha-severity',
56
54
  '@prosopo/datasets',
55
+ '@prosopo/icon-order-assets',
57
56
  '@prosopo/load-balancer',
58
- '@prosopo/puzzle-assets',
59
57
  '@prosopo/web-bot-auth'
60
58
  ]
61
59
  }
@@ -63,7 +61,7 @@ ViteEsmConfig: .
63
61
  vite v8.1.5 building ssr environment for production...
64
62
  Bundle build started
65
63
  
66
- ✓ 120 modules transformed.
64
+ ✓ 135 modules transformed.
67
65
  rendering chunks...
68
66
  computing gzip size...
69
67
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
@@ -81,96 +79,111 @@ dist/utils/hashUserIp.js 0.52 k
81
79
  dist/api/testSiteKey.js 0.56 kB │ gzip: 0.30 kB
82
80
  dist/utils/hashUserAgent.js 0.63 kB │ gzip: 0.39 kB
83
81
  dist/api/validateAddress.js 0.70 kB │ gzip: 0.33 kB
82
+ dist/tasks/audioCaptcha/audioTasksUtils.js 0.75 kB │ gzip: 0.44 kB
83
+ dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js 0.80 kB │ gzip: 0.46 kB
84
84
  dist/api/dnsEventUrl.js 0.80 kB │ gzip: 0.44 kB
85
85
  dist/api/ja4.js 0.80 kB │ gzip: 0.44 kB
86
+ dist/api/captcha/submitAudioCaptchaSolution.js 0.83 kB │ gzip: 0.40 kB
87
+ dist/api/captcha/submitIconOrderCaptchaSolution.js 0.84 kB │ gzip: 0.39 kB
86
88
  dist/tasks/dataset/datasetTasks.js 0.85 kB │ gzip: 0.39 kB
87
- dist/tasks/powCaptcha/powTasksUtils.js 0.89 kB │ gzip: 0.46 kB
89
+ dist/api/captcha/submitPuzzleCaptchaSolution.js 0.86 kB │ gzip: 0.41 kB
88
90
  dist/api/captcha/assetSeal.js 0.91 kB │ gzip: 0.50 kB
89
91
  dist/api/headerCheckMiddleware.js 0.91 kB │ gzip: 0.43 kB
90
92
  dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js 0.95 kB │ gzip: 0.51 kB
91
93
  dist/api/admin/apiRegisterSiteKeyEndpoint.js 1.00 kB │ gzip: 0.46 kB
92
94
  dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js 1.01 kB │ gzip: 0.45 kB
93
- dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js 1.04 kB │ gzip: 0.57 kB
94
- dist/tasks/puzzle/nativeBackground.js 1.06 kB │ gzip: 0.58 kB
95
95
  dist/api/detectorPoolBodyParser.js 1.07 kB │ gzip: 0.57 kB
96
96
  dist/api/admin/apiRemoveSiteKeysEndpoint.js 1.07 kB │ gzip: 0.48 kB
97
+ dist/tasks/powCaptcha/powTasksUtils.js 1.07 kB │ gzip: 0.54 kB
97
98
  dist/api/admin/apiRegisterSiteKeysEndpoint.js 1.08 kB │ gzip: 0.50 kB
98
99
  dist/api/admin/apiRemoveSiteKeyEndpoint.js 1.08 kB │ gzip: 0.48 kB
99
100
  dist/api/block.js 1.08 kB │ gzip: 0.46 kB
100
101
  dist/schedulers/captchaScheduler.js 1.11 kB │ gzip: 0.48 kB
101
102
  dist/utils/normalizeRequestIp.js 1.14 kB │ gzip: 0.52 kB
102
103
  dist/schedulers/getClientList.js 1.19 kB │ gzip: 0.53 kB
104
+ dist/tasks/puzzle/nativeBackground.js 1.21 kB │ gzip: 0.64 kB
103
105
  dist/api/admin/apiGetDecisionMachineEndpoint.js 1.26 kB │ gzip: 0.50 kB
104
- dist/tasks/puzzle/backgroundBuffer.js 1.26 kB │ gzip: 0.51 kB
105
106
  dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js 1.27 kB │ gzip: 0.51 kB
107
+ dist/tasks/puzzle/backgroundBuffer.js 1.27 kB │ gzip: 0.51 kB
106
108
  dist/api/admin/apiRemoveDecisionMachineEndpoint.js 1.29 kB │ gzip: 0.51 kB
109
+ dist/tasks/audio/audioRenderer.js 1.29 kB │ gzip: 0.58 kB
107
110
  dist/tasks/dataset/datasetTasksUtils.js 1.33 kB │ gzip: 0.48 kB
108
111
  dist/api/assetDocument.js 1.36 kB │ gzip: 0.75 kB
112
+ dist/tasks/audioAlternative.js 1.40 kB │ gzip: 0.56 kB
109
113
  dist/tasks/detection/assignSecret.js 1.42 kB │ gzip: 0.74 kB
110
114
  dist/utils/clientMetaData.js 1.42 kB │ gzip: 0.72 kB
111
115
  dist/api/admin/apiGetAllDecisionMachinesEndpoint.js 1.48 kB │ gzip: 0.57 kB
112
116
  dist/schedulers/updateSpamEmailDomains.js 1.52 kB │ gzip: 0.60 kB
113
117
  dist/api/admin/apiReplaceDetectorPoolEndpoint.js 1.57 kB │ gzip: 0.68 kB
114
118
  dist/api/ja4Middleware.js 1.59 kB │ gzip: 0.75 kB
119
+ dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js 1.61 kB │ gzip: 0.76 kB
115
120
  dist/utils/honeypot/encoders.js 1.62 kB │ gzip: 0.67 kB
116
121
  dist/api/admin/apiGetSessionEndpoint.js 1.66 kB │ gzip: 0.80 kB
117
- dist/api/admin/apiToggleMaintenanceModeEndpoint.js 1.66 kB │ gzip: 0.69 kB
118
122
  dist/api/adminAuthOptions.js 1.67 kB │ gzip: 0.79 kB
119
123
  dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js 1.67 kB │ gzip: 0.74 kB
120
124
  dist/utils/devicePlatform.js 1.68 kB │ gzip: 0.90 kB
121
125
  dist/api/admin/apiUpdateDecisionMachineEndpoint.js 1.68 kB │ gzip: 0.58 kB
122
126
  dist/utils/honeypot/phraseBank.js 1.69 kB │ gzip: 0.84 kB
123
127
  dist/api/handshakeTimingMiddleware.js 1.75 kB │ gzip: 0.69 kB
128
+ dist/tasks/iconOrder/iconOrderRenderer.js 1.77 kB │ gzip: 0.71 kB
124
129
  dist/tasks/spam/updateSpamEmailDomains.js 1.87 kB │ gzip: 0.77 kB
130
+ dist/api/captcha/getAudioCaptchaChallenge.js 1.87 kB │ gzip: 0.72 kB
125
131
  dist/api/admin/apiClearAllCountersEndpoint.js 1.89 kB │ gzip: 0.76 kB
126
132
  dist/api/requestBodySummary.js 1.94 kB │ gzip: 0.88 kB
127
133
  dist/tasks/frictionless/ipMatch.js 1.98 kB │ gzip: 1.02 kB
128
134
  dist/api/captcha/signedAssetsResolver.js 2.08 kB │ gzip: 0.98 kB
129
135
  dist/migrations/frictionlessLadder.js 2.12 kB │ gzip: 0.93 kB
130
136
  dist/tasks/puzzle/stratifiedSampler.js 2.14 kB │ gzip: 1.07 kB
137
+ dist/tasks/audio/audioBuffer.js 2.15 kB │ gzip: 0.83 kB
131
138
  dist/tasks/frictionless/frictionlessTasksUtils.js 2.16 kB │ gzip: 1.09 kB
132
- dist/api/captcha/maintenanceModeResponses.js 2.16 kB │ gzip: 0.73 kB
133
139
  dist/tasks/frictionless/routingMachine.js 2.20 kB │ gzip: 0.93 kB
134
- dist/tasks/captchaTypeSelection.js 2.22 kB │ gzip: 1.03 kB
140
+ dist/api/captcha/interactiveCaptchaSolution.js 2.24 kB │ gzip: 0.88 kB
135
141
  dist/api/captcha/sealedAssetsResolver.js 2.26 kB │ gzip: 0.97 kB
142
+ dist/tasks/audioCaptcha/audioTasks.js 2.30 kB │ gzip: 0.84 kB
143
+ dist/api/captcha/getIconOrderCaptchaChallenge.js 2.31 kB │ gzip: 0.79 kB
136
144
  dist/utils/dns.js 2.36 kB │ gzip: 0.95 kB
137
145
  dist/api/public.js 2.45 kB │ gzip: 0.98 kB
138
146
  dist/api/captcha/checkSpamEmail.js 2.47 kB │ gzip: 0.91 kB
139
147
  dist/tasks/puzzle/puzzleDifficulty.js 2.50 kB │ gzip: 1.09 kB
140
148
  dist/api/forwardVerify.js 2.59 kB │ gzip: 1.10 kB
141
- dist/api/captcha/submitPuzzleCaptchaSolution.js 2.65 kB │ gzip: 0.99 kB
149
+ dist/tasks/iconOrderCaptcha/iconOrderTasks.js 2.59 kB │ gzip: 0.98 kB
142
150
  dist/api/captcha/submitImageCaptchaSolution.js 2.69 kB │ gzip: 1.03 kB
143
151
  dist/api/admin/apiAdminRoutesProvider.js 2.78 kB │ gzip: 0.55 kB
144
152
  dist/index.js 2.95 kB │ gzip: 0.81 kB
145
153
  dist/api/admin/apiDnsEventEndpoint.js 3.05 kB │ gzip: 1.18 kB
146
- dist/compositeIpAddress.js 3.15 kB │ gzip: 1.34 kB
147
154
  dist/tasks/detection/getBotScore.js 3.29 kB │ gzip: 1.32 kB
148
155
  dist/api/captcha/assetSealFormat.js 3.38 kB │ gzip: 1.34 kB
149
- dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.39 kB │ gzip: 1.32 kB
156
+ dist/api/captcha/maintenanceModeResponses.js 3.39 kB │ gzip: 0.87 kB
150
157
  dist/api/captcha/assignDetectorBundle.js 3.40 kB │ gzip: 1.34 kB
151
- dist/tasks/tasks.js 3.44 kB │ gzip: 1.01 kB
158
+ dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js 3.51 kB │ gzip: 1.33 kB
159
+ dist/api/captcha/getPuzzleCaptchaChallenge.js 3.58 kB │ gzip: 1.16 kB
152
160
  dist/api/domainMiddleware.js 3.61 kB │ gzip: 1.24 kB
153
161
  dist/utils/tarpitPadding.js 3.67 kB │ gzip: 1.51 kB
154
- dist/api/rawTlsSignalsMiddleware.js 3.69 kB │ gzip: 1.13 kB
162
+ dist/tasks/puzzleCaptcha/puzzleTasks.js 3.67 kB │ gzip: 1.18 kB
163
+ dist/tasks/captchaTypeSelection.js 3.73 kB │ gzip: 1.58 kB
155
164
  dist/tasks/spam/evaluateEmailSpamRules.js 3.84 kB │ gzip: 1.59 kB
156
- dist/tasks/puzzle/puzzleRenderer.js 3.99 kB │ gzip: 1.52 kB
165
+ dist/api/admin/apiToggleMaintenanceModeEndpoint.js 3.85 kB │ gzip: 1.44 kB
166
+ dist/compositeIpAddress.js 3.87 kB │ gzip: 1.66 kB
167
+ dist/tasks/tasks.js 3.93 kB │ gzip: 1.07 kB
168
+ dist/tasks/puzzle/puzzleRenderer.js 4.02 kB │ gzip: 1.53 kB
157
169
  dist/services/ipComparison.js 4.04 kB │ gzip: 1.21 kB
158
- dist/api/captcha/trafficFilterRequestTime.js 4.06 kB │ gzip: 1.53 kB
159
170
  dist/tasks/spam/checkSpamEmail.js 4.12 kB │ gzip: 1.12 kB
160
171
  dist/api/cpuProfiler.js 4.12 kB │ gzip: 1.77 kB
161
- dist/api/captcha.js 4.15 kB │ gzip: 1.35 kB
172
+ dist/api/captcha/trafficFilterRequestTime.js 4.20 kB │ gzip: 1.56 kB
162
173
  dist/api/hardBlockVerdictCache.js 4.26 kB │ gzip: 1.72 kB
163
174
  dist/pairs.js 4.27 kB │ gzip: 1.57 kB
164
175
  dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js 4.35 kB │ gzip: 1.07 kB
165
176
  dist/tasks/dnsEvent/enrichDnsEvent.js 4.71 kB │ gzip: 1.72 kB
177
+ dist/api/captcha.js 5.02 kB │ gzip: 1.44 kB
166
178
  dist/tasks/detection/decoderPool.js 5.34 kB │ gzip: 2.02 kB
179
+ dist/api/captcha/interactiveCaptchaChallenge.js 5.47 kB │ gzip: 1.77 kB
167
180
  dist/util/usageCounters.js 5.65 kB │ gzip: 2.01 kB
168
- dist/api/captcha/getPoWCaptchaChallenge.js 6.25 kB │ gzip: 1.87 kB
181
+ dist/api/rawTlsSignalsMiddleware.js 6.25 kB │ gzip: 1.95 kB
182
+ dist/api/captcha/getPoWCaptchaChallenge.js 6.25 kB │ gzip: 1.88 kB
169
183
  dist/api/captcha/getImageCaptchaChallenge.js 6.69 kB │ gzip: 2.03 kB
170
184
  dist/api/healthzGeo.js 6.86 kB │ gzip: 2.68 kB
171
- dist/api/captcha/getPuzzleCaptchaChallenge.js 7.00 kB │ gzip: 2.01 kB
172
- dist/tasks/spam/checkTrafficFilter.js 7.63 kB │ gzip: 2.61 kB
173
- dist/api/captcha/submitPoWCaptchaSolution.js 8.70 kB │ gzip: 2.69 kB
185
+ dist/tasks/spam/checkTrafficFilter.js 8.17 kB │ gzip: 2.75 kB
186
+ dist/api/captcha/submitPoWCaptchaSolution.js 8.72 kB │ gzip: 2.71 kB
174
187
  dist/tasks/detection/bundlePool.js 8.86 kB │ gzip: 3.34 kB
175
188
  dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js 9.36 kB │ gzip: 1.80 kB
176
189
  dist/api/startProviderApi.js 10.22 kB │ gzip: 3.50 kB
@@ -179,15 +192,15 @@ dist/tasks/decisionMachine/decisionMachineRunner.js 12.28 k
179
192
  dist/util.js 12.47 kB │ gzip: 3.20 kB
180
193
  dist/api/blacklistRequestInspector.js 12.75 kB │ gzip: 4.46 kB
181
194
  dist/api/metrics.js 13.17 kB │ gzip: 4.27 kB
182
- dist/api/verify.js 16.55 kB │ gzip: 3.04 kB
183
- dist/tasks/frictionless/frictionlessTasks.js 17.86 kB │ gzip: 4.86 kB
184
- dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 18.63 kB │ gzip: 4.53 kB
185
- dist/tasks/puzzleCaptcha/puzzleTasks.js 22.85 kB │ gzip: 5.14 kB
186
- dist/tasks/powCaptcha/powTasks.js 24.56 kB │ gzip: 6.17 kB
187
- dist/tasks/captchaManager.js 24.61 kB │ gzip: 7.41 kB
188
- dist/tasks/imgCaptcha/imgCaptchaTasks.js 27.41 kB │ gzip: 6.51 kB
195
+ dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js 18.40 kB │ gzip: 4.85 kB
196
+ dist/api/verify.js 18.64 kB │ gzip: 3.57 kB
197
+ dist/tasks/frictionless/frictionlessTasks.js 19.65 kB │ gzip: 5.30 kB
198
+ dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js 19.73 kB │ gzip: 4.75 kB
199
+ dist/tasks/powCaptcha/powTasks.js 24.47 kB │ gzip: 6.18 kB
200
+ dist/tasks/captchaManager.js 25.68 kB │ gzip: 7.58 kB
201
+ dist/tasks/imgCaptcha/imgCaptchaTasks.js 27.18 kB │ gzip: 6.46 kB
189
202
 
190
- ✓ built in 219ms
203
+ ✓ built in 171ms
191
204
  [copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeBehavior.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeBehavior.js
192
205
  [copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodePayload.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodePayload.js
193
206
  [copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeSimd.js
package/CHANGELOG.md CHANGED
@@ -1,5 +1,198 @@
1
1
  # @prosopo/provider
2
2
 
3
+ ## 5.16.0
4
+ ### Minor Changes
5
+
6
+ - b299a91: An audio challenge, offered only as an accessibility alternative, like reCAPTCHA's audio option. The user hears a short sequence of spoken digits and types them in.
7
+
8
+ It is off by default and needs two switches. Prosopo has to turn on the `captchaTypeFeatureFlags.audio` feature flag for the site, which the site owner cannot do, and the site owner has to set `audioAccessibilityEnabled`. When both are on, image, puzzle and icon-order challenges show a "Use audio instead" button. Pressing it swaps the visual challenge for the audio one. After a wrong answer the user stays on audio and gets a fresh clip.
9
+
10
+ Audio is never a captcha type that can be selected or routed to. A site's `captchaType`, traffic-filter categories, Restrict rules and the site-key CLI all reject it, and routing, PoW escalation and the severity tiers leave it out. The provider only serves audio against the visual session the user was already given, and only on a site with both switches on; any other audio request is refused before the session is used up, and a request without a session is always refused.
11
+
12
+ The spoken digits are synthesised by `@prosopo/audio-assets`, so there is no recorded set of clips to collect. The answer never leaves the provider, and a challenge can be submitted and verified only once, even under concurrent requests. `@prosopo/procaptcha-audio` is the widget. It and the "Use audio instead" button are built on the shared widget code in `@prosopo/procaptcha-common`, and the provider side is built on the shared interactive-captcha code that puzzle and icon-order use.
13
+
14
+ The demo playground has audio pages, and there is an end-to-end test for it.
15
+ - e13d7a8: New captcha type: `iconOrder`. The user is shown a frame of icons and a legend, and clicks the legend's icons in the order given.
16
+
17
+ Icon-order is off by default. Only Prosopo can switch it on for a site, with the `captchaTypeFeatureFlags.iconOrder` feature flag; the site owner cannot. A site without the flag is never served icon-order by any route, and the challenge endpoint refuses it. Once the flag is on, the owner can still keep icon-order out of the frictionless flow with `frictionlessTypes.iconOrder`, the same way as image and puzzle.
18
+
19
+ The answer never leaves the provider. Icon positions are stored on the challenge record, and the widget receives only the rendered frame and legend. Grading checks order as well as position, and each icon's hit radius scales with its size. Verifying a token is single-use under concurrent requests.
20
+
21
+ `@prosopo/icon-order-assets` draws the imagery, and `@prosopo/procaptcha-icon-order` is the widget. Its text is translated into every supported language.
22
+
23
+ Puzzle and icon-order now share their server code: challenge and solution handlers, the verify route, the submit and verify pipeline, and the database record methods. The widget code they have in common moves into `@prosopo/procaptcha-common`: the lazy mount wrapper, manager expiry and dispose, spent-session handling, behavioural data encryption and trusted click coordinates. Puzzle's behaviour is unchanged.
24
+
25
+ The demo playground has icon-order pages, and there is an end-to-end test for it.
26
+ - 270395d: Allow maintenance mode to be scoped to specific site keys.
27
+
28
+ Maintenance mode was all-or-nothing for a whole provider process. If one
29
+ customer's traffic needed to be taken out of scoring, the only option was to put
30
+ the entire node into maintenance mode, which forces a pass for every other
31
+ customer on it too — so in practice it was not used.
32
+
33
+ The admin toggle now accepts an optional `siteKeys` list. With it, only those
34
+ keys are taken out of scoring and the node-wide flag is left untouched; without
35
+ it, the behaviour is exactly as before, which is what the deploy path relies on.
36
+
37
+ Scoped maintenance mode is applied in the verify handlers only after the dapp
38
+ signature has been checked, so the decision is made on a site key the caller has
39
+ proven it owns rather than one it merely asserted.
40
+
41
+ Same durability as the existing flag: per-process, cleared on restart, and set
42
+ per node.
43
+
44
+ ### Patch Changes
45
+
46
+ - Updated dependencies [b299a91]
47
+ - Updated dependencies [e13d7a8]
48
+ - Updated dependencies [270395d]
49
+ - @prosopo/types@5.14.0
50
+ - @prosopo/types-database@5.9.0
51
+ - @prosopo/database@4.2.0
52
+ - @prosopo/api@4.5.0
53
+ - @prosopo/audio-assets@0.2.0
54
+ - @prosopo/locale@3.8.0
55
+ - @prosopo/captcha-severity@1.3.0
56
+ - @prosopo/user-access-policy@3.14.16
57
+ - @prosopo/keyring@2.10.2
58
+ - @prosopo/icon-order-assets@0.2.0
59
+ - @prosopo/puzzle-assets@0.2.1
60
+ - @prosopo/api-express-router@3.2.2
61
+ - @prosopo/common@3.1.63
62
+ - @prosopo/datasets@3.2.2
63
+ - @prosopo/env@3.6.70
64
+ - @prosopo/ipinfo@0.4.15
65
+ - @prosopo/load-balancer@2.11.6
66
+ - @prosopo/types-env@2.11.16
67
+
68
+ ## 5.15.0
69
+ ### Minor Changes
70
+
71
+ - 1c13037: Add `captchaTypeFeatureFlags` to site settings, starting with `puzzle`. Setting
72
+ `puzzle: false` stops a site being served the puzzle captcha by any path: its
73
+ configured `captchaType`, `frictionlessTypes`, access policies, the traffic
74
+ filter, routing machines, PoW escalation, and puzzle sessions that already
75
+ exist. A site pinned to puzzle gets an image captcha instead (or PoW if image is
76
+ also off). The field is optional and has no stored default, so sites that never
77
+ set it behave exactly as before. The flag is meant for Prosopo staff, not site
78
+ owners.
79
+ - f961dab: Store everything needed to redraw a puzzle, so the portal can show the exact challenge a user was served.
80
+
81
+ Until now a puzzle record kept the target, the origin and the accuracy required (`tolerance`), and
82
+ nothing else. The things that decide what the puzzle actually looked like — how many decoy shapes were
83
+ scattered on it, how dark they were, how big the piece was, and which background was used — were
84
+ picked per challenge and then thrown away. So you could see that someone failed by 11px and had no way
85
+ to know whether they had been handed an easy puzzle or a nasty one.
86
+
87
+ Puzzle records now carry a `render` object with all of it: the difficulty ladder level, the piece size,
88
+ the frame geometry, the five render settings, and the two 128-bit seeds that regenerate the imagery.
89
+ Given those, the portal reproduces the background and the piece byte for byte.
90
+
91
+ To make that possible the renderer had to become reproducible. `renderPuzzle` and `createBackground`
92
+ now take an optional seed and report the one they used, instead of generating one internally and
93
+ discarding it; the background pool hands out each image together with its seed. Default behaviour is
94
+ unchanged — omit the seed and you still get a fresh random one.
95
+
96
+ The ladder level is new on the session too (`puzzleLevel`), because it was computed when the puzzle
97
+ was escalated and never written down anywhere. It is absent when the ladder did not choose the
98
+ puzzle — a site-configured puzzle or a traffic-filter override has no level.
99
+
100
+ The record is patched after the imagery is produced rather than written with the rest of the record,
101
+ because the piece size and the seeds only exist once the render has run, and the target has to be
102
+ durable before it is expressed in pixels. If that patch fails it is logged and ignored: losing a
103
+ diagnostic must not cost the user their solve. Records written before this change, and any challenge
104
+ whose render threw, simply have no `render`.
105
+
106
+ **The seeds are secret.** `puzzle-assets/src/prng.ts` explains why: they regenerate the clean
107
+ background, and a clean background can be diffed against the composite to read the target position
108
+ straight off. They were previously barred from leaving the provider entirely. They may now sit on the
109
+ captcha record, and nowhere else — not in a response, not in a log, not on the session. Anything that
110
+ exposes a puzzle record to a caller has to drop `render.backgroundSeed` and `render.renderSeed`, and
111
+ must not serve them at all while the challenge is still live. The comment in `prng.ts` now says so.
112
+
113
+ Test coverage. Three guards, each confirmed to fail when the thing it protects is broken:
114
+ `renderReplay.unit.test.ts` re-renders from the stored fields and asserts the bytes match, with one
115
+ case per field asserting that changing *only* that field changes the output — so a record missing a
116
+ field cannot pass; `puzzleRenderer.unit.test.ts` replays through the same entry points the portal would
117
+ use, which catches a background paired with the wrong seed; and `schemas.test.ts` asserts every
118
+ sub-field survives a strict-mode mongoose write, since a field absent from the schema is dropped
119
+ silently and would store nothing at all.
120
+ - 1ce9482: Cap automatic puzzle escalation one rung lower on touch devices than on pointer devices.
121
+
122
+ The puzzle's `tolerance` is an absolute CSS-pixel target and the widget renders into a fixed 300x200 container on every device, so a difficulty level asks the same placement accuracy of a fingertip as it does of a mouse.
123
+
124
+ `MAX_AUTO_ESCALATION_LEVEL_TOUCH` and `resolveMaxEscalationLevel(siteMaxLevel, isTouch)` are new in `@prosopo/captcha-severity`. The resolver takes the stricter of the site's own `puzzleMaxDifficulty` and the device ceiling, so a site set to 3 or 4 cannot out-vote the touch ceiling and a site pinned to 0 is not raised by it.
125
+
126
+ The provider now calls it from both places a puzzle difficulty is chosen: `sendCaptcha`, which reads `routingContext.platform.isMobile`, and the post-PoW escalation in `submitPoWCaptchaSolution`, which derives the platform from the originating session. That second path previously ignored the site's `puzzleMaxDifficulty` entirely and always clamped to the global ceiling; it now respects both caps.
127
+
128
+ Desktop behaviour is unchanged, and L4 stays unreachable by automatic escalation on either device.
129
+ - dcb691b: Add a refresh control to the puzzle captcha.
130
+
131
+ A user who can't solve the puzzle they were given can now ask for a different one, from a button in the puzzle's header. The replacement comes through a new frictionless session, like a wrong answer already does.
132
+
133
+ The widget tells the provider which session was refreshed (`refreshOf`). The provider then records `refreshOf`, `refreshCount` and `refreshedAfterMs` on the new session, so refresh behaviour can be scored later. After three refreshes in a row it serves an image challenge instead, with reason `PUZZLE_REFRESH_LIMIT`. It only does this if the site has image enabled. The switch only goes from puzzle to image, so a client that lies about its refreshes can only make its own challenge harder. A client that leaves the field out gets a normal session, the same as reloading the page.
134
+
135
+ The image widget's reload button now reports itself as a refresh too. That way a user who was moved onto image isn't sent back to the puzzle by their next reload.
136
+
137
+ ### Patch Changes
138
+
139
+ - 7d57d2a: A proof-of-work solve is checked against the address the challenge was issued to, and a mismatch sends the user to an image captcha instead of approving them. That check compared the whole IPv4 address, so it fired for anyone whose address moved between asking for the challenge and solving it — which is normal behaviour on mobile and on carrier NAT, where the low octet gets reassigned mid-session. One EE subscriber was seen moving one address along in four seconds.
140
+
141
+ It now compares the /24, so a reassignment inside the same pool reads as the same place on the network. IPv6 already worked this way on the /64, for the same reason, and is unchanged. A solve arriving from a genuinely different network is still caught and still escalates, so the point of the check survives.
142
+
143
+ Unit tests cover a low-octet reassignment, both ends of a /24, two different /24s, and a pair of adjacent addresses that straddle the /24 boundary.
144
+ - 2118584: Trim the comments on the puzzle difficulty device ceiling. No behaviour change.
145
+ - 80b7780: Post-PoW routing now receives the widget mode from the originating session and whether the submitted click coords were all (0,0), so a routing rule can escalate visible-mode solves that carry no real click position.
146
+ - dd4c27c: Store the whole-SYN fields the tcp-probe sidecar now reports.
147
+
148
+ The sidecar's handshake record grew from 80 to 104 bytes and the tail was reordered (prosopo/Protect#1167). chaddy was updated to read both layouts and to forward the new fields as their own headers (prosopo/chaddy#16, #17); this is the provider side of that, so the values have somewhere to land instead of being dropped at the middleware.
149
+
150
+ Twelve new fields on `Session`, all optional: `tcpOptsKinds`, `tcpOptsPresent`, `tcpOptsCount`, `tcpTsval`, `tcpTsecr`, `tcpFlags`, `tcpDataOffsetResv`, `tcpUrgPtr`, `ipIdent`, `ipTotalLen`, `ipFragFlags`, `ipTos`. They are surfaced on the decision-machine input the same way the existing TCP fields are, so routing and verify rules can read them.
151
+
152
+ `tcpOptsKinds` is stored decoded — the IANA kind number of each TCP option in wire order, `[2, 4, 8, 1, 3]` on an ordinary Linux SYN. The probe emits it packed into a u64, and a u64 reaches 2^64 while a JS number is exact only to 2^53, so the packed form could not be held without rounding; the rounding would land in the low bytes, which are the option kinds themselves. The array holds the same information and is queryable per position. It also replaces the old `tcpOptsOrder`, which packed 4 bits per option and so could not tell MSS from TCP Fast Open, or Window Scale from MD5, and could not represent MPTCP at all.
153
+
154
+ `tcpOptsFlags` and `tcpOptsOrder` are kept and still read. A pronode running an older chaddy still sends them, and years of rows hold them, so removing them would both lose the rollout window and break any routing rule already reading them. They go undefined on new sessions once the fleet is rolled.
155
+
156
+ `tcpTsval` and `tcpTsecr` are written only when the Timestamps option was actually on the SYN. A TSval of 0 is legal and a TSecr of 0 is expected, so neither can use zero to mean absent.
157
+
158
+ Six places named every one of these fields by hand — the middleware's copy onto the request, the session write, and four task files building the decision-machine bag. They now all go through one list, with a compile-time check that every field of `RawTlsSignals` is on it. That is not tidying: the Session projection comment in `@prosopo/types-database` records a field being missed in exactly this way, after which the rules reading it got `undefined` and silently never fired against real traffic.
159
+
160
+ Separately, the provider compose no longer defaults the sidecar to `prosopo/tcp-probe:latest`. The probe's reply is a bare fixed-size struct with no version in it, so the image tag is the only statement of which layout a host serves, and publishing `:latest` would change that on every pronode at the next pull with nobody running a deploy. The default is now the `0.1.1` both Protect inventories already pin.
161
+
162
+ Tests: the new headers all parse; a packed value above 2^53 decodes without losing its low bytes; the kind pairs the old encoding aliased stay distinct; a trailing end-of-option-list terminates the list rather than appearing in it; an all-zero packed value reads as absent rather than as an empty list; malformed and out-of-range values are ignored; the legacy header pair is still read; and a zero is kept rather than dropped, since `ipIdent` 0 and `tcpTsecr` 0 are real readings.
163
+ - Updated dependencies [1c13037]
164
+ - Updated dependencies [f961dab]
165
+ - Updated dependencies [a17e8eb]
166
+ - Updated dependencies [7d57d2a]
167
+ - Updated dependencies [2118584]
168
+ - Updated dependencies [1ce9482]
169
+ - Updated dependencies [6e2eb55]
170
+ - Updated dependencies [dcb691b]
171
+ - Updated dependencies [80b7780]
172
+ - Updated dependencies [dd4c27c]
173
+ - @prosopo/types@5.13.0
174
+ - @prosopo/types-database@5.8.0
175
+ - @prosopo/puzzle-assets@0.2.0
176
+ - @prosopo/util@3.3.14
177
+ - @prosopo/captcha-severity@1.2.0
178
+ - @prosopo/api@4.4.0
179
+ - @prosopo/locale@3.7.0
180
+ - @prosopo/api-express-router@3.2.1
181
+ - @prosopo/common@3.1.62
182
+ - @prosopo/database@4.1.4
183
+ - @prosopo/datasets@3.2.1
184
+ - @prosopo/env@3.6.69
185
+ - @prosopo/ipinfo@0.4.14
186
+ - @prosopo/keyring@2.10.1
187
+ - @prosopo/load-balancer@2.11.5
188
+ - @prosopo/types-env@2.11.15
189
+ - @prosopo/user-access-policy@3.14.15
190
+ - @prosopo/api-route@2.6.63
191
+ - @prosopo/logger@2.1.3
192
+ - @prosopo/redis-client@1.0.40
193
+ - @prosopo/util-crypto@13.6.0
194
+ - @prosopo/web-bot-auth@0.1.3
195
+
3
196
  ## 5.14.0
4
197
  ### Minor Changes
5
198