@prosopo/provider 2.1.1 → 2.1.2

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 (162) hide show
  1. package/package.json +11 -11
  2. package/.dockerignore +0 -5
  3. package/coverage/base.css +0 -224
  4. package/coverage/block-navigation.js +0 -87
  5. package/coverage/clover.xml +0 -6
  6. package/coverage/coverage-final.json +0 -1
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +0 -101
  9. package/coverage/prettify.css +0 -1
  10. package/coverage/prettify.js +0 -2
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +0 -196
  13. package/dist/api/admin.d.ts +0 -4
  14. package/dist/api/admin.d.ts.map +0 -1
  15. package/dist/api/admin.js +0 -37
  16. package/dist/api/admin.js.map +0 -1
  17. package/dist/api/authMiddleware.d.ts +0 -6
  18. package/dist/api/authMiddleware.d.ts.map +0 -1
  19. package/dist/api/authMiddleware.js +0 -57
  20. package/dist/api/authMiddleware.js.map +0 -1
  21. package/dist/api/captcha.d.ts +0 -4
  22. package/dist/api/captcha.d.ts.map +0 -1
  23. package/dist/api/captcha.js +0 -161
  24. package/dist/api/captcha.js.map +0 -1
  25. package/dist/api/errorHandler.d.ts +0 -5
  26. package/dist/api/errorHandler.d.ts.map +0 -1
  27. package/dist/api/errorHandler.js +0 -14
  28. package/dist/api/errorHandler.js.map +0 -1
  29. package/dist/api/verify.d.ts +0 -4
  30. package/dist/api/verify.d.ts.map +0 -1
  31. package/dist/api/verify.js +0 -127
  32. package/dist/api/verify.js.map +0 -1
  33. package/dist/cjs/api/admin.cjs +0 -38
  34. package/dist/cjs/api/authMiddleware.cjs +0 -57
  35. package/dist/cjs/api/captcha.cjs +0 -210
  36. package/dist/cjs/api/errorHandler.cjs +0 -14
  37. package/dist/cjs/api/verify.cjs +0 -140
  38. package/dist/cjs/index.cjs +0 -21
  39. package/dist/cjs/schedulers/captchaScheduler.cjs +0 -33
  40. package/dist/cjs/schedulers/getClientList.cjs +0 -31
  41. package/dist/cjs/tasks/client/clientTasks.cjs +0 -148
  42. package/dist/cjs/tasks/dataset/datasetTasks.cjs +0 -30
  43. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +0 -34
  44. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +0 -281
  45. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +0 -25
  46. package/dist/cjs/tasks/index.cjs +0 -4
  47. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +0 -133
  48. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +0 -26
  49. package/dist/cjs/tasks/tasks.cjs +0 -40
  50. package/dist/cjs/util.cjs +0 -45
  51. package/dist/index.d.ts +0 -9
  52. package/dist/index.d.ts.map +0 -1
  53. package/dist/index.js +0 -9
  54. package/dist/index.js.map +0 -1
  55. package/dist/schedulers/captchaScheduler.d.ts +0 -4
  56. package/dist/schedulers/captchaScheduler.d.ts.map +0 -1
  57. package/dist/schedulers/captchaScheduler.js +0 -28
  58. package/dist/schedulers/captchaScheduler.js.map +0 -1
  59. package/dist/schedulers/getClientList.d.ts +0 -4
  60. package/dist/schedulers/getClientList.d.ts.map +0 -1
  61. package/dist/schedulers/getClientList.js +0 -28
  62. package/dist/schedulers/getClientList.js.map +0 -1
  63. package/dist/tasks/client/clientTasks.d.ts +0 -13
  64. package/dist/tasks/client/clientTasks.d.ts.map +0 -1
  65. package/dist/tasks/client/clientTasks.js +0 -87
  66. package/dist/tasks/client/clientTasks.js.map +0 -1
  67. package/dist/tasks/dataset/datasetTasks.d.ts +0 -13
  68. package/dist/tasks/dataset/datasetTasks.d.ts.map +0 -1
  69. package/dist/tasks/dataset/datasetTasks.js +0 -19
  70. package/dist/tasks/dataset/datasetTasks.js.map +0 -1
  71. package/dist/tasks/dataset/datasetTasksUtils.d.ts +0 -3
  72. package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +0 -1
  73. package/dist/tasks/dataset/datasetTasksUtils.js +0 -34
  74. package/dist/tasks/dataset/datasetTasksUtils.js.map +0 -1
  75. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +0 -28
  76. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +0 -1
  77. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +0 -208
  78. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +0 -1
  79. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts +0 -7
  80. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +0 -1
  81. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +0 -18
  82. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +0 -1
  83. package/dist/tasks/index.d.ts +0 -2
  84. package/dist/tasks/index.d.ts.map +0 -1
  85. package/dist/tasks/index.js +0 -2
  86. package/dist/tasks/index.js.map +0 -1
  87. package/dist/tasks/powCaptcha/powTasks.d.ts +0 -13
  88. package/dist/tasks/powCaptcha/powTasks.d.ts.map +0 -1
  89. package/dist/tasks/powCaptcha/powTasks.js +0 -83
  90. package/dist/tasks/powCaptcha/powTasks.js.map +0 -1
  91. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +0 -3
  92. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +0 -1
  93. package/dist/tasks/powCaptcha/powTasksUtils.js +0 -22
  94. package/dist/tasks/powCaptcha/powTasksUtils.js.map +0 -1
  95. package/dist/tasks/tasks.d.ts +0 -22
  96. package/dist/tasks/tasks.d.ts.map +0 -1
  97. package/dist/tasks/tasks.js +0 -24
  98. package/dist/tasks/tasks.js.map +0 -1
  99. package/dist/tests/index.d.ts +0 -2
  100. package/dist/tests/index.d.ts.map +0 -1
  101. package/dist/tests/index.js +0 -2
  102. package/dist/tests/index.js.map +0 -1
  103. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +0 -2
  104. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +0 -1
  105. package/dist/tests/integration/imgCaptcha.integration.test.js +0 -133
  106. package/dist/tests/integration/imgCaptcha.integration.test.js.map +0 -1
  107. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +0 -32
  108. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +0 -1
  109. package/dist/tests/integration/mocks/solvedTestCaptchas.js +0 -1046
  110. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +0 -1
  111. package/dist/tests/integration/powCaptcha.integration.test.d.ts +0 -2
  112. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +0 -1
  113. package/dist/tests/integration/powCaptcha.integration.test.js +0 -229
  114. package/dist/tests/integration/powCaptcha.integration.test.js.map +0 -1
  115. package/dist/tests/integration/registerSitekey.d.ts +0 -2
  116. package/dist/tests/integration/registerSitekey.d.ts.map +0 -1
  117. package/dist/tests/integration/registerSitekey.js +0 -17
  118. package/dist/tests/integration/registerSitekey.js.map +0 -1
  119. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts +0 -2
  120. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts.map +0 -1
  121. package/dist/tests/unit/api/authMiddleware.unit.test.js +0 -87
  122. package/dist/tests/unit/api/authMiddleware.unit.test.js.map +0 -1
  123. package/dist/tests/unit/api/errorHandler.unit.test.d.ts +0 -2
  124. package/dist/tests/unit/api/errorHandler.unit.test.d.ts.map +0 -1
  125. package/dist/tests/unit/api/errorHandler.unit.test.js +0 -65
  126. package/dist/tests/unit/api/errorHandler.unit.test.js.map +0 -1
  127. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts +0 -2
  128. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +0 -1
  129. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +0 -63
  130. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +0 -1
  131. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +0 -2
  132. package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +0 -1
  133. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +0 -172
  134. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +0 -1
  135. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +0 -2
  136. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +0 -1
  137. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +0 -86
  138. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +0 -1
  139. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +0 -2
  140. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +0 -1
  141. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +0 -75
  142. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +0 -1
  143. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +0 -2
  144. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +0 -1
  145. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +0 -266
  146. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +0 -1
  147. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +0 -2
  148. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +0 -1
  149. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +0 -46
  150. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +0 -1
  151. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +0 -2
  152. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +0 -1
  153. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +0 -209
  154. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +0 -1
  155. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +0 -2
  156. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +0 -1
  157. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +0 -65
  158. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +0 -1
  159. package/dist/util.d.ts +0 -6
  160. package/dist/util.d.ts.map +0 -1
  161. package/dist/util.js +0 -34
  162. package/dist/util.js.map +0 -1
