@prosopo/provider 5.15.0 → 5.17.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 (236) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +52 -34
  2. package/.turbo/turbo-build$colon$tsc.log +36 -30
  3. package/.turbo/turbo-build.log +53 -35
  4. package/CHANGELOG.md +94 -0
  5. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +4 -0
  6. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +1 -1
  7. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +63 -3
  8. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +1 -1
  9. package/dist/api/blacklistRequestInspector.js +2 -2
  10. package/dist/api/captcha/getAudioCaptchaChallenge.d.ts +5 -0
  11. package/dist/api/captcha/getAudioCaptchaChallenge.d.ts.map +1 -0
  12. package/dist/api/captcha/getAudioCaptchaChallenge.js +37 -0
  13. package/dist/api/captcha/getAudioCaptchaChallenge.js.map +1 -0
  14. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts +1 -0
  15. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.d.ts.map +1 -1
  16. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +7 -2
  17. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js.map +1 -1
  18. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +1 -1
  19. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  20. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +17 -12
  21. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  22. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts +7 -2
  23. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.d.ts.map +1 -1
  24. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js +14 -4
  25. package/dist/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.js.map +1 -1
  26. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +1 -0
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
  29. package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts +5 -0
  30. package/dist/api/captcha/getIconOrderCaptchaChallenge.d.ts.map +1 -0
  31. package/dist/api/captcha/getIconOrderCaptchaChallenge.js +37 -0
  32. package/dist/api/captcha/getIconOrderCaptchaChallenge.js.map +1 -0
  33. package/dist/api/captcha/getImageCaptchaChallenge.js +2 -2
  34. package/dist/api/captcha/getPoWCaptchaChallenge.js +4 -4
  35. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts +1 -3
  36. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  37. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +55 -170
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  39. package/dist/api/captcha/interactiveCaptchaChallenge.d.ts +42 -0
  40. package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -0
  41. package/dist/api/captcha/interactiveCaptchaChallenge.js +154 -0
  42. package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -0
  43. package/dist/api/captcha/interactiveCaptchaSolution.d.ts +14 -0
  44. package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -0
  45. package/dist/api/captcha/interactiveCaptchaSolution.js +77 -0
  46. package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -0
  47. package/dist/api/captcha/maintenanceModeResponses.d.ts +4 -2
  48. package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
  49. package/dist/api/captcha/maintenanceModeResponses.js +28 -1
  50. package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
  51. package/dist/api/captcha/submitAudioCaptchaSolution.d.ts +4 -0
  52. package/dist/api/captcha/submitAudioCaptchaSolution.d.ts.map +1 -0
  53. package/dist/api/captcha/submitAudioCaptchaSolution.js +11 -0
  54. package/dist/api/captcha/submitAudioCaptchaSolution.js.map +1 -0
  55. package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts +4 -0
  56. package/dist/api/captcha/submitIconOrderCaptchaSolution.d.ts.map +1 -0
  57. package/dist/api/captcha/submitIconOrderCaptchaSolution.js +11 -0
  58. package/dist/api/captcha/submitIconOrderCaptchaSolution.js.map +1 -0
  59. package/dist/api/captcha/submitPoWCaptchaSolution.js +2 -2
  60. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts +1 -3
  61. package/dist/api/captcha/submitPuzzleCaptchaSolution.d.ts.map +1 -1
  62. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +6 -73
  63. package/dist/api/captcha/submitPuzzleCaptchaSolution.js.map +1 -1
  64. package/dist/api/captcha/trafficFilterRequestTime.d.ts +4 -1
  65. package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
  66. package/dist/api/captcha/trafficFilterRequestTime.js +3 -0
  67. package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
  68. package/dist/api/captcha.d.ts.map +1 -1
  69. package/dist/api/captcha.js +8 -0
  70. package/dist/api/captcha.js.map +1 -1
  71. package/dist/api/domainMiddleware.js +1 -1
  72. package/dist/api/ja4Middleware.js +1 -1
  73. package/dist/api/startProviderApi.js +1 -1
  74. package/dist/api/verify.d.ts.map +1 -1
  75. package/dist/api/verify.js +153 -96
  76. package/dist/api/verify.js.map +1 -1
  77. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +65 -2
  78. package/dist/cjs/api/blacklistRequestInspector.cjs +2 -2
  79. package/dist/cjs/api/captcha/getAudioCaptchaChallenge.cjs +37 -0
  80. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +6 -0
  81. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +1 -1
  82. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +15 -10
  83. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.cjs +14 -3
  84. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +1 -0
  85. package/dist/cjs/api/captcha/getIconOrderCaptchaChallenge.cjs +37 -0
  86. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +2 -2
  87. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +4 -4
  88. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +54 -169
  89. package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +154 -0
  90. package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +77 -0
  91. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +29 -0
  92. package/dist/cjs/api/captcha/submitAudioCaptchaSolution.cjs +11 -0
  93. package/dist/cjs/api/captcha/submitIconOrderCaptchaSolution.cjs +11 -0
  94. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +2 -2
  95. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +6 -73
  96. package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +3 -0
  97. package/dist/cjs/api/captcha.cjs +8 -0
  98. package/dist/cjs/api/domainMiddleware.cjs +1 -1
  99. package/dist/cjs/api/ja4Middleware.cjs +1 -1
  100. package/dist/cjs/api/startProviderApi.cjs +1 -1
  101. package/dist/cjs/api/verify.cjs +152 -95
  102. package/dist/cjs/index.cjs +1 -1
  103. package/dist/cjs/tasks/audio/audioBuffer.cjs +72 -0
  104. package/dist/cjs/tasks/audio/audioRenderer.cjs +32 -0
  105. package/dist/cjs/tasks/audioAlternative.cjs +23 -0
  106. package/dist/cjs/tasks/audioCaptcha/audioTasks.cjs +65 -0
  107. package/dist/cjs/tasks/audioCaptcha/audioTasksUtils.cjs +19 -0
  108. package/dist/cjs/tasks/captchaManager.cjs +14 -2
  109. package/dist/cjs/tasks/captchaTypeSelection.cjs +20 -3
  110. package/dist/cjs/tasks/client/clientTasks.cjs +2 -2
  111. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +40 -9
  112. package/dist/cjs/tasks/iconOrder/iconOrderRenderer.cjs +42 -0
  113. package/dist/cjs/tasks/iconOrderCaptcha/iconOrderTasks.cjs +69 -0
  114. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +8 -8
  115. package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +423 -0
  116. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +8 -8
  117. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +1 -1
  118. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +40 -486
  119. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +18 -1
  120. package/dist/cjs/tasks/tasks.cjs +6 -0
  121. package/dist/cjs/util.cjs +1 -1
  122. package/dist/index.js +2 -2
  123. package/dist/tasks/audio/audioBuffer.d.ts +23 -0
  124. package/dist/tasks/audio/audioBuffer.d.ts.map +1 -0
  125. package/dist/tasks/audio/audioBuffer.js +70 -0
  126. package/dist/tasks/audio/audioBuffer.js.map +1 -0
  127. package/dist/tasks/audio/audioRenderer.d.ts +11 -0
  128. package/dist/tasks/audio/audioRenderer.d.ts.map +1 -0
  129. package/dist/tasks/audio/audioRenderer.js +31 -0
  130. package/dist/tasks/audio/audioRenderer.js.map +1 -0
  131. package/dist/tasks/audioAlternative.d.ts +8 -0
  132. package/dist/tasks/audioAlternative.d.ts.map +1 -0
  133. package/dist/tasks/audioAlternative.js +20 -0
  134. package/dist/tasks/audioAlternative.js.map +1 -0
  135. package/dist/tasks/audioCaptcha/audioTasks.d.ts +19 -0
  136. package/dist/tasks/audioCaptcha/audioTasks.d.ts.map +1 -0
  137. package/dist/tasks/audioCaptcha/audioTasks.js +65 -0
  138. package/dist/tasks/audioCaptcha/audioTasks.js.map +1 -0
  139. package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts +3 -0
  140. package/dist/tasks/audioCaptcha/audioTasksUtils.d.ts.map +1 -0
  141. package/dist/tasks/audioCaptcha/audioTasksUtils.js +18 -0
  142. package/dist/tasks/audioCaptcha/audioTasksUtils.js.map +1 -0
  143. package/dist/tasks/captchaManager.d.ts +9 -3
  144. package/dist/tasks/captchaManager.d.ts.map +1 -1
  145. package/dist/tasks/captchaManager.js +15 -3
  146. package/dist/tasks/captchaManager.js.map +1 -1
  147. package/dist/tasks/captchaTypeSelection.d.ts +2 -1
  148. package/dist/tasks/captchaTypeSelection.d.ts.map +1 -1
  149. package/dist/tasks/captchaTypeSelection.js +21 -5
  150. package/dist/tasks/captchaTypeSelection.js.map +1 -1
  151. package/dist/tasks/client/clientTasks.js +2 -2
  152. package/dist/tasks/frictionless/frictionlessTasks.d.ts +5 -0
  153. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  154. package/dist/tasks/frictionless/frictionlessTasks.js +41 -10
  155. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  156. package/dist/tasks/iconOrder/iconOrderRenderer.d.ts +12 -0
  157. package/dist/tasks/iconOrder/iconOrderRenderer.d.ts.map +1 -0
  158. package/dist/tasks/iconOrder/iconOrderRenderer.js +40 -0
  159. package/dist/tasks/iconOrder/iconOrderRenderer.js.map +1 -0
  160. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts +22 -0
  161. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.d.ts.map +1 -0
  162. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js +69 -0
  163. package/dist/tasks/iconOrderCaptcha/iconOrderTasks.js.map +1 -0
  164. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +8 -8
  165. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts +52 -0
  166. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -0
  167. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +423 -0
  168. package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -0
  169. package/dist/tasks/powCaptcha/powTasks.js +8 -8
  170. package/dist/tasks/powCaptcha/powTasksUtils.js +1 -1
  171. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts +14 -16
  172. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  173. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +41 -487
  174. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  175. package/dist/tasks/spam/checkTrafficFilter.d.ts +4 -1
  176. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  177. package/dist/tasks/spam/checkTrafficFilter.js +18 -1
  178. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  179. package/dist/tasks/tasks.d.ts +4 -0
  180. package/dist/tasks/tasks.d.ts.map +1 -1
  181. package/dist/tasks/tasks.js +6 -0
  182. package/dist/tasks/tasks.js.map +1 -1
  183. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +7 -3
  184. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  185. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +45 -3
  186. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  187. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +4 -2
  188. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  189. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js +76 -1
  190. package/dist/tests/unit/api/admin/apiToggleMaintenanceModeEndpoint.unit.test.js.map +1 -1
  191. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js +27 -8
  192. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/constants.unit.test.js.map +1 -1
  193. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js +29 -3
  194. package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/refreshLineage.unit.test.js.map +1 -1
  195. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +20 -0
  196. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  197. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +81 -2
  198. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  199. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts +2 -0
  200. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.d.ts.map +1 -0
  201. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js +105 -0
  202. package/dist/tests/unit/tasks/audio/audioBuffer.unit.test.js.map +1 -0
  203. package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts +2 -0
  204. package/dist/tests/unit/tasks/audioAlternative.unit.test.d.ts.map +1 -0
  205. package/dist/tests/unit/tasks/audioAlternative.unit.test.js +76 -0
  206. package/dist/tests/unit/tasks/audioAlternative.unit.test.js.map +1 -0
  207. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts +2 -0
  208. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.d.ts.map +1 -0
  209. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js +259 -0
  210. package/dist/tests/unit/tasks/audioCaptcha/audioTasks.unit.test.js.map +1 -0
  211. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts +2 -0
  212. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.d.ts.map +1 -0
  213. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js +52 -0
  214. package/dist/tests/unit/tasks/audioCaptcha/audioTasksUtils.unit.test.js.map +1 -0
  215. package/dist/tests/unit/tasks/captchaManager.unit.test.js +120 -2
  216. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  217. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js +65 -6
  218. package/dist/tests/unit/tasks/captchaTypeSelection.unit.test.js.map +1 -1
  219. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js +29 -0
  220. package/dist/tests/unit/tasks/frictionless/allowedCaptchaTypes.unit.test.js.map +1 -1
  221. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +31 -0
  222. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  223. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js +27 -2
  224. package/dist/tests/unit/tasks/frictionless/refreshSwitch.unit.test.js.map +1 -1
  225. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +28 -0
  226. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -1
  227. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts +2 -0
  228. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.d.ts.map +1 -0
  229. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js +60 -0
  230. package/dist/tests/unit/tasks/iconOrder/iconOrderRenderer.unit.test.js.map +1 -0
  231. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts +2 -0
  232. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.d.ts.map +1 -0
  233. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js +225 -0
  234. package/dist/tests/unit/tasks/iconOrderCaptcha/iconOrderTasks.unit.test.js.map +1 -0
  235. package/dist/util.js +1 -1
  236. package/package.json +19 -17
