@prosopo/provider 2.1.4 → 2.1.6

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 (263) hide show
  1. package/.dockerignore +5 -0
  2. package/dist/api/admin.d.ts +4 -0
  3. package/dist/api/admin.d.ts.map +1 -0
  4. package/dist/api/admin.js +36 -0
  5. package/dist/api/admin.js.map +1 -0
  6. package/dist/api/authMiddleware.d.ts +6 -0
  7. package/dist/api/authMiddleware.d.ts.map +1 -0
  8. package/dist/api/authMiddleware.js +66 -0
  9. package/dist/api/authMiddleware.js.map +1 -0
  10. package/dist/api/captcha.d.ts +4 -0
  11. package/dist/api/captcha.d.ts.map +1 -0
  12. package/dist/api/captcha.js +299 -0
  13. package/dist/api/captcha.js.map +1 -0
  14. package/dist/api/captchaScheduler.d.ts +4 -0
  15. package/dist/api/captchaScheduler.d.ts.map +1 -0
  16. package/dist/api/captchaScheduler.js +17 -0
  17. package/dist/api/captchaScheduler.js.map +1 -0
  18. package/dist/api/errorHandler.d.ts +11 -0
  19. package/dist/api/errorHandler.d.ts.map +1 -0
  20. package/dist/api/errorHandler.js +42 -0
  21. package/dist/api/errorHandler.js.map +1 -0
  22. package/dist/api/verify.d.ts +4 -0
  23. package/dist/api/verify.d.ts.map +1 -0
  24. package/dist/api/verify.js +98 -0
  25. package/dist/api/verify.js.map +1 -0
  26. package/dist/batch/commitments.d.ts +24 -0
  27. package/dist/batch/commitments.d.ts.map +1 -0
  28. package/dist/batch/commitments.js +130 -0
  29. package/dist/batch/commitments.js.map +1 -0
  30. package/dist/batch/index.d.ts +2 -0
  31. package/dist/batch/index.d.ts.map +1 -0
  32. package/dist/batch/index.js +2 -0
  33. package/dist/batch/index.js.map +1 -0
  34. package/dist/cjs/api/admin.cjs +37 -0
  35. package/dist/cjs/api/authMiddleware.cjs +66 -0
  36. package/dist/cjs/api/captcha.cjs +380 -0
  37. package/dist/cjs/api/errorHandler.cjs +42 -0
  38. package/dist/cjs/api/verify.cjs +120 -0
  39. package/dist/cjs/index.cjs +25 -0
  40. package/dist/cjs/schedulers/captchaScheduler.cjs +33 -0
  41. package/dist/cjs/schedulers/getClientList.cjs +31 -0
  42. package/dist/cjs/tasks/client/clientTasks.cjs +148 -0
  43. package/dist/cjs/tasks/dataset/datasetTasks.cjs +30 -0
  44. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +34 -0
  45. package/dist/cjs/tasks/detection/decodePayload.cjs +549 -0
  46. package/dist/cjs/tasks/detection/getBotScore.cjs +18 -0
  47. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +313 -0
  48. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +25 -0
  49. package/dist/cjs/tasks/index.cjs +4 -0
  50. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +134 -0
  51. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +26 -0
  52. package/dist/cjs/tasks/tasks.cjs +40 -0
  53. package/dist/cjs/util.cjs +45 -0
  54. package/dist/index.d.ts +10 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +10 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/scheduler.d.ts +4 -0
  59. package/dist/scheduler.d.ts.map +1 -0
  60. package/dist/scheduler.js +21 -0
  61. package/dist/scheduler.js.map +1 -0
  62. package/dist/schedulers/captchaScheduler.d.ts +4 -0
  63. package/dist/schedulers/captchaScheduler.d.ts.map +1 -0
  64. package/dist/schedulers/captchaScheduler.js +28 -0
  65. package/dist/schedulers/captchaScheduler.js.map +1 -0
  66. package/dist/schedulers/getClientList.d.ts +4 -0
  67. package/dist/schedulers/getClientList.d.ts.map +1 -0
  68. package/dist/schedulers/getClientList.js +28 -0
  69. package/dist/schedulers/getClientList.js.map +1 -0
  70. package/dist/tasks/client/clientTasks.d.ts +13 -0
  71. package/dist/tasks/client/clientTasks.d.ts.map +1 -0
  72. package/dist/tasks/client/clientTasks.js +87 -0
  73. package/dist/tasks/client/clientTasks.js.map +1 -0
  74. package/dist/tasks/dataset/datasetTasks.d.ts +13 -0
  75. package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -0
  76. package/dist/tasks/dataset/datasetTasks.js +19 -0
  77. package/dist/tasks/dataset/datasetTasks.js.map +1 -0
  78. package/dist/tasks/dataset/datasetTasksUtils.d.ts +3 -0
  79. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -0
  80. package/dist/tasks/dataset/datasetTasksUtils.js +34 -0
  81. package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -0
  82. package/dist/tasks/detection/decodePayload.d.ts +3 -0
  83. package/dist/tasks/detection/decodePayload.d.ts.map +1 -0
  84. package/dist/tasks/detection/decodePayload.js +302 -0
  85. package/dist/tasks/detection/decodePayload.js.map +1 -0
  86. package/dist/tasks/detection/getBotScore.d.ts +2 -0
  87. package/dist/tasks/detection/getBotScore.d.ts.map +1 -0
  88. package/dist/tasks/detection/getBotScore.js +17 -0
  89. package/dist/tasks/detection/getBotScore.js.map +1 -0
  90. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +29 -0
  91. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -0
  92. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +242 -0
  93. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -0
  94. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +7 -0
  95. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -0
  96. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +18 -0
  97. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -0
  98. package/dist/tasks/index.d.ts +2 -0
  99. package/dist/tasks/index.d.ts.map +1 -0
  100. package/dist/tasks/index.js +2 -0
  101. package/dist/tasks/index.js.map +1 -0
  102. package/dist/tasks/powCaptcha/powTasks.d.ts +13 -0
  103. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -0
  104. package/dist/tasks/powCaptcha/powTasks.js +84 -0
  105. package/dist/tasks/powCaptcha/powTasks.js.map +1 -0
  106. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +3 -0
  107. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -0
  108. package/dist/tasks/powCaptcha/powTasksUtils.js +22 -0
  109. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -0
  110. package/dist/tasks/tasks.d.ts +22 -0
  111. package/dist/tasks/tasks.d.ts.map +1 -0
  112. package/dist/tasks/tasks.js +24 -0
  113. package/dist/tasks/tasks.js.map +1 -0
  114. package/dist/tests/accounts.d.ts +12 -0
  115. package/dist/tests/accounts.d.ts.map +1 -0
  116. package/dist/tests/accounts.js +35 -0
  117. package/dist/tests/accounts.js.map +1 -0
  118. package/dist/tests/contract/helpers.test.d.ts +6 -0
  119. package/dist/tests/contract/helpers.test.d.ts.map +1 -0
  120. package/dist/tests/contract/helpers.test.js +54 -0
  121. package/dist/tests/contract/helpers.test.js.map +1 -0
  122. package/dist/tests/dataUtils/DatabaseAccounts.d.ts +35 -0
  123. package/dist/tests/dataUtils/DatabaseAccounts.d.ts.map +1 -0
  124. package/dist/tests/dataUtils/DatabaseAccounts.js +84 -0
  125. package/dist/tests/dataUtils/DatabaseAccounts.js.map +1 -0
  126. package/dist/tests/dataUtils/DatabasePopulator.d.ts +73 -0
  127. package/dist/tests/dataUtils/DatabasePopulator.d.ts.map +1 -0
  128. package/dist/tests/dataUtils/DatabasePopulator.js +326 -0
  129. package/dist/tests/dataUtils/DatabasePopulator.js.map +1 -0
  130. package/dist/tests/dataUtils/dapp-example-contract/dapp.json +648 -0
  131. package/dist/tests/dataUtils/dapp-example-contract/loadFiles.d.ts +4 -0
  132. package/dist/tests/dataUtils/dapp-example-contract/loadFiles.d.ts.map +1 -0
  133. package/dist/tests/dataUtils/dapp-example-contract/loadFiles.js +27 -0
  134. package/dist/tests/dataUtils/dapp-example-contract/loadFiles.js.map +1 -0
  135. package/dist/tests/dataUtils/funds.d.ts +9 -0
  136. package/dist/tests/dataUtils/funds.d.ts.map +1 -0
  137. package/dist/tests/dataUtils/funds.js +105 -0
  138. package/dist/tests/dataUtils/funds.js.map +1 -0
  139. package/dist/tests/dataUtils/populateDatabase.d.ts +16 -0
  140. package/dist/tests/dataUtils/populateDatabase.d.ts.map +1 -0
  141. package/dist/tests/dataUtils/populateDatabase.js +72 -0
  142. package/dist/tests/dataUtils/populateDatabase.js.map +1 -0
  143. package/dist/tests/getUser.d.ts +4 -0
  144. package/dist/tests/getUser.d.ts.map +1 -0
  145. package/dist/tests/getUser.js +18 -0
  146. package/dist/tests/getUser.js.map +1 -0
  147. package/dist/tests/index.d.ts +2 -0
  148. package/dist/tests/index.d.ts.map +1 -0
  149. package/dist/tests/index.js +2 -0
  150. package/dist/tests/index.js.map +1 -0
  151. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +2 -0
  152. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +1 -0
  153. package/dist/tests/integration/imgCaptcha.integration.test.js +137 -0
  154. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -0
  155. package/dist/tests/integration/imgCaptcha.test.d.ts +2 -0
  156. package/dist/tests/integration/imgCaptcha.test.d.ts.map +1 -0
  157. package/dist/tests/integration/imgCaptcha.test.js +103 -0
  158. package/dist/tests/integration/imgCaptcha.test.js.map +1 -0
  159. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +32 -0
  160. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +1 -0
  161. package/dist/tests/integration/mocks/solvedTestCaptchas.js +1046 -0
  162. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -0
  163. package/dist/tests/integration/powCaptcha.integration.test.d.ts +2 -0
  164. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +1 -0
  165. package/dist/tests/integration/powCaptcha.integration.test.js +222 -0
  166. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -0
  167. package/dist/tests/integration/powCaptcha.test.d.ts +2 -0
  168. package/dist/tests/integration/powCaptcha.test.d.ts.map +1 -0
  169. package/dist/tests/integration/powCaptcha.test.js +133 -0
  170. package/dist/tests/integration/powCaptcha.test.js.map +1 -0
  171. package/dist/tests/integration/registerSitekey.d.ts +2 -0
  172. package/dist/tests/integration/registerSitekey.d.ts.map +1 -0
  173. package/dist/tests/integration/registerSitekey.js +28 -0
  174. package/dist/tests/integration/registerSitekey.js.map +1 -0
  175. package/dist/tests/tasks/tasks.test.d.ts +6 -0
  176. package/dist/tests/tasks/tasks.test.d.ts.map +1 -0
  177. package/dist/tests/tasks/tasks.test.js +636 -0
  178. package/dist/tests/tasks/tasks.test.js.map +1 -0
  179. package/dist/tests/unit/api/authMiddleware.test.d.ts +2 -0
  180. package/dist/tests/unit/api/authMiddleware.test.d.ts.map +1 -0
  181. package/dist/tests/unit/api/authMiddleware.test.js +87 -0
  182. package/dist/tests/unit/api/authMiddleware.test.js.map +1 -0
  183. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts +2 -0
  184. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts.map +1 -0
  185. package/dist/tests/unit/api/authMiddleware.unit.test.js +108 -0
  186. package/dist/tests/unit/api/authMiddleware.unit.test.js.map +1 -0
  187. package/dist/tests/unit/api/captchaScheduler.test.d.ts +2 -0
  188. package/dist/tests/unit/api/captchaScheduler.test.d.ts.map +1 -0
  189. package/dist/tests/unit/api/captchaScheduler.test.js +47 -0
  190. package/dist/tests/unit/api/captchaScheduler.test.js.map +1 -0
  191. package/dist/tests/unit/api/errorHandler.test.d.ts +2 -0
  192. package/dist/tests/unit/api/errorHandler.test.d.ts.map +1 -0
  193. package/dist/tests/unit/api/errorHandler.test.js +65 -0
  194. package/dist/tests/unit/api/errorHandler.test.js.map +1 -0
  195. package/dist/tests/unit/api/errorHandler.unit.test.d.ts +2 -0
  196. package/dist/tests/unit/api/errorHandler.unit.test.d.ts.map +1 -0
  197. package/dist/tests/unit/api/errorHandler.unit.test.js +100 -0
  198. package/dist/tests/unit/api/errorHandler.unit.test.js.map +1 -0
  199. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +2 -0
  200. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +1 -0
  201. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +63 -0
  202. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -0
  203. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +2 -0
  204. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +1 -0
  205. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +172 -0
  206. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -0
  207. package/dist/tests/unit/tasks/dataset/datasetTasks.test.d.ts +2 -0
  208. package/dist/tests/unit/tasks/dataset/datasetTasks.test.d.ts.map +1 -0
  209. package/dist/tests/unit/tasks/dataset/datasetTasks.test.js +82 -0
  210. package/dist/tests/unit/tasks/dataset/datasetTasks.test.js.map +1 -0
  211. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +2 -0
  212. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +1 -0
  213. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +86 -0
  214. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -0
  215. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.d.ts +2 -0
  216. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.d.ts.map +1 -0
  217. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.js +75 -0
  218. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.js.map +1 -0
  219. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +2 -0
  220. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +1 -0
  221. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +75 -0
  222. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -0
  223. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.d.ts +2 -0
  224. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.d.ts.map +1 -0
  225. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.js +245 -0
  226. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.js.map +1 -0
  227. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +2 -0
  228. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +1 -0
  229. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +266 -0
  230. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -0
  231. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.d.ts +2 -0
  232. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.d.ts.map +1 -0
  233. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.js +45 -0
  234. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.js.map +1 -0
  235. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +2 -0
  236. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +1 -0
  237. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +46 -0
  238. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -0
  239. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.d.ts +2 -0
  240. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.d.ts.map +1 -0
  241. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.js +121 -0
  242. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.js.map +1 -0
  243. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +2 -0
  244. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +1 -0
  245. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +209 -0
  246. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -0
  247. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.d.ts +2 -0
  248. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.d.ts.map +1 -0
  249. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.js +94 -0
  250. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.js.map +1 -0
  251. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +2 -0
  252. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +1 -0
  253. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +65 -0
  254. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -0
  255. package/dist/tests/util.test.d.ts +2 -0
  256. package/dist/tests/util.test.d.ts.map +1 -0
  257. package/dist/tests/util.test.js +23 -0
  258. package/dist/tests/util.test.js.map +1 -0
  259. package/dist/util.d.ts +6 -0
  260. package/dist/util.d.ts.map +1 -0
  261. package/dist/util.js +34 -0
  262. package/dist/util.js.map +1 -0
  263. package/package.json +14 -12
