@prosopo/provider 2.0.3 → 2.1.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.
- package/dist/api/admin.js.map +1 -1
- package/dist/api/authMiddleware.js.map +1 -1
- package/dist/api/captcha.d.ts.map +1 -1
- package/dist/api/captcha.js +10 -17
- package/dist/api/captcha.js.map +1 -1
- package/dist/api/errorHandler.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +3 -5
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/captcha.cjs +17 -19
- package/dist/cjs/api/verify.cjs +3 -4
- package/dist/cjs/index.cjs +3 -1
- package/dist/cjs/{api → schedulers}/captchaScheduler.cjs +2 -2
- package/dist/cjs/schedulers/getClientList.cjs +31 -0
- package/dist/cjs/tasks/client/clientTasks.cjs +141 -0
- package/dist/cjs/tasks/dataset/datasetTasks.cjs +0 -95
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +6 -4
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +2 -2
- package/dist/cjs/tasks/tasks.cjs +6 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{api → schedulers}/captchaScheduler.d.ts +1 -1
- package/dist/schedulers/captchaScheduler.d.ts.map +1 -0
- package/dist/{api → schedulers}/captchaScheduler.js +4 -4
- package/dist/schedulers/captchaScheduler.js.map +1 -0
- package/dist/schedulers/getClientList.d.ts +4 -0
- package/dist/schedulers/getClientList.d.ts.map +1 -0
- package/dist/schedulers/getClientList.js +28 -0
- package/dist/schedulers/getClientList.js.map +1 -0
- package/dist/tasks/client/clientTasks.d.ts +12 -0
- package/dist/tasks/client/clientTasks.d.ts.map +1 -0
- package/dist/tasks/client/clientTasks.js +80 -0
- package/dist/tasks/client/clientTasks.js.map +1 -0
- package/dist/tasks/dataset/datasetTasks.d.ts +4 -6
- package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -1
- package/dist/tasks/dataset/datasetTasks.js +0 -52
- package/dist/tasks/dataset/datasetTasks.js.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +6 -6
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +4 -3
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.d.ts +5 -5
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +3 -3
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
- package/dist/tasks/tasks.d.ts +5 -3
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +2 -0
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
- package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +8 -12
- package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +1 -1
- package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -1
- package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/{api → schedulers}/captchaScheduler.unit.test.js +6 -4
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +172 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +12 -114
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +6 -2
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +7 -2
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js.map +1 -1
- package/package.json +68 -72
- package/vite.test.config.ts +4 -2
- package/dist/api/captchaScheduler.d.ts.map +0 -1
- package/dist/api/captchaScheduler.js.map +0 -1
- package/dist/tests/unit/api/captchaScheduler.unit.test.d.ts.map +0 -1
- package/dist/tests/unit/api/captchaScheduler.unit.test.js.map +0 -1
- /package/dist/tests/unit/{api → schedulers}/captchaScheduler.unit.test.d.ts +0 -0
package/dist/api/admin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/api/admin.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,oBAAoB,GAAG;IAC5B,QAAQ,EAAE,CAAC;IACX,2BAA2B,EAAE,EAAE;CAC/B,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,GAAwB;IAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAG7B,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjE,IAAI;
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/api/admin.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,oBAAoB,GAAG;IAC5B,QAAQ,EAAE,CAAC;IACX,2BAA2B,EAAE,EAAE;CAC/B,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,GAAwB;IAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAG7B,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEvE,OAAO,CAAC,IAAI,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/api/authMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,GAAwB,EAAE,EAAE;IACxE,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI;
|
|
1
|
+
{"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/api/authMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,GAAwB,EAAE,EAAE;IACxE,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACJ,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAEvD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,IAAI,eAAe,CAAC,8BAA8B,CAAC,CAAC;YAC3D,CAAC;YAED,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAC9B,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,EAAE,CAAC;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,EAAE;IACvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAmB,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,WAAqB,CAAC;IAEtD,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE;YACzD,OAAO,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,IAAI,EAAE,GAAG,EAAE;SAClE,CAAC,CAAC;IACJ,CAAC;IAED,IACC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1B,CAAC,KAAK,CAAC,SAAS,CAAC,EAChB,CAAC;QACF,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE;YACzD,OAAO,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,EAAE;SACtD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,GAAwB,EAAE,EAAE;IAC7D,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAiB,EACjB,WAAmB,EACnB,IAAiB,EAChB,EAAE;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;YACtD,OAAO,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,GAAG,EAAE;SAC9D,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAwB/C,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAyN9D"}
|
package/dist/api/captcha.js
CHANGED
|
@@ -7,6 +7,12 @@ import express from "express";
|
|
|
7
7
|
import { Tasks } from "../tasks/tasks.js";
|
|
8
8
|
import { handleErrors } from "./errorHandler.js";
|
|
9
9
|
const NO_IP_ADDRESS = "NO_IP_ADDRESS";
|
|
10
|
+
const flattenHeaders = (headers) => {
|
|
11
|
+
return Object.fromEntries(Object.entries(headers).map(([key, value]) => [
|
|
12
|
+
key,
|
|
13
|
+
Array.isArray(value) ? value.join(",") : value || "",
|
|
14
|
+
]));
|
|
15
|
+
};
|
|
10
16
|
export function prosopoRouter(env) {
|
|
11
17
|
const router = express.Router();
|
|
12
18
|
const tasks = new Tasks(env);
|
|
@@ -15,7 +21,7 @@ export function prosopoRouter(env) {
|
|
|
15
21
|
try {
|
|
16
22
|
const { datasetId, user } = CaptchaRequestBody.parse(req.params);
|
|
17
23
|
validateAddress(user, false, 42);
|
|
18
|
-
const taskData = await tasks.imgCaptchaManager.getRandomCaptchasAndRequestHash(datasetId, user, req.ip || NO_IP_ADDRESS);
|
|
24
|
+
const taskData = await tasks.imgCaptchaManager.getRandomCaptchasAndRequestHash(datasetId, user, req.ip || NO_IP_ADDRESS, flattenHeaders(req.headers));
|
|
19
25
|
const captchaResponse = {
|
|
20
26
|
[ApiParams.captchas]: taskData.captchas.map((captcha) => ({
|
|
21
27
|
...captcha,
|
|
@@ -49,7 +55,7 @@ export function prosopoRouter(env) {
|
|
|
49
55
|
}));
|
|
50
56
|
}
|
|
51
57
|
try {
|
|
52
|
-
const result = await tasks.imgCaptchaManager.dappUserSolution(parsed[ApiParams.user], parsed[ApiParams.dapp], parsed[ApiParams.requestHash], parsed[ApiParams.captchas], parsed[ApiParams.signature].user.requestHash, parseInt(parsed[ApiParams.timestamp]), parsed[ApiParams.signature].provider.requestHash, req.ip || NO_IP_ADDRESS);
|
|
58
|
+
const result = await tasks.imgCaptchaManager.dappUserSolution(parsed[ApiParams.user], parsed[ApiParams.dapp], parsed[ApiParams.requestHash], parsed[ApiParams.captchas], parsed[ApiParams.signature].user.requestHash, Number.parseInt(parsed[ApiParams.timestamp]), parsed[ApiParams.signature].provider.requestHash, req.ip || NO_IP_ADDRESS, flattenHeaders(req.headers));
|
|
53
59
|
const returnValue = {
|
|
54
60
|
status: req.i18n.t(result.verified ? "API.CAPTCHA_PASSED" : "API.CAPTCHA_FAILED"),
|
|
55
61
|
...result,
|
|
@@ -77,7 +83,7 @@ export function prosopoRouter(env) {
|
|
|
77
83
|
requestedAtTimestamp: challenge.requestedAtTimestamp,
|
|
78
84
|
userAccount: user,
|
|
79
85
|
dappAccount: dapp,
|
|
80
|
-
}, challenge.difficulty, challenge.providerSignature, req.ip || NO_IP_ADDRESS);
|
|
86
|
+
}, challenge.difficulty, challenge.providerSignature, req.ip || NO_IP_ADDRESS, flattenHeaders(req.headers));
|
|
81
87
|
const getPowCaptchaResponse = {
|
|
82
88
|
challenge: challenge.challenge,
|
|
83
89
|
difficulty: challenge.difficulty,
|
|
@@ -100,7 +106,7 @@ export function prosopoRouter(env) {
|
|
|
100
106
|
router.post(ApiPaths.SubmitPowCaptchaSolution, async (req, res, next) => {
|
|
101
107
|
try {
|
|
102
108
|
const { challenge, difficulty, signature, nonce, verifiedTimeout } = SubmitPowCaptchaSolutionBody.parse(req.body);
|
|
103
|
-
const verified = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, difficulty, signature.provider.challenge, nonce, verifiedTimeout, signature.user.timestamp, req.ip || NO_IP_ADDRESS);
|
|
109
|
+
const verified = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, difficulty, signature.provider.challenge, nonce, verifiedTimeout, signature.user.timestamp, req.ip || NO_IP_ADDRESS, flattenHeaders(req.headers));
|
|
104
110
|
const response = { verified };
|
|
105
111
|
return res.json(response);
|
|
106
112
|
}
|
|
@@ -111,19 +117,6 @@ export function prosopoRouter(env) {
|
|
|
111
117
|
}));
|
|
112
118
|
}
|
|
113
119
|
});
|
|
114
|
-
router.post(ApiPaths.SubmitUserEvents, async (req, res, next) => {
|
|
115
|
-
try {
|
|
116
|
-
const { events, accountId } = req.body;
|
|
117
|
-
await tasks.datasetManager.saveCaptchaEvent(events, accountId);
|
|
118
|
-
return res.json({ status: "success" });
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
tasks.logger.error(err);
|
|
122
|
-
return next(new ProsopoApiError("API.BAD_REQUEST", {
|
|
123
|
-
context: { code: 400, error: err },
|
|
124
|
-
}));
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
120
|
router.get(ApiPaths.GetProviderDetails, async (req, res, next) => {
|
|
128
121
|
try {
|
|
129
122
|
return res.json({ version, ...{ message: "Provider online" } });
|
package/dist/api/captcha.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/api/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAkBzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,GAA6C,EAC7C,OAAgB,EAChB,QAAkB,EAClB,IAAkB,EACjB,EAAE;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAE5C,OAAO,GAAG,YAAY,gBAAgB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/api/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAkBzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,GAA6C,EAC7C,OAAgB,EAChB,QAAkB,EAClB,IAAkB,EACjB,EAAE;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAE5C,OAAO,GAAG,YAAY,gBAAgB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,QAAQ;SACN,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QACzC,cAAc,EAAE,kBAAkB;KAClC,CAAC;SACD,GAAG,EAAE,CAAC;AACT,CAAC,CAAC"}
|
package/dist/api/verify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAgB,EAIf,KAAK,MAAM,EACX,MAAM,SAAS,CAAC;AAWjB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAiNpE"}
|
package/dist/api/verify.js
CHANGED
|
@@ -36,11 +36,9 @@ export function prosopoVerifyRouter(env) {
|
|
|
36
36
|
};
|
|
37
37
|
return res.json(alreadyCheckedResponse);
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
]);
|
|
43
|
-
}
|
|
39
|
+
await tasks.imgCaptchaManager.db.markDappUserCommitmentsChecked([
|
|
40
|
+
solution.id,
|
|
41
|
+
]);
|
|
44
42
|
}
|
|
45
43
|
if (solution.result.status === CaptchaStatus.disapproved) {
|
|
46
44
|
const disapprovedResponse = {
|
package/dist/api/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/api/captcha.cjs
CHANGED
|
@@ -9,6 +9,14 @@ const express = require("express");
|
|
|
9
9
|
const tasks = require("../tasks/tasks.cjs");
|
|
10
10
|
const errorHandler = require("./errorHandler.cjs");
|
|
11
11
|
const NO_IP_ADDRESS = "NO_IP_ADDRESS";
|
|
12
|
+
const flattenHeaders = (headers) => {
|
|
13
|
+
return Object.fromEntries(
|
|
14
|
+
Object.entries(headers).map(([key, value]) => [
|
|
15
|
+
key,
|
|
16
|
+
Array.isArray(value) ? value.join(",") : value || ""
|
|
17
|
+
])
|
|
18
|
+
);
|
|
19
|
+
};
|
|
12
20
|
function prosopoRouter(env) {
|
|
13
21
|
const router = express.Router();
|
|
14
22
|
const tasks$1 = new tasks.Tasks(env);
|
|
@@ -20,7 +28,8 @@ function prosopoRouter(env) {
|
|
|
20
28
|
const taskData = await tasks$1.imgCaptchaManager.getRandomCaptchasAndRequestHash(
|
|
21
29
|
datasetId,
|
|
22
30
|
user,
|
|
23
|
-
req.ip || NO_IP_ADDRESS
|
|
31
|
+
req.ip || NO_IP_ADDRESS,
|
|
32
|
+
flattenHeaders(req.headers)
|
|
24
33
|
);
|
|
25
34
|
const captchaResponse = {
|
|
26
35
|
[types.ApiParams.captchas]: taskData.captchas.map((captcha) => ({
|
|
@@ -65,9 +74,10 @@ function prosopoRouter(env) {
|
|
|
65
74
|
parsed[types.ApiParams.requestHash],
|
|
66
75
|
parsed[types.ApiParams.captchas],
|
|
67
76
|
parsed[types.ApiParams.signature].user.requestHash,
|
|
68
|
-
parseInt(parsed[types.ApiParams.timestamp]),
|
|
77
|
+
Number.parseInt(parsed[types.ApiParams.timestamp]),
|
|
69
78
|
parsed[types.ApiParams.signature].provider.requestHash,
|
|
70
|
-
req.ip || NO_IP_ADDRESS
|
|
79
|
+
req.ip || NO_IP_ADDRESS,
|
|
80
|
+
flattenHeaders(req.headers)
|
|
71
81
|
);
|
|
72
82
|
const returnValue = {
|
|
73
83
|
status: req.i18n.t(
|
|
@@ -108,7 +118,8 @@ function prosopoRouter(env) {
|
|
|
108
118
|
},
|
|
109
119
|
challenge.difficulty,
|
|
110
120
|
challenge.providerSignature,
|
|
111
|
-
req.ip || NO_IP_ADDRESS
|
|
121
|
+
req.ip || NO_IP_ADDRESS,
|
|
122
|
+
flattenHeaders(req.headers)
|
|
112
123
|
);
|
|
113
124
|
const getPowCaptchaResponse = {
|
|
114
125
|
challenge: challenge.challenge,
|
|
@@ -140,7 +151,8 @@ function prosopoRouter(env) {
|
|
|
140
151
|
nonce,
|
|
141
152
|
verifiedTimeout,
|
|
142
153
|
signature.user.timestamp,
|
|
143
|
-
req.ip || NO_IP_ADDRESS
|
|
154
|
+
req.ip || NO_IP_ADDRESS,
|
|
155
|
+
flattenHeaders(req.headers)
|
|
144
156
|
);
|
|
145
157
|
const response = { verified };
|
|
146
158
|
return res.json(response);
|
|
@@ -153,20 +165,6 @@ function prosopoRouter(env) {
|
|
|
153
165
|
);
|
|
154
166
|
}
|
|
155
167
|
});
|
|
156
|
-
router.post(types.ApiPaths.SubmitUserEvents, async (req, res, next) => {
|
|
157
|
-
try {
|
|
158
|
-
const { events, accountId } = req.body;
|
|
159
|
-
await tasks$1.datasetManager.saveCaptchaEvent(events, accountId);
|
|
160
|
-
return res.json({ status: "success" });
|
|
161
|
-
} catch (err) {
|
|
162
|
-
tasks$1.logger.error(err);
|
|
163
|
-
return next(
|
|
164
|
-
new common.ProsopoApiError("API.BAD_REQUEST", {
|
|
165
|
-
context: { code: 400, error: err }
|
|
166
|
-
})
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
168
|
router.get(types.ApiPaths.GetProviderDetails, async (req, res, next) => {
|
|
171
169
|
try {
|
|
172
170
|
return res.json({ version: util.version, ...{ message: "Provider online" } });
|
package/dist/cjs/api/verify.cjs
CHANGED
|
@@ -32,11 +32,10 @@ function prosopoVerifyRouter(env) {
|
|
|
32
32
|
[types.ApiParams.verified]: false
|
|
33
33
|
};
|
|
34
34
|
return res.json(alreadyCheckedResponse);
|
|
35
|
-
} else {
|
|
36
|
-
await tasks$1.imgCaptchaManager.db.markDappUserCommitmentsChecked([
|
|
37
|
-
solution.id
|
|
38
|
-
]);
|
|
39
35
|
}
|
|
36
|
+
await tasks$1.imgCaptchaManager.db.markDappUserCommitmentsChecked([
|
|
37
|
+
solution.id
|
|
38
|
+
]);
|
|
40
39
|
}
|
|
41
40
|
if (solution.result.status === types.CaptchaStatus.disapproved) {
|
|
42
41
|
const disapprovedResponse = {
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -6,7 +6,8 @@ const captcha = require("./api/captcha.cjs");
|
|
|
6
6
|
const verify = require("./api/verify.cjs");
|
|
7
7
|
const admin = require("./api/admin.cjs");
|
|
8
8
|
const errorHandler = require("./api/errorHandler.cjs");
|
|
9
|
-
const captchaScheduler = require("./
|
|
9
|
+
const captchaScheduler = require("./schedulers/captchaScheduler.cjs");
|
|
10
|
+
const getClientList = require("./schedulers/getClientList.cjs");
|
|
10
11
|
const tasks = require("./tasks/tasks.cjs");
|
|
11
12
|
exports.checkIfTaskIsRunning = util.checkIfTaskIsRunning;
|
|
12
13
|
exports.encodeStringAddress = util.encodeStringAddress;
|
|
@@ -16,4 +17,5 @@ exports.prosopoVerifyRouter = verify.prosopoVerifyRouter;
|
|
|
16
17
|
exports.prosopoAdminRouter = admin.prosopoAdminRouter;
|
|
17
18
|
exports.handleErrors = errorHandler.handleErrors;
|
|
18
19
|
exports.storeCaptchasExternally = captchaScheduler.storeCaptchasExternally;
|
|
20
|
+
exports.getClientList = getClientList.getClientList;
|
|
19
21
|
exports.Tasks = tasks.Tasks;
|
|
@@ -10,7 +10,7 @@ async function storeCaptchasExternally(pair, config) {
|
|
|
10
10
|
await env$1.isReady();
|
|
11
11
|
const tasks$1 = new tasks.Tasks(env$1);
|
|
12
12
|
const defaultSchedule = "0 * * * *";
|
|
13
|
-
const cronSchedule = config.captchaScheduler ? config.captchaScheduler.schedule ? config.captchaScheduler.schedule : defaultSchedule : defaultSchedule;
|
|
13
|
+
const cronSchedule = config.scheduledTasks?.captchaScheduler ? config.scheduledTasks.captchaScheduler.schedule ? config.scheduledTasks.captchaScheduler.schedule : defaultSchedule : defaultSchedule;
|
|
14
14
|
const job = new cron.CronJob(cronSchedule, async () => {
|
|
15
15
|
const taskRunning = await util.checkIfTaskIsRunning(
|
|
16
16
|
types.ScheduledTaskNames.StoreCommitmentsExternal,
|
|
@@ -23,7 +23,7 @@ async function storeCaptchasExternally(pair, config) {
|
|
|
23
23
|
env$1.logger.info(
|
|
24
24
|
`${types.ScheduledTaskNames.StoreCommitmentsExternal} task....`
|
|
25
25
|
);
|
|
26
|
-
await tasks$1.
|
|
26
|
+
await tasks$1.clientTaskManager.storeCommitmentsExternal().catch((err) => {
|
|
27
27
|
env$1.logger.error(err);
|
|
28
28
|
});
|
|
29
29
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 getClientList(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?.clientListScheduler ? config.scheduledTasks.clientListScheduler.schedule ? config.scheduledTasks.clientListScheduler.schedule : defaultSchedule : defaultSchedule;
|
|
14
|
+
const job = new cron.CronJob(cronSchedule, async () => {
|
|
15
|
+
const taskRunning = await util.checkIfTaskIsRunning(
|
|
16
|
+
types.ScheduledTaskNames.GetClientList,
|
|
17
|
+
env$1.getDb()
|
|
18
|
+
);
|
|
19
|
+
env$1.logger.info(
|
|
20
|
+
`${types.ScheduledTaskNames.GetClientList} task running: ${taskRunning}`
|
|
21
|
+
);
|
|
22
|
+
if (!taskRunning) {
|
|
23
|
+
env$1.logger.info(`${types.ScheduledTaskNames.GetClientList} task....`);
|
|
24
|
+
await tasks$1.clientTaskManager.getClientList().catch((err) => {
|
|
25
|
+
env$1.logger.error(err);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
job.start();
|
|
30
|
+
}
|
|
31
|
+
exports.getClientList = getClientList;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const database = require("@prosopo/database");
|
|
4
|
+
const types = require("@prosopo/types");
|
|
5
|
+
class ClientTaskManager {
|
|
6
|
+
constructor(config, logger, db) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
this.providerDB = db;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @description Store commitments externally in the database
|
|
13
|
+
* @returns Promise<void>
|
|
14
|
+
*/
|
|
15
|
+
async storeCommitmentsExternal() {
|
|
16
|
+
if (!this.config.mongoCaptchaUri) {
|
|
17
|
+
this.logger.info("Mongo env not set");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const lastTask = await this.providerDB.getLastScheduledTaskStatus(
|
|
21
|
+
types.ScheduledTaskNames.StoreCommitmentsExternal,
|
|
22
|
+
types.ScheduledTaskStatus.Completed
|
|
23
|
+
);
|
|
24
|
+
const taskID = await this.providerDB.createScheduledTaskStatus(
|
|
25
|
+
types.ScheduledTaskNames.StoreCommitmentsExternal,
|
|
26
|
+
types.ScheduledTaskStatus.Running
|
|
27
|
+
);
|
|
28
|
+
try {
|
|
29
|
+
let commitments = await this.providerDB.getUnstoredDappUserCommitments();
|
|
30
|
+
let powRecords = await this.providerDB.getUnstoredDappUserPoWCommitments();
|
|
31
|
+
if (lastTask) {
|
|
32
|
+
this.logger.info(
|
|
33
|
+
`Filtering records to only get updated records: ${JSON.stringify(lastTask)}`
|
|
34
|
+
);
|
|
35
|
+
this.logger.info(
|
|
36
|
+
"Last task ran at ",
|
|
37
|
+
new Date(lastTask.updated || 0),
|
|
38
|
+
"Task ID",
|
|
39
|
+
taskID
|
|
40
|
+
);
|
|
41
|
+
commitments = commitments.filter(
|
|
42
|
+
(commitment) => lastTask.updated && commitment.lastUpdatedTimestamp && (commitment.lastUpdatedTimestamp > lastTask.updated || !commitment.lastUpdatedTimestamp)
|
|
43
|
+
);
|
|
44
|
+
powRecords = powRecords.filter((commitment) => {
|
|
45
|
+
return lastTask.updated && commitment.lastUpdatedTimestamp && // either the update stamp is more recent than the last time this task ran or there is no update stamp,
|
|
46
|
+
// so it is a new record
|
|
47
|
+
(commitment.lastUpdatedTimestamp > lastTask.updated || !commitment.lastUpdatedTimestamp);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (commitments.length || powRecords.length) {
|
|
51
|
+
this.logger.info(
|
|
52
|
+
`Storing ${commitments.length} commitments externally`
|
|
53
|
+
);
|
|
54
|
+
this.logger.info(
|
|
55
|
+
`Storing ${powRecords.length} pow challenges externally`
|
|
56
|
+
);
|
|
57
|
+
const captchaDB = new database.CaptchaDatabase(
|
|
58
|
+
this.config.mongoCaptchaUri,
|
|
59
|
+
void 0,
|
|
60
|
+
void 0,
|
|
61
|
+
this.logger
|
|
62
|
+
);
|
|
63
|
+
await captchaDB.saveCaptchas(commitments, powRecords);
|
|
64
|
+
await this.providerDB.markDappUserCommitmentsStored(
|
|
65
|
+
commitments.map((commitment) => commitment.id)
|
|
66
|
+
);
|
|
67
|
+
await this.providerDB.markDappUserPoWCommitmentsStored(
|
|
68
|
+
powRecords.map((powRecords2) => powRecords2.challenge)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
await this.providerDB.updateScheduledTaskStatus(
|
|
72
|
+
taskID,
|
|
73
|
+
types.ScheduledTaskStatus.Completed,
|
|
74
|
+
{
|
|
75
|
+
data: {
|
|
76
|
+
commitments: commitments.map((c) => c.id),
|
|
77
|
+
powRecords: powRecords.map((pr) => pr.challenge)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
this.logger.error(e);
|
|
83
|
+
await this.providerDB.updateScheduledTaskStatus(
|
|
84
|
+
taskID,
|
|
85
|
+
types.ScheduledTaskStatus.Failed,
|
|
86
|
+
{ error: String(e) }
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @description Get a list of client accounts and their settings from the client database
|
|
92
|
+
* @returns Promise<void>
|
|
93
|
+
*/
|
|
94
|
+
async getClientList() {
|
|
95
|
+
if (!this.config.mongoClientUri) {
|
|
96
|
+
this.logger.info("Mongo env not set");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const lastTask = await this.providerDB.getLastScheduledTaskStatus(
|
|
100
|
+
types.ScheduledTaskNames.GetClientList,
|
|
101
|
+
types.ScheduledTaskStatus.Completed
|
|
102
|
+
);
|
|
103
|
+
const taskID = await this.providerDB.createScheduledTaskStatus(
|
|
104
|
+
types.ScheduledTaskNames.GetClientList,
|
|
105
|
+
types.ScheduledTaskStatus.Running
|
|
106
|
+
);
|
|
107
|
+
try {
|
|
108
|
+
const clientDB = new database.ClientDatabase(
|
|
109
|
+
this.config.mongoClientUri,
|
|
110
|
+
void 0,
|
|
111
|
+
// expected to come from URI
|
|
112
|
+
void 0,
|
|
113
|
+
// expected to come from URI
|
|
114
|
+
this.logger
|
|
115
|
+
);
|
|
116
|
+
const updatedAtTimestamp = lastTask ? lastTask.updated || 0 : 0;
|
|
117
|
+
console.log("updatedAtTimestamp", updatedAtTimestamp);
|
|
118
|
+
const newClientRecords = await clientDB.getUpdatedClients(updatedAtTimestamp);
|
|
119
|
+
if (newClientRecords) {
|
|
120
|
+
await this.providerDB.updateClientRecords(newClientRecords);
|
|
121
|
+
}
|
|
122
|
+
await this.providerDB.updateScheduledTaskStatus(
|
|
123
|
+
taskID,
|
|
124
|
+
types.ScheduledTaskStatus.Completed,
|
|
125
|
+
{
|
|
126
|
+
data: {
|
|
127
|
+
clientRecords: newClientRecords.map((c) => c.account)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
} catch (e) {
|
|
132
|
+
this.logger.error(e);
|
|
133
|
+
await this.providerDB.updateScheduledTaskStatus(
|
|
134
|
+
taskID,
|
|
135
|
+
types.ScheduledTaskStatus.Failed,
|
|
136
|
+
{ error: String(e) }
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.ClientTaskManager = ClientTaskManager;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const datasets = require("@prosopo/datasets");
|
|
4
|
-
const types = require("@prosopo/types");
|
|
5
4
|
const datasetTasksUtils = require("./datasetTasksUtils.cjs");
|
|
6
|
-
const database = require("@prosopo/database");
|
|
7
5
|
class DatasetManager {
|
|
8
6
|
constructor(config, logger, captchaConfig, db) {
|
|
9
7
|
this.config = config;
|
|
@@ -28,98 +26,5 @@ class DatasetManager {
|
|
|
28
26
|
);
|
|
29
27
|
await this.db?.storeDataset(dataset);
|
|
30
28
|
}
|
|
31
|
-
/**
|
|
32
|
-
* @description Save captcha user events to external db
|
|
33
|
-
*
|
|
34
|
-
* **Note:** This is only used in development mode
|
|
35
|
-
*
|
|
36
|
-
* @param events
|
|
37
|
-
* @param accountId
|
|
38
|
-
* @returns
|
|
39
|
-
*/
|
|
40
|
-
async saveCaptchaEvent(events, accountId) {
|
|
41
|
-
if (!this.config.devOnlyWatchEvents || !this.config.mongoEventsUri) {
|
|
42
|
-
this.logger.info("Dev watch events not set to true, not saving events");
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
await database.saveCaptchaEvent(events, accountId, this.config.mongoEventsUri);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* @description Store commitments externally in the database
|
|
49
|
-
* @returns
|
|
50
|
-
*/
|
|
51
|
-
async storeCommitmentsExternal() {
|
|
52
|
-
if (!this.config.mongoCaptchaUri) {
|
|
53
|
-
this.logger.info("Mongo env not set");
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const lastTask = await this.db.getLastScheduledTaskStatus(
|
|
57
|
-
types.ScheduledTaskNames.StoreCommitmentsExternal,
|
|
58
|
-
types.ScheduledTaskStatus.Completed
|
|
59
|
-
);
|
|
60
|
-
const taskID = await this.db.createScheduledTaskStatus(
|
|
61
|
-
types.ScheduledTaskNames.StoreCommitmentsExternal,
|
|
62
|
-
types.ScheduledTaskStatus.Running
|
|
63
|
-
);
|
|
64
|
-
try {
|
|
65
|
-
let commitments = await this.db.getUnstoredDappUserCommitments();
|
|
66
|
-
let powRecords = await this.db.getUnstoredDappUserPoWCommitments();
|
|
67
|
-
if (lastTask) {
|
|
68
|
-
this.logger.info(
|
|
69
|
-
`Filtering records to only get updated records: ${JSON.stringify(lastTask)}`
|
|
70
|
-
);
|
|
71
|
-
this.logger.info(
|
|
72
|
-
"Last task ran at ",
|
|
73
|
-
new Date(lastTask.updated || 0),
|
|
74
|
-
"Task ID",
|
|
75
|
-
taskID
|
|
76
|
-
);
|
|
77
|
-
commitments = commitments.filter(
|
|
78
|
-
(commitment) => lastTask.updated && commitment.lastUpdatedTimestamp && (commitment.lastUpdatedTimestamp > lastTask.updated || !commitment.lastUpdatedTimestamp)
|
|
79
|
-
);
|
|
80
|
-
powRecords = powRecords.filter((commitment) => {
|
|
81
|
-
return lastTask.updated && commitment.lastUpdatedTimestamp && // either the update stamp is more recent than the last time this task ran or there is no update stamp,
|
|
82
|
-
// so it is a new record
|
|
83
|
-
(commitment.lastUpdatedTimestamp > lastTask.updated || !commitment.lastUpdatedTimestamp);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
if (commitments.length || powRecords.length) {
|
|
87
|
-
this.logger.info(
|
|
88
|
-
`Storing ${commitments.length} commitments externally`
|
|
89
|
-
);
|
|
90
|
-
this.logger.info(
|
|
91
|
-
`Storing ${powRecords.length} pow challenges externally`
|
|
92
|
-
);
|
|
93
|
-
await database.saveCaptchas(
|
|
94
|
-
commitments,
|
|
95
|
-
powRecords,
|
|
96
|
-
this.config.mongoCaptchaUri
|
|
97
|
-
);
|
|
98
|
-
await this.db.markDappUserCommitmentsStored(
|
|
99
|
-
commitments.map((commitment) => commitment.id)
|
|
100
|
-
);
|
|
101
|
-
await this.db.markDappUserPoWCommitmentsStored(
|
|
102
|
-
powRecords.map((powRecords2) => powRecords2.challenge)
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
await this.db.updateScheduledTaskStatus(
|
|
106
|
-
taskID,
|
|
107
|
-
types.ScheduledTaskStatus.Completed,
|
|
108
|
-
{
|
|
109
|
-
data: {
|
|
110
|
-
commitments: commitments.map((c) => c.id),
|
|
111
|
-
powRecords: powRecords.map((pr) => pr.challenge)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
);
|
|
115
|
-
} catch (e) {
|
|
116
|
-
this.logger.error(e);
|
|
117
|
-
await this.db.updateScheduledTaskStatus(
|
|
118
|
-
taskID,
|
|
119
|
-
types.ScheduledTaskStatus.Failed,
|
|
120
|
-
{ error: e.toString() }
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
29
|
}
|
|
125
30
|
exports.DatasetManager = DatasetManager;
|
|
@@ -29,7 +29,7 @@ class ImgCaptchaManager {
|
|
|
29
29
|
}
|
|
30
30
|
return captchaDocs;
|
|
31
31
|
}
|
|
32
|
-
async getRandomCaptchasAndRequestHash(datasetId, userAccount, ipAddress) {
|
|
32
|
+
async getRandomCaptchasAndRequestHash(datasetId, userAccount, ipAddress, headers) {
|
|
33
33
|
const dataset = await this.db.getDatasetDetails(datasetId);
|
|
34
34
|
if (!dataset) {
|
|
35
35
|
throw new common.ProsopoEnvError("DATABASE.DATASET_GET_FAILED", {
|
|
@@ -78,7 +78,8 @@ class ImgCaptchaManager {
|
|
|
78
78
|
salt,
|
|
79
79
|
deadlineTs,
|
|
80
80
|
currentTime,
|
|
81
|
-
ipAddress
|
|
81
|
+
ipAddress,
|
|
82
|
+
headers
|
|
82
83
|
);
|
|
83
84
|
return {
|
|
84
85
|
captchas,
|
|
@@ -99,7 +100,7 @@ class ImgCaptchaManager {
|
|
|
99
100
|
* @param ipAddress
|
|
100
101
|
* @return {Promise<DappUserSolutionResult>} result containing the contract event
|
|
101
102
|
*/
|
|
102
|
-
async dappUserSolution(userAccount, dappAccount, requestHash, captchas, userRequestHashSignature, timestamp, providerRequestHashSignature, ipAddress) {
|
|
103
|
+
async dappUserSolution(userAccount, dappAccount, requestHash, captchas, userRequestHashSignature, timestamp, providerRequestHashSignature, ipAddress, headers) {
|
|
103
104
|
const verification = utilCrypto.signatureVerify(
|
|
104
105
|
util$1.stringToHex(requestHash),
|
|
105
106
|
userRequestHashSignature,
|
|
@@ -159,7 +160,8 @@ class ImgCaptchaManager {
|
|
|
159
160
|
userSubmitted: true,
|
|
160
161
|
serverChecked: false,
|
|
161
162
|
requestedAtTimestamp: timestamp,
|
|
162
|
-
ipAddress
|
|
163
|
+
ipAddress,
|
|
164
|
+
headers
|
|
163
165
|
};
|
|
164
166
|
await this.db.storeDappUserSolution(receivedCaptchas, commit);
|
|
165
167
|
if (datasets.compareCaptchaSolutions(receivedCaptchas, storedCaptchas)) {
|