@@ -0,0 +1,14 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ import type { NextFunction, Request, Response } from "express";
3
+ import type { AugmentedRequest } from "../../express.js";
4
+ import { Tasks } from "../../tasks/tasks.js";
5
+ export interface InteractiveSolutionSpec<TBody> {
6
+ label: string;
7
+ parse: (body: unknown) => TBody;
8
+ verify: (tasks: Tasks, body: TBody, submitWindowMs: number, req: Request & AugmentedRequest) => Promise<boolean>;
9
+ }
10
+ export declare const interactiveSolutionHandler: <TBody extends {
11
+ dapp: string;
12
+ user: string;
13
+ }>(env: ProviderEnvironment, spec: InteractiveSolutionSpec<TBody>) => (req: Request & AugmentedRequest, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
14
+ //# sourceMappingURL=interactiveCaptchaSolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactiveCaptchaSolution.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/interactiveCaptchaSolution.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAM7C,MAAM,WAAW,uBAAuB,CAAC,KAAK;IAE7C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;IAEhC,MAAM,EAAE,CACP,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,EACX,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,OAAO,GAAG,gBAAgB,KAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAGD,eAAO,MAAM,0BAA0B,GACrC,KAAK,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,OACvC,mBAAmB,QAClB,uBAAuB,CAAC,KAAK,CAAC,WAG/B,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,QACP,YAAY,uDA8FlB,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { validateAddr, validateSiteKey } from "../validateAddress.js";
2
+ import { Tasks } from "../../tasks/tasks.js";
3
+ import { getMaintenanceMode } from "../admin/apiToggleMaintenanceModeEndpoint.js";
4
+ import { resolveTestSiteKeyVerdict } from "../testSiteKey.js";
5
+ import { summariseRequestBody } from "../requestBodySummary.js";
6
+ import { ProsopoApiError } from "@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 (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 Tasks(env, req.logger);
19
+ try {
20
+ parsed = spec.parse(req.body);
21
+ } catch (err) {
22
+ return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
23
+ context: {
24
+ code: 400,
25
+ error: err,
26
+ body: summariseRequestBody(req)
27
+ },
28
+ i18n: req.i18n,
29
+ logger: req.logger
30
+ }));
31
+ }
32
+ const { dapp, user } = parsed;
33
+ validateSiteKey(dapp);
34
+ validateAddr(user);
35
+ const testVerdict = 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 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: summariseRequestBody(req),
63
+ msg: `Error in ${spec.label} captcha solution submission`
64
+ }));
65
+ return next(new 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
+ export { interactiveSolutionHandler };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactiveCaptchaSolution.js","sourceRoot":"","sources":["../../../src/api/captcha/interactiveCaptchaSolution.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import { type CaptchaResponseBody, type CaptchaType, type GetFrictionlessCaptchaResponse, type GetPowCaptchaResponse, type GetPuzzleCaptchaResponse, type VerificationResponse } from "@prosopo/types";
1
+ import { type CaptchaResponseBody, type CaptchaType, type GetAudioCaptchaResponse, type GetFrictionlessCaptchaResponse, type GetIconOrderCaptchaResponse, type GetPowCaptchaResponse, type GetPuzzleCaptchaResponse, type VerificationResponse } from "@prosopo/types";
2
2
  export declare const MAINTENANCE_VERIFY_SCORE = 0;
3
3
  export declare const buildMaintenanceVerificationResponse: (translate: (key: string) => string) => VerificationResponse;
4
- export declare const buildFrictionlessMaintenanceResponse: (captchaType: CaptchaType.pow | CaptchaType.image | CaptchaType.puzzle, host: string | undefined) => GetFrictionlessCaptchaResponse;
4
+ export declare const buildFrictionlessMaintenanceResponse: (captchaType: CaptchaType.pow | CaptchaType.image | CaptchaType.puzzle | CaptchaType.iconOrder, host: string | undefined) => GetFrictionlessCaptchaResponse;
5
5
  export declare const buildPowMaintenanceResponse: (user: string, dapp: string) => GetPowCaptchaResponse;
6
6
  export declare const buildImageMaintenanceResponse: () => CaptchaResponseBody;
7
7
  export declare const buildPuzzleMaintenanceResponse: (user: string, dapp: string) => Promise<GetPuzzleCaptchaResponse>;
8
+ export declare const buildAudioMaintenanceResponse: (user: string, dapp: string) => Promise<GetAudioCaptchaResponse>;
9
+ export declare const buildIconOrderMaintenanceResponse: (user: string, dapp: string) => Promise<GetIconOrderCaptchaResponse>;
8
10
  //# sourceMappingURL=maintenanceModeResponses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"maintenanceModeResponses.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/maintenanceModeResponses.ts"],"names":[],"mappings":"AAeA,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG7B,KAAK,oBAAoB,EACzB,MAAM,gBAAgB,CAAC;AAoBxB,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAiB1C,eAAO,MAAM,oCAAoC,cACrC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,KAChC,oBAID,CAAC;AAEH,eAAO,MAAM,oCAAoC,gBACnC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,QAC/D,MAAM,GAAG,SAAS,KACtB,8BAID,CAAC;AAEH,eAAO,MAAM,2BAA2B,SACjC,MAAM,QACN,MAAM,KACV,qBAWF,CAAC;AAOF,eAAO,MAAM,6BAA6B,QAAO,mBAQ/C,CAAC;AAMH,eAAO,MAAM,8BAA8B,SACpC,MAAM,QACN,MAAM,KACV,OAAO,CAAC,wBAAwB,CAgBlC,CAAC"}
1
+ {"version":3,"file":"maintenanceModeResponses.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/maintenanceModeResponses.ts"],"names":[],"mappings":"AAeA,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG7B,KAAK,oBAAoB,EACzB,MAAM,gBAAgB,CAAC;AAyBxB,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAiB1C,eAAO,MAAM,oCAAoC,cACrC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,KAChC,oBAID,CAAC;AAEH,eAAO,MAAM,oCAAoC,gBAE7C,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,SAAS,QAClB,MAAM,GAAG,SAAS,KACtB,8BAID,CAAC;AAEH,eAAO,MAAM,2BAA2B,SACjC,MAAM,QACN,MAAM,KACV,qBAWF,CAAC;AAOF,eAAO,MAAM,6BAA6B,QAAO,mBAQ/C,CAAC;AAMH,eAAO,MAAM,8BAA8B,SACpC,MAAM,QACN,MAAM,KACV,OAAO,CAAC,wBAAwB,CAgBlC,CAAC;AAIF,eAAO,MAAM,6BAA6B,SACnC,MAAM,QACN,MAAM,KACV,OAAO,CAAC,uBAAuB,CAajC,CAAC;AAIF,eAAO,MAAM,iCAAiC,SACvC,MAAM,QACN,MAAM,KACV,OAAO,CAAC,2BAA2B,CAcrC,CAAC"}
@@ -1,4 +1,6 @@
1
+ import { renderAudioClip, resolveAudioRenderSettings } from "../../tasks/audio/audioRenderer.js";
1
2
  import { renderPuzzleImages } from "../../tasks/puzzle/puzzleRenderer.js";