@@ -0,0 +1,98 @@
1
+ import { validateAddress } from "@polkadot/util-crypto/address";
2
+ import { ProsopoApiError } from "@prosopo/common";
3
+ import { ApiParams, ApiPaths, ServerPowCaptchaVerifyRequestBody, VerifySolutionBody, decodeProcaptchaOutput, } from "@prosopo/types";
4
+ import express from "express";
5
+ import { Tasks } from "../tasks/tasks.js";
6
+ import { verifySignature } from "./authMiddleware.js";
7
+ import { handleErrors } from "./errorHandler.js";
8
+ export function prosopoVerifyRouter(env) {
9
+ const router = express.Router();
10
+ const tasks = new Tasks(env);
11
+ router.post(ApiPaths.VerifyImageCaptchaSolutionDapp, async (req, res, next) => {
12
+ let parsed;
13
+ try {
14
+ parsed = VerifySolutionBody.parse(req.body);
15
+ }
16
+ catch (err) {
17
+ return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
18
+ context: { code: 400, error: err, body: req.body },
19
+ }));
20
+ }
21
+ const { dappSignature, token } = parsed;
22
+ try {
23
+ const { user, dapp, timestamp, commitmentId } = decodeProcaptchaOutput(token);
24
+ validateAddress(dapp, false, 42);
25
+ validateAddress(user, false, 42);
26
+ const clientRecord = await tasks.db.getClientRecord(dapp);
27
+ if (!clientRecord) {
28
+ return next(new ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
29
+ context: { code: 400, siteKey: dapp },
30
+ }));
31
+ }
32
+ const keyPair = env.keyring.addFromAddress(dapp);
33
+ verifySignature(dappSignature, timestamp.toString(), keyPair);
34
+ const response = await tasks.imgCaptchaManager.verifyImageCaptchaSolution(user, dapp, commitmentId, parsed.maxVerifiedTime);
35
+ const verificationResponse = {
36
+ [ApiParams.status]: req.t(response.status),
37
+ [ApiParams.verified]: response[ApiParams.verified],
38
+ ...(response.commitmentId && {
39
+ [ApiParams.commitmentId]: response.commitmentId,
40
+ }),
41
+ };
42
+ res.json(verificationResponse);
43
+ }
44
+ catch (err) {
45
+ tasks.logger.error({ err, body: req.body });
46
+ return next(new ProsopoApiError("API.BAD_REQUEST", {
47
+ context: { code: 500 },
48
+ }));
49
+ }
50
+ });
51
+ router.post(ApiPaths.VerifyPowCaptchaSolution, async (req, res, next) => {
52
+ let parsed;
53
+ try {
54
+ parsed = ServerPowCaptchaVerifyRequestBody.parse(req.body);
55
+ }
56
+ catch (err) {
57
+ return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
58
+ context: { code: 400, error: err, body: req.body },
59
+ }));
60
+ }
61
+ try {
62
+ const { token, dappSignature, verifiedTimeout } = parsed;
63
+ const { dapp, user, timestamp, challenge } = decodeProcaptchaOutput(token);
64
+ validateAddress(dapp, false, 42);
65
+ validateAddress(user, false, 42);
66
+ const clientRecord = await tasks.db.getClientRecord(dapp);
67
+ if (!clientRecord) {
68
+ return next(new ProsopoApiError("API.SITE_KEY_NOT_REGISTERED", {
69
+ context: { code: 400, siteKey: dapp },
70
+ }));
71
+ }
72
+ if (!challenge) {
73
+ const unverifiedResponse = {
74
+ status: req.t("API.USER_NOT_VERIFIED"),
75
+ [ApiParams.verified]: false,
76
+ };
77
+ return res.json(unverifiedResponse);
78
+ }
79
+ const dappPair = env.keyring.addFromAddress(dapp);
80
+ verifySignature(dappSignature, timestamp.toString(), dappPair);
81
+ const approved = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, verifiedTimeout);
82
+ const verificationResponse = {
83
+ status: req.t(approved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
84
+ [ApiParams.verified]: approved,
85
+ };
86
+ return res.json(verificationResponse);
87
+ }
88
+ catch (err) {
89
+ tasks.logger.error({ err, body: req.body });
90
+ return next(new ProsopoApiError("API.BAD_REQUEST", {
91
+ context: { code: 500 },
92
+ }));
93
+ }
94
+ });
95
+ router.use(handleErrors);
96
+ return router;
97
+ }
98
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="bn.js" />
2
+ import { BN } from '@polkadot/util/bn';
3
+ import { BatchCommitConfigOutput, ExtrinsicBatch } from '@prosopo/types';
4
+ import { Commit, Hash } from '@prosopo/captcha-contract/types-returns';
5
+ import { Database, UserCommitmentRecord } from '@prosopo/types-database';
6
+ import { Logger } from '@prosopo/common';
7
+ import { ProsopoCaptchaContract } from '@prosopo/contract';
8
+ import { WeightV2 } from '@polkadot/types/interfaces';
9
+ export declare class BatchCommitmentsTask {
10
+ contract: ProsopoCaptchaContract;
11
+ db: Database;
12
+ batchCommitConfig: BatchCommitConfigOutput;
13
+ logger: Logger;
14
+ private nonce;
15
+ constructor(batchCommitConfig: BatchCommitConfigOutput, contractApi: ProsopoCaptchaContract, db: Database, startNonce: bigint, logger: Logger);
16
+ run(): Promise<any>;
17
+ createExtrinsics(commitments: UserCommitmentRecord[]): Promise<ExtrinsicBatch>;
18
+ extrinsicTooHigh(totalRefTime: BN, totalProofSize: BN, maxBlockWeight: WeightV2): boolean;
19
+ batchIntervalExceeded(): Promise<boolean>;
20
+ getCommitments(): Promise<UserCommitmentRecord[]>;
21
+ flagBatchedCommitments(commitmentIds: Hash[]): Promise<void>;
22
+ convertCommit(commitment: UserCommitmentRecord): Commit;
23
+ }
24
+ //# sourceMappingURL=commitments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitments.d.ts","sourceRoot":"","sources":["../../src/batch/commitments.ts"],"names":[],"mappings":";AAcA,OAAO,EAAE,EAAE,EAAW,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAA2C,MAAM,gBAAgB,CAAA;AACjH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yCAAyC,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAwB,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAA2B,MAAM,mBAAmB,CAAA;AAEnF,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAQrD,qBAAa,oBAAoB;IAC7B,QAAQ,EAAE,sBAAsB,CAAA;IAChC,EAAE,EAAE,QAAQ,CAAA;IACZ,iBAAiB,EAAE,uBAAuB,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,KAAK,CAAQ;gBAEjB,iBAAiB,EAAE,uBAAuB,EAC1C,WAAW,EAAE,sBAAsB,EACnC,EAAE,EAAE,QAAQ,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM;IAQZ,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAyDnB,gBAAgB,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAkFpF,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,GAAG,OAAO;IAOnF,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAMzC,cAAc,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAKjD,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM;CAW1D"}
@@ -0,0 +1,130 @@
1
+ import { BN, BN_ZERO } from '@polkadot/util/bn';
2
+ import { ScheduledTaskNames, ScheduledTaskStatus } from '@prosopo/types';
3
+ import { ProsopoContractError } from '@prosopo/common';
4
+ import { batch, encodeStringArgs } from '@prosopo/contract';
5
+ import { checkIfTaskIsRunning } from '../util.js';
6
+ import { oneUnit } from '@prosopo/tx';
7
+ import { randomAsHex } from '@polkadot/util-crypto/random';
8
+ const BN_TEN_THOUSAND = new BN(10000);
9
+ const CONTRACT_METHOD_NAME = 'providerCommitMany';
10
+ export class BatchCommitmentsTask {
11
+ constructor(batchCommitConfig, contractApi, db, startNonce, logger) {
12
+ this.contract = contractApi;
13
+ this.db = db;
14
+ this.batchCommitConfig = batchCommitConfig;
15
+ this.logger = logger;
16
+ this.nonce = startNonce;
17
+ }
18
+ async run() {
19
+ const taskId = randomAsHex(32);
20
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.BatchCommitment, this.db);
21
+ if (!taskRunning) {
22
+ const intervalExceeded = await this.batchIntervalExceeded();
23
+ if (intervalExceeded) {
24
+ try {
25
+ await this.db.storeScheduledTaskStatus(taskId, ScheduledTaskNames.BatchCommitment, ScheduledTaskStatus.Running);
26
+ const commitments = await this.getCommitments();
27
+ if (commitments.length > 0) {
28
+ this.logger.info(`Found ${commitments.length} commitments to commit`);
29
+ const { extrinsics, ids: commitmentIds } = await this.createExtrinsics(commitments);
30
+ await batch(this.contract.contract, this.contract.pair, extrinsics, this.logger);
31
+ await this.flagBatchedCommitments(commitmentIds);
32
+ await this.db.storeScheduledTaskStatus(taskId, ScheduledTaskNames.BatchCommitment, ScheduledTaskStatus.Completed, {
33
+ data: {
34
+ commitmentIds: commitments
35
+ .filter((commitment) => commitmentIds.indexOf(commitment.id) > -1)
36
+ .map((c) => c.id),
37
+ },
38
+ });
39
+ }
40
+ return commitments;
41
+ }
42
+ catch (e) {
43
+ const err = e;
44
+ this.logger.error(e);
45
+ await this.db.storeScheduledTaskStatus(taskId, ScheduledTaskNames.BatchCommitment, ScheduledTaskStatus.Failed, {
46
+ error: JSON.stringify(e && err.message ? err.message : e),
47
+ });
48
+ return err.message;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ async createExtrinsics(commitments) {
54
+ const txs = [];
55
+ const fragment = this.contract.abi.findMessage(CONTRACT_METHOD_NAME);
56
+ const batchedCommitmentIds = [];
57
+ let totalRefTime = BN_ZERO;
58
+ let totalProofSize = BN_ZERO;
59
+ let totalFee = BN_ZERO;
60
+ const maxBlockWeight = this.contract.api.consts.system.blockWeights.maxBlock;
61
+ const commitmentArray = [];
62
+ let extrinsic;
63
+ for (const commitment of commitments) {
64
+ const commit = this.convertCommit(commitment);
65
+ commitmentArray.push(commit);
66
+ const encodedArgs = encodeStringArgs(this.contract.abi, fragment, [commitmentArray]);
67
+ const buildExtrinsicResult = await this.contract.getExtrinsicAndGasEstimates('providerCommitMany', encodedArgs);
68
+ extrinsic = buildExtrinsicResult.extrinsic;
69
+ const { options, storageDeposit } = buildExtrinsicResult;
70
+ let paymentInfo;
71
+ try {
72
+ paymentInfo = (await extrinsic.paymentInfo(this.contract.pair)).partialFee.toBn();
73
+ this.logger.debug(`${CONTRACT_METHOD_NAME} paymentInfo:`, paymentInfo.toNumber());
74
+ }
75
+ catch (e) {
76
+ paymentInfo = BN_ZERO;
77
+ }
78
+ totalRefTime = totalRefTime.add(this.contract.api.registry.createType('WeightV2', options.gasLimit).refTime.toBn());
79
+ totalProofSize = totalProofSize.add(this.contract.api.registry.createType('WeightV2', options.gasLimit).proofSize.toBn());
80
+ totalFee = totalFee.add(paymentInfo.add(storageDeposit.asCharge.toBn()));
81
+ const extrinsicTooHigh = this.extrinsicTooHigh(totalRefTime, totalProofSize, maxBlockWeight);
82
+ this.logger.debug('Free balance', '`', (await this.contract.api.query.system.account(this.contract.pair.address)).data.free
83
+ .toBn()
84
+ .div(oneUnit(this.contract.api))
85
+ .toString(), '`', 'UNIT');
86
+ this.logger.debug('Total Fee `', totalFee.div(oneUnit(this.contract.api)).toString(), '`', 'UNIT');
87
+ const feeTooHigh = totalFee.gt((await this.contract.api.query.system.account(this.contract.pair.address)).data.free.toBn());
88
+ if (extrinsicTooHigh || feeTooHigh) {
89
+ const msg = extrinsicTooHigh ? 'Max batch extrinsic percentage reached' : 'Fee too high';
90
+ this.logger.warn(msg);
91
+ break;
92
+ }
93
+ else {
94
+ batchedCommitmentIds.push(commitment.id);
95
+ }
96
+ }
97
+ if (!extrinsic) {
98
+ throw new ProsopoContractError('CONTRACT.TX_ERROR', { context: { error: 'No extrinsics created' } });
99
+ }
100
+ txs.push(extrinsic);
101
+ this.logger.info(`${txs.length} transactions will be batched`);
102
+ this.logger.debug('totalRefTime:', totalRefTime.toString());
103
+ this.logger.debug('totalProofSize:', totalProofSize.toString());
104
+ return { extrinsics: txs, ids: batchedCommitmentIds, totalFee, totalRefTime, totalProofSize };
105
+ }
106
+ extrinsicTooHigh(totalRefTime, totalProofSize, maxBlockWeight) {
107
+ return (totalRefTime.mul(BN_TEN_THOUSAND).div(maxBlockWeight.refTime.toBn()).toNumber() / 100 >
108
+ this.batchCommitConfig.maxBatchExtrinsicPercentage);
109
+ }
110
+ async batchIntervalExceeded() {
111
+ const lastTime = await this.db.getLastBatchCommitTime();
112
+ return Date.now() - lastTime.getSeconds() > this.batchCommitConfig.interval;
113
+ }
114
+ async getCommitments() {
115
+ return await this.db.getUnbatchedDappUserCommitments();
116
+ }
117
+ async flagBatchedCommitments(commitmentIds) {
118
+ await this.db.flagBatchedDappUserCommitments(commitmentIds);
119
+ }
120
+ convertCommit(commitment) {
121
+ const { batched, processed, userSignature, requestedAt, completedAt, ...commit } = commitment;
122
+ return {
123
+ ...commit,
124
+ userSignature,
125
+ requestedAt: new BN(requestedAt).toNumber(),
126
+ completedAt: new BN(completedAt).toNumber(),
127
+ };
128
+ }
129
+ }
130
+ //# sourceMappingURL=commitments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitments.js","sourceRoot":"","sources":["../../src/batch/commitments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './commitments.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":"AAaA,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './commitments.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":"AAaA,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const common = require("@prosopo/common");
4
+ const types = require("@prosopo/types");
5
+ const express = require("express");
6
+ require("../index.cjs");
7
+ const tasks = require("../tasks/tasks.cjs");
8
+ function prosopoAdminRouter(env) {
9
+ const router = express.Router();
10
+ const tasks$1 = new tasks.Tasks(env);
11
+ router.post(types.AdminApiPaths.UpdateDataset, async (req, res, next) => {
12
+ try {
13
+ const result = await tasks$1.datasetManager.providerSetDataset(req.body);
14
+ console.info(`Dataset update complete: ${result}`);
15
+ res.status(200).send(result);
16
+ } catch (err) {
17
+ common.logError(err, tasks$1.logger);
18
+ res.status(500).send("An internal server error occurred.");
19
+ }
20
+ });
21
+ router.post(types.AdminApiPaths.SiteKeyRegister, async (req, res, next) => {
22
+ try {
23
+ const { siteKey, settings } = types.RegisterSitekeyBody.parse(req.body);
24
+ const temp = settings || {};
25
+ await tasks$1.clientTaskManager.registerSiteKey(siteKey, temp);
26
+ const response = {
27
+ status: "success"
28
+ };
29
+ res.json(response);
30
+ } catch (err) {
31
+ common.logError(err, tasks$1.logger);
32
+ res.status(500).send("An internal server error occurred.");
33
+ }
34
+ });
35
+ return router;
36
+ }
37
+ exports.prosopoAdminRouter = prosopoAdminRouter;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const util = require("@polkadot/util");
4
+ const common = require("@prosopo/common");
5
+ const types = require("@prosopo/types");
6
+ const authMiddleware = (env) => {
7
+ return async (req, res, next) => {
8
+ try {
9
+ if (req.url.indexOf(types.ApiPrefix) === -1) {
10
+ next();
11
+ return;
12
+ }
13
+ const { signature, timestamp } = extractHeaders(req);
14
+ if (!env.pair) {
15
+ res.status(401).json({
16
+ error: "Unauthorized",
17
+ message: new common.ProsopoEnvError("CONTRACT.CANNOT_FIND_KEYPAIR")
18
+ });
19
+ return;
20
+ }
21
+ verifySignature(signature, timestamp, env.pair);
22
+ next();
23
+ } catch (err) {
24
+ console.error("Auth Middleware Error:", err);
25
+ res.status(401).json({ error: "Unauthorized", message: err });
26
+ return;
27
+ }
28
+ };
29
+ };
30
+ const extractHeaders = (req) => {
31
+ const signature = req.headers.signature;
32
+ const timestamp = req.headers.timestamp;
33
+ if (!timestamp) {
34
+ throw new common.ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
35
+ context: { error: "Missing timestamp", code: 400 }
36
+ });
37
+ }
38
+ if (!signature) {
39
+ throw new common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
40
+ context: { error: "Missing signature", code: 400 }
41
+ });
42
+ }
43
+ if (Array.isArray(signature) || Array.isArray(timestamp) || !util.isHex(signature)) {
44
+ throw new common.ProsopoApiError("CONTRACT.INVALID_DATA_FORMAT", {
45
+ context: { error: "Invalid header format", code: 400 }
46
+ });
47
+ }
48
+ const now = (/* @__PURE__ */ new Date()).getTime();
49
+ const ts = Number.parseInt(timestamp, 10);
50
+ if (now - ts > 3e5) {
51
+ throw new common.ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
52
+ context: { error: "Timestamp is too old", code: 400 }
53
+ });
54
+ }
55
+ return { signature, timestamp };
56
+ };
57
+ const verifySignature = (signature, timestamp, pair) => {
58
+ const u8Sig = util.hexToU8a(signature);
59
+ if (!pair.verify(timestamp, u8Sig, pair.publicKey)) {
60
+ throw new common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
61
+ context: { error: "Signature verification failed", code: 401 }
62
+ });
63
+ }
64
+ };
65
+ exports.authMiddleware = authMiddleware;
66
+ exports.verifySignature = verifySignature;