@prosopo/provider 3.12.14 → 3.13.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 (356) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +338 -0
  3. package/dist/api/captcha/getImageCaptchaChallenge.js +150 -0
  4. package/dist/api/captcha/getPoWCaptchaChallenge.js +156 -0
  5. package/dist/api/captcha/submitImageCaptchaSolution.js +87 -0
  6. package/dist/api/captcha/submitPoWCaptchaSolution.js +77 -0
  7. package/dist/api/captcha.js +18 -696
  8. package/dist/api/verify.js +2 -1
  9. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +337 -0
  10. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +149 -0
  11. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +155 -0
  12. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +86 -0
  13. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +76 -0
  14. package/dist/cjs/api/captcha.cjs +17 -695
  15. package/dist/cjs/api/verify.cjs +2 -1
  16. package/dist/cjs/index.cjs +2 -0
  17. package/dist/cjs/schedulers/setClientEntropy.cjs +36 -0
  18. package/dist/cjs/tasks/captchaManager.cjs +2 -1
  19. package/dist/cjs/tasks/client/clientTasks.cjs +15 -0
  20. package/dist/cjs/tasks/detection/decodePayload.cjs +379 -609
  21. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +28 -9
  22. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +8 -2
  23. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +2 -2
  24. package/dist/cjs/tasks/tasks.cjs +1 -0
  25. package/dist/cjs/utils/hashUserIp.cjs +9 -0
  26. package/dist/index.js +2 -0
  27. package/dist/schedulers/setClientEntropy.js +29 -24
  28. package/dist/tasks/captchaManager.js +2 -1
  29. package/dist/tasks/client/clientTasks.js +16 -1
  30. package/dist/tasks/detection/decodePayload.js +379 -609
  31. package/dist/tasks/detection/getBotScore.js +2 -2
  32. package/dist/tasks/frictionless/frictionlessTasks.js +29 -10
  33. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +8 -2
  34. package/dist/tasks/powCaptcha/powTasks.js +2 -2
  35. package/dist/tasks/tasks.js +1 -0
  36. package/dist/utils/hashUserIp.js +9 -0
  37. package/package.json +18 -18
  38. package/coverage/base.css +0 -224
  39. package/coverage/block-navigation.js +0 -87
  40. package/coverage/clover.xml +0 -4278
  41. package/coverage/coverage-final.json +0 -42
  42. package/coverage/favicon.png +0 -0
  43. package/coverage/index.html +0 -311
  44. package/coverage/prettify.css +0 -1
  45. package/coverage/prettify.js +0 -2
  46. package/coverage/sort-arrow-sprite.png +0 -0
  47. package/coverage/sorter.js +0 -210
  48. package/coverage/src/api/admin/apiAdminRoutesProvider.ts.html +0 -214
  49. package/coverage/src/api/admin/apiRegisterSiteKeyEndpoint.ts.html +0 -259
  50. package/coverage/src/api/admin/apiRemoveDetectorKeyEndpoint.ts.html +0 -283
  51. package/coverage/src/api/admin/apiToggleMaintenanceModeEndpoint.ts.html +0 -334
  52. package/coverage/src/api/admin/apiUpdateDetectorKeyEndpoint.ts.html +0 -298
  53. package/coverage/src/api/admin/createApiAdminRoutesProvider.ts.html +0 -163
  54. package/coverage/src/api/admin/index.html +0 -191
  55. package/coverage/src/api/blacklistRequestInspector.ts.html +0 -751
  56. package/coverage/src/api/block.ts.html +0 -187
  57. package/coverage/src/api/captcha.ts.html +0 -2803
  58. package/coverage/src/api/domainMiddleware.ts.html +0 -493
  59. package/coverage/src/api/headerCheckMiddleware.ts.html +0 -256
  60. package/coverage/src/api/ignoreMiddleware.ts.html +0 -181
  61. package/coverage/src/api/index.html +0 -266
  62. package/coverage/src/api/ja4Middleware.ts.html +0 -400
  63. package/coverage/src/api/public.ts.html +0 -343
  64. package/coverage/src/api/robotsMiddleware.ts.html +0 -157
  65. package/coverage/src/api/validateAddress.ts.html +0 -214
  66. package/coverage/src/api/verify.ts.html +0 -871
  67. package/coverage/src/compositeIpAddress.ts.html +0 -340
  68. package/coverage/src/index.html +0 -161
  69. package/coverage/src/index.ts.html +0 -175
  70. package/coverage/src/pairs.ts.html +0 -238
  71. package/coverage/src/rules/index.html +0 -116
  72. package/coverage/src/rules/lang.ts.html +0 -187
  73. package/coverage/src/schedulers/captchaScheduler.ts.html +0 -250
  74. package/coverage/src/schedulers/getClientList.ts.html +0 -271
  75. package/coverage/src/schedulers/index.html +0 -131
  76. package/coverage/src/services/index.html +0 -131
  77. package/coverage/src/services/ipComparison.ts.html +0 -685
  78. package/coverage/src/services/ipInfo.ts.html +0 -490
  79. package/coverage/src/tasks/captchaManager.ts.html +0 -865
  80. package/coverage/src/tasks/client/clientTasks.ts.html +0 -1381
  81. package/coverage/src/tasks/client/index.html +0 -116
  82. package/coverage/src/tasks/dataset/datasetTasks.ts.html +0 -268
  83. package/coverage/src/tasks/dataset/datasetTasksUtils.ts.html +0 -271
  84. package/coverage/src/tasks/dataset/index.html +0 -131
  85. package/coverage/src/tasks/detection/decodePayload.js.html +0 -127
  86. package/coverage/src/tasks/detection/getBotScore.ts.html +0 -244
  87. package/coverage/src/tasks/detection/index.html +0 -131
  88. package/coverage/src/tasks/frictionless/frictionlessTasks.ts.html +0 -1216
  89. package/coverage/src/tasks/frictionless/frictionlessTasksUtils.ts.html +0 -247
  90. package/coverage/src/tasks/frictionless/index.html +0 -131
  91. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasks.ts.html +0 -1972
  92. package/coverage/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts.html +0 -232
  93. package/coverage/src/tasks/imgCaptcha/index.html +0 -131
  94. package/coverage/src/tasks/index.html +0 -146
  95. package/coverage/src/tasks/index.ts.html +0 -127
  96. package/coverage/src/tasks/powCaptcha/index.html +0 -131
  97. package/coverage/src/tasks/powCaptcha/powTasks.ts.html +0 -961
  98. package/coverage/src/tasks/powCaptcha/powTasksUtils.ts.html +0 -244
  99. package/coverage/src/tasks/tasks.ts.html +0 -388
  100. package/coverage/src/util.ts.html +0 -1627
  101. package/coverage/src/utils/hashUserAgent.ts.html +0 -184
  102. package/coverage/src/utils/index.html +0 -116
  103. package/dist/api/admin/apiAdminRoutesProvider.d.ts +0 -9
  104. package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +0 -1
  105. package/dist/api/admin/apiAdminRoutesProvider.js.map +0 -1
  106. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts +0 -14
  107. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +0 -1
  108. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +0 -1
  109. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts +0 -23
  110. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +0 -1
  111. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +0 -1
  112. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts +0 -13
  113. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.d.ts.map +0 -1
  114. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js.map +0 -1
  115. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts +0 -14
  116. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +0 -1
  117. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +0 -1
  118. package/dist/api/admin/createApiAdminRoutesProvider.d.ts +0 -4
  119. package/dist/api/admin/createApiAdminRoutesProvider.d.ts.map +0 -1
  120. package/dist/api/admin/createApiAdminRoutesProvider.js.map +0 -1
  121. package/dist/api/blacklistRequestInspector.d.ts +0 -19
  122. package/dist/api/blacklistRequestInspector.d.ts.map +0 -1
  123. package/dist/api/blacklistRequestInspector.js.map +0 -1
  124. package/dist/api/block.d.ts +0 -3
  125. package/dist/api/block.d.ts.map +0 -1
  126. package/dist/api/block.js.map +0 -1
  127. package/dist/api/captcha.d.ts +0 -4
  128. package/dist/api/captcha.d.ts.map +0 -1
  129. package/dist/api/captcha.js.map +0 -1
  130. package/dist/api/domainMiddleware.d.ts +0 -4
  131. package/dist/api/domainMiddleware.d.ts.map +0 -1
  132. package/dist/api/domainMiddleware.js.map +0 -1
  133. package/dist/api/headerCheckMiddleware.d.ts +0 -4
  134. package/dist/api/headerCheckMiddleware.d.ts.map +0 -1
  135. package/dist/api/headerCheckMiddleware.js.map +0 -1
  136. package/dist/api/ignoreMiddleware.d.ts +0 -3
  137. package/dist/api/ignoreMiddleware.d.ts.map +0 -1
  138. package/dist/api/ignoreMiddleware.js.map +0 -1
  139. package/dist/api/ja4Middleware.d.ts +0 -10
  140. package/dist/api/ja4Middleware.d.ts.map +0 -1
  141. package/dist/api/ja4Middleware.js.map +0 -1
  142. package/dist/api/public.d.ts +0 -4
  143. package/dist/api/public.d.ts.map +0 -1
  144. package/dist/api/public.js.map +0 -1
  145. package/dist/api/robotsMiddleware.d.ts +0 -3
  146. package/dist/api/robotsMiddleware.d.ts.map +0 -1
  147. package/dist/api/robotsMiddleware.js.map +0 -1
  148. package/dist/api/validateAddress.d.ts +0 -5
  149. package/dist/api/validateAddress.d.ts.map +0 -1
  150. package/dist/api/validateAddress.js.map +0 -1
  151. package/dist/api/verify.d.ts +0 -4
  152. package/dist/api/verify.d.ts.map +0 -1
  153. package/dist/api/verify.js.map +0 -1
  154. package/dist/compositeIpAddress.d.ts +0 -5
  155. package/dist/compositeIpAddress.d.ts.map +0 -1
  156. package/dist/compositeIpAddress.js.map +0 -1
  157. package/dist/index.d.ts +0 -17
  158. package/dist/index.d.ts.map +0 -1
  159. package/dist/index.js.map +0 -1
  160. package/dist/pairs.d.ts +0 -3
  161. package/dist/pairs.d.ts.map +0 -1
  162. package/dist/pairs.js.map +0 -1
  163. package/dist/rules/lang.d.ts +0 -3
  164. package/dist/rules/lang.d.ts.map +0 -1
  165. package/dist/rules/lang.js.map +0 -1
  166. package/dist/schedulers/captchaScheduler.d.ts +0 -4
  167. package/dist/schedulers/captchaScheduler.d.ts.map +0 -1
  168. package/dist/schedulers/captchaScheduler.js.map +0 -1
  169. package/dist/schedulers/getClientList.d.ts +0 -4
  170. package/dist/schedulers/getClientList.d.ts.map +0 -1
  171. package/dist/schedulers/getClientList.js.map +0 -1
  172. package/dist/schedulers/setClientEntropy.d.ts +0 -4
  173. package/dist/schedulers/setClientEntropy.d.ts.map +0 -1
  174. package/dist/schedulers/setClientEntropy.js.map +0 -1
  175. package/dist/services/ipComparison.d.ts +0 -3
  176. package/dist/services/ipComparison.d.ts.map +0 -1
  177. package/dist/services/ipComparison.js.map +0 -1
  178. package/dist/services/ipInfo.d.ts +0 -3
  179. package/dist/services/ipInfo.d.ts.map +0 -1
  180. package/dist/services/ipInfo.js.map +0 -1
  181. package/dist/tasks/captchaManager.d.ts +0 -34
  182. package/dist/tasks/captchaManager.d.ts.map +0 -1
  183. package/dist/tasks/captchaManager.js.map +0 -1
  184. package/dist/tasks/client/clientTasks.d.ts +0 -21
  185. package/dist/tasks/client/clientTasks.d.ts.map +0 -1
  186. package/dist/tasks/client/clientTasks.js.map +0 -1
  187. package/dist/tasks/dataset/datasetTasks.d.ts +0 -13
  188. package/dist/tasks/dataset/datasetTasks.d.ts.map +0 -1
  189. package/dist/tasks/dataset/datasetTasks.js.map +0 -1
  190. package/dist/tasks/dataset/datasetTasksUtils.d.ts +0 -3
  191. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +0 -1
  192. package/dist/tasks/dataset/datasetTasksUtils.js.map +0 -1
  193. package/dist/tasks/detection/decodePayload.d.ts +0 -5
  194. package/dist/tasks/detection/decodePayload.d.ts.map +0 -1
  195. package/dist/tasks/detection/decodePayload.js.map +0 -1
  196. package/dist/tasks/detection/getBotScore.d.ts +0 -20
  197. package/dist/tasks/detection/getBotScore.d.ts.map +0 -1
  198. package/dist/tasks/detection/getBotScore.js.map +0 -1
  199. package/dist/tasks/frictionless/frictionlessTasks.d.ts +0 -67
  200. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +0 -1
  201. package/dist/tasks/frictionless/frictionlessTasks.js.map +0 -1
  202. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts +0 -6
  203. package/dist/tasks/frictionless/frictionlessTasksUtils.d.ts.map +0 -1
  204. package/dist/tasks/frictionless/frictionlessTasksUtils.js.map +0 -1
  205. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +0 -30
  206. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +0 -1
  207. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +0 -1
  208. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +0 -7
  209. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +0 -1
  210. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +0 -1
  211. package/dist/tasks/index.d.ts +0 -2
  212. package/dist/tasks/index.d.ts.map +0 -1
  213. package/dist/tasks/index.js.map +0 -1
  214. package/dist/tasks/powCaptcha/powTasks.d.ts +0 -17
  215. package/dist/tasks/powCaptcha/powTasks.d.ts.map +0 -1
  216. package/dist/tasks/powCaptcha/powTasks.js.map +0 -1
  217. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +0 -3
  218. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +0 -1
  219. package/dist/tasks/powCaptcha/powTasksUtils.js.map +0 -1
  220. package/dist/tasks/tasks.d.ts +0 -25
  221. package/dist/tasks/tasks.d.ts.map +0 -1
  222. package/dist/tasks/tasks.js.map +0 -1
  223. package/dist/tests/index.d.ts +0 -2
  224. package/dist/tests/index.d.ts.map +0 -1
  225. package/dist/tests/index.js +0 -2
  226. package/dist/tests/index.js.map +0 -1
  227. package/dist/tests/integration/accessRules.integration.test.d.ts +0 -2
  228. package/dist/tests/integration/accessRules.integration.test.d.ts.map +0 -1
  229. package/dist/tests/integration/accessRules.integration.test.js +0 -588
  230. package/dist/tests/integration/accessRules.integration.test.js.map +0 -1
  231. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts +0 -2
  232. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.d.ts.map +0 -1
  233. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +0 -60
  234. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +0 -1
  235. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts +0 -2
  236. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.d.ts.map +0 -1
  237. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +0 -368
  238. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +0 -1
  239. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +0 -2
  240. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +0 -1
  241. package/dist/tests/integration/imgCaptcha.integration.test.js +0 -272
  242. package/dist/tests/integration/imgCaptcha.integration.test.js.map +0 -1
  243. package/dist/tests/integration/ipValidation.integration.test.d.ts +0 -2
  244. package/dist/tests/integration/ipValidation.integration.test.d.ts.map +0 -1
  245. package/dist/tests/integration/ipValidation.integration.test.js +0 -75
  246. package/dist/tests/integration/ipValidation.integration.test.js.map +0 -1
  247. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +0 -32
  248. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +0 -1
  249. package/dist/tests/integration/mocks/solvedTestCaptchas.js +0 -1046
  250. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +0 -1
  251. package/dist/tests/integration/powCaptcha.integration.test.d.ts +0 -2
  252. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +0 -1
  253. package/dist/tests/integration/powCaptcha.integration.test.js +0 -308
  254. package/dist/tests/integration/powCaptcha.integration.test.js.map +0 -1
  255. package/dist/tests/integration/registerSitekey.d.ts +0 -3
  256. package/dist/tests/integration/registerSitekey.d.ts.map +0 -1
  257. package/dist/tests/integration/registerSitekey.js +0 -24
  258. package/dist/tests/integration/registerSitekey.js.map +0 -1
  259. package/dist/tests/integration/userAccessPolicy.d.ts +0 -2
  260. package/dist/tests/integration/userAccessPolicy.d.ts.map +0 -1
  261. package/dist/tests/integration/userAccessPolicy.js +0 -2
  262. package/dist/tests/integration/userAccessPolicy.js.map +0 -1
  263. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts +0 -2
  264. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.d.ts.map +0 -1
  265. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +0 -60
  266. package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +0 -1
  267. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +0 -2
  268. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +0 -1
  269. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +0 -43
  270. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +0 -1
  271. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts +0 -2
  272. package/dist/tests/unit/api/ja4Middleware.unit.test.d.ts.map +0 -1
  273. package/dist/tests/unit/api/ja4Middleware.unit.test.js +0 -57
  274. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +0 -1
  275. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts +0 -2
  276. package/dist/tests/unit/compositeIpAddress.unit.test.d.ts.map +0 -1
  277. package/dist/tests/unit/compositeIpAddress.unit.test.js +0 -86
  278. package/dist/tests/unit/compositeIpAddress.unit.test.js.map +0 -1
  279. package/dist/tests/unit/pairs.unit.test.d.ts +0 -2
  280. package/dist/tests/unit/pairs.unit.test.d.ts.map +0 -1
  281. package/dist/tests/unit/pairs.unit.test.js +0 -83
  282. package/dist/tests/unit/pairs.unit.test.js.map +0 -1
  283. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +0 -2
  284. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +0 -1
  285. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +0 -75
  286. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +0 -1
  287. package/dist/tests/unit/services/ipComparison.unit.test.d.ts +0 -2
  288. package/dist/tests/unit/services/ipComparison.unit.test.d.ts.map +0 -1
  289. package/dist/tests/unit/services/ipComparison.unit.test.js +0 -258
  290. package/dist/tests/unit/services/ipComparison.unit.test.js.map +0 -1
  291. package/dist/tests/unit/services/ipInfo.unit.test.d.ts +0 -2
  292. package/dist/tests/unit/services/ipInfo.unit.test.d.ts.map +0 -1
  293. package/dist/tests/unit/services/ipInfo.unit.test.js +0 -210
  294. package/dist/tests/unit/services/ipInfo.unit.test.js.map +0 -1
  295. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts +0 -2
  296. package/dist/tests/unit/tasks/captchaManager.unit.test.d.ts.map +0 -1
  297. package/dist/tests/unit/tasks/captchaManager.unit.test.js +0 -311
  298. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +0 -1
  299. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +0 -2
  300. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +0 -1
  301. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +0 -289
  302. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +0 -1
  303. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +0 -2
  304. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +0 -1
  305. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +0 -92
  306. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +0 -1
  307. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +0 -2
  308. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +0 -1
  309. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +0 -75
  310. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +0 -1
  311. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts +0 -2
  312. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.d.ts.map +0 -1
  313. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +0 -143
  314. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +0 -1
  315. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts +0 -2
  316. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.d.ts.map +0 -1
  317. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +0 -145
  318. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +0 -1
  319. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts +0 -2
  320. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.d.ts.map +0 -1
  321. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js +0 -64
  322. package/dist/tests/unit/tasks/frictionless/frictionlessTasksUtils.unit.test.js.map +0 -1
  323. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +0 -2
  324. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +0 -1
  325. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +0 -388
  326. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +0 -1
  327. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +0 -2
  328. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +0 -1
  329. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +0 -46
  330. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +0 -1
  331. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +0 -2
  332. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +0 -1
  333. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +0 -216
  334. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +0 -1
  335. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +0 -2
  336. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +0 -1
  337. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +0 -69
  338. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +0 -1
  339. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts +0 -2
  340. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.d.ts.map +0 -1
  341. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js +0 -505
  342. package/dist/tests/unit/util.evaluateIpValidationRules.unit.test.js.map +0 -1
  343. package/dist/tests/unit/util.ipDistance.unit.test.d.ts +0 -2
  344. package/dist/tests/unit/util.ipDistance.unit.test.d.ts.map +0 -1
  345. package/dist/tests/unit/util.ipDistance.unit.test.js +0 -93
  346. package/dist/tests/unit/util.ipDistance.unit.test.js.map +0 -1
  347. package/dist/tests/unit/util.unit.test.d.ts +0 -2
  348. package/dist/tests/unit/util.unit.test.d.ts.map +0 -1
  349. package/dist/tests/unit/util.unit.test.js +0 -170
  350. package/dist/tests/unit/util.unit.test.js.map +0 -1
  351. package/dist/util.d.ts +0 -24
  352. package/dist/util.d.ts.map +0 -1
  353. package/dist/util.js.map +0 -1
  354. package/dist/utils/hashUserAgent.d.ts +0 -2
  355. package/dist/utils/hashUserAgent.d.ts.map +0 -1
  356. package/dist/utils/hashUserAgent.js.map +0 -1