@@ -1,127 +0,0 @@
1
- import { ProsopoApiError } from "@prosopo/common";
2
- import { ApiParams, ApiPaths, CaptchaStatus, ServerPowCaptchaVerifyRequestBody, VerifySolutionBody, } from "@prosopo/types";
3
- import { 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
- async function verifyImageSolution(res, req, next, isDapp) {
12
- const parsed = VerifySolutionBody.parse(req.body);
13
- try {
14
- const { dappSignature, token } = parsed;
15
- const { user, dapp, timestamp, commitmentId } = decodeProcaptchaOutput(token);
16
- const keyPair = isDapp
17
- ? env.keyring.addFromAddress(dapp)
18
- : env.keyring.addFromAddress(user);
19
- verifySignature(dappSignature, timestamp.toString(), keyPair);
20
- const solution = await (commitmentId
21
- ? tasks.imgCaptchaManager.getDappUserCommitmentById(commitmentId)
22
- : tasks.imgCaptchaManager.getDappUserCommitmentByAccount(user, dapp));
23
- if (!solution) {
24
- tasks.logger.debug("Not verified - no solution found");
25
- const noSolutionResponse = {
26
- [ApiParams.status]: req.t("API.USER_NOT_VERIFIED_NO_SOLUTION"),
27
- [ApiParams.verified]: false,
28
- };
29
- return res.json(noSolutionResponse);
30
- }
31
- if (isDapp) {
32
- if (solution.serverChecked) {
33
- const alreadyCheckedResponse = {
34
- [ApiParams.status]: req.t("API.USER_ALREADY_VERIFIED"),
35
- [ApiParams.verified]: false,
36
- };
37
- return res.json(alreadyCheckedResponse);
38
- }
39
- await tasks.imgCaptchaManager.db.markDappUserCommitmentsChecked([
40
- solution.id,
41
- ]);
42
- }
43
- if (solution.result.status === CaptchaStatus.disapproved) {
44
- const disapprovedResponse = {
45
- [ApiParams.status]: req.t("API.USER_NOT_VERIFIED"),
46
- [ApiParams.verified]: false,
47
- };
48
- return res.json(disapprovedResponse);
49
- }
50
- const maxVerifiedTime = parsed.maxVerifiedTime || 60 * 1000;
51
- if (maxVerifiedTime) {
52
- const currentTime = Date.now();
53
- const timeSinceCompletion = currentTime - solution.requestedAtTimestamp;
54
- if (timeSinceCompletion > parsed.maxVerifiedTime) {
55
- const expiredResponse = {
56
- [ApiParams.status]: req.t("API.USER_NOT_VERIFIED_TIME_EXPIRED"),
57
- [ApiParams.verified]: false,
58
- };
59
- tasks.logger.debug("Not verified - time run out");
60
- return res.json(expiredResponse);
61
- }
62
- }
63
- const isApproved = solution.result.status === CaptchaStatus.approved;
64
- const response = {
65
- [ApiParams.status]: req.t(isApproved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
66
- [ApiParams.verified]: isApproved,
67
- [ApiParams.commitmentId]: solution.id.toString(),
68
- };
69
- return res.json(response);
70
- }
71
- catch (err) {
72
- return next(new ProsopoApiError("API.BAD_REQUEST", {
73
- context: { code: 400, error: err },
74
- }));
75
- }
76
- }
77
- router.post(ApiPaths.VerifyImageCaptchaSolutionDapp, async (req, res, next) => {
78
- try {
79
- await verifyImageSolution(res, req, next, true);
80
- }
81
- catch (err) {
82
- return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
83
- context: { code: 400, error: err },
84
- }));
85
- }
86
- });
87
- router.post(ApiPaths.VerifyImageCaptchaSolutionUser, async (req, res, next) => {
88
- try {
89
- await verifyImageSolution(res, req, next, false);
90
- }
91
- catch (err) {
92
- return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
93
- context: { code: 400, error: err },
94
- }));
95
- }
96
- });
97
- router.post(ApiPaths.VerifyPowCaptchaSolution, async (req, res, next) => {
98
- try {
99
- const { token, dappSignature, verifiedTimeout } = ServerPowCaptchaVerifyRequestBody.parse(req.body);
100
- const { dapp, timestamp, challenge } = decodeProcaptchaOutput(token);
101
- if (!challenge) {
102
- const unverifiedResponse = {
103
- status: req.t("API.USER_NOT_VERIFIED"),
104
- [ApiParams.verified]: false,
105
- };
106
- return res.json(unverifiedResponse);
107
- }
108
- const dappPair = env.keyring.addFromAddress(dapp);
109
- verifySignature(dappSignature, timestamp.toString(), dappPair);
110
- const approved = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, verifiedTimeout);
111
- const verificationResponse = {
112
- status: req.t(approved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
113
- [ApiParams.verified]: approved,
114
- };
115
- return res.json(verificationResponse);
116
- }
117
- catch (err) {
118
- tasks.logger.error(err);
119
- return next(new ProsopoApiError("API.BAD_REQUEST", {
120
- context: { code: 400, error: err },
121
- }));
122
- }
123
- });
124
- router.use(handleErrors);
125
- return router;
126
- }
127
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
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 authMiddleware = require("./authMiddleware.cjs");
8
- const tasks = require("../tasks/tasks.cjs");
9
- function prosopoAdminRouter(env) {
10
- const router = express.Router();
11
- const tasks$1 = new tasks.Tasks(env);
12
- router.use(authMiddleware.authMiddleware(env));
13
- router.post(types.AdminApiPaths.UpdateDataset, async (req, res, next) => {
14
- try {
15
- const result = await tasks$1.datasetManager.providerSetDataset(req.body);
16
- console.info(`Dataset update complete: ${result}`);
17
- res.status(200).send(result);
18
- } catch (err) {
19
- common.logError(err, tasks$1.logger);
20
- res.status(500).send("An internal server error occurred.");
21
- }
22
- });
23
- router.post(types.AdminApiPaths.SiteKeyRegister, async (req, res, next) => {
24
- try {
25
- const parsed = types.VerifyPowCaptchaSolutionBody.parse(req.body);
26
- await tasks$1.clientTaskManager.registerSiteKey(parsed.siteKey);
27
- const response = {
28
- status: "success"
29
- };
30
- res.json(response);
31
- } catch (err) {
32
- common.logError(err, tasks$1.logger);
33
- res.status(500).send("An internal server error occurred.");
34
- }
35
- });
36
- return router;
37
- }
38
- exports.prosopoAdminRouter = prosopoAdminRouter;
@@ -1,57 +0,0 @@
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 authMiddleware = (env) => {
6
- return async (req, res, next) => {
7
- try {
8
- const { signature, timestamp } = extractHeaders(req);
9
- if (!env.pair) {
10
- throw new common.ProsopoEnvError("CONTRACT.CANNOT_FIND_KEYPAIR");
11
- }
12
- verifyEnvironmentKeyPair(env);
13
- verifySignature(signature, timestamp, env.pair);
14
- next();
15
- } catch (err) {
16
- console.error("Auth Middleware Error:", err);
17
- res.status(401).json({ error: "Unauthorized", message: err });
18
- }
19
- };
20
- };
21
- const extractHeaders = (req) => {
22
- const signature = req.headers.signature;
23
- const timestamp = req.headers.timestamp;
24
- if (!signature || !timestamp) {
25
- throw new common.ProsopoApiError("CONTRACT.INVALID_DATA_FORMAT", {
26
- context: { error: "Missing signature or block number", code: 400 }
27
- });
28
- }
29
- if (Array.isArray(signature) || Array.isArray(timestamp) || !util.isHex(signature)) {
30
- throw new common.ProsopoApiError("CONTRACT.INVALID_DATA_FORMAT", {
31
- context: { error: "Invalid header format", code: 400 }
32
- });
33
- }
34
- const now = (/* @__PURE__ */ new Date()).getTime();
35
- const ts = Number.parseInt(timestamp, 10);
36
- if (now - ts > 3e5) {
37
- throw new common.ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
38
- context: { error: "Timestamp is too old", code: 400 }
39
- });
40
- }
41
- return { signature, timestamp };
42
- };
43
- const verifyEnvironmentKeyPair = (env) => {
44
- if (!env.pair) {
45
- throw new common.ProsopoEnvError("CONTRACT.CANNOT_FIND_KEYPAIR");
46
- }
47
- };
48
- const verifySignature = (signature, timestamp, pair) => {
49
- const u8Sig = util.hexToU8a(signature);
50
- if (!pair.verify(timestamp, u8Sig, pair.publicKey)) {
51
- throw new common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
52
- context: { error: "Signature verification failed", code: 401 }
53
- });
54
- }
55
- };
56
- exports.authMiddleware = authMiddleware;
57
- exports.verifySignature = verifySignature;
@@ -1,210 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const address = require("@polkadot/util-crypto/address");
4
- const common = require("@prosopo/common");
5
- const datasets = require("@prosopo/datasets");
6
- const types = require("@prosopo/types");
7
- const util = require("@prosopo/util");
8
- const express = require("express");
9
- const tasks = require("../tasks/tasks.cjs");
10
- const errorHandler = require("./errorHandler.cjs");
11
- const NO_IP_ADDRESS = "NO_IP_ADDRESS";
12
- function prosopoRouter(env) {
13
- const router = express.Router();
14
- const tasks$1 = new tasks.Tasks(env);
15
- const GetImageCaptchaChallengePath = `${types.ApiPaths.GetImageCaptchaChallenge}/:${types.ApiParams.datasetId}/:${types.ApiParams.user}/:${types.ApiParams.dapp}`;
16
- router.get(GetImageCaptchaChallengePath, async (req, res, next) => {
17
- try {
18
- const { datasetId, user, dapp } = types.CaptchaRequestBody.parse(req.params);
19
- address.validateAddress(user, false, 42);
20
- address.validateAddress(dapp, false, 42);
21
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
22
- if (!clientRecord) {
23
- return res.json({
24
- error: req.i18n.t("API.SITE_KEY_NOT_REGISTERED"),
25
- code: 200
26
- });
27
- }
28
- const taskData = await tasks$1.imgCaptchaManager.getRandomCaptchasAndRequestHash(
29
- datasetId,
30
- user,
31
- req.ip || NO_IP_ADDRESS,
32
- util.flatten(req.headers, ",")
33
- );
34
- const captchaResponse = {
35
- [types.ApiParams.status]: "ok",
36
- [types.ApiParams.captchas]: taskData.captchas.map((captcha) => ({
37
- ...captcha,
38
- items: captcha.items.map(
39
- (item) => datasets.parseCaptchaAssets(item, env.assetsResolver)
40
- )
41
- })),
42
- [types.ApiParams.requestHash]: taskData.requestHash,
43
- [types.ApiParams.timestamp]: taskData.timestamp.toString(),
44
- [types.ApiParams.signature]: {
45
- [types.ApiParams.provider]: {
46
- [types.ApiParams.requestHash]: taskData.signedRequestHash
47
- }
48
- }
49
- };
50
- return res.json(captchaResponse);
51
- } catch (err) {
52
- tasks$1.logger.error(err);
53
- return next(
54
- new common.ProsopoApiError("API.BAD_REQUEST", {
55
- context: { error: err, code: 400 }
56
- })
57
- );
58
- }
59
- });
60
- router.post(types.ApiPaths.SubmitImageCaptchaSolution, async (req, res, next) => {
61
- let parsed;
62
- try {
63
- parsed = types.CaptchaSolutionBody.parse(req.body);
64
- } catch (err) {
65
- return next(
66
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
67
- context: { code: 400, error: err }
68
- })
69
- );
70
- }
71
- try {
72
- const clientRecord = await tasks$1.db.getClientRecord(parsed.dapp);
73
- if (!clientRecord) {
74
- return res.json({
75
- error: req.i18n.t("API.SITE_KEY_NOT_REGISTERED"),
76
- code: 200
77
- });
78
- }
79
- const result = await tasks$1.imgCaptchaManager.dappUserSolution(
80
- parsed[types.ApiParams.user],
81
- parsed[types.ApiParams.dapp],
82
- parsed[types.ApiParams.requestHash],
83
- parsed[types.ApiParams.captchas],
84
- parsed[types.ApiParams.signature].user.requestHash,
85
- Number.parseInt(parsed[types.ApiParams.timestamp]),
86
- parsed[types.ApiParams.signature].provider.requestHash,
87
- req.ip || NO_IP_ADDRESS,
88
- util.flatten(req.headers, ",")
89
- );
90
- const returnValue = {
91
- status: req.i18n.t(
92
- result.verified ? "API.CAPTCHA_PASSED" : "API.CAPTCHA_FAILED"
93
- ),
94
- ...result
95
- };
96
- return res.json(returnValue);
97
- } catch (err) {
98
- tasks$1.logger.error(err);
99
- return next(
100
- new common.ProsopoApiError("API.UNKNOWN", {
101
- context: { code: 400, error: err }
102
- })
103
- );
104
- }
105
- });
106
- router.post(types.ApiPaths.GetPowCaptchaChallenge, async (req, res, next) => {
107
- try {
108
- const { user, dapp } = types.GetPowCaptchaChallengeRequestBody.parse(req.body);
109
- address.validateAddress(user, false, 42);
110
- address.validateAddress(dapp, false, 42);
111
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
112
- if (!clientRecord) {
113
- return res.json({
114
- error: req.i18n.t("API.SITE_KEY_NOT_REGISTERED"),
115
- code: 200
116
- });
117
- }
118
- const origin = req.headers.origin;
119
- if (!origin) {
120
- return next(
121
- new common.ProsopoApiError("API.BAD_REQUEST", {
122
- context: { error: "origin header not found", code: 400 }
123
- })
124
- );
125
- }
126
- const challenge = await tasks$1.powCaptchaManager.getPowCaptchaChallenge(
127
- user,
128
- dapp,
129
- origin
130
- );
131
- await tasks$1.db.storePowCaptchaRecord(
132
- challenge.challenge,
133
- {
134
- requestedAtTimestamp: challenge.requestedAtTimestamp,
135
- userAccount: user,
136
- dappAccount: dapp
137
- },
138
- challenge.difficulty,
139
- challenge.providerSignature,
140
- req.ip || NO_IP_ADDRESS,
141
- util.flatten(req.headers, ",")
142
- );
143
- const getPowCaptchaResponse = {
144
- [types.ApiParams.status]: "ok",
145
- [types.ApiParams.challenge]: challenge.challenge,
146
- [types.ApiParams.difficulty]: challenge.difficulty,
147
- [types.ApiParams.timestamp]: challenge.requestedAtTimestamp.toString(),
148
- [types.ApiParams.signature]: {
149
- [types.ApiParams.provider]: {
150
- [types.ApiParams.challenge]: challenge.providerSignature
151
- }
152
- }
153
- };
154
- return res.json(getPowCaptchaResponse);
155
- } catch (err) {
156
- tasks$1.logger.error(err);
157
- return next(
158
- new common.ProsopoApiError("API.BAD_REQUEST", {
159
- context: { code: 400, error: err }
160
- })
161
- );
162
- }
163
- });
164
- router.post(types.ApiPaths.SubmitPowCaptchaSolution, async (req, res, next) => {
165
- try {
166
- const { challenge, difficulty, signature, nonce, verifiedTimeout, dapp } = types.SubmitPowCaptchaSolutionBody.parse(req.body);
167
- const clientRecord = await tasks$1.db.getClientRecord(dapp);
168
- if (!clientRecord) {
169
- return res.json({
170
- error: req.i18n.t("API.SITE_KEY_NOT_REGISTERED"),
171
- code: 200
172
- });
173
- }
174
- const verified = await tasks$1.powCaptchaManager.verifyPowCaptchaSolution(
175
- challenge,
176
- difficulty,
177
- signature.provider.challenge,
178
- nonce,
179
- verifiedTimeout,
180
- signature.user.timestamp,
181
- req.ip || NO_IP_ADDRESS,
182
- util.flatten(req.headers, ",")
183
- );
184
- const response = { status: "ok", verified };
185
- return res.json(response);
186
- } catch (err) {
187
- tasks$1.logger.error(err);
188
- return next(
189
- new common.ProsopoApiError("API.BAD_REQUEST", {
190
- context: { code: 400, error: err }
191
- })
192
- );
193
- }
194
- });
195
- router.get(types.ApiPaths.GetProviderDetails, async (req, res, next) => {
196
- try {
197
- return res.json({ version: util.version, ...{ message: "Provider online" } });
198
- } catch (err) {
199
- tasks$1.logger.error(err);
200
- return next(
201
- new common.ProsopoApiError("API.BAD_REQUEST", {
202
- context: { code: 400, error: err }
203
- })
204
- );
205
- }
206
- });
207
- router.use(errorHandler.handleErrors);
208
- return router;
209
- }
210
- exports.prosopoRouter = prosopoRouter;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const common = require("@prosopo/common");
4
- const handleErrors = (err, request, response, next) => {
5
- const code = "code" in err ? err.code : 400;
6
- while (err instanceof common.ProsopoBaseError && err.context && err.context.error) {
7
- err = err.context.error;
8
- }
9
- const message = err.message;
10
- response.writeHead(code, JSON.stringify(message), {
11
- "content-type": "application/json"
12
- }).end();
13
- };
14
- exports.handleErrors = handleErrors;
@@ -1,140 +0,0 @@
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
- const tasks = require("../tasks/tasks.cjs");
7
- const authMiddleware = require("./authMiddleware.cjs");
8
- const errorHandler = require("./errorHandler.cjs");
9
- function prosopoVerifyRouter(env) {
10
- const router = express.Router();
11
- const tasks$1 = new tasks.Tasks(env);
12
- async function verifyImageSolution(res, req, next, isDapp) {
13
- const parsed = types.VerifySolutionBody.parse(req.body);
14
- try {
15
- const { dappSignature, token } = parsed;
16
- const { user, dapp, timestamp, commitmentId } = types.decodeProcaptchaOutput(token);
17
- const keyPair = isDapp ? env.keyring.addFromAddress(dapp) : env.keyring.addFromAddress(user);
18
- authMiddleware.verifySignature(dappSignature, timestamp.toString(), keyPair);
19
- const solution = await (commitmentId ? tasks$1.imgCaptchaManager.getDappUserCommitmentById(commitmentId) : tasks$1.imgCaptchaManager.getDappUserCommitmentByAccount(user, dapp));
20
- if (!solution) {
21
- tasks$1.logger.debug("Not verified - no solution found");
22
- const noSolutionResponse = {
23
- [types.ApiParams.status]: req.t("API.USER_NOT_VERIFIED_NO_SOLUTION"),
24
- [types.ApiParams.verified]: false
25
- };
26
- return res.json(noSolutionResponse);
27
- }
28
- if (isDapp) {
29
- if (solution.serverChecked) {
30
- const alreadyCheckedResponse = {
31
- [types.ApiParams.status]: req.t("API.USER_ALREADY_VERIFIED"),
32
- [types.ApiParams.verified]: false
33
- };
34
- return res.json(alreadyCheckedResponse);
35
- }
36
- await tasks$1.imgCaptchaManager.db.markDappUserCommitmentsChecked([
37
- solution.id
38
- ]);
39
- }
40
- if (solution.result.status === types.CaptchaStatus.disapproved) {
41
- const disapprovedResponse = {
42
- [types.ApiParams.status]: req.t("API.USER_NOT_VERIFIED"),
43
- [types.ApiParams.verified]: false
44
- };
45
- return res.json(disapprovedResponse);
46
- }
47
- const maxVerifiedTime = parsed.maxVerifiedTime || 60 * 1e3;
48
- if (maxVerifiedTime) {
49
- const currentTime = Date.now();
50
- const timeSinceCompletion = currentTime - solution.requestedAtTimestamp;
51
- if (timeSinceCompletion > parsed.maxVerifiedTime) {
52
- const expiredResponse = {
53
- [types.ApiParams.status]: req.t("API.USER_NOT_VERIFIED_TIME_EXPIRED"),
54
- [types.ApiParams.verified]: false
55
- };
56
- tasks$1.logger.debug("Not verified - time run out");
57
- return res.json(expiredResponse);
58
- }
59
- }
60
- const isApproved = solution.result.status === types.CaptchaStatus.approved;
61
- const response = {
62
- [types.ApiParams.status]: req.t(
63
- isApproved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"
64
- ),
65
- [types.ApiParams.verified]: isApproved,
66
- [types.ApiParams.commitmentId]: solution.id.toString()
67
- };
68
- return res.json(response);
69
- } catch (err) {
70
- return next(
71
- new common.ProsopoApiError("API.BAD_REQUEST", {
72
- context: { code: 400, error: err }
73
- })
74
- );
75
- }
76
- }
77
- router.post(
78
- types.ApiPaths.VerifyImageCaptchaSolutionDapp,
79
- async (req, res, next) => {
80
- try {
81
- await verifyImageSolution(res, req, next, true);
82
- } catch (err) {
83
- return next(
84
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
85
- context: { code: 400, error: err }
86
- })
87
- );
88
- }
89
- }
90
- );
91
- router.post(
92
- types.ApiPaths.VerifyImageCaptchaSolutionUser,
93
- async (req, res, next) => {
94
- try {
95
- await verifyImageSolution(res, req, next, false);
96
- } catch (err) {
97
- return next(
98
- new common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
99
- context: { code: 400, error: err }
100
- })
101
- );
102
- }
103
- }
104
- );
105
- router.post(types.ApiPaths.VerifyPowCaptchaSolution, async (req, res, next) => {
106
- try {
107
- const { token, dappSignature, verifiedTimeout } = types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
108
- const { dapp, timestamp, challenge } = types.decodeProcaptchaOutput(token);
109
- if (!challenge) {
110
- const unverifiedResponse = {
111
- status: req.t("API.USER_NOT_VERIFIED"),
112
- [types.ApiParams.verified]: false
113
- };
114
- return res.json(unverifiedResponse);
115
- }
116
- const dappPair = env.keyring.addFromAddress(dapp);
117
- authMiddleware.verifySignature(dappSignature, timestamp.toString(), dappPair);
118
- const approved = await tasks$1.powCaptchaManager.serverVerifyPowCaptchaSolution(
119
- dapp,
120
- challenge,
121
- verifiedTimeout
122
- );
123
- const verificationResponse = {
124
- status: req.t(approved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
125
- [types.ApiParams.verified]: approved
126
- };
127
- return res.json(verificationResponse);
128
- } catch (err) {
129
- tasks$1.logger.error(err);
130
- return next(
131
- new common.ProsopoApiError("API.BAD_REQUEST", {
132
- context: { code: 400, error: err }
133
- })
134
- );
135
- }
136
- });
137
- router.use(errorHandler.handleErrors);
138
- return router;
139
- }
140
- exports.prosopoVerifyRouter = prosopoVerifyRouter;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- require("./tasks/index.cjs");
4
- const util = require("./util.cjs");
5
- const captcha = require("./api/captcha.cjs");
6
- const verify = require("./api/verify.cjs");
7
- const admin = require("./api/admin.cjs");
8
- const errorHandler = require("./api/errorHandler.cjs");
9
- const captchaScheduler = require("./schedulers/captchaScheduler.cjs");
10
- const getClientList = require("./schedulers/getClientList.cjs");
11
- const tasks = require("./tasks/tasks.cjs");
12
- exports.checkIfTaskIsRunning = util.checkIfTaskIsRunning;
13
- exports.encodeStringAddress = util.encodeStringAddress;
14
- exports.shuffleArray = util.shuffleArray;
15
- exports.prosopoRouter = captcha.prosopoRouter;
16
- exports.prosopoVerifyRouter = verify.prosopoVerifyRouter;
17
- exports.prosopoAdminRouter = admin.prosopoAdminRouter;
18
- exports.handleErrors = errorHandler.handleErrors;
19
- exports.storeCaptchasExternally = captchaScheduler.storeCaptchasExternally;
20
- exports.getClientList = getClientList.getClientList;
21
- exports.Tasks = tasks.Tasks;
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const env = require("@prosopo/env");
4
- const types = require("@prosopo/types");
5
- const cron = require("cron");
6
- const tasks = require("../tasks/tasks.cjs");
7
- const util = require("../util.cjs");
8
- async function storeCaptchasExternally(pair, config) {
9
- const env$1 = new env.ProviderEnvironment(config, pair);
10
- await env$1.isReady();
11
- const tasks$1 = new tasks.Tasks(env$1);
12
- const defaultSchedule = "0 * * * *";
13
- const cronSchedule = config.scheduledTasks?.captchaScheduler ? config.scheduledTasks.captchaScheduler.schedule ? config.scheduledTasks.captchaScheduler.schedule : defaultSchedule : defaultSchedule;
14
- const job = new cron.CronJob(cronSchedule, async () => {
15
- const taskRunning = await util.checkIfTaskIsRunning(
16
- types.ScheduledTaskNames.StoreCommitmentsExternal,
17
- env$1.getDb()
18
- );
19
- env$1.logger.info(
20
- `${types.ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`
21
- );
22
- if (!taskRunning) {
23
- env$1.logger.info(
24
- `${types.ScheduledTaskNames.StoreCommitmentsExternal} task....`
25
- );
26
- await tasks$1.clientTaskManager.storeCommitmentsExternal().catch((err) => {
27
- env$1.logger.error(err);
28
- });
29
- }
30
- });
31
- job.start();
32
- }
33
- exports.storeCaptchasExternally = storeCaptchasExternally;