@prosopo/provider 2.0.1 → 2.0.3

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 (124) hide show
  1. package/dist/api/captcha.d.ts.map +1 -1
  2. package/dist/api/captcha.js +15 -9
  3. package/dist/api/captcha.js.map +1 -1
  4. package/dist/api/captchaScheduler.d.ts +1 -1
  5. package/dist/api/captchaScheduler.d.ts.map +1 -1
  6. package/dist/api/captchaScheduler.js +10 -4
  7. package/dist/api/captchaScheduler.js.map +1 -1
  8. package/dist/api/verify.d.ts.map +1 -1
  9. package/dist/api/verify.js +22 -9
  10. package/dist/api/verify.js.map +1 -1
  11. package/dist/cjs/api/captcha.cjs +51 -39
  12. package/dist/cjs/api/captchaScheduler.cjs +17 -4
  13. package/dist/cjs/api/verify.cjs +22 -10
  14. package/dist/cjs/index.cjs +0 -2
  15. package/dist/cjs/tasks/dataset/datasetTasks.cjs +68 -11
  16. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +35 -34
  17. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +53 -28
  18. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +0 -29
  19. package/dist/cjs/util.cjs +1 -24
  20. package/dist/tasks/dataset/datasetTasks.d.ts +2 -2
  21. package/dist/tasks/dataset/datasetTasks.d.ts.map +1 -1
  22. package/dist/tasks/dataset/datasetTasks.js +39 -8
  23. package/dist/tasks/dataset/datasetTasks.js.map +1 -1
  24. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +6 -6
  25. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  26. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +22 -27
  27. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  28. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -1
  29. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
  30. package/dist/tasks/powCaptcha/powTasks.d.ts +2 -2
  31. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  32. package/dist/tasks/powCaptcha/powTasks.js +40 -23
  33. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  34. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +0 -2
  35. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  36. package/dist/tasks/powCaptcha/powTasksUtils.js +0 -27
  37. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  38. package/dist/tests/integration/imgCaptcha.integration.test.d.ts +2 -0
  39. package/dist/tests/integration/imgCaptcha.integration.test.d.ts.map +1 -0
  40. package/dist/tests/integration/{imgCaptcha.test.js → imgCaptcha.integration.test.js} +9 -5
  41. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -0
  42. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts +5 -1
  43. package/dist/tests/integration/mocks/solvedTestCaptchas.d.ts.map +1 -1
  44. package/dist/tests/integration/mocks/solvedTestCaptchas.js +4 -0
  45. package/dist/tests/integration/mocks/solvedTestCaptchas.js.map +1 -1
  46. package/dist/tests/integration/powCaptcha.integration.test.d.ts +2 -0
  47. package/dist/tests/integration/powCaptcha.integration.test.d.ts.map +1 -0
  48. package/dist/tests/integration/{powCaptcha.test.js → powCaptcha.integration.test.js} +12 -10
  49. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -0
  50. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts +2 -0
  51. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts.map +1 -0
  52. package/dist/tests/unit/api/{authMiddleware.test.js → authMiddleware.unit.test.js} +1 -1
  53. package/dist/tests/unit/api/authMiddleware.unit.test.js.map +1 -0
  54. package/dist/tests/unit/api/captchaScheduler.unit.test.d.ts +2 -0
  55. package/dist/tests/unit/api/captchaScheduler.unit.test.d.ts.map +1 -0
  56. package/dist/tests/unit/api/{captchaScheduler.test.js → captchaScheduler.unit.test.js} +20 -6
  57. package/dist/tests/unit/api/captchaScheduler.unit.test.js.map +1 -0
  58. package/dist/tests/unit/api/errorHandler.unit.test.d.ts +2 -0
  59. package/dist/tests/unit/api/errorHandler.unit.test.d.ts.map +1 -0
  60. package/dist/tests/unit/api/{errorHandler.test.js → errorHandler.unit.test.js} +1 -1
  61. package/dist/tests/unit/api/errorHandler.unit.test.js.map +1 -0
  62. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts +2 -0
  63. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.d.ts.map +1 -0
  64. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +188 -0
  65. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -0
  66. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts +2 -0
  67. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.d.ts.map +1 -0
  68. package/dist/tests/unit/tasks/dataset/{datasetTasksUtils.test.js → datasetTasksUtils.unit.test.js} +1 -1
  69. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -0
  70. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts +2 -0
  71. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.d.ts.map +1 -0
  72. package/dist/tests/unit/tasks/imgCaptcha/{imgCaptchaTasks.test.js → imgCaptchaTasks.unit.test.js} +27 -25
  73. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -0
  74. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts +2 -0
  75. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.d.ts.map +1 -0
  76. package/dist/tests/unit/tasks/imgCaptcha/{imgCaptchaTasksUtils.test.js → imgCaptchaTasksUtils.unit.test.js} +1 -1
  77. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -0
  78. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts +2 -0
  79. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.d.ts.map +1 -0
  80. package/dist/tests/unit/tasks/powCaptcha/{powTasks.test.js → powTasks.unit.test.js} +104 -33
  81. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -0
  82. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts +2 -0
  83. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.d.ts.map +1 -0
  84. package/dist/tests/unit/tasks/powCaptcha/{powTasksUtils.test.js → powTasksUtils.unit.test.js} +6 -35
  85. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -0
  86. package/dist/util.d.ts +0 -7
  87. package/dist/util.d.ts.map +1 -1
  88. package/dist/util.js +1 -21
  89. package/dist/util.js.map +1 -1
  90. package/package.json +72 -73
  91. package/dist/tests/integration/imgCaptcha.test.d.ts +0 -2
  92. package/dist/tests/integration/imgCaptcha.test.d.ts.map +0 -1
  93. package/dist/tests/integration/imgCaptcha.test.js.map +0 -1
  94. package/dist/tests/integration/powCaptcha.test.d.ts +0 -2
  95. package/dist/tests/integration/powCaptcha.test.d.ts.map +0 -1
  96. package/dist/tests/integration/powCaptcha.test.js.map +0 -1
  97. package/dist/tests/unit/api/authMiddleware.test.d.ts +0 -2
  98. package/dist/tests/unit/api/authMiddleware.test.d.ts.map +0 -1
  99. package/dist/tests/unit/api/authMiddleware.test.js.map +0 -1
  100. package/dist/tests/unit/api/captchaScheduler.test.d.ts +0 -2
  101. package/dist/tests/unit/api/captchaScheduler.test.d.ts.map +0 -1
  102. package/dist/tests/unit/api/captchaScheduler.test.js.map +0 -1
  103. package/dist/tests/unit/api/errorHandler.test.d.ts +0 -2
  104. package/dist/tests/unit/api/errorHandler.test.d.ts.map +0 -1
  105. package/dist/tests/unit/api/errorHandler.test.js.map +0 -1
  106. package/dist/tests/unit/tasks/dataset/datasetTasks.test.d.ts +0 -2
  107. package/dist/tests/unit/tasks/dataset/datasetTasks.test.d.ts.map +0 -1
  108. package/dist/tests/unit/tasks/dataset/datasetTasks.test.js +0 -88
  109. package/dist/tests/unit/tasks/dataset/datasetTasks.test.js.map +0 -1
  110. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.d.ts +0 -2
  111. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.d.ts.map +0 -1
  112. package/dist/tests/unit/tasks/dataset/datasetTasksUtils.test.js.map +0 -1
  113. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.d.ts +0 -2
  114. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.d.ts.map +0 -1
  115. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.test.js.map +0 -1
  116. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.d.ts +0 -2
  117. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.d.ts.map +0 -1
  118. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.test.js.map +0 -1
  119. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.d.ts +0 -2
  120. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.d.ts.map +0 -1
  121. package/dist/tests/unit/tasks/powCaptcha/powTasks.test.js.map +0 -1
  122. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.d.ts +0 -2
  123. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.d.ts.map +0 -1
  124. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAU/C,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CA+N9D"}
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;AAY/C,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CA0O9D"}
@@ -6,16 +6,18 @@ import { version } from "@prosopo/util";
6
6
  import express from "express";