3
+ import { renderIconOrderImages } from "../../tasks/iconOrder/iconOrderRenderer.js";
2
4
  import { ApiParams, POW_SEPARATOR } from "@prosopo/types";
3
5
  import { randomUUID } from "node:crypto";
4
6
  //#region src/api/captcha/maintenanceModeResponses.ts
@@ -49,5 +51,30 @@ var buildPuzzleMaintenanceResponse = async (user, dapp) => {
49
51
  [ApiParams.signature]: { [ApiParams.provider]: { [ApiParams.challenge]: "" } }
50
52
  };
51
53
  };
54
+ var buildAudioMaintenanceResponse = async (user, dapp) => {
55
+ const timestamp = Date.now();
56
+ const rendered = renderAudioClip(resolveAudioRenderSettings());
57
+ return {
58
+ [ApiParams.status]: "ok",
59
+ [ApiParams.challenge]: buildChallenge(user, dapp),
60
+ [ApiParams.clip]: rendered.clip,
61
+ [ApiParams.characterCount]: rendered.characterCount,
62
+ [ApiParams.timestamp]: timestamp.toString(),
63
+ [ApiParams.signature]: { [ApiParams.provider]: { [ApiParams.challenge]: "" } }
64
+ };
65
+ };
66
+ var buildIconOrderMaintenanceResponse = async (user, dapp) => {
67
+ const timestamp = Date.now();
68
+ const images = await renderIconOrderImages();
69
+ return {
70
+ [ApiParams.status]: "ok",
71
+ [ApiParams.challenge]: buildChallenge(user, dapp),
72
+ [ApiParams.background]: images.background,
73
+ [ApiParams.legend]: images.legend,
74
+ [ApiParams.legendIconSize]: images.legendIconSize,
75
+ [ApiParams.timestamp]: timestamp.toString(),
76
+ [ApiParams.signature]: { [ApiParams.provider]: { [ApiParams.challenge]: "" } }
77
+ };
78
+ };
52
79
  //#endregion
53
- export { buildFrictionlessMaintenanceResponse, buildImageMaintenanceResponse, buildMaintenanceVerificationResponse, buildPowMaintenanceResponse, buildPuzzleMaintenanceResponse };
80
+ export { buildAudioMaintenanceResponse, buildFrictionlessMaintenanceResponse, buildIconOrderMaintenanceResponse, buildImageMaintenanceResponse, buildMaintenanceVerificationResponse, buildPowMaintenanceResponse, buildPuzzleMaintenanceResponse };
@@ -1 +1 @@
1
- {"version":3,"file":"maintenanceModeResponses.js","sourceRoot":"","sources":["../../../src/api/captcha/maintenanceModeResponses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maintenanceModeResponses.js","sourceRoot":"","sources":["../../../src/api/captcha/maintenanceModeResponses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ declare const _default: (env: ProviderEnvironment) => (req: import("express").Request & import("../../express.js").AugmentedRequest, res: import("express").Response, next: import("express").NextFunction) => Promise<void | import("express").Response<any, Record<string, any>>>;
3
+ export default _default;
4
+ //# sourceMappingURL=submitAudioCaptchaSolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitAudioCaptchaSolution.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/submitAudioCaptchaSolution.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;8BAIzC,mBAAmB;AAAxC,wBAmBI"}
@@ -0,0 +1,11 @@
1
+ import { interactiveSolutionHandler } from "./interactiveCaptchaSolution.js";
2
+ import { SubmitAudioCaptchaSolutionBody } from "@prosopo/types";
3
+ import { getIPAddress } from "@prosopo/util";
4
+ //#region src/api/captcha/submitAudioCaptchaSolution.ts
5
+ var submitAudioCaptchaSolution_default = (env) => interactiveSolutionHandler(env, {
6
+ label: "audio",
7
+ parse: (body) => 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, getIPAddress(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
10
+ //#endregion
11
+ export { submitAudioCaptchaSolution_default as default };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitAudioCaptchaSolution.js","sourceRoot":"","sources":["../../../src/api/captcha/submitAudioCaptchaSolution.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,eAAe,CAAC,GAAwB,EAAE,EAAE,CAC3C,0BAA0B,CAAC,GAAG,EAAE;IAC/B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAC5C,KAAK,CAAC,mBAAmB,CAAC,0BAA0B,CACnD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EACjC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,IAAI,CAAC,EACjB,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAC7B,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAC1B,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,CACnB;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderEnvironment } from "@prosopo/types-env";
2
+ declare const _default: (env: ProviderEnvironment) => (req: import("express").Request & import("../../express.js").AugmentedRequest, res: import("express").Response, next: import("express").NextFunction) => Promise<void | import("express").Response<any, Record<string, any>>>;
3
+ export default _default;
4
+ //# sourceMappingURL=submitIconOrderCaptchaSolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitIconOrderCaptchaSolution.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/submitIconOrderCaptchaSolution.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;8BAIzC,mBAAmB;AAAxC,wBAkBI"}
@@ -0,0 +1,11 @@
1
+ import { interactiveSolutionHandler } from "./interactiveCaptchaSolution.js";
2
+ import { SubmitIconOrderCaptchaSolutionBody } from "@prosopo/types";
3
+ import { getIPAddress } from "@prosopo/util";
4
+ //#region src/api/captcha/submitIconOrderCaptchaSolution.ts
5
+ var submitIconOrderCaptchaSolution_default = (env) => interactiveSolutionHandler(env, {
6
+ label: "icon-order",
7
+ parse: (body) => 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, getIPAddress(req.ip || ""), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
10
+ //#endregion
11
+ export { submitIconOrderCaptchaSolution_default as default };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitIconOrderCaptchaSolution.js","sourceRoot":"","sources":["../../../src/api/captcha/submitIconOrderCaptchaSolution.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,eAAe,CAAC,GAAwB,EAAE,EAAE,CAC3C,0BAA0B,CAAC,GAAG,EAAE;IAC/B,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kCAAkC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/D,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAC5C,KAAK,CAAC,uBAAuB,CAAC,8BAA8B,CAC3D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EACjC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,EACpB,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAC7B,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAC1B,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,CACnB;CACF,CAAC,CAAC"}
@@ -1,8 +1,8 @@
1
- import { validateAddr, validateSiteKey } from "../validateAddress.js";
2
1
  import { rawTlsSignalsForSession, rawTlsSignalsFromRecord } from "../rawTlsSignalsMiddleware.js";
2
+ import { derivePlatform, deriveTrafficPolicies } from "../../utils/devicePlatform.js";
3
+ import { validateAddr, validateSiteKey } from "../validateAddress.js";
3
4
  import { coerceToEnabledCaptchaType } from "../../tasks/captchaTypeSelection.js";
4
5
  import { samplePuzzleDifficulty } from "../../tasks/puzzle/puzzleDifficulty.js";
5
- import { derivePlatform, deriveTrafficPolicies } from "../../utils/devicePlatform.js";
6
6
  import { Tasks } from "../../tasks/tasks.js";
7
7
  import { getMaintenanceMode } from "../admin/apiToggleMaintenanceModeEndpoint.js";
8
8
  import { resolveTestSiteKeyVerdict } from "../testSiteKey.js";
@@ -1,6 +1,4 @@
1
1
  import type { ProviderEnvironment } from "@prosopo/types-env";
2
- import type { NextFunction, Request, Response } from "express";
3
- import type { AugmentedRequest } from "../../express.js";
4
- declare const _default: (env: ProviderEnvironment) => (req: Request & AugmentedRequest, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
2
+ declare const _default: (env: ProviderEnvironment) => (req: import("express").Request & import("../../express.js").AugmentedRequest, res: import("express").Response, next: import("express").NextFunction) => Promise<void | import("express").Response<any, Record<string, any>>>;
5
3
  export default _default;
6
4
  //# sourceMappingURL=submitPuzzleCaptchaSolution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"submitPuzzleCaptchaSolution.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/submitPuzzleCaptchaSolution.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;8BAOpC,mBAAmB,WAEjC,OAAO,GAAG,gBAAgB,OAC1B,QAAQ,QACP,YAAY;AAJpB,wBA6HG"}
1
+ {"version":3,"file":"submitPuzzleCaptchaSolution.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/submitPuzzleCaptchaSolution.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;8BAIzC,mBAAmB;AAAxC,wBAoBI"}
@@ -1,78 +1,11 @@
1
- import { validateAddr, validateSiteKey } from "../validateAddress.js";
2
- import { Tasks } from "../../tasks/tasks.js";
3
- import { getMaintenanceMode } from "../admin/apiToggleMaintenanceModeEndpoint.js";
4
- import { resolveTestSiteKeyVerdict } from "../testSiteKey.js";
5
- import { summariseRequestBody } from "../requestBodySummary.js";
6
- import { ProsopoApiError } from "@prosopo/common";
1
+ import { interactiveSolutionHandler } from "./interactiveCaptchaSolution.js";
7
2
  import { SubmitPuzzleCaptchaSolutionBody } from "@prosopo/types";
8
3
  import { flatten, getIPAddress } from "@prosopo/util";
9
4
  //#region src/api/captcha/submitPuzzleCaptchaSolution.ts
10
- var submitPuzzleCaptchaSolution_default = (env) => async (req, res, next) => {
11
- if (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 Tasks(env, req.logger);
20
- try {
21
- parsed = SubmitPuzzleCaptchaSolutionBody.parse(req.body);
22
- } catch (err) {
23
- return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
24
- context: {
25
- code: 400,
26
- error: err,
27
- body: 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
- validateSiteKey(dapp);
35
- validateAddr(user);
36
- const testVerdict = 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 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, getIPAddress(req.ip || ""), flatten(req.headers), behavioralData, salt, simdReadings, clientMetaData)
58
- };
59
- return res.json(response);
60
- } catch (err) {
61
- req.logger.error(() => ({
62
- err,
63
- body: summariseRequestBody(req),
64
- msg: "Error in puzzle captcha solution submission"
65
- }));
66
- return next(new 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) => interactiveSolutionHandler(env, {
6
+ label: "puzzle",
7
+ parse: (body) => 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, getIPAddress(req.ip || ""), flatten(req.headers), body.behavioralData, body.salt, body.simdReadings, body.clientMetaData)
9
+ });
77
10
  //#endregion
78
11
  export { submitPuzzleCaptchaSolution_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"submitPuzzleCaptchaSolution.js","sourceRoot":"","sources":["../../../src/api/captcha/submitPuzzleCaptchaSolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submitPuzzleCaptchaSolution.js","sourceRoot":"","sources":["../../../src/api/captcha/submitPuzzleCaptchaSolution.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,eAAe,CAAC,GAAwB,EAAE,EAAE,CAC3C,0BAA0B,CAAC,GAAG,EAAE;IAC/B,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5D,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAC5C,KAAK,CAAC,oBAAoB,CAAC,2BAA2B,CACrD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EACjC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAC7B,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EACpB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,CACnB;CACF,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Logger } from "@prosopo/logger";
2
- import { CaptchaType, type IPInfoResponse, type IPuzzleSettings, type ITrafficFilter } from "@prosopo/types";
2
+ import { CaptchaType, type IAudioSettings, type IIconOrderSettings, type IPInfoResponse, type IPuzzleSettings, type ITrafficFilter } from "@prosopo/types";
3
3
  import type { ClientRecord } from "@prosopo/types-database";
4
4
  import type { Response } from "express";
5
5
  import type { FrictionlessManager } from "../../tasks/frictionless/frictionlessTasks.js";
@@ -15,6 +15,9 @@ export type RequestTimeTrafficVerdict = {
15
15
  puzzleTolerance?: number;
16
16
  padBytes?: number;
17
17
  puzzleSettings?: IPuzzleSettings;
18
+ audioSettings?: IAudioSettings;
19
+ iconOrderTolerance?: number;
20
+ iconOrderSettings?: IIconOrderSettings;
18
21
  sourceCategories: ResolvedChallengePolicy["sourceCategories"];
19
22
  };
20
23
  export declare const applyTrafficFilterAtRequestTime: (ipInfo: IPInfoResponse | undefined, trafficFilter: Partial<ITrafficFilter> | undefined, logger?: Logger) => RequestTimeTrafficVerdict;
@@ -1 +1 @@
1
- {"version":3,"file":"trafficFilterRequestTime.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,WAAW,EAEX,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EACN,KAAK,uBAAuB,EAI5B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IACA,IAAI,EAAE,WAAW,CAAC;IAGlB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CAC7D,CAAC;AAeL,eAAO,MAAM,+BAA+B,WACnC,cAAc,GAAG,SAAS,iBACnB,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,WACzC,MAAM,KACb,yBAmCF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GACzC;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,yBAAyB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,eAAO,MAAM,+BAA+B,UACpC,8BAA8B,OAChC,QAAQ,KACX,OAAO,CAAC,gCAAgC,CAyD1C,CAAC"}
1
+ {"version":3,"file":"trafficFilterRequestTime.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,WAAW,EAEX,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EACN,KAAK,uBAAuB,EAI5B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IACA,IAAI,EAAE,WAAW,CAAC;IAGlB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CAC7D,CAAC;AAeL,eAAO,MAAM,+BAA+B,WACnC,cAAc,GAAG,SAAS,iBACnB,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,WACzC,MAAM,KACb,yBAsCF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GACzC;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,yBAAyB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,eAAO,MAAM,+BAA+B,UACpC,8BAA8B,OAChC,QAAQ,KACX,OAAO,CAAC,gCAAgC,CAyD1C,CAAC"}
@@ -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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trafficFilterRequestTime.js","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trafficFilterRequestTime.js","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAgB,EACf,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,MAAM,SAAS,CAAC;AAuBjB,eAAO,MAAM,YAAY,YACd,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,WAChE,OAAO,OAAO,QAAQ,QAAQ,YAAY,KAAG,IAIlD,CAAC;AAQH,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAgG9D"}
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAgB,EACf,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,MAAM,SAAS,CAAC;AA2BjB,eAAO,MAAM,YAAY,YACd,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,WAChE,OAAO,OAAO,QAAQ,QAAQ,YAAY,KAAG,IAIlD,CAAC;AAQH,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAoH9D"}
@@ -1,10 +1,14 @@
1
1
  import { padResponseMiddleware } from "../utils/tarpitPadding.js";
2
2
  import assignDetectorBundle_default from "./captcha/assignDetectorBundle.js";
3
3
  import checkSpamEmail_default from "./captcha/checkSpamEmail.js";
4
+ import getAudioCaptchaChallenge_default from "./captcha/getAudioCaptchaChallenge.js";
4
5
  import handler_default from "./captcha/getFrictionlessCaptchaChallenge/handler.js";
6
+ import getIconOrderCaptchaChallenge_default from "./captcha/getIconOrderCaptchaChallenge.js";
5
7
  import getImageCaptchaChallenge_default from "./captcha/getImageCaptchaChallenge.js";
6
8
  import getPoWCaptchaChallenge_default from "./captcha/getPoWCaptchaChallenge.js";
7
9
  import getPuzzleCaptchaChallenge_default from "./captcha/getPuzzleCaptchaChallenge.js";
10
+ import submitAudioCaptchaSolution_default from "./captcha/submitAudioCaptchaSolution.js";
11
+ import submitIconOrderCaptchaSolution_default from "./captcha/submitIconOrderCaptchaSolution.js";
8
12
  import submitImageCaptchaSolution_default from "./captcha/submitImageCaptchaSolution.js";
9
13
  import submitPoWCaptchaSolution_default from "./captcha/submitPoWCaptchaSolution.js";
10
14
  import submitPuzzleCaptchaSolution_default from "./captcha/submitPuzzleCaptchaSolution.js";
@@ -78,6 +82,10 @@ function prosopoRouter(env) {
78
82
  * Verifies a user's Puzzle solution as being approved or not
79
83
  */
80
84
  router.post(ClientApiPaths.SubmitPuzzleCaptchaSolution, asyncHandler(submitPuzzleCaptchaSolution_default(env)));
85
+ router.post(ClientApiPaths.GetAudioCaptchaChallenge, asyncHandler(getAudioCaptchaChallenge_default(env, userAccessRulesStorage)));
86
+ router.post(ClientApiPaths.SubmitAudioCaptchaSolution, asyncHandler(submitAudioCaptchaSolution_default(env)));
87
+ router.post(ClientApiPaths.GetIconOrderCaptchaChallenge, asyncHandler(getIconOrderCaptchaChallenge_default(env, userAccessRulesStorage)));
88
+ router.post(ClientApiPaths.SubmitIconOrderCaptchaSolution, asyncHandler(submitIconOrderCaptchaSolution_default(env)));
81
89
  /**
82
90
  * Checks if an email domain is spam
83
91
  */
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,OAKN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,oBAAoB,MAAM,mCAAmC,CAAC;AACrE,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,+BAA+B,MAAM,8CAA8C,CAAC;AAC3F,OAAO,4BAA4B,MAAM,2CAA2C,CAAC;AACrF,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,sBAAsB,MAAM,qCAAqC,CAAC;AACzE,OAAO,yBAAyB,MAAM,wCAAwC,CAAC;AAC/E,OAAO,0BAA0B,MAAM,yCAAyC,CAAC;AACjF,OAAO,8BAA8B,MAAM,6CAA6C,CAAC;AACzF,OAAO,0BAA0B,MAAM,yCAAyC,CAAC;AACjF,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,2BAA2B,MAAM,0CAA0C,CAAC;AAanF,MAAM,CAAC,MAAM,YAAY,GACxB,CAAC,OAAqE,EAAE,EAAE,CAC1E,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;IACzD,OAAO,CAAC,OAAO,EAAE;SACf,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACnC,KAAK,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC;AAQH,MAAM,UAAU,aAAa,CAAC,GAAwB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAKlC,IAAI,sBAEH,CAAC;IACF,IAAI,CAAC;QACJ,sBAAsB,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,yBAAyB,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACtB,GAAG,EAAE,yFAAyF;YAC9F,GAAG;SACH,CAAC,CAAC,CAAC;QACJ,sBAAsB,GAAG,SAAkB,CAAC;IAC7C,CAAC;IAKD,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,wBAAwB,EACvC,YAAY,CAAC,wBAAwB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACnE,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,0BAA0B,EACzC,YAAY,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAC7C,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,sBAAsB,EACrC,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACjE,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,wBAAwB,EACvC,YAAY,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,+BAA+B,EAC9C,YAAY,CAAC,+BAA+B,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAC1E,CAAC;IAMF,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CACnE,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CACzC,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,yBAAyB,EACxC,YAAY,CAAC,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACpE,CAAC;IAKF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,2BAA2B,EAC1C,YAAY,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAC9C,CAAC;IAEF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,wBAAwB,EACvC,YAAY,CAAC,wBAAwB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACnE,CAAC;IAEF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,0BAA0B,EACzC,YAAY,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAC7C,CAAC;IAEF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,4BAA4B,EAC3C,YAAY,CAAC,4BAA4B,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACvE,CAAC;IAEF,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,8BAA8B,EAC7C,YAAY,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CACjD,CAAC;IAKF,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAK9E,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEzB,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -4,9 +4,9 @@ import { getMaintenanceMode } from "./admin/apiToggleMaintenanceModeEndpoint.js"
4
4
  import { isReservedTestSiteKey } from "./testSiteKey.js";
5
5
  import { ProsopoApiError } from "@prosopo/common";
6
6
  import { decodeGoogleTranslateHost, parseUrl } from "@prosopo/util";
7
+ import { handleErrors } from "@prosopo/api-express-router";
7
8
  import { validateAddress } from "@prosopo/util-crypto";
8
9
  import { ZodError } from "zod";
9
- import { handleErrors } from "@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
  import { calculateJa4 } from "./ja4.js";
2
2
  import { getLogger } from "@prosopo/logger";
3
- import { randomAsHex } from "@prosopo/util-crypto";
4
3
  import { handleErrors } from "@prosopo/api-express-router";
4
+ import { randomAsHex } from "@prosopo/util-crypto";
5
5
  //#region src/api/ja4Middleware.ts
6
6
  var DEFAULT_JA4 = "ja4";
7
7
  var getJA4 = async (headers, logger) => {
@@ -1,5 +1,5 @@
1
- import { metricsMiddleware } from "./metrics.js";
2
1
  import { rawTlsSignalsMiddleware } from "./rawTlsSignalsMiddleware.js";
2
+ import { metricsMiddleware } from "./metrics.js";
3
3
  import { getVerdictCache } from "./blacklistRequestInspector.js";
4
4
  import { initDetectorBundlePool } from "../tasks/detection/bundlePool.js";
5
5
  import { blockMiddleware } from "./block.js";
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAgB,EAAmC,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AA8FhF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAgpBpE"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAgB,EAIf,KAAK,MAAM,EACX,MAAM,SAAS,CAAC;AAwSjB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAmkBpE"}