@@ -1,871 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/api/verify.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/api</a> verify.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/168</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>1/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>1/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/168</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-neutral">&nbsp;</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-no">&nbsp;</span>
343
- <span class="cline-any cline-no">&nbsp;</span>
344
- <span class="cline-any cline-no">&nbsp;</span>
345
- <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-neutral">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-neutral">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-no">&nbsp;</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
400
- <span class="cline-any cline-no">&nbsp;</span>
401
- <span class="cline-any cline-no">&nbsp;</span>
402
- <span class="cline-any cline-no">&nbsp;</span>
403
- <span class="cline-any cline-no">&nbsp;</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
405
- <span class="cline-any cline-no">&nbsp;</span>
406
- <span class="cline-any cline-no">&nbsp;</span>
407
- <span class="cline-any cline-no">&nbsp;</span>
408
- <span class="cline-any cline-no">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-no">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-no">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-no">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-no">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
425
- <span class="cline-any cline-no">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-no">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-no">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-no">&nbsp;</span>
441
- <span class="cline-any cline-no">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
- <span class="cline-any cline-no">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
448
- <span class="cline-any cline-no">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
452
- <span class="cline-any cline-no">&nbsp;</span>
453
- <span class="cline-any cline-no">&nbsp;</span>
454
- <span class="cline-any cline-no">&nbsp;</span>
455
- <span class="cline-any cline-no">&nbsp;</span>
456
- <span class="cline-any cline-no">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
458
- <span class="cline-any cline-no">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-no">&nbsp;</span>
462
- <span class="cline-any cline-no">&nbsp;</span>
463
- <span class="cline-any cline-no">&nbsp;</span>
464
- <span class="cline-any cline-no">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-no">&nbsp;</span>
472
- <span class="cline-any cline-no">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-no">&nbsp;</span>
482
- <span class="cline-any cline-no">&nbsp;</span>
483
- <span class="cline-any cline-no">&nbsp;</span>
484
- <span class="cline-any cline-no">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-no">&nbsp;</span>
488
- <span class="cline-any cline-no">&nbsp;</span>
489
- <span class="cline-any cline-no">&nbsp;</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-no">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-no">&nbsp;</span>
502
- <span class="cline-any cline-no">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
504
- <span class="cline-any cline-no">&nbsp;</span>
505
- <span class="cline-any cline-no">&nbsp;</span>
506
- <span class="cline-any cline-no">&nbsp;</span>
507
- <span class="cline-any cline-no">&nbsp;</span>
508
- <span class="cline-any cline-no">&nbsp;</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
511
- <span class="cline-any cline-no">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-no">&nbsp;</span>
515
- <span class="cline-any cline-no">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-no">&nbsp;</span>
519
- <span class="cline-any cline-no">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-no">&nbsp;</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-no">&nbsp;</span>
527
- <span class="cline-any cline-no">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
529
- <span class="cline-any cline-no">&nbsp;</span>
530
- <span class="cline-any cline-no">&nbsp;</span>
531
- <span class="cline-any cline-no">&nbsp;</span>
532
- <span class="cline-any cline-no">&nbsp;</span>
533
- <span class="cline-any cline-no">&nbsp;</span>
534
- <span class="cline-any cline-no">&nbsp;</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-no">&nbsp;</span>
542
- <span class="cline-any cline-no">&nbsp;</span>
543
- <span class="cline-any cline-no">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-no">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-no">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-no">&nbsp;</span>
552
- <span class="cline-any cline-no">&nbsp;</span>
553
- <span class="cline-any cline-no">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
- <span class="cline-any cline-no">&nbsp;</span>
556
- <span class="cline-any cline-no">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-no">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-no">&nbsp;</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-no">&nbsp;</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
564
- <span class="cline-any cline-no">&nbsp;</span>
565
- <span class="cline-any cline-no">&nbsp;</span>
566
- <span class="cline-any cline-no">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-no">&nbsp;</span>
570
- <span class="cline-any cline-no">&nbsp;</span>
571
- <span class="cline-any cline-no">&nbsp;</span>
572
- <span class="cline-any cline-no">&nbsp;</span>
573
- <span class="cline-any cline-no">&nbsp;</span>
574
- <span class="cline-any cline-no">&nbsp;</span>
575
- <span class="cline-any cline-no">&nbsp;</span>
576
- <span class="cline-any cline-no">&nbsp;</span>
577
- <span class="cline-any cline-no">&nbsp;</span>
578
- <span class="cline-any cline-no">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-no">&nbsp;</span>
581
- <span class="cline-any cline-no">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-no">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-no">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// Copyright 2021-2025 Prosopo (UK) Ltd.
591
- //
592
- // Licensed under the Apache License, Version 2.0 (the "License");
593
- // you may not use this file except in compliance with the License.
594
- // You may obtain a copy of the License at
595
- //
596
- // http://www.apache.org/licenses/LICENSE-2.0
597
- //
598
- // Unless required by applicable law or agreed to in writing, software
599
- // distributed under the License is distributed on an "AS IS" BASIS,
600
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
601
- // See the License for the specific language governing permissions and
602
- // limitations under the License.
603
- &nbsp;
604
- <span class="cstat-no" title="statement not covered" >import { handleErrors, verifySignature } from "@prosopo/api-express-router";</span>
605
- <span class="cstat-no" title="statement not covered" >import { ProsopoApiError } from "@prosopo/common";</span>
606
- <span class="cstat-no" title="statement not covered" >import {</span>
607
- ApiParams,
608
- ClientApiPaths,
609
- type ImageVerificationResponse,
610
- ServerPowCaptchaVerifyRequestBody,
611
- type ServerPowCaptchaVerifyRequestBodyOutput,
612
- type VerificationResponse,
613
- VerifySolutionBody,
614
- type VerifySolutionBodyTypeOutput,
615
- decodeProcaptchaOutput,
616
- } from "@prosopo/types";
617
- import type { ProviderEnvironment } from "@prosopo/types-env";
618
- <span class="cstat-no" title="statement not covered" >import { validateAddress } from "@prosopo/util-crypto";</span>
619
- <span class="cstat-no" title="statement not covered" >import express, { type Router } from "express";</span>
620
- <span class="cstat-no" title="statement not covered" >import { Tasks } from "../tasks/tasks.js";</span>
621
- <span class="cstat-no" title="statement not covered" >import { getMaintenanceMode } from "./admin/apiToggleMaintenanceModeEndpoint.js";</span>
622
- &nbsp;
623
- /**
624
- * Returns a router connected to the database which can interact with the Proposo protocol
625
- *
626
- * @return {Router} - A middleware router that can interact with the Prosopo protocol
627
- * @param {Environment} env - The Prosopo environment
628
- */
629
- <span class="cstat-no" title="statement not covered" >export function prosopoVerifyRouter(env: ProviderEnvironment): Router {</span>
630
- <span class="cstat-no" title="statement not covered" > const router = express.Router();</span>
631
- &nbsp;
632
- /**
633
- * Verifies a dapp's solution as being approved or not
634
- *
635
- * @param {string} user - Dapp User AccountId
636
- * @param {string} dapp - Dapp Contract AccountId
637
- * @param {string} blockNumber - The block number at which the captcha was requested
638
- * @param {string} dappUserSignature - The signature fo dapp user
639
- * @param {string} commitmentId - The captcha solution to look up
640
- * @param {number} maxVerifiedTime - The maximum time in milliseconds since the blockNumber
641
- */
642
- <span class="cstat-no" title="statement not covered" > router.post(</span>
643
- <span class="cstat-no" title="statement not covered" > ClientApiPaths.VerifyImageCaptchaSolutionDapp,</span>
644
- <span class="cstat-no" title="statement not covered" > async (req, res, next) =&gt; {</span>
645
- <span class="cstat-no" title="statement not covered" > const tasks = new Tasks(env, req.logger);</span>
646
- &nbsp;
647
- // If in maintenance mode, always return verified before any checks
648
- <span class="cstat-no" title="statement not covered" > if (getMaintenanceMode()) {</span>
649
- <span class="cstat-no" title="statement not covered" > req.logger.info(() =&gt; ({</span>
650
- <span class="cstat-no" title="statement not covered" > msg: "Maintenance mode active - returning verified for image captcha verification",</span>
651
- <span class="cstat-no" title="statement not covered" > }));</span>
652
- <span class="cstat-no" title="statement not covered" > const verificationResponse: ImageVerificationResponse = {</span>
653
- <span class="cstat-no" title="statement not covered" > status: "ok",</span>
654
- <span class="cstat-no" title="statement not covered" > verified: true,</span>
655
- <span class="cstat-no" title="statement not covered" > };</span>
656
- <span class="cstat-no" title="statement not covered" > return res.json(verificationResponse);</span>
657
- <span class="cstat-no" title="statement not covered" > }</span>
658
- &nbsp;
659
- // We can be helpful and provide a more detailed error message when there are missing fields
660
- <span class="cstat-no" title="statement not covered" > let parsed: VerifySolutionBodyTypeOutput;</span>
661
- <span class="cstat-no" title="statement not covered" > try {</span>
662
- <span class="cstat-no" title="statement not covered" > parsed = VerifySolutionBody.parse(req.body);</span>
663
- <span class="cstat-no" title="statement not covered" > } catch (err) {</span>
664
- <span class="cstat-no" title="statement not covered" > return next(</span>
665
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("CAPTCHA.PARSE_ERROR", {</span>
666
- <span class="cstat-no" title="statement not covered" > context: { code: 400, error: err, body: req.body },</span>
667
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
668
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
669
- <span class="cstat-no" title="statement not covered" > }),</span>
670
- <span class="cstat-no" title="statement not covered" > );</span>
671
- <span class="cstat-no" title="statement not covered" > }</span>
672
- &nbsp;
673
- // We don't want to expose any other errors to the client except for specific situations
674
- <span class="cstat-no" title="statement not covered" > const { dappSignature, token, ip, maxVerifiedTime } = parsed;</span>
675
- <span class="cstat-no" title="statement not covered" > try {</span>
676
- // This can error if the token is invalid
677
- <span class="cstat-no" title="statement not covered" > const { user, dapp, timestamp, commitmentId } =</span>
678
- <span class="cstat-no" title="statement not covered" > decodeProcaptchaOutput(token);</span>
679
- &nbsp;
680
- // Do this before checking the db
681
- <span class="cstat-no" title="statement not covered" > validateAddress(dapp, false, 42);</span>
682
- <span class="cstat-no" title="statement not covered" > validateAddress(user, false, 42);</span>
683
- &nbsp;
684
- // Reject any unregistered site keys
685
- <span class="cstat-no" title="statement not covered" > const clientRecord = await tasks.db.getClientRecord(dapp);</span>
686
- <span class="cstat-no" title="statement not covered" > if (!clientRecord) {</span>
687
- <span class="cstat-no" title="statement not covered" > return next(</span>
688
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {</span>
689
- <span class="cstat-no" title="statement not covered" > context: { code: 400, siteKey: dapp, user },</span>
690
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
691
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
692
- <span class="cstat-no" title="statement not covered" > }),</span>
693
- <span class="cstat-no" title="statement not covered" > );</span>
694
- <span class="cstat-no" title="statement not covered" > }</span>
695
- &nbsp;
696
- // Verify using the appropriate pair based on isDapp flag
697
- <span class="cstat-no" title="statement not covered" > const keyPair = env.keyring.addFromAddress(dapp);</span>
698
- &nbsp;
699
- // Will throw an error if the signature is invalid
700
- <span class="cstat-no" title="statement not covered" > verifySignature(dappSignature, timestamp.toString(), keyPair);</span>
701
- &nbsp;
702
- <span class="cstat-no" title="statement not covered" > const response =</span>
703
- <span class="cstat-no" title="statement not covered" > await tasks.imgCaptchaManager.verifyImageCaptchaSolution(</span>
704
- <span class="cstat-no" title="statement not covered" > user,</span>
705
- <span class="cstat-no" title="statement not covered" > dapp,</span>
706
- <span class="cstat-no" title="statement not covered" > commitmentId,</span>
707
- <span class="cstat-no" title="statement not covered" > env,</span>
708
- <span class="cstat-no" title="statement not covered" > maxVerifiedTime,</span>
709
- <span class="cstat-no" title="statement not covered" > ip,</span>
710
- <span class="cstat-no" title="statement not covered" > clientRecord.settings.disallowWebView,</span>
711
- <span class="cstat-no" title="statement not covered" > );</span>
712
- &nbsp;
713
- <span class="cstat-no" title="statement not covered" > req.logger.debug(() =&gt; ({ data: { response } }));</span>
714
- <span class="cstat-no" title="statement not covered" > const verificationResponse: ImageVerificationResponse =</span>
715
- <span class="cstat-no" title="statement not covered" > tasks.imgCaptchaManager.getVerificationResponse(</span>
716
- <span class="cstat-no" title="statement not covered" > response[ApiParams.verified],</span>
717
- <span class="cstat-no" title="statement not covered" > clientRecord,</span>
718
- <span class="cstat-no" title="statement not covered" > req.i18n.t,</span>
719
- <span class="cstat-no" title="statement not covered" > response[ApiParams.score],</span>
720
- <span class="cstat-no" title="statement not covered" > response[ApiParams.commitmentId],</span>
721
- <span class="cstat-no" title="statement not covered" > );</span>
722
- <span class="cstat-no" title="statement not covered" > res.json(verificationResponse);</span>
723
- <span class="cstat-no" title="statement not covered" > } catch (err) {</span>
724
- <span class="cstat-no" title="statement not covered" > req.logger.error(() =&gt; ({ err, data: { body: req.body } }));</span>
725
- <span class="cstat-no" title="statement not covered" > return next(</span>
726
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("API.BAD_REQUEST", {</span>
727
- <span class="cstat-no" title="statement not covered" > context: { code: 500, siteKey: req.body.dapp, user: req.body.user },</span>
728
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
729
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
730
- <span class="cstat-no" title="statement not covered" > }),</span>
731
- <span class="cstat-no" title="statement not covered" > );</span>
732
- <span class="cstat-no" title="statement not covered" > }</span>
733
- <span class="cstat-no" title="statement not covered" > },</span>
734
- <span class="cstat-no" title="statement not covered" > );</span>
735
- &nbsp;
736
- /**
737
- * Verifies a dapp's solution as being approved or not
738
- *
739
- * @param {string} token - Token containing dapp, blockNumber and challenge
740
- * @param {string} dappSignature - Signed token
741
- * @param {number} verifiedTimeout - The maximum time in milliseconds to be valid
742
- */
743
- <span class="cstat-no" title="statement not covered" > router.post(</span>
744
- <span class="cstat-no" title="statement not covered" > ClientApiPaths.VerifyPowCaptchaSolution,</span>
745
- <span class="cstat-no" title="statement not covered" > async (req, res, next) =&gt; {</span>
746
- <span class="cstat-no" title="statement not covered" > const tasks = new Tasks(env, req.logger);</span>
747
- &nbsp;
748
- // If in maintenance mode, always return verified before any checks
749
- <span class="cstat-no" title="statement not covered" > if (getMaintenanceMode()) {</span>
750
- <span class="cstat-no" title="statement not covered" > req.logger.info(() =&gt; ({</span>
751
- <span class="cstat-no" title="statement not covered" > msg: "Maintenance mode active - returning verified for PoW captcha verification",</span>
752
- <span class="cstat-no" title="statement not covered" > }));</span>
753
- <span class="cstat-no" title="statement not covered" > const verificationResponse: VerificationResponse = {</span>
754
- <span class="cstat-no" title="statement not covered" > status: "ok",</span>
755
- <span class="cstat-no" title="statement not covered" > verified: true,</span>
756
- <span class="cstat-no" title="statement not covered" > };</span>
757
- <span class="cstat-no" title="statement not covered" > return res.json(verificationResponse);</span>
758
- <span class="cstat-no" title="statement not covered" > }</span>
759
- &nbsp;
760
- <span class="cstat-no" title="statement not covered" > let parsed: ServerPowCaptchaVerifyRequestBodyOutput;</span>
761
- &nbsp;
762
- // We can be helpful and provide a more detailed error message when there are missing fields
763
- <span class="cstat-no" title="statement not covered" > try {</span>
764
- <span class="cstat-no" title="statement not covered" > parsed = ServerPowCaptchaVerifyRequestBody.parse(req.body);</span>
765
- <span class="cstat-no" title="statement not covered" > } catch (err) {</span>
766
- <span class="cstat-no" title="statement not covered" > return next(</span>
767
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("CAPTCHA.PARSE_ERROR", {</span>
768
- <span class="cstat-no" title="statement not covered" > context: { code: 400, error: err, body: req.body },</span>
769
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
770
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
771
- <span class="cstat-no" title="statement not covered" > }),</span>
772
- <span class="cstat-no" title="statement not covered" > );</span>
773
- <span class="cstat-no" title="statement not covered" > }</span>
774
- &nbsp;
775
- // We don't want to expose any other errors to the client
776
- <span class="cstat-no" title="statement not covered" > try {</span>
777
- <span class="cstat-no" title="statement not covered" > const { token, dappSignature, verifiedTimeout, ip } = parsed;</span>
778
- &nbsp;
779
- // This can error if the token is invalid
780
- <span class="cstat-no" title="statement not covered" > const { dapp, user, timestamp, challenge } =</span>
781
- <span class="cstat-no" title="statement not covered" > decodeProcaptchaOutput(token);</span>
782
- &nbsp;
783
- // Do this before checking the db
784
- <span class="cstat-no" title="statement not covered" > validateAddress(dapp, false, 42);</span>
785
- <span class="cstat-no" title="statement not covered" > validateAddress(user, false, 42);</span>
786
- &nbsp;
787
- // Reject any unregistered site keys
788
- <span class="cstat-no" title="statement not covered" > const clientRecord = await tasks.db.getClientRecord(dapp);</span>
789
- <span class="cstat-no" title="statement not covered" > if (!clientRecord) {</span>
790
- <span class="cstat-no" title="statement not covered" > return next(</span>
791
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {</span>
792
- <span class="cstat-no" title="statement not covered" > context: { code: 400, siteKey: dapp },</span>
793
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
794
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
795
- <span class="cstat-no" title="statement not covered" > }),</span>
796
- <span class="cstat-no" title="statement not covered" > );</span>
797
- <span class="cstat-no" title="statement not covered" > }</span>
798
- &nbsp;
799
- <span class="cstat-no" title="statement not covered" > if (!challenge) {</span>
800
- <span class="cstat-no" title="statement not covered" > const unverifiedResponse: VerificationResponse = {</span>
801
- <span class="cstat-no" title="statement not covered" > status: req.i18n.t("API.USER_NOT_VERIFIED"),</span>
802
- <span class="cstat-no" title="statement not covered" > [ApiParams.verified]: false,</span>
803
- <span class="cstat-no" title="statement not covered" > };</span>
804
- <span class="cstat-no" title="statement not covered" > return res.json(unverifiedResponse);</span>
805
- <span class="cstat-no" title="statement not covered" > }</span>
806
- &nbsp;
807
- // Verify using the dapp pair passed in the request
808
- <span class="cstat-no" title="statement not covered" > const dappPair = env.keyring.addFromAddress(dapp);</span>
809
- &nbsp;
810
- // Will throw an error if the signature is invalid
811
- <span class="cstat-no" title="statement not covered" > verifySignature(dappSignature, timestamp.toString(), dappPair);</span>
812
- &nbsp;
813
- <span class="cstat-no" title="statement not covered" > const { verified, score } =</span>
814
- <span class="cstat-no" title="statement not covered" > await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(</span>
815
- <span class="cstat-no" title="statement not covered" > dapp,</span>
816
- <span class="cstat-no" title="statement not covered" > challenge,</span>
817
- <span class="cstat-no" title="statement not covered" > verifiedTimeout,</span>
818
- <span class="cstat-no" title="statement not covered" > env,</span>
819
- <span class="cstat-no" title="statement not covered" > ip,</span>
820
- <span class="cstat-no" title="statement not covered" > );</span>
821
- &nbsp;
822
- <span class="cstat-no" title="statement not covered" > const verificationResponse: VerificationResponse =</span>
823
- <span class="cstat-no" title="statement not covered" > tasks.powCaptchaManager.getVerificationResponse(</span>
824
- <span class="cstat-no" title="statement not covered" > verified,</span>
825
- <span class="cstat-no" title="statement not covered" > clientRecord,</span>
826
- <span class="cstat-no" title="statement not covered" > req.i18n.t,</span>
827
- <span class="cstat-no" title="statement not covered" > score,</span>
828
- <span class="cstat-no" title="statement not covered" > );</span>
829
- &nbsp;
830
- <span class="cstat-no" title="statement not covered" > return res.json(verificationResponse);</span>
831
- <span class="cstat-no" title="statement not covered" > } catch (err) {</span>
832
- <span class="cstat-no" title="statement not covered" > console.error("\nError in verifyPowCaptchaSolution:", err);</span>
833
- <span class="cstat-no" title="statement not covered" > req.logger.error(() =&gt; ({ err, data: { body: req.body } }));</span>
834
- <span class="cstat-no" title="statement not covered" > return next(</span>
835
- <span class="cstat-no" title="statement not covered" > new ProsopoApiError("API.BAD_REQUEST", {</span>
836
- <span class="cstat-no" title="statement not covered" > context: { code: 500, error: err },</span>
837
- <span class="cstat-no" title="statement not covered" > i18n: req.i18n,</span>
838
- <span class="cstat-no" title="statement not covered" > logger: req.logger,</span>
839
- <span class="cstat-no" title="statement not covered" > }),</span>
840
- <span class="cstat-no" title="statement not covered" > );</span>
841
- <span class="cstat-no" title="statement not covered" > }</span>
842
- <span class="cstat-no" title="statement not covered" > },</span>
843
- <span class="cstat-no" title="statement not covered" > );</span>
844
- &nbsp;
845
- // Your error handler should always be at the end of your application stack. Apparently it means not only after all
846
- // app.use() but also after all your app.get() and app.post() calls.
847
- // https://stackoverflow.com/a/62358794/1178971
848
- <span class="cstat-no" title="statement not covered" > router.use(handleErrors);</span>
849
- &nbsp;
850
- <span class="cstat-no" title="statement not covered" > return router;</span>
851
- <span class="cstat-no" title="statement not covered" >}</span>
852
- &nbsp;</pre></td></tr></table></pre>
853
-
854
- <div class='push'></div><!-- for sticky footer -->
855
- </div><!-- /wrapper -->
856
- <div class='footer quiet pad2 space-top1 center small'>
857
- Code coverage generated by
858
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
859
- at 2025-10-22T12:32:26.285Z
860
- </div>
861
- <script src="../../prettify.js"></script>
862
- <script>
863
- window.onload = function () {
864
- prettyPrint();
865
- };
866
- </script>
867
- <script src="../../sorter.js"></script>
868
- <script src="../../block-navigation.js"></script>
869
- </body>
870
- </html>
871
-