7
7
  import { Tasks } from "../tasks/tasks.js";
8
8
  import { handleErrors } from "./errorHandler.js";
9
+ const NO_IP_ADDRESS = "NO_IP_ADDRESS";
9
10
  export function prosopoRouter(env) {
10
11
  const router = express.Router();
11
12
  const tasks = new Tasks(env);
12
- router.get(`${ApiPaths.GetImageCaptchaChallenge}/:${ApiParams.datasetId}/:${ApiParams.user}/:${ApiParams.dapp}/:${ApiParams.blockNumber}`, async (req, res, next) => {
13
+ const GetImageCaptchaChallengePath = `${ApiPaths.GetImageCaptchaChallenge}/:${ApiParams.datasetId}/:${ApiParams.user}/:${ApiParams.dapp}`;
14
+ router.get(GetImageCaptchaChallengePath, async (req, res, next) => {
13
15
  try {
14
16
  const { datasetId, user } = CaptchaRequestBody.parse(req.params);
15
17
  validateAddress(user, false, 42);
16
- const taskData = await tasks.imgCaptchaManager.getRandomCaptchasAndRequestHash(datasetId, user);
18
+ const taskData = await tasks.imgCaptchaManager.getRandomCaptchasAndRequestHash(datasetId, user, req.ip || NO_IP_ADDRESS);
17
19
  const captchaResponse = {
18
- captchas: taskData.captchas.map((captcha) => ({
20
+ [ApiParams.captchas]: taskData.captchas.map((captcha) => ({
19
21
  ...captcha,
20
22
  items: captcha.items.map((item) => parseCaptchaAssets(item, env.assetsResolver)),
21
23
  })),
@@ -23,7 +25,7 @@ export function prosopoRouter(env) {
23
25
  [ApiParams.timestamp]: taskData.timestamp.toString(),
24
26
  [ApiParams.signature]: {
25
27
  [ApiParams.provider]: {
26
- [ApiParams.timestamp]: taskData.signedTimestamp,
28
+ [ApiParams.requestHash]: taskData.signedRequestHash,
27
29
  },
28
30
  },
29
31
  };
@@ -47,7 +49,7 @@ export function prosopoRouter(env) {
47
49
  }));
48
50
  }
49
51
  try {
50
- 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.timestamp);
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);
51
53
  const returnValue = {
52
54
  status: req.i18n.t(result.verified ? "API.CAPTCHA_PASSED" : "API.CAPTCHA_FAILED"),
53
55
  ...result,
@@ -71,14 +73,18 @@ export function prosopoRouter(env) {
71
73
  });
72
74
  }
73
75
  const challenge = await tasks.powCaptchaManager.getPowCaptchaChallenge(user, dapp, origin);
76
+ await tasks.db.storePowCaptchaRecord(challenge.challenge, {
77
+ requestedAtTimestamp: challenge.requestedAtTimestamp,
78
+ userAccount: user,
79
+ dappAccount: dapp,
80
+ }, challenge.difficulty, challenge.providerSignature, req.ip || NO_IP_ADDRESS);
74
81
  const getPowCaptchaResponse = {
75
82
  challenge: challenge.challenge,
76
83
  difficulty: challenge.difficulty,
77
- timestamp: challenge.timestamp.toString(),
84
+ timestamp: challenge.requestedAtTimestamp.toString(),
78
85
  signature: {
79
86
  provider: {
80
- timestamp: challenge.timestampSignature,
81
- challenge: challenge.signature,
87
+ challenge: challenge.providerSignature,
82
88
  },
83
89
  },
84
90
  };
@@ -94,7 +100,7 @@ export function prosopoRouter(env) {
94
100
  router.post(ApiPaths.SubmitPowCaptchaSolution, async (req, res, next) => {
95
101
  try {
96
102
  const { challenge, difficulty, signature, nonce, verifiedTimeout } = SubmitPowCaptchaSolutionBody.parse(req.body);
97
- const verified = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, difficulty, signature.provider.challenge, nonce, verifiedTimeout, signature.user.timestamp);
103
+ const verified = await tasks.powCaptchaManager.verifyPowCaptchaSolution(challenge, difficulty, signature.provider.challenge, nonce, verifiedTimeout, signature.user.timestamp, req.ip || NO_IP_ADDRESS);
98
104
  const response = { verified };
99
105
  return res.json(response);
100
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/api/captcha.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { KeyringPair } from "@polkadot/keyring/types";
2
- import type { ProsopoConfigOutput } from "@prosopo/types";
2
+ import { ProsopoConfigOutput } from "@prosopo/types";
3
3
  export declare function storeCaptchasExternally(pair: KeyringPair, config: ProsopoConfigOutput): Promise<void>;
4
4
  //# sourceMappingURL=captchaScheduler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"captchaScheduler.d.ts","sourceRoot":"","sources":["../../src/api/captchaScheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAiB1D,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,mBAAmB,iBAuB5B"}
1
+ {"version":3,"file":"captchaScheduler.d.ts","sourceRoot":"","sources":["../../src/api/captchaScheduler.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAsB,MAAM,gBAAgB,CAAC;AAKzE,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,mBAAmB,iBAkC5B"}
@@ -1,6 +1,8 @@
1
1
  import { ProviderEnvironment } from "@prosopo/env";
2
+ import { ScheduledTaskNames } from "@prosopo/types";
2
3
  import { CronJob } from "cron";
3
4
  import { Tasks } from "../tasks/tasks.js";
5
+ import { checkIfTaskIsRunning } from "../util.js";
4
6
  export async function storeCaptchasExternally(pair, config) {
5
7
  const env = new ProviderEnvironment(config, pair);
6
8
  await env.isReady();
@@ -12,10 +14,14 @@ export async function storeCaptchasExternally(pair, config) {
12
14
  : defaultSchedule
13
15
  : defaultSchedule;
14
16
  const job = new CronJob(cronSchedule, async () => {
15
- env.logger.log("storeCommitmentsExternal task....");
16
- await tasks.datasetManager.storeCommitmentsExternal().catch((err) => {
17
- env.logger.error(err);
18
- });
17
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.StoreCommitmentsExternal, env.getDb());
18
+ env.logger.info(`${ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`);
19
+ if (!taskRunning) {
20
+ env.logger.info(`${ScheduledTaskNames.StoreCommitmentsExternal} task....`);
21
+ await tasks.datasetManager.storeCommitmentsExternal().catch((err) => {
22
+ env.logger.error(err);
23
+ });
24
+ }
19
25
  });
20
26
  job.start();
21
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"captchaScheduler.js","sourceRoot":"","sources":["../../src/api/captchaScheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAenD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAiB,EACjB,MAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAG7B,MAAM,eAAe,GAAG,WAAW,CAAC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB;QAC1C,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ;YAChC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ;YAClC,CAAC,CAAC,eAAe;QACnB,CAAC,CAAC,eAAe,CAAC;IAEpB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,cAAc,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"captchaScheduler.js","sourceRoot":"","sources":["../../src/api/captchaScheduler.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAuB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAiB,EACjB,MAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAG7B,MAAM,eAAe,GAAG,WAAW,CAAC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB;QAC1C,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ;YAChC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ;YAClC,CAAC,CAAC,eAAe;QACnB,CAAC,CAAC,eAAe,CAAC;IAEpB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAC5C,kBAAkB,CAAC,wBAAwB,EAC3C,GAAG,CAAC,KAAK,EAAE,CACZ,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,kBAAkB,CAAC,wBAAwB,kBAAkB,WAAW,EAAE,CAC9E,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;YAChB,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,kBAAkB,CAAC,wBAAwB,WAAW,CAC1D,CAAC;YACF,MAAM,KAAK,CAAC,cAAc,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"AAwBA,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,CAqMpE"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAgB,EAId,KAAK,MAAM,EACZ,MAAM,SAAS,CAAC;AAWjB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAkNpE"}
@@ -11,15 +11,15 @@ export function prosopoVerifyRouter(env) {
11
11
  async function verifyImageSolution(res, req, next, isDapp) {
12
12
  const parsed = VerifySolutionBody.parse(req.body);
13
13
  try {
14
- const { dappUserSignature, token } = parsed;
15
- const { user, dapp, blockNumber, commitmentId } = decodeProcaptchaOutput(token);
14
+ const { dappSignature, token } = parsed;
15
+ const { user, dapp, timestamp, commitmentId } = decodeProcaptchaOutput(token);
16
16
  const keyPair = isDapp
17
17
  ? env.keyring.addFromAddress(dapp)
18
18
  : env.keyring.addFromAddress(user);
19
- verifySignature(dappUserSignature, blockNumber.toString(), keyPair);
19
+ verifySignature(dappSignature, timestamp.toString(), keyPair);
20
20
  const solution = await (commitmentId
21
21
  ? tasks.imgCaptchaManager.getDappUserCommitmentById(commitmentId)
22
- : tasks.imgCaptchaManager.getDappUserCommitmentByAccount(user));
22
+ : tasks.imgCaptchaManager.getDappUserCommitmentByAccount(user, dapp));
23
23
  if (!solution) {
24
24
  tasks.logger.debug("Not verified - no solution found");
25
25
  const noSolutionResponse = {
@@ -28,7 +28,21 @@ export function prosopoVerifyRouter(env) {
28
28
  };
29
29
  return res.json(noSolutionResponse);
30
30
  }
31
- if (solution.status === CaptchaStatus.disapproved) {
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
+ else {
40
+ await tasks.imgCaptchaManager.db.markDappUserCommitmentsChecked([
41
+ solution.id,
42
+ ]);
43
+ }
44
+ }
45
+ if (solution.result.status === CaptchaStatus.disapproved) {
32
46
  const disapprovedResponse = {
33
47
  [ApiParams.status]: req.t("API.USER_NOT_VERIFIED"),
34
48
  [ApiParams.verified]: false,
@@ -48,12 +62,11 @@ export function prosopoVerifyRouter(env) {
48
62
  return res.json(expiredResponse);
49
63
  }
50
64
  }
51
- const isApproved = solution.status === CaptchaStatus.approved;
65
+ const isApproved = solution.result.status === CaptchaStatus.approved;
52
66
  const response = {
53
67
  [ApiParams.status]: req.t(isApproved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
54
68
  [ApiParams.verified]: isApproved,
55
69
  [ApiParams.commitmentId]: solution.id.toString(),
56
- [ApiParams.blockNumber]: solution.requestedAt,
57
70
  };
58
71
  return res.json(response);
59
72
  }
@@ -86,7 +99,7 @@ export function prosopoVerifyRouter(env) {
86
99
  router.post(ApiPaths.VerifyPowCaptchaSolution, async (req, res, next) => {
87
100
  try {
88
101
  const { token, dappSignature, verifiedTimeout } = ServerPowCaptchaVerifyRequestBody.parse(req.body);
89
- const { dapp, blockNumber, challenge } = decodeProcaptchaOutput(token);
102
+ const { dapp, timestamp, challenge } = decodeProcaptchaOutput(token);
90
103
  if (!challenge) {
91
104
  const unverifiedResponse = {
92
105
  status: req.t("API.USER_NOT_VERIFIED"),
@@ -95,7 +108,7 @@ export function prosopoVerifyRouter(env) {
95
108
  return res.json(unverifiedResponse);
96
109
  }
97
110
  const dappPair = env.keyring.addFromAddress(dapp);
98
- verifySignature(dappSignature, blockNumber.toString(), dappPair);
111
+ verifySignature(dappSignature, timestamp.toString(), dappPair);
99
112
  const approved = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, verifiedTimeout);
100
113
  const verificationResponse = {
101
114
  status: req.t(approved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"),
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/api/verify.ts"],"names":[],"mappings":"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"}
@@ -8,45 +8,45 @@ const util = require("@prosopo/util");
8
8
  const express = require("express");
9
9
  const tasks = require("../tasks/tasks.cjs");
10
10
  const errorHandler = require("./errorHandler.cjs");
11
+ const NO_IP_ADDRESS = "NO_IP_ADDRESS";
11
12
  function prosopoRouter(env) {
12
13
  const router = express.Router();
13
14
  const tasks$1 = new tasks.Tasks(env);
14
- router.get(
15
- `${types.ApiPaths.GetImageCaptchaChallenge}/:${types.ApiParams.datasetId}/:${types.ApiParams.user}/:${types.ApiParams.dapp}/:${types.ApiParams.blockNumber}`,
16
- async (req, res, next) => {
17
- try {
18
- const { datasetId, user } = types.CaptchaRequestBody.parse(req.params);
19
- address.validateAddress(user, false, 42);
20
- const taskData = await tasks$1.imgCaptchaManager.getRandomCaptchasAndRequestHash(
21
- datasetId,
22
- user
23
- );
24
- const captchaResponse = {
25
- captchas: taskData.captchas.map((captcha) => ({
26
- ...captcha,
27
- items: captcha.items.map(
28
- (item) => datasets.parseCaptchaAssets(item, env.assetsResolver)
29
- )
30
- })),
31
- [types.ApiParams.requestHash]: taskData.requestHash,
32
- [types.ApiParams.timestamp]: taskData.timestamp.toString(),
33
- [types.ApiParams.signature]: {
34
- [types.ApiParams.provider]: {
35
- [types.ApiParams.timestamp]: taskData.signedTimestamp
36
- }
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 } = types.CaptchaRequestBody.parse(req.params);
19
+ address.validateAddress(user, false, 42);
20
+ const taskData = await tasks$1.imgCaptchaManager.getRandomCaptchasAndRequestHash(
21
+ datasetId,
22
+ user,
23
+ req.ip || NO_IP_ADDRESS
24
+ );
25
+ const captchaResponse = {
26
+ [types.ApiParams.captchas]: taskData.captchas.map((captcha) => ({
27
+ ...captcha,
28
+ items: captcha.items.map(
29
+ (item) => datasets.parseCaptchaAssets(item, env.assetsResolver)
30
+ )
31
+ })),
32
+ [types.ApiParams.requestHash]: taskData.requestHash,
33
+ [types.ApiParams.timestamp]: taskData.timestamp.toString(),
34
+ [types.ApiParams.signature]: {
35
+ [types.ApiParams.provider]: {
36
+ [types.ApiParams.requestHash]: taskData.signedRequestHash
37
37
  }
38
- };
39
- return res.json(captchaResponse);
40
- } catch (err) {
41
- tasks$1.logger.error(err);
42
- return next(
43
- new common.ProsopoApiError("API.BAD_REQUEST", {
44
- context: { error: err, code: 400 }
45
- })
46
- );
47
- }
38
+ }
39
+ };
40
+ return res.json(captchaResponse);
41
+ } catch (err) {
42
+ tasks$1.logger.error(err);
43
+ return next(
44
+ new common.ProsopoApiError("API.BAD_REQUEST", {
45
+ context: { error: err, code: 400 }
46
+ })
47
+ );
48
48
  }
49
- );
49
+ });
50
50
  router.post(types.ApiPaths.SubmitImageCaptchaSolution, async (req, res, next) => {
51
51
  let parsed;
52
52
  try {
@@ -66,7 +66,8 @@ function prosopoRouter(env) {
66
66
  parsed[types.ApiParams.captchas],
67
67
  parsed[types.ApiParams.signature].user.requestHash,
68
68
  parseInt(parsed[types.ApiParams.timestamp]),
69
- parsed[types.ApiParams.signature].provider.timestamp
69
+ parsed[types.ApiParams.signature].provider.requestHash,
70
+ req.ip || NO_IP_ADDRESS
70
71
  );
71
72
  const returnValue = {
72
73
  status: req.i18n.t(
@@ -98,14 +99,24 @@ function prosopoRouter(env) {
98
99
  dapp,
99
100
  origin
100
101
  );
102
+ await tasks$1.db.storePowCaptchaRecord(
103
+ challenge.challenge,
104
+ {
105
+ requestedAtTimestamp: challenge.requestedAtTimestamp,
106
+ userAccount: user,
107
+ dappAccount: dapp
108
+ },
109
+ challenge.difficulty,
110
+ challenge.providerSignature,
111
+ req.ip || NO_IP_ADDRESS
112
+ );
101
113
  const getPowCaptchaResponse = {
102
114
  challenge: challenge.challenge,
103
115
  difficulty: challenge.difficulty,
104
- timestamp: challenge.timestamp.toString(),
116
+ timestamp: challenge.requestedAtTimestamp.toString(),
105
117
  signature: {
106
118
  provider: {
107
- timestamp: challenge.timestampSignature,
108
- challenge: challenge.signature
119
+ challenge: challenge.providerSignature
109
120
  }
110
121
  }
111
122
  };
@@ -128,7 +139,8 @@ function prosopoRouter(env) {
128
139
  signature.provider.challenge,
129
140
  nonce,
130
141
  verifiedTimeout,
131
- signature.user.timestamp
142
+ signature.user.timestamp,
143
+ req.ip || NO_IP_ADDRESS
132
144
  );
133
145
  const response = { verified };
134
146
  return res.json(response);
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const env = require("@prosopo/env");
4
+ const types = require("@prosopo/types");
4
5
  const cron = require("cron");
5
6
  const tasks = require("../tasks/tasks.cjs");
7
+ const util = require("../util.cjs");
6
8
  async function storeCaptchasExternally(pair, config) {
7
9
  const env$1 = new env.ProviderEnvironment(config, pair);
8
10
  await env$1.isReady();
@@ -10,10 +12,21 @@ async function storeCaptchasExternally(pair, config) {
10
12
  const defaultSchedule = "0 * * * *";
11
13
  const cronSchedule = config.captchaScheduler ? config.captchaScheduler.schedule ? config.captchaScheduler.schedule : defaultSchedule : defaultSchedule;
12
14
  const job = new cron.CronJob(cronSchedule, async () => {
13
- env$1.logger.log("storeCommitmentsExternal task....");
14
- await tasks$1.datasetManager.storeCommitmentsExternal().catch((err) => {
15
- env$1.logger.error(err);
16
- });
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.datasetManager.storeCommitmentsExternal().catch((err) => {
27
+ env$1.logger.error(err);
28
+ });
29
+ }
17
30
  });
18
31
  job.start();
19
32
  }
@@ -12,11 +12,11 @@ function prosopoVerifyRouter(env) {
12
12
  async function verifyImageSolution(res, req, next, isDapp) {
13
13
  const parsed = types.VerifySolutionBody.parse(req.body);
14
14
  try {
15
- const { dappUserSignature, token } = parsed;
16
- const { user, dapp, blockNumber, commitmentId } = types.decodeProcaptchaOutput(token);
15
+ const { dappSignature, token } = parsed;
16
+ const { user, dapp, timestamp, commitmentId } = types.decodeProcaptchaOutput(token);
17
17
  const keyPair = isDapp ? env.keyring.addFromAddress(dapp) : env.keyring.addFromAddress(user);
18
- authMiddleware.verifySignature(dappUserSignature, blockNumber.toString(), keyPair);
19
- const solution = await (commitmentId ? tasks$1.imgCaptchaManager.getDappUserCommitmentById(commitmentId) : tasks$1.imgCaptchaManager.getDappUserCommitmentByAccount(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
20
  if (!solution) {
21
21
  tasks$1.logger.debug("Not verified - no solution found");
22
22
  const noSolutionResponse = {
@@ -25,7 +25,20 @@ function prosopoVerifyRouter(env) {
25
25
  };
26
26
  return res.json(noSolutionResponse);
27
27
  }
28
- if (solution.status === types.CaptchaStatus.disapproved) {
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
+ } else {
36
+ await tasks$1.imgCaptchaManager.db.markDappUserCommitmentsChecked([
37
+ solution.id
38
+ ]);
39
+ }
40
+ }
41
+ if (solution.result.status === types.CaptchaStatus.disapproved) {
29
42
  const disapprovedResponse = {
30
43
  [types.ApiParams.status]: req.t("API.USER_NOT_VERIFIED"),
31
44
  [types.ApiParams.verified]: false
@@ -45,14 +58,13 @@ function prosopoVerifyRouter(env) {
45
58
  return res.json(expiredResponse);
46
59
  }
47
60
  }
48
- const isApproved = solution.status === types.CaptchaStatus.approved;
61
+ const isApproved = solution.result.status === types.CaptchaStatus.approved;
49
62
  const response = {
50
63
  [types.ApiParams.status]: req.t(
51
64
  isApproved ? "API.USER_VERIFIED" : "API.USER_NOT_VERIFIED"
52
65
  ),
53
66
  [types.ApiParams.verified]: isApproved,
54
- [types.ApiParams.commitmentId]: solution.id.toString(),
55
- [types.ApiParams.blockNumber]: solution.requestedAt
67
+ [types.ApiParams.commitmentId]: solution.id.toString()
56
68
  };
57
69
  return res.json(response);
58
70
  } catch (err) {
@@ -94,7 +106,7 @@ function prosopoVerifyRouter(env) {
94
106
  router.post(types.ApiPaths.VerifyPowCaptchaSolution, async (req, res, next) => {
95
107
  try {
96
108
  const { token, dappSignature, verifiedTimeout } = types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
97
- const { dapp, blockNumber, challenge } = types.decodeProcaptchaOutput(token);
109
+ const { dapp, timestamp, challenge } = types.decodeProcaptchaOutput(token);
98
110
  if (!challenge) {
99
111
  const unverifiedResponse = {
100
112
  status: req.t("API.USER_NOT_VERIFIED"),
@@ -103,7 +115,7 @@ function prosopoVerifyRouter(env) {
103
115
  return res.json(unverifiedResponse);
104
116
  }
105
117
  const dappPair = env.keyring.addFromAddress(dapp);
106
- authMiddleware.verifySignature(dappSignature, blockNumber.toString(), dappPair);
118
+ authMiddleware.verifySignature(dappSignature, timestamp.toString(), dappPair);
107
119
  const approved = await tasks$1.powCaptchaManager.serverVerifyPowCaptchaSolution(
108
120
  dapp,
109
121
  challenge,
@@ -10,8 +10,6 @@ const captchaScheduler = require("./api/captchaScheduler.cjs");
10
10
  const tasks = require("./tasks/tasks.cjs");
11
11
  exports.checkIfTaskIsRunning = util.checkIfTaskIsRunning;
12
12
  exports.encodeStringAddress = util.encodeStringAddress;
13
- exports.parseBlockNumber = util.parseBlockNumber;
14
- exports.promiseQueue = util.promiseQueue;
15
13
  exports.shuffleArray = util.shuffleArray;
16
14
  exports.prosopoRouter = captcha.prosopoRouter;
17
15
  exports.prosopoVerifyRouter = verify.prosopoVerifyRouter;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const database = require("@prosopo/database");
4
3
  const datasets = require("@prosopo/datasets");
4
+ const types = require("@prosopo/types");
5
5
  const datasetTasksUtils = require("./datasetTasksUtils.cjs");
6
+ const database = require("@prosopo/database");
6
7
  class DatasetManager {
7
8
  constructor(config, logger, captchaConfig, db) {
8
9
  this.config = config;
@@ -44,7 +45,7 @@ class DatasetManager {
44
45
  await database.saveCaptchaEvent(events, accountId, this.config.mongoEventsUri);
45
46
  }
46
47
  /**
47
- * @description Store commitments externally in the database, clear them from local cache
48
+ * @description Store commitments externally in the database
48
49
  * @returns
49
50
  */
50
51
  async storeCommitmentsExternal() {
@@ -52,17 +53,73 @@ class DatasetManager {
52
53
  this.logger.info("Mongo env not set");
53
54
  return;
54
55
  }
55
- const commitments = await this.db.getUnstoredDappUserCommitments();
56
- this.logger.info(`Storing ${commitments.length} commitments externally`);
57
- const powRecords = await this.db.getUnstoredDappUserPoWCommitments();
58
- this.logger.info(`Storing ${powRecords.length} pow challenges externally`);
59
- await database.saveCaptchas(commitments, powRecords, this.config.mongoCaptchaUri);
60
- await this.db.markDappUserCommitmentsStored(
61
- commitments.map((commitment) => commitment.id)
56
+ const lastTask = await this.db.getLastScheduledTaskStatus(
57
+ types.ScheduledTaskNames.StoreCommitmentsExternal,
58
+ types.ScheduledTaskStatus.Completed
62
59
  );
63
- await this.db.markDappUserPoWCommitmentsStored(
64
- powRecords.map((powRecords2) => powRecords2.challenge)
60
+ const taskID = await this.db.createScheduledTaskStatus(
61
+ types.ScheduledTaskNames.StoreCommitmentsExternal,
62
+ types.ScheduledTaskStatus.Running
65
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
+ }
66
123
  }
67
124
  }
68
125
  exports.DatasetManager = DatasetManager;