@prosopo/provider 2.9.8 → 3.0.5

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 (157) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +1 -1
  3. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +4 -4
  4. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +1 -1
  5. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  6. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +5 -5
  7. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +1 -1
  8. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +1 -1
  9. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +5 -5
  10. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +1 -1
  11. package/dist/api/blacklistRequestInspector.d.ts +6 -8
  12. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  13. package/dist/api/blacklistRequestInspector.js +38 -20
  14. package/dist/api/blacklistRequestInspector.js.map +1 -1
  15. package/dist/api/block.d.ts.map +1 -1
  16. package/dist/api/block.js +5 -5
  17. package/dist/api/block.js.map +1 -1
  18. package/dist/api/captcha.d.ts.map +1 -1
  19. package/dist/api/captcha.js +114 -24
  20. package/dist/api/captcha.js.map +1 -1
  21. package/dist/api/domainMiddleware.d.ts.map +1 -1
  22. package/dist/api/domainMiddleware.js +3 -3
  23. package/dist/api/domainMiddleware.js.map +1 -1
  24. package/dist/api/headerCheckMiddleware.js +2 -2
  25. package/dist/api/headerCheckMiddleware.js.map +1 -1
  26. package/dist/api/ja4Middleware.d.ts.map +1 -1
  27. package/dist/api/ja4Middleware.js +18 -6
  28. package/dist/api/ja4Middleware.js.map +1 -1
  29. package/dist/api/public.d.ts +1 -2
  30. package/dist/api/public.d.ts.map +1 -1
  31. package/dist/api/public.js +9 -4
  32. package/dist/api/public.js.map +1 -1
  33. package/dist/api/validateAddress.d.ts +2 -2
  34. package/dist/api/validateAddress.d.ts.map +1 -1
  35. package/dist/api/validateAddress.js +10 -4
  36. package/dist/api/validateAddress.js.map +1 -1
  37. package/dist/api/verify.d.ts.map +1 -1
  38. package/dist/api/verify.js +8 -7
  39. package/dist/api/verify.js.map +1 -1
  40. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +3 -3
  41. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +4 -4
  42. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +4 -4
  43. package/dist/cjs/api/blacklistRequestInspector.cjs +36 -21
  44. package/dist/cjs/api/block.cjs +4 -5
  45. package/dist/cjs/api/captcha.cjs +116 -39
  46. package/dist/cjs/api/domainMiddleware.cjs +3 -3
  47. package/dist/cjs/api/headerCheckMiddleware.cjs +1 -1
  48. package/dist/cjs/api/ja4Middleware.cjs +17 -8
  49. package/dist/cjs/api/public.cjs +9 -4
  50. package/dist/cjs/api/validateAddress.cjs +12 -6
  51. package/dist/cjs/api/verify.cjs +13 -12
  52. package/dist/cjs/index.cjs +1 -5
  53. package/dist/cjs/schedulers/captchaScheduler.cjs +11 -7
  54. package/dist/cjs/schedulers/getClientList.cjs +12 -5
  55. package/dist/cjs/tasks/captchaManager.cjs +76 -23
  56. package/dist/cjs/tasks/client/clientTasks.cjs +25 -19
  57. package/dist/cjs/tasks/detection/decodePayload.cjs +284 -362
  58. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +32 -25
  59. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +37 -26
  60. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +19 -18
  61. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +5 -3
  62. package/dist/cjs/tasks/tasks.cjs +11 -2
  63. package/dist/cjs/util.cjs +58 -8
  64. package/dist/index.d.ts +0 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +0 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/schedulers/captchaScheduler.d.ts +1 -1
  69. package/dist/schedulers/captchaScheduler.d.ts.map +1 -1
  70. package/dist/schedulers/captchaScheduler.js +11 -3
  71. package/dist/schedulers/captchaScheduler.js.map +1 -1
  72. package/dist/schedulers/getClientList.d.ts +1 -1
  73. package/dist/schedulers/getClientList.d.ts.map +1 -1
  74. package/dist/schedulers/getClientList.js +12 -3
  75. package/dist/schedulers/getClientList.js.map +1 -1
  76. package/dist/tasks/captchaManager.d.ts +14 -1
  77. package/dist/tasks/captchaManager.d.ts.map +1 -1
  78. package/dist/tasks/captchaManager.js +67 -24
  79. package/dist/tasks/captchaManager.js.map +1 -1
  80. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  81. package/dist/tasks/client/clientTasks.js +26 -18
  82. package/dist/tasks/client/clientTasks.js.map +1 -1
  83. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  84. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  85. package/dist/tasks/detection/decodePayload.js +184 -230
  86. package/dist/tasks/detection/decodePayload.js.map +1 -1
  87. package/dist/tasks/frictionless/frictionlessTasks.d.ts +4 -5
  88. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  89. package/dist/tasks/frictionless/frictionlessTasks.js +32 -24
  90. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  91. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +1 -1
  92. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  93. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +38 -25
  94. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  95. package/dist/tasks/powCaptcha/powTasks.d.ts +1 -1
  96. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  97. package/dist/tasks/powCaptcha/powTasks.js +17 -18
  98. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  99. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +1 -1
  100. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  101. package/dist/tasks/powCaptcha/powTasksUtils.js +5 -3
  102. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  103. package/dist/tasks/tasks.d.ts +3 -2
  104. package/dist/tasks/tasks.d.ts.map +1 -1
  105. package/dist/tasks/tasks.js +13 -3
  106. package/dist/tasks/tasks.js.map +1 -1
  107. package/dist/tests/integration/imgCaptcha.integration.test.js +3 -2
  108. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  109. package/dist/tests/integration/powCaptcha.integration.test.js +9 -9
  110. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  111. package/dist/tests/integration/registerSitekey.d.ts.map +1 -1
  112. package/dist/tests/integration/registerSitekey.js +13 -2
  113. package/dist/tests/integration/registerSitekey.js.map +1 -1
  114. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +2 -0
  115. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +1 -0
  116. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +43 -0
  117. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +1 -0
  118. package/dist/tests/unit/api/ja4Middleware.unit.test.js +18 -4
  119. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +1 -1
  120. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +30 -18
  121. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  122. package/dist/tests/unit/tasks/captchaManager.unit.test.js +11 -5
  123. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  124. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +43 -19
  125. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  126. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +11 -4
  127. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
  128. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +9 -8
  129. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  130. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +29 -10
  131. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  132. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +2 -3
  133. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  134. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +4 -2
  135. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  136. package/dist/tests/unit/util.unit.test.js +110 -2
  137. package/dist/tests/unit/util.unit.test.js.map +1 -1
  138. package/dist/util.d.ts +5 -0
  139. package/dist/util.d.ts.map +1 -1
  140. package/dist/util.js +57 -5
  141. package/dist/util.js.map +1 -1
  142. package/package.json +23 -19
  143. package/vite.test.config.ts +1 -1
  144. package/dist/api/authMiddleware.d.ts +0 -6
  145. package/dist/api/authMiddleware.d.ts.map +0 -1
  146. package/dist/api/authMiddleware.js +0 -82
  147. package/dist/api/authMiddleware.js.map +0 -1
  148. package/dist/api/requestLoggerMiddleware.d.ts +0 -4
  149. package/dist/api/requestLoggerMiddleware.d.ts.map +0 -1
  150. package/dist/api/requestLoggerMiddleware.js +0 -12
  151. package/dist/api/requestLoggerMiddleware.js.map +0 -1
  152. package/dist/cjs/api/authMiddleware.cjs +0 -81
  153. package/dist/cjs/api/requestLoggerMiddleware.cjs +0 -14
  154. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts +0 -2
  155. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts.map +0 -1
  156. package/dist/tests/unit/api/authMiddleware.unit.test.js +0 -125
  157. package/dist/tests/unit/api/authMiddleware.unit.test.js.map +0 -1
@@ -5,15 +5,20 @@ const common = require("@prosopo/common");
5
5
  const types = require("@prosopo/types");
6
6
  const util = require("@prosopo/util");
7
7
  const express = require("express");
8
- const tasks = require("../tasks/tasks.cjs");
9
- function publicRouter(env) {
8
+ function publicRouter() {
10
9
  const router = express.Router();
11
- const tasks$1 = new tasks.Tasks(env);
10
+ router.get(types.PublicApiPaths.Healthz, (req, res) => {
11
+ res.status(200).send("OK");
12
+ });
12
13
  router.get(types.PublicApiPaths.GetProviderDetails, async (req, res, next) => {
13
14
  try {
14
15
  return res.json({ version: util.version, ...{ message: "Provider online" } });
15
16
  } catch (err) {
16
- req.logger.error({ err, params: req.params });
17
+ req.logger.error(() => ({
18
+ err,
19
+ data: { reqParams: req.params },
20
+ msg: "Error getting provider details"
21
+ }));
17
22
  return next(
18
23
  new common.ProsopoApiError("API.BAD_REQUEST", {
19
24
  context: { code: 500 }
@@ -1,19 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const address = require("@polkadot/util-crypto/address");
4
3
  const common = require("@prosopo/common");
5
- const validiateSiteKey = (siteKey, logger) => {
4
+ const utilCrypto = require("@prosopo/util-crypto");
5
+ const validateSiteKey = (siteKey, logger) => {
6
6
  return validateAddr(siteKey, "API.INVALID_SITE_KEY", logger);
7
7
  };
8
- const validateAddr = (address$1, translationKey = "CONTRACT.INVALID_ADDRESS", logger) => {
8
+ const validateAddr = (address, translationKey = "CONTRACT.INVALID_ADDRESS", logger) => {
9
9
  try {
10
- return address.validateAddress(address$1, false, 42);
10
+ const valid = utilCrypto.validateAddress(address, false, 42);
11
+ if (!valid) {
12
+ throw new common.ProsopoApiError(translationKey, {
13
+ context: { code: 400, siteKey: address },
14
+ logger
15
+ });
16
+ }
11
17
  } catch (err) {
12
18
  throw new common.ProsopoApiError(translationKey, {
13
- context: { code: 400, error: err, siteKey: address$1 },
19
+ context: { code: 400, siteKey: address },
14
20
  logger
15
21
  });
16
22
  }
17
23
  };
18
24
  exports.validateAddr = validateAddr;
19
- exports.validiateSiteKey = validiateSiteKey;
25
+ exports.validateSiteKey = validateSiteKey;
@@ -1,18 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const address = require("@polkadot/util-crypto/address");
4
3
  const apiExpressRouter = require("@prosopo/api-express-router");
5
4
  const common = require("@prosopo/common");
6
5
  const types = require("@prosopo/types");
6
+ const utilCrypto = require("@prosopo/util-crypto");
7
7
  const express = require("express");
8
8
  const tasks = require("../tasks/tasks.cjs");
9
- const authMiddleware = require("./authMiddleware.cjs");
10
9
  function prosopoVerifyRouter(env) {
11
10
  const router = express.Router();
12
- const tasks$1 = new tasks.Tasks(env);
13
11
  router.post(
14
12
  types.ClientApiPaths.VerifyImageCaptchaSolutionDapp,
15
13
  async (req, res, next) => {
14
+ const tasks$1 = new tasks.Tasks(env, req.logger);
16
15
  let parsed;
17
16
  try {
18
17
  parsed = types.VerifySolutionBody.parse(req.body);
@@ -28,8 +27,8 @@ function prosopoVerifyRouter(env) {
28
27
  const { dappSignature, token, ip } = parsed;
29
28
  try {
30
29
  const { user, dapp, timestamp, commitmentId } = types.decodeProcaptchaOutput(token);
31
- address.validateAddress(dapp, false, 42);
32
- address.validateAddress(user, false, 42);
30
+ utilCrypto.validateAddress(dapp, false, 42);
31
+ utilCrypto.validateAddress(user, false, 42);
33
32
  const clientRecord = await tasks$1.db.getClientRecord(dapp);
34
33
  if (!clientRecord) {
35
34
  return next(
@@ -41,7 +40,7 @@ function prosopoVerifyRouter(env) {
41
40
  );
42
41
  }
43
42
  const keyPair = env.keyring.addFromAddress(dapp);
44
- authMiddleware.verifySignature(dappSignature, timestamp.toString(), keyPair);
43
+ apiExpressRouter.verifySignature(dappSignature, timestamp.toString(), keyPair);
45
44
  const response = await tasks$1.imgCaptchaManager.verifyImageCaptchaSolution(
46
45
  user,
47
46
  dapp,
@@ -49,7 +48,7 @@ function prosopoVerifyRouter(env) {
49
48
  parsed.maxVerifiedTime,
50
49
  ip
51
50
  );
52
- req.logger.debug(response);
51
+ req.logger.debug(() => ({ data: { response } }));
53
52
  const verificationResponse = tasks$1.imgCaptchaManager.getVerificationResponse(
54
53
  response[types.ApiParams.verified],
55
54
  clientRecord,
@@ -59,7 +58,7 @@ function prosopoVerifyRouter(env) {
59
58
  );
60
59
  res.json(verificationResponse);
61
60
  } catch (err) {
62
- req.logger.error({ err, body: req.body });
61
+ req.logger.error(() => ({ err, data: { body: req.body } }));
63
62
  return next(
64
63
  new common.ProsopoApiError("API.BAD_REQUEST", {
65
64
  context: { code: 500, siteKey: req.body.dapp, user: req.body.user },
@@ -73,6 +72,7 @@ function prosopoVerifyRouter(env) {
73
72
  router.post(
74
73
  types.ClientApiPaths.VerifyPowCaptchaSolution,
75
74
  async (req, res, next) => {
75
+ const tasks$1 = new tasks.Tasks(env, req.logger);
76
76
  let parsed;
77
77
  try {
78
78
  parsed = types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
@@ -88,8 +88,8 @@ function prosopoVerifyRouter(env) {
88
88
  try {
89
89
  const { token, dappSignature, verifiedTimeout, ip } = parsed;
90
90
  const { dapp, user, timestamp, challenge } = types.decodeProcaptchaOutput(token);
91
- address.validateAddress(dapp, false, 42);
92
- address.validateAddress(user, false, 42);
91
+ utilCrypto.validateAddress(dapp, false, 42);
92
+ utilCrypto.validateAddress(user, false, 42);
93
93
  const clientRecord = await tasks$1.db.getClientRecord(dapp);
94
94
  if (!clientRecord) {
95
95
  return next(
@@ -108,7 +108,7 @@ function prosopoVerifyRouter(env) {
108
108
  return res.json(unverifiedResponse);
109
109
  }
110
110
  const dappPair = env.keyring.addFromAddress(dapp);
111
- authMiddleware.verifySignature(dappSignature, timestamp.toString(), dappPair);
111
+ apiExpressRouter.verifySignature(dappSignature, timestamp.toString(), dappPair);
112
112
  const { verified, score } = await tasks$1.powCaptchaManager.serverVerifyPowCaptchaSolution(
113
113
  dapp,
114
114
  challenge,
@@ -123,7 +123,8 @@ function prosopoVerifyRouter(env) {
123
123
  );
124
124
  return res.json(verificationResponse);
125
125
  } catch (err) {
126
- req.logger.error({ err, body: req.body });
126
+ console.error("\nError in verifyPowCaptchaSolution:", err);
127
+ req.logger.error(() => ({ err, data: { body: req.body } }));
127
128
  return next(
128
129
  new common.ProsopoApiError("API.BAD_REQUEST", {
129
130
  context: { code: 500, error: err },
@@ -5,7 +5,6 @@ const util = require("./util.cjs");
5
5
  const block = require("./api/block.cjs");
6
6
  const captcha = require("./api/captcha.cjs");
7
7
  const verify = require("./api/verify.cjs");
8
- const authMiddleware = require("./api/authMiddleware.cjs");
9
8
  const ja4Middleware = require("./api/ja4Middleware.cjs");
10
9
  const _public = require("./api/public.cjs");
11
10
  const domainMiddleware = require("./api/domainMiddleware.cjs");
@@ -13,7 +12,6 @@ const captchaScheduler = require("./schedulers/captchaScheduler.cjs");
13
12
  const getClientList = require("./schedulers/getClientList.cjs");
14
13
  const headerCheckMiddleware = require("./api/headerCheckMiddleware.cjs");
15
14
  const createApiAdminRoutesProvider = require("./api/admin/createApiAdminRoutesProvider.cjs");
16
- const requestLoggerMiddleware = require("./api/requestLoggerMiddleware.cjs");
17
15
  const ignoreMiddleware = require("./api/ignoreMiddleware.cjs");
18
16
  const robotsMiddleware = require("./api/robotsMiddleware.cjs");
19
17
  const tasks = require("./tasks/tasks.cjs");
@@ -22,11 +20,10 @@ exports.encodeStringAddress = util.encodeStringAddress;
22
20
  exports.getIPAddress = util.getIPAddress;
23
21
  exports.getIPAddressFromBigInt = util.getIPAddressFromBigInt;
24
22
  exports.shuffleArray = util.shuffleArray;
23
+ exports.validateIpAddress = util.validateIpAddress;
25
24
  exports.blockMiddleware = block.blockMiddleware;
26
25
  exports.prosopoRouter = captcha.prosopoRouter;
27
26
  exports.prosopoVerifyRouter = verify.prosopoVerifyRouter;
28
- exports.authMiddleware = authMiddleware.authMiddleware;
29
- exports.verifySignature = authMiddleware.verifySignature;
30
27
  exports.DEFAULT_JA4 = ja4Middleware.DEFAULT_JA4;
31
28
  exports.getJA4 = ja4Middleware.getJA4;
32
29
  exports.ja4Middleware = ja4Middleware.ja4Middleware;
@@ -36,7 +33,6 @@ exports.storeCaptchasExternally = captchaScheduler.storeCaptchasExternally;
36
33
  exports.getClientList = getClientList.getClientList;
37
34
  exports.headerCheckMiddleware = headerCheckMiddleware.headerCheckMiddleware;
38
35
  exports.createApiAdminRoutesProvider = createApiAdminRoutesProvider.createApiAdminRoutesProvider;
39
- exports.requestLoggerMiddleware = requestLoggerMiddleware.requestLoggerMiddleware;
40
36
  exports.ignoreMiddleware = ignoreMiddleware.ignoreMiddleware;
41
37
  exports.robotsMiddleware = robotsMiddleware.robotsMiddleware;
42
38
  exports.Tasks = tasks.Tasks;
@@ -14,15 +14,19 @@ async function storeCaptchasExternally(pair, cronSchedule, config) {
14
14
  types.ScheduledTaskNames.StoreCommitmentsExternal,
15
15
  env$1.getDb()
16
16
  );
17
- env$1.logger.info(
18
- `${types.ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`
19
- );
17
+ env$1.logger.info(() => ({
18
+ data: { taskRunning },
19
+ msg: `${types.ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`
20
+ }));
20
21
  if (!taskRunning) {
21
- env$1.logger.info(
22
- `${types.ScheduledTaskNames.StoreCommitmentsExternal} task....`
23
- );
22
+ env$1.logger.info(() => ({
23
+ msg: `${types.ScheduledTaskNames.StoreCommitmentsExternal} task....`
24
+ }));
24
25
  await tasks$1.clientTaskManager.storeCommitmentsExternal().catch((err) => {
25
- env$1.logger.error(err);
26
+ env$1.logger.error(() => ({
27
+ err,
28
+ msg: "Error storing commitments externally"
29
+ }));
26
30
  });
27
31
  }
28
32
  });
@@ -14,13 +14,20 @@ async function getClientList(pair, cronSchedule, config) {
14
14
  types.ScheduledTaskNames.GetClientList,
15
15
  env$1.getDb()
16
16
  );
17
- env$1.logger.info(
18
- `${types.ScheduledTaskNames.GetClientList} task running: ${taskRunning}`
19
- );
17
+ env$1.logger.info(() => ({
18
+ msg: `${types.ScheduledTaskNames.GetClientList} task running: ${taskRunning}`,
19
+ data: { taskRunning }
20
+ }));
20
21
  if (!taskRunning) {
21
- env$1.logger.info(`${types.ScheduledTaskNames.GetClientList} task....`);
22
+ env$1.logger.info(() => ({
23
+ msg: `${types.ScheduledTaskNames.GetClientList} task....`,
24
+ data: {}
25
+ }));
22
26
  await tasks$1.clientTaskManager.getClientList().catch((err) => {
23
- env$1.logger.error(err);
27
+ env$1.logger.error(() => ({
28
+ err,
29
+ msg: "Error getting client list"
30
+ }));
24
31
  });
25
32
  }
26
33
  });
@@ -2,11 +2,13 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const common = require("@prosopo/common");
4
4
  const types = require("@prosopo/types");
5
+ const userAccessPolicy = require("@prosopo/user-access-policy");
6
+ const util = require("@prosopo/util");
5
7
  class CaptchaManager {
6
8
  constructor(db, pair, logger) {
7
9
  this.pair = pair;
8
10
  this.db = db;
9
- this.logger = logger || common.getLoggerDefault();
11
+ this.logger = logger || common.getLogger("info", module);
10
12
  }
11
13
  async getFrictionlessTokenIdFromSession(sessionRecord) {
12
14
  const tokenRecord = await this.db.getFrictionlessTokenRecordByTokenId(
@@ -15,20 +17,24 @@ class CaptchaManager {
15
17
  return tokenRecord ? tokenRecord._id : void 0;
16
18
  }
17
19
  async isValidRequest(clientSettings, captchaType, sessionId) {
18
- this.logger.debug({
19
- message: "Validating request",
20
- captchaType,
21
- sessionId
22
- });
20
+ this.logger.debug(() => ({
21
+ msg: "Validating request",
22
+ data: {
23
+ captchaType,
24
+ sessionId
25
+ }
26
+ }));
23
27
  if (sessionId) {
24
28
  if (clientSettings?.settings?.captchaType === types.CaptchaType.frictionless) {
25
29
  const sessionRecord = await this.db.checkAndRemoveSession(sessionId);
26
30
  if (!sessionRecord) {
27
- this.logger.warn({
28
- message: "No frictionless session found",
29
- account: clientSettings.account,
30
- sessionId
31
- });
31
+ this.logger.warn(() => ({
32
+ msg: "No frictionless session found",
33
+ data: {
34
+ account: clientSettings.account,
35
+ sessionId
36
+ }
37
+ }));
32
38
  return {
33
39
  valid: false,
34
40
  reason: "CAPTCHA.NO_SESSION_FOUND",
@@ -42,12 +48,14 @@ class CaptchaManager {
42
48
  type: captchaType
43
49
  };
44
50
  }
45
- this.logger.warn({
46
- message: "Invalid frictionless request",
47
- account: clientSettings.account,
48
- sessionId,
49
- settingsCaptchaType: clientSettings?.settings?.captchaType
50
- });
51
+ this.logger.warn(() => ({
52
+ msg: "Invalid frictionless request",
53
+ data: {
54
+ account: clientSettings.account,
55
+ sessionId,
56
+ settingsCaptchaType: clientSettings?.settings?.captchaType
57
+ }
58
+ }));
51
59
  return {
52
60
  valid: false,
53
61
  reason: "API.INCORRECT_CAPTCHA_TYPE",
@@ -55,12 +63,14 @@ class CaptchaManager {
55
63
  };
56
64
  }
57
65
  if (clientSettings?.settings?.captchaType !== captchaType) {
58
- this.logger.warn({
59
- message: `Invalid ${captchaType} request`,
60
- account: clientSettings.account,
61
- requestedCaptchaType: captchaType,
62
- settingsCaptchaType: clientSettings?.settings?.captchaType
63
- });
66
+ this.logger.warn(() => ({
67
+ msg: `Invalid ${captchaType} request`,
68
+ data: {
69
+ account: clientSettings.account,
70
+ requestedCaptchaType: captchaType,
71
+ settingsCaptchaType: clientSettings?.settings?.captchaType
72
+ }
73
+ }));
64
74
  return {
65
75
  valid: false,
66
76
  reason: "API.INCORRECT_CAPTCHA_TYPE",
@@ -80,6 +90,49 @@ class CaptchaManager {
80
90
  }
81
91
  };
82
92
  }
93
+ async getPrioritisedAccessPolicies(userAccessRulesStorage, clientId, userScope) {
94
+ const resolver = userAccessPolicy.createAccessPolicyResolver(
95
+ userAccessRulesStorage,
96
+ this.logger
97
+ );
98
+ const userScopeKeys = Object.keys(userScope).filter(
99
+ (key) => userScope[key] !== void 0
100
+ );
101
+ const prioritisedUserScopes = util.uniqueSubsets(userScopeKeys).map(
102
+ (subset) => subset.reduce(
103
+ (acc, key) => {
104
+ acc[key] = userScope[key];
105
+ return acc;
106
+ },
107
+ {}
108
+ )
109
+ );
110
+ for (const clientOrUndefined of [clientId, void 0]) {
111
+ for (const scope of prioritisedUserScopes) {
112
+ const accessPolicy = await resolver({
113
+ ...clientOrUndefined && {
114
+ policyScope: {
115
+ clientId: clientOrUndefined
116
+ },
117
+ policyScopeMatch: userAccessPolicy.ScopeMatch.Exact
118
+ },
119
+ userScope: userAccessPolicy.userScopeInputSchema.parse(scope),
120
+ userScopeMatch: userAccessPolicy.ScopeMatch.Exact
121
+ });
122
+ if (accessPolicy) {
123
+ this.logger.debug(() => ({
124
+ msg: "Access policy found",
125
+ data: {
126
+ accessPolicy,
127
+ scope
128
+ }
129
+ }));
130
+ return accessPolicy;
131
+ }
132
+ }
133
+ }
134
+ return void 0;
135
+ }
83
136
  async getDetectorKeys() {
84
137
  return await this.db.getDetectorKeys();
85
138
  }
@@ -49,7 +49,7 @@ class ClientTaskManager {
49
49
  */
50
50
  async storeCommitmentsExternal() {
51
51
  if (!this.config.mongoCaptchaUri) {
52
- this.logger.info("Mongo env not set");
52
+ this.logger.info(() => ({ msg: "Mongo env not set" }));
53
53
  return;
54
54
  }
55
55
  const lastTask = await this.providerDB.getLastScheduledTaskStatus(
@@ -105,18 +105,18 @@ class ClientTaskManager {
105
105
  const frictionlessTokenRecords = await this.providerDB.getFrictionlessTokenRecordsByTokenIds(
106
106
  filteredBatch.map((record) => record.tokenId)
107
107
  );
108
- this.logger.info(
109
- `Frictionless token records: ${frictionlessTokenRecords.length}`
110
- );
108
+ this.logger.info(() => ({
109
+ msg: `Frictionless token records: ${frictionlessTokenRecords.length}`
110
+ }));
111
111
  const filteredBatchWithScores = filteredBatch.map((record) => {
112
112
  const tokenRecord = frictionlessTokenRecords.find(
113
113
  (tokenRecord2) => tokenRecord2._id?.toString() === record.tokenId.toString()
114
114
  );
115
115
  if (!tokenRecord) {
116
- this.logger.error({
117
- message: "No token record found",
118
- context: { tokenId: record.tokenId }
119
- });
116
+ this.logger.error(() => ({
117
+ msg: "No token record found",
118
+ data: { tokenId: record.tokenId }
119
+ }));
120
120
  return {
121
121
  ...record,
122
122
  score: 0,
@@ -155,7 +155,10 @@ class ClientTaskManager {
155
155
  );
156
156
  this.captchaDB?.close();
157
157
  } catch (e) {
158
- this.logger.error(e);
158
+ this.logger.error(() => ({
159
+ err: e,
160
+ msg: "Error processing client tasks"
161
+ }));
159
162
  this.captchaDB?.close();
160
163
  await this.providerDB.updateScheduledTaskStatus(
161
164
  taskID,
@@ -170,7 +173,7 @@ class ClientTaskManager {
170
173
  */
171
174
  async getClientList() {
172
175
  if (!this.config.mongoClientUri) {
173
- this.logger.info("Mongo env not set");
176
+ this.logger.info(() => ({ msg: "Mongo env not set" }));
174
177
  return;
175
178
  }
176
179
  const lastTask = await this.providerDB.getLastScheduledTaskStatus(
@@ -192,9 +195,9 @@ class ClientTaskManager {
192
195
  );
193
196
  const tenMinuteWindow = 10 * 60 * 1e3;
194
197
  const updatedAtTimestamp = lastTask?.updated ? lastTask.updated - tenMinuteWindow || 0 : 0;
195
- this.logger.info({
196
- message: `Getting updated client records since ${new Date(updatedAtTimestamp).toDateString()}`
197
- });
198
+ this.logger.info(() => ({
199
+ msg: `Getting updated client records since ${new Date(updatedAtTimestamp).toDateString()}`
200
+ }));
198
201
  const newClientRecords = await clientDB.getUpdatedClients(updatedAtTimestamp);
199
202
  if (newClientRecords) {
200
203
  await this.providerDB.updateClientRecords(newClientRecords);
@@ -213,7 +216,10 @@ class ClientTaskManager {
213
216
  context: { error: e },
214
217
  logger: this.logger
215
218
  });
216
- this.logger.error(getClientListError, { context: { error: e } });
219
+ this.logger.error(() => ({
220
+ err: getClientListError,
221
+ msg: "Error getting client list"
222
+ }));
217
223
  await this.providerDB.updateScheduledTaskStatus(
218
224
  taskID,
219
225
  types.ScheduledTaskStatus.Failed,
@@ -222,7 +228,7 @@ class ClientTaskManager {
222
228
  }
223
229
  }
224
230
  async registerSiteKey(siteKey, tier, settings) {
225
- validateAddress.validiateSiteKey(siteKey);
231
+ validateAddress.validateSiteKey(siteKey);
226
232
  await this.providerDB.updateClientRecords([
227
233
  {
228
234
  account: siteKey,
@@ -257,10 +263,10 @@ class ClientTaskManager {
257
263
  const allowedDomain = util.parseUrl(clientDomain).hostname.replace(/\.$/, "");
258
264
  return referrerDomain === allowedDomain || referrerDomain.endsWith(`.${allowedDomain}`);
259
265
  } catch {
260
- this.logger.error({
261
- message: "Error in isSubdomainOrExactMatch",
262
- context: { referrer, clientDomain }
263
- });
266
+ this.logger.error(() => ({
267
+ msg: "Error in isSubdomainOrExactMatch",
268
+ data: { referrer, clientDomain }
269
+ }));
264
270
  return false;
265
271
  }
266
272
  }