@prosopo/provider 5.13.4 → 5.14.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/.turbo/turbo-build$colon$cjs.log +15 -13
- package/.turbo/turbo-build$colon$tsc.log +27 -27
- package/.turbo/turbo-build.log +15 -13
- package/CHANGELOG.md +105 -0
- package/dist/api/adminAuthOptions.d.ts +4 -0
- package/dist/api/adminAuthOptions.d.ts.map +1 -0
- package/dist/api/adminAuthOptions.js +34 -0
- package/dist/api/adminAuthOptions.js.map +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +1 -3
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/detectorPoolBodyParser.d.ts +4 -0
- package/dist/api/detectorPoolBodyParser.d.ts.map +1 -0
- package/dist/api/detectorPoolBodyParser.js +31 -0
- package/dist/api/detectorPoolBodyParser.js.map +1 -0
- package/dist/api/domainMiddleware.d.ts.map +1 -1
- package/dist/api/domainMiddleware.js +5 -1
- package/dist/api/domainMiddleware.js.map +1 -1
- package/dist/api/metrics.d.ts +2 -1
- package/dist/api/metrics.d.ts.map +1 -1
- package/dist/api/metrics.js +46 -4
- package/dist/api/metrics.js.map +1 -1
- package/dist/api/startProviderApi.d.ts.map +1 -1
- package/dist/api/startProviderApi.js +6 -3
- package/dist/api/startProviderApi.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +50 -8
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/adminAuthOptions.cjs +35 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +0 -1
- package/dist/cjs/api/detectorPoolBodyParser.cjs +33 -0
- package/dist/cjs/api/domainMiddleware.cjs +5 -1
- package/dist/cjs/api/metrics.cjs +46 -3
- package/dist/cjs/api/startProviderApi.cjs +6 -3
- package/dist/cjs/api/verify.cjs +50 -8
- package/dist/cjs/tasks/client/clientTasks.cjs +25 -4
- package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +1 -1
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +2 -2
- package/dist/cjs/utils/tarpitPadding.cjs +81 -10
- package/dist/tasks/client/clientTasks.d.ts +1 -0
- package/dist/tasks/client/clientTasks.d.ts.map +1 -1
- package/dist/tasks/client/clientTasks.js +25 -5
- package/dist/tasks/client/clientTasks.js.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.js +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +2 -2
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tests/unit/api/adminAuthOptions.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/adminAuthOptions.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/adminAuthOptions.unit.test.js +38 -0
- package/dist/tests/unit/api/adminAuthOptions.unit.test.js.map +1 -0
- package/dist/tests/unit/api/detectorPoolBodyParser.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/detectorPoolBodyParser.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/detectorPoolBodyParser.unit.test.js +64 -0
- package/dist/tests/unit/api/detectorPoolBodyParser.unit.test.js.map +1 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js +67 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js.map +1 -0
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +26 -23
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/api/metricsAccess.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/metricsAccess.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/metricsAccess.unit.test.js +87 -0
- package/dist/tests/unit/api/metricsAccess.unit.test.js.map +1 -0
- package/dist/tests/unit/api/public.unit.test.js +4 -1
- package/dist/tests/unit/api/public.unit.test.js.map +1 -1
- package/dist/tests/unit/api/validateAddress.unit.test.js +1 -1
- package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -1
- package/dist/tests/unit/api/verifyBadDappSignature.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/verifyBadDappSignature.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/verifyBadDappSignature.unit.test.js +96 -0
- package/dist/tests/unit/api/verifyBadDappSignature.unit.test.js.map +1 -0
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js +89 -0
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +33 -1
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +14 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/utils/tarpitPadding.unit.test.js +118 -36
- package/dist/tests/unit/utils/tarpitPadding.unit.test.js.map +1 -1
- package/dist/utils/tarpitPadding.d.ts.map +1 -1
- package/dist/utils/tarpitPadding.js +81 -10
- package/dist/utils/tarpitPadding.js.map +1 -1
- package/package.json +20 -20
package/dist/cjs/api/metrics.cjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
let _prosopo_types = require("@prosopo/types");
|
|
2
|
+
let node_crypto = require("node:crypto");
|
|
3
|
+
let node_net = require("node:net");
|
|
2
4
|
let prom_client = require("prom-client");
|
|
3
5
|
//#region src/api/metrics.ts
|
|
4
6
|
var metricsEnabled = () => process.env.PROSOPO_METRICS_ENABLED !== "false";
|
|
@@ -340,11 +342,51 @@ var metricsMiddleware = () => {
|
|
|
340
342
|
next();
|
|
341
343
|
};
|
|
342
344
|
};
|
|
345
|
+
var internalNetworks = () => {
|
|
346
|
+
const list = new node_net.BlockList();
|
|
347
|
+
list.addSubnet("127.0.0.0", 8, "ipv4");
|
|
348
|
+
list.addSubnet("10.0.0.0", 8, "ipv4");
|
|
349
|
+
list.addSubnet("172.16.0.0", 12, "ipv4");
|
|
350
|
+
list.addSubnet("192.168.0.0", 16, "ipv4");
|
|
351
|
+
list.addAddress("::1", "ipv6");
|
|
352
|
+
list.addSubnet("fc00::", 7, "ipv6");
|
|
353
|
+
list.addSubnet("fe80::", 10, "ipv6");
|
|
354
|
+
return list;
|
|
355
|
+
};
|
|
356
|
+
var INTERNAL_NETWORKS = internalNetworks();
|
|
357
|
+
var isInternalAddress = (address) => {
|
|
358
|
+
if (!address) return false;
|
|
359
|
+
const v4 = address.startsWith("::ffff:") ? address.slice(7) : address;
|
|
360
|
+
if ((0, node_net.isIPv4)(v4)) return INTERNAL_NETWORKS.check(v4, "ipv4");
|
|
361
|
+
if ((0, node_net.isIPv6)(address)) return INTERNAL_NETWORKS.check(address, "ipv6");
|
|
362
|
+
return false;
|
|
363
|
+
};
|
|
364
|
+
var tokenMatches = (header, token) => {
|
|
365
|
+
const expected = Buffer.from(`Bearer ${token}`);
|
|
366
|
+
const actual = Buffer.from(header ?? "");
|
|
367
|
+
return actual.length === expected.length && (0, node_crypto.timingSafeEqual)(actual, expected);
|
|
368
|
+
};
|
|
369
|
+
/**
|
|
370
|
+
* Who may scrape /metrics.
|
|
371
|
+
*
|
|
372
|
+
* - PROSOPO_METRICS_TOKEN set: any caller with `Authorization: Bearer <token>`.
|
|
373
|
+
* - Otherwise only direct connections from loopback or private addresses, e.g.
|
|
374
|
+
* vector on the docker network. A request that came through a reverse proxy
|
|
375
|
+
* (it carries a forwarding header) is refused even though its socket peer is
|
|
376
|
+
* the proxy's private address, so the public site cannot reach it.
|
|
377
|
+
* - PROSOPO_METRICS_PUBLIC=true restores the old open endpoint.
|
|
378
|
+
*/
|
|
379
|
+
var metricsAccess = (req, vars = process.env) => {
|
|
380
|
+
const token = vars.PROSOPO_METRICS_TOKEN;
|
|
381
|
+
if (token) return tokenMatches(req.headers.authorization, token) ? 200 : 401;
|
|
382
|
+
if (vars.PROSOPO_METRICS_PUBLIC === "true") return 200;
|
|
383
|
+
return !(req.headers["x-forwarded-for"] !== void 0 || req.headers.forwarded !== void 0 || req.headers["x-real-ip"] !== void 0) && isInternalAddress(req.socket?.remoteAddress) ? 200 : 403;
|
|
384
|
+
};
|
|
343
385
|
var metricsHandler = (env) => {
|
|
344
386
|
return async (req, res) => {
|
|
345
|
-
const
|
|
346
|
-
if (
|
|
347
|
-
res.status(
|
|
387
|
+
const access = metricsAccess(req);
|
|
388
|
+
if (access !== 200) {
|
|
389
|
+
res.status(access).send(access === 401 ? "Unauthorized" : "Forbidden");
|
|
348
390
|
return;
|
|
349
391
|
}
|
|
350
392
|
const m = getMetrics();
|
|
@@ -363,6 +405,7 @@ var metricsHandler = (env) => {
|
|
|
363
405
|
//#endregion
|
|
364
406
|
exports.getMetrics = getMetrics;
|
|
365
407
|
exports.measureSync = measureSync;
|
|
408
|
+
exports.metricsAccess = metricsAccess;
|
|
366
409
|
exports.metricsEnabled = metricsEnabled;
|
|
367
410
|
exports.metricsHandler = metricsHandler;
|
|
368
411
|
exports.metricsMiddleware = metricsMiddleware;
|
|
@@ -11,7 +11,9 @@ const require_handshakeTimingMiddleware = require("./handshakeTimingMiddleware.c
|
|
|
11
11
|
const require_public = require("./public.cjs");
|
|
12
12
|
const require_domainMiddleware = require("./domainMiddleware.cjs");
|
|
13
13
|
const require_createApiAdminRoutesProvider = require("./admin/createApiAdminRoutesProvider.cjs");
|
|
14
|
+
const require_adminAuthOptions = require("./adminAuthOptions.cjs");
|
|
14
15
|
const require_cpuProfiler = require("./cpuProfiler.cjs");
|
|
16
|
+
const require_detectorPoolBodyParser = require("./detectorPoolBodyParser.cjs");
|
|
15
17
|
const require_headerCheckMiddleware = require("./headerCheckMiddleware.cjs");
|
|
16
18
|
const require_ignoreMiddleware = require("./ignoreMiddleware.cjs");
|
|
17
19
|
const require_ipInfoMiddleware = require("./ipInfoMiddleware.cjs");
|
|
@@ -162,7 +164,7 @@ async function startProviderApi(env, admin = false, port) {
|
|
|
162
164
|
],
|
|
163
165
|
maxAge: 86400
|
|
164
166
|
}));
|
|
165
|
-
apiApp.use(_prosopo_types.AdminApiPaths.ReplaceDetectorPool,
|
|
167
|
+
apiApp.use(_prosopo_types.AdminApiPaths.ReplaceDetectorPool, require_detectorPoolBodyParser.detectorPoolBodyParser(DETECTOR_POOL_BODY_LIMIT, env.pair, env.authAccount));
|
|
166
168
|
apiApp.use(express.default.json({ limit: "1mb" }));
|
|
167
169
|
apiApp.use(require_public.publicRouter(env));
|
|
168
170
|
apiApp.use(require_metrics.metricsMiddleware());
|
|
@@ -218,10 +220,11 @@ async function startProviderApi(env, admin = false, port) {
|
|
|
218
220
|
apiApp.use(clientPathsExcludingVerify, require_headerCheckMiddleware.headerCheckMiddleware(env));
|
|
219
221
|
apiApp.use(require_verify.prosopoVerifyRouter(env));
|
|
220
222
|
env.logger.info(() => ({ msg: "Enabling admin auth middleware" }));
|
|
221
|
-
|
|
223
|
+
const adminAuth = (0, _prosopo_api_express_router.authMiddleware)(env.pair, env.authAccount, require_adminAuthOptions.adminAuthOptions(process.env, env.config.host));
|
|
224
|
+
apiApp.use("/v1/prosopo/provider/admin", adminAuth);
|
|
222
225
|
if (apiRuleRoutesProvider) {
|
|
223
226
|
const userAccessRuleRoutes = apiRuleRoutesProvider.getRoutes();
|
|
224
|
-
for (const userAccessRuleRoute in userAccessRuleRoutes) apiApp.use(userAccessRuleRoute,
|
|
227
|
+
for (const userAccessRuleRoute in userAccessRuleRoutes) apiApp.use(userAccessRuleRoute, adminAuth);
|
|
225
228
|
for (const userAccessRuleRoute in userAccessRuleRoutes) apiApp.use(userAccessRuleRoute, (req, res, next) => {
|
|
226
229
|
if (req.method === "POST") res.on("finish", () => {
|
|
227
230
|
if (res.statusCode >= 200 && res.statusCode < 300) require_blacklistRequestInspector.getVerdictCache().clear();
|
package/dist/cjs/api/verify.cjs
CHANGED
|
@@ -30,6 +30,36 @@ var VERIFY_PATH_TYPE = {
|
|
|
30
30
|
[_prosopo_types.ClientApiPaths.VerifyPowCaptchaSolution]: _prosopo_types.CaptchaType.pow,
|
|
31
31
|
[_prosopo_types.ClientApiPaths.VerifyPuzzleCaptchaSolution]: _prosopo_types.CaptchaType.puzzle
|
|
32
32
|
};
|
|
33
|
+
var decodeTokenOr400 = (token, i18n, logger, next) => {
|
|
34
|
+
try {
|
|
35
|
+
return (0, _prosopo_types.decodeProcaptchaOutput)(token);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
|
|
38
|
+
context: {
|
|
39
|
+
code: 400,
|
|
40
|
+
error
|
|
41
|
+
},
|
|
42
|
+
i18n,
|
|
43
|
+
logger
|
|
44
|
+
}));
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var dappSignatureError = (signature, message, pair, req) => {
|
|
49
|
+
try {
|
|
50
|
+
(0, _prosopo_api_express_router.verifySignature)(signature, message, pair);
|
|
51
|
+
return;
|
|
52
|
+
} catch {
|
|
53
|
+
return new _prosopo_common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
|
|
54
|
+
context: {
|
|
55
|
+
code: 400,
|
|
56
|
+
siteKey: pair.address
|
|
57
|
+
},
|
|
58
|
+
i18n: req.i18n,
|
|
59
|
+
logger: req.logger
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
33
63
|
/**
|
|
34
64
|
* Returns a router connected to the database which can interact with the Proposo protocol
|
|
35
65
|
*
|
|
@@ -98,7 +128,9 @@ function prosopoVerifyRouter(env) {
|
|
|
98
128
|
}
|
|
99
129
|
const { dappSignature, token, ip, maxVerifiedTime, email, clientSessionId } = parsed;
|
|
100
130
|
try {
|
|
101
|
-
const
|
|
131
|
+
const decoded = decodeTokenOr400(token, req.i18n, req.logger, next);
|
|
132
|
+
if (decoded === null) return;
|
|
133
|
+
const { user, dapp, timestamp, commitmentId, providerUrl } = decoded;
|
|
102
134
|
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
103
135
|
if (testVerdict !== null) {
|
|
104
136
|
const verificationResponse = {
|
|
@@ -132,7 +164,8 @@ function prosopoVerifyRouter(env) {
|
|
|
132
164
|
logger: req.logger
|
|
133
165
|
}));
|
|
134
166
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
135
|
-
|
|
167
|
+
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
168
|
+
if (signatureError) return next(signatureError);
|
|
136
169
|
const response = await tasks.imgCaptchaManager.verifyImageCaptchaSolution(user, dapp, commitmentId, env, maxVerifiedTime, ip, clientRecord.settings.disallowWebView, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
|
|
137
170
|
req.logger.debug(() => ({ data: { response } }));
|
|
138
171
|
const verificationResponse = tasks.imgCaptchaManager.getVerificationResponse(response[_prosopo_types.ApiParams.verified], clientRecord, req.i18n.t, response[_prosopo_types.ApiParams.score], response[_prosopo_types.ApiParams.commitmentId], response[_prosopo_types.ApiParams.status], response[_prosopo_types.ApiParams.sessionId]);
|
|
@@ -183,7 +216,9 @@ function prosopoVerifyRouter(env) {
|
|
|
183
216
|
}
|
|
184
217
|
try {
|
|
185
218
|
const { token, dappSignature, ip, email, clientSessionId } = parsed;
|
|
186
|
-
const
|
|
219
|
+
const decoded = decodeTokenOr400(token, req.i18n, req.logger, next);
|
|
220
|
+
if (decoded === null) return;
|
|
221
|
+
const { dapp, user, timestamp, challenge, providerUrl } = decoded;
|
|
187
222
|
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
188
223
|
if (testVerdict !== null) {
|
|
189
224
|
const verificationResponse = {
|
|
@@ -223,7 +258,8 @@ function prosopoVerifyRouter(env) {
|
|
|
223
258
|
return res.json(unverifiedResponse);
|
|
224
259
|
}
|
|
225
260
|
const dappPair = env.keyring.addFromAddress(dapp);
|
|
226
|
-
|
|
261
|
+
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), dappPair, req);
|
|
262
|
+
if (signatureError) return next(signatureError);
|
|
227
263
|
const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
|
|
228
264
|
const verificationResponse = tasks.powCaptchaManager.getVerificationResponse(verified, clientRecord, req.i18n.t, score, reason, sessionId);
|
|
229
265
|
return res.json(verificationResponse);
|
|
@@ -272,7 +308,9 @@ function prosopoVerifyRouter(env) {
|
|
|
272
308
|
}
|
|
273
309
|
try {
|
|
274
310
|
const { token, dappSignature, ip, email, clientSessionId } = parsed;
|
|
275
|
-
const
|
|
311
|
+
const decoded = decodeTokenOr400(token, req.i18n, req.logger, next);
|
|
312
|
+
if (decoded === null) return;
|
|
313
|
+
const { dapp, user, timestamp, challenge, providerUrl } = decoded;
|
|
276
314
|
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
277
315
|
if (testVerdict !== null) {
|
|
278
316
|
const verificationResponse = {
|
|
@@ -312,7 +350,8 @@ function prosopoVerifyRouter(env) {
|
|
|
312
350
|
return res.json(unverifiedResponse);
|
|
313
351
|
}
|
|
314
352
|
const dappPair = env.keyring.addFromAddress(dapp);
|
|
315
|
-
|
|
353
|
+
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), dappPair, req);
|
|
354
|
+
if (signatureError) return next(signatureError);
|
|
316
355
|
const { verified, score, sessionId } = await tasks.puzzleCaptchaManager.serverVerifyPuzzleCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
|
|
317
356
|
const verificationResponse = tasks.puzzleCaptchaManager.getVerificationResponse(verified, clientRecord, req.i18n.t, score, void 0, sessionId);
|
|
318
357
|
return res.json(verificationResponse);
|
|
@@ -361,7 +400,9 @@ function prosopoVerifyRouter(env) {
|
|
|
361
400
|
}
|
|
362
401
|
const { dappSignature, token, ip, clientSessionId } = parsed;
|
|
363
402
|
try {
|
|
364
|
-
const
|
|
403
|
+
const decoded = decodeTokenOr400(token, req.i18n, req.logger, next);
|
|
404
|
+
if (decoded === null) return;
|
|
405
|
+
const { user, dapp, timestamp, commitmentId: sessionId, providerUrl } = decoded;
|
|
365
406
|
const testVerdict = require_testSiteKey.resolveTestSiteKeyVerdict(dapp, req.logger);
|
|
366
407
|
if (testVerdict !== null) return res.json({
|
|
367
408
|
status: "ok",
|
|
@@ -391,7 +432,8 @@ function prosopoVerifyRouter(env) {
|
|
|
391
432
|
logger: req.logger
|
|
392
433
|
}));
|
|
393
434
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
394
|
-
|
|
435
|
+
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
436
|
+
if (signatureError) return next(signatureError);
|
|
395
437
|
if (!sessionId) return res.json({
|
|
396
438
|
status: "API.USER_NOT_VERIFIED_NO_SOLUTION",
|
|
397
439
|
verified: false
|
|
@@ -5,6 +5,29 @@ let _prosopo_database = require("@prosopo/database");
|
|
|
5
5
|
let _prosopo_types = require("@prosopo/types");
|
|
6
6
|
require("node:crypto");
|
|
7
7
|
let _prosopo_util = require("@prosopo/util");
|
|
8
|
+
/**
|
|
9
|
+
* Matches `text` against a pattern where `*` matches any run of characters.
|
|
10
|
+
* Greedy two-pointer match, retrying from the last `*` on mismatch, so time
|
|
11
|
+
* is bounded by pattern length times text length.
|
|
12
|
+
*/
|
|
13
|
+
var matchesGlob = (pattern, text) => {
|
|
14
|
+
let p = 0;
|
|
15
|
+
let t = 0;
|
|
16
|
+
let starP = -1;
|
|
17
|
+
let starT = 0;
|
|
18
|
+
while (t < text.length) if (p < pattern.length && pattern[p] === "*") {
|
|
19
|
+
starP = p++;
|
|
20
|
+
starT = t;
|
|
21
|
+
} else if (p < pattern.length && pattern[p] === text[t]) {
|
|
22
|
+
p++;
|
|
23
|
+
t++;
|
|
24
|
+
} else if (starP !== -1) {
|
|
25
|
+
p = starP + 1;
|
|
26
|
+
t = ++starT;
|
|
27
|
+
} else return false;
|
|
28
|
+
while (p < pattern.length && pattern[p] === "*") p++;
|
|
29
|
+
return p === pattern.length;
|
|
30
|
+
};
|
|
8
31
|
var ClientTaskManager = class {
|
|
9
32
|
constructor(config, logger, db) {
|
|
10
33
|
this.config = config;
|
|
@@ -251,10 +274,7 @@ var ClientTaskManager = class {
|
|
|
251
274
|
const allowed = (0, _prosopo_util.parseUrl)(suffix).hostname.replace(/\.$/, "");
|
|
252
275
|
return referrerHost.endsWith(`.${allowed}`) || referrerHost === allowed;
|
|
253
276
|
}
|
|
254
|
-
if (pattern.includes("*"))
|
|
255
|
-
const escaped = pattern.replace(/[.+?^${}()|\[\]\\]/g, "\\$&").replace(/\*/g, ".*");
|
|
256
|
-
return new RegExp(`^${escaped}$`, "i").test(referrerHost);
|
|
257
|
-
}
|
|
277
|
+
if (pattern.includes("*")) return matchesGlob(pattern, referrerHost.toLowerCase());
|
|
258
278
|
const allowedHost = (0, _prosopo_util.parseUrl)(pattern).hostname.replace(/\.$/, "");
|
|
259
279
|
return referrerHost === allowedHost || referrerHost.endsWith(`.${allowedHost}`);
|
|
260
280
|
} catch (e) {
|
|
@@ -297,3 +317,4 @@ var ClientTaskManager = class {
|
|
|
297
317
|
};
|
|
298
318
|
//#endregion
|
|
299
319
|
exports.ClientTaskManager = ClientTaskManager;
|
|
320
|
+
exports.matchesGlob = matchesGlob;
|
|
@@ -5,7 +5,7 @@ var providerValidateDataset = async (datasetRaw, minSolvedCaptchas, minUnsolvedC
|
|
|
5
5
|
if (datasetRaw.captchas.length < minSolvedCaptchas + minUnsolvedCaptchas) throw new _prosopo_common.ProsopoEnvError("DATASET.CAPTCHAS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
6
6
|
const solutions = datasetRaw.captchas.map((captcha) => captcha.solution ? 1 : 0).reduce((partialSum, b) => partialSum + b, 0);
|
|
7
7
|
if (solutions < minSolvedCaptchas) throw new _prosopo_common.ProsopoEnvError("DATASET.SOLUTIONS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
8
|
-
if (solutions < minUnsolvedCaptchas) throw new _prosopo_common.ProsopoEnvError("DATASET.
|
|
8
|
+
if (datasetRaw.captchas.length - solutions < minUnsolvedCaptchas) throw new _prosopo_common.ProsopoEnvError("DATASET.CAPTCHAS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
9
9
|
const dataset = await (0, _prosopo_datasets.buildDataset)(datasetRaw);
|
|
10
10
|
if (!dataset.datasetId || !dataset.datasetContentId) throw new _prosopo_common.ProsopoEnvError("DATASET.DATASET_ID_UNDEFINED", { context: {
|
|
11
11
|
failedFuncName: providerValidateDataset.name,
|
|
@@ -202,7 +202,7 @@ var ImgCaptchaManager = class extends require_captchaManager.CaptchaManager {
|
|
|
202
202
|
}));
|
|
203
203
|
const totalImages = storedCaptchas[0]?.items.length || 0;
|
|
204
204
|
if (require_pairs.selectionsLookScripted(pairs, inputMethods) && process.env.NODE_ENV !== "test") {
|
|
205
|
-
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId,
|
|
205
|
+
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId, _prosopo_types.ResultReason.CAPTCHA_INVALID_SOLUTION, pairs)];
|
|
206
206
|
if (pendingRecord.sessionId) {
|
|
207
207
|
writePromises.push(this.updateSessionRecordWithCache(pendingRecord.sessionId, {
|
|
208
208
|
userSubmitted: true,
|
|
@@ -243,7 +243,7 @@ var ImgCaptchaManager = class extends require_captchaManager.CaptchaManager {
|
|
|
243
243
|
}
|
|
244
244
|
await Promise.all(writePromises);
|
|
245
245
|
} else {
|
|
246
|
-
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId,
|
|
246
|
+
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId, _prosopo_types.ResultReason.CAPTCHA_INVALID_SOLUTION, pairs)];
|
|
247
247
|
if (pendingRecord.sessionId) {
|
|
248
248
|
writePromises.push(this.updateSessionRecordWithCache(pendingRecord.sessionId, {
|
|
249
249
|
userSubmitted: true,
|
|
@@ -1,22 +1,93 @@
|
|
|
1
1
|
let _prosopo_types = require("@prosopo/types");
|
|
2
2
|
//#region src/utils/tarpitPadding.ts
|
|
3
3
|
var POOL = (0, require("node:crypto").randomBytes)(Math.ceil(_prosopo_types.MAX_PAD_BYTES * 3 / 4)).toString("base64");
|
|
4
|
+
var CHUNK_BYTES = 64 * 1024;
|
|
5
|
+
var KEY_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
6
|
+
var MIN_KEY_LENGTH = 3;
|
|
7
|
+
var MAX_KEY_LENGTH = 12;
|
|
4
8
|
var clampPadBytes = (padBytes) => padBytes && padBytes > 0 ? Math.min(Math.floor(padBytes), _prosopo_types.MAX_PAD_BYTES) : 0;
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
const
|
|
9
|
+
var isPlainObject = (body) => typeof body === "object" && body !== null && !Array.isArray(body);
|
|
10
|
+
var bodyMembers = (body) => {
|
|
11
|
+
const serialised = JSON.stringify(body);
|
|
12
|
+
if (serialised === void 0 || !serialised.startsWith("{")) return void 0;
|
|
13
|
+
const normalised = JSON.parse(serialised);
|
|
14
|
+
return Object.entries(normalised).map(([key, value]) => ({
|
|
15
|
+
key,
|
|
16
|
+
encoded: `${JSON.stringify(key)}:${JSON.stringify(value)}`
|
|
17
|
+
}));
|
|
18
|
+
};
|
|
19
|
+
var randomKey = (taken) => {
|
|
20
|
+
for (;;) {
|
|
21
|
+
const length = MIN_KEY_LENGTH + Math.floor(Math.random() * (MAX_KEY_LENGTH - MIN_KEY_LENGTH + 1));
|
|
22
|
+
let key = "";
|
|
23
|
+
for (let index = 0; index < length; index++) key += KEY_ALPHABET.charAt(Math.floor(Math.random() * KEY_ALPHABET.length));
|
|
24
|
+
if (!taken.has(key)) {
|
|
25
|
+
taken.add(key);
|
|
26
|
+
return key;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
var partition = (total, parts) => {
|
|
31
|
+
const cuts = [0, total];
|
|
32
|
+
for (let index = 1; index < parts; index++) cuts.push(Math.floor(Math.random() * (total + 1)));
|
|
33
|
+
cuts.sort((a, b) => a - b);
|
|
34
|
+
const sizes = [];
|
|
35
|
+
for (let index = 1; index < cuts.length; index++) sizes.push((cuts[index] ?? 0) - (cuts[index - 1] ?? 0));
|
|
36
|
+
return sizes;
|
|
37
|
+
};
|
|
38
|
+
var awaitDrain = (res) => new Promise((resolve) => {
|
|
39
|
+
const settle = (drained) => {
|
|
40
|
+
res.removeListener("drain", onDrain);
|
|
41
|
+
res.removeListener("close", onClose);
|
|
42
|
+
resolve(drained);
|
|
43
|
+
};
|
|
44
|
+
const onDrain = () => settle(true);
|
|
45
|
+
const onClose = () => settle(false);
|
|
46
|
+
res.once("drain", onDrain);
|
|
47
|
+
res.once("close", onClose);
|
|
48
|
+
});
|
|
49
|
+
var write = async (res, chunk) => {
|
|
50
|
+
if (res.writableEnded || res.destroyed) return false;
|
|
51
|
+
return res.write(chunk) ? true : await awaitDrain(res);
|
|
52
|
+
};
|
|
53
|
+
var writePad = async (res, size) => {
|
|
54
|
+
const offset = Math.floor(Math.random() * (POOL.length - size + 1));
|
|
55
|
+
for (let written = 0; written < size; written += CHUNK_BYTES) {
|
|
56
|
+
const from = offset + written;
|
|
57
|
+
const to = offset + Math.min(written + CHUNK_BYTES, size);
|
|
58
|
+
if (!await write(res, POOL.slice(from, to))) return false;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
};
|
|
62
|
+
var streamWithPad = async (res, members, total) => {
|
|
63
|
+
const segments = Math.max(members.length, 1);
|
|
64
|
+
const sizes = partition(total, segments);
|
|
65
|
+
const taken = new Set(members.map((member) => member.key));
|
|
8
66
|
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
67
|
+
let separator = "{";
|
|
68
|
+
for (let index = 0; index < segments; index++) {
|
|
69
|
+
if (!await write(res, `${separator}"${randomKey(taken)}":"`)) return;
|
|
70
|
+
if (!await writePad(res, sizes[index] ?? 0)) return;
|
|
71
|
+
const member = members[index];
|
|
72
|
+
if (!await write(res, member ? `",${member.encoded}` : "\"")) return;
|
|
73
|
+
separator = ",";
|
|
74
|
+
}
|
|
75
|
+
if (!await write(res, "}")) return;
|
|
76
|
+
res.end();
|
|
13
77
|
};
|
|
14
|
-
var isPlainObject = (body) => typeof body === "object" && body !== null && !Array.isArray(body);
|
|
15
78
|
var padResponseMiddleware = (_req, res, next) => {
|
|
16
79
|
const originalJson = res.json.bind(res);
|
|
17
80
|
res.json = (body) => {
|
|
18
|
-
const
|
|
19
|
-
|
|
81
|
+
const total = clampPadBytes(res.locals.padBytes);
|
|
82
|
+
if (total === 0 || !isPlainObject(body)) return originalJson(body);
|
|
83
|
+
const members = bodyMembers(body);
|
|
84
|
+
if (members === void 0) return originalJson(body);
|
|
85
|
+
const swallow = () => void 0;
|
|
86
|
+
res.on("error", swallow);
|
|
87
|
+
streamWithPad(res, members, total).catch(() => {
|
|
88
|
+
if (!res.destroyed) res.destroy();
|
|
89
|
+
}).finally(() => res.removeListener("error", swallow));
|
|
90
|
+
return res;
|
|
20
91
|
};
|
|
21
92
|
next();
|
|
22
93
|
};
|
|
@@ -2,6 +2,7 @@ import { CaptchaDatabase } from "@prosopo/database";
|
|
|
2
2
|
import type { Logger } from "@prosopo/logger";
|
|
3
3
|
import { type DecisionMachineCaptchaType, type DecisionMachineKind, type DecisionMachineLanguage, type DecisionMachineRuntime, DecisionMachineScope, type IUserSettings, type ProsopoConfigOutput, type Tier } from "@prosopo/types";
|
|
4
4
|
import type { IProviderDatabase } from "@prosopo/types-database";
|
|
5
|
+
export declare const matchesGlob: (pattern: string, text: string) => boolean;
|
|
5
6
|
export declare class ClientTaskManager {
|
|
6
7
|
config: ProsopoConfigOutput;
|
|
7
8
|
logger: Logger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientTasks.d.ts","sourceRoot":"","sources":["../../../src/tasks/client/clientTasks.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,aAAa,EAElB,KAAK,mBAAmB,EAGxB,KAAK,IAAI,EAET,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAEX,iBAAiB,EAEjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"clientTasks.d.ts","sourceRoot":"","sources":["../../../src/tasks/client/clientTasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,29 @@ import { CaptchaDatabase, ClientDatabase } from "@prosopo/database";
|
|
|
5
5
|
import { DecisionMachineScope, ScheduledTaskNames, ScheduledTaskStatus } from "@prosopo/types";
|
|
6
6
|
import "node:crypto";
|
|
7
7
|
import { parseUrl } from "@prosopo/util";
|
|
8
|
+
/**
|
|
9
|
+
* Matches `text` against a pattern where `*` matches any run of characters.
|
|
10
|
+
* Greedy two-pointer match, retrying from the last `*` on mismatch, so time
|
|
11
|
+
* is bounded by pattern length times text length.
|
|
12
|
+
*/
|
|
13
|
+
var matchesGlob = (pattern, text) => {
|
|
14
|
+
let p = 0;
|
|
15
|
+
let t = 0;
|
|
16
|
+
let starP = -1;
|
|
17
|
+
let starT = 0;
|
|
18
|
+
while (t < text.length) if (p < pattern.length && pattern[p] === "*") {
|
|
19
|
+
starP = p++;
|
|
20
|
+
starT = t;
|
|
21
|
+
} else if (p < pattern.length && pattern[p] === text[t]) {
|
|
22
|
+
p++;
|
|
23
|
+
t++;
|
|
24
|
+
} else if (starP !== -1) {
|
|
25
|
+
p = starP + 1;
|
|
26
|
+
t = ++starT;
|
|
27
|
+
} else return false;
|
|
28
|
+
while (p < pattern.length && pattern[p] === "*") p++;
|
|
29
|
+
return p === pattern.length;
|
|
30
|
+
};
|
|
8
31
|
var ClientTaskManager = class {
|
|
9
32
|
constructor(config, logger, db) {
|
|
10
33
|
this.config = config;
|
|
@@ -250,10 +273,7 @@ var ClientTaskManager = class {
|
|
|
250
273
|
const allowed = parseUrl(pattern.slice(2)).hostname.replace(/\.$/, "");
|
|
251
274
|
return referrerHost.endsWith(`.${allowed}`) || referrerHost === allowed;
|
|
252
275
|
}
|
|
253
|
-
if (pattern.includes("*"))
|
|
254
|
-
const escaped = pattern.replace(/[.+?^${}()|\[\]\\]/g, "\\$&").replace(/\*/g, ".*");
|
|
255
|
-
return new RegExp(`^${escaped}$`, "i").test(referrerHost);
|
|
256
|
-
}
|
|
276
|
+
if (pattern.includes("*")) return matchesGlob(pattern, referrerHost.toLowerCase());
|
|
257
277
|
const allowedHost = parseUrl(pattern).hostname.replace(/\.$/, "");
|
|
258
278
|
return referrerHost === allowedHost || referrerHost.endsWith(`.${allowedHost}`);
|
|
259
279
|
} catch (e) {
|
|
@@ -295,4 +315,4 @@ var ClientTaskManager = class {
|
|
|
295
315
|
}
|
|
296
316
|
};
|
|
297
317
|
//#endregion
|
|
298
|
-
export { ClientTaskManager };
|
|
318
|
+
export { ClientTaskManager, matchesGlob };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientTasks.js","sourceRoot":"","sources":["../../../src/tasks/client/clientTasks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clientTasks.js","sourceRoot":"","sources":["../../../src/tasks/client/clientTasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ var providerValidateDataset = async (datasetRaw, minSolvedCaptchas, minUnsolvedC
|
|
|
5
5
|
if (datasetRaw.captchas.length < minSolvedCaptchas + minUnsolvedCaptchas) throw new ProsopoEnvError("DATASET.CAPTCHAS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
6
6
|
const solutions = datasetRaw.captchas.map((captcha) => captcha.solution ? 1 : 0).reduce((partialSum, b) => partialSum + b, 0);
|
|
7
7
|
if (solutions < minSolvedCaptchas) throw new ProsopoEnvError("DATASET.SOLUTIONS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
8
|
-
if (solutions < minUnsolvedCaptchas) throw new ProsopoEnvError("DATASET.
|
|
8
|
+
if (datasetRaw.captchas.length - solutions < minUnsolvedCaptchas) throw new ProsopoEnvError("DATASET.CAPTCHAS_COUNT_LESS_THAN_CONFIGURED", { context: { failedFuncName: providerValidateDataset.name } });
|
|
9
9
|
const dataset = await buildDataset(datasetRaw);
|
|
10
10
|
if (!dataset.datasetId || !dataset.datasetContentId) throw new ProsopoEnvError("DATASET.DATASET_ID_UNDEFINED", { context: {
|
|
11
11
|
failedFuncName: providerValidateDataset.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasetTasksUtils.js","sourceRoot":"","sources":["../../../src/tasks/dataset/datasetTasksUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC3C,UAAsB,EACtB,iBAAyB,EACzB,mBAA2B,EAC1B,EAAE;IAEH,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB,GAAG,mBAAmB,EAAE,CAAC;QAC1E,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE;YACxE,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,CAAC,IAAI,EAAE;SACzD,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ;SACnC,GAAG,CAAC,CAAC,OAAO,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAG/C,IAAI,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CAAC,8CAA8C,EAAE;YACzE,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,CAAC,IAAI,EAAE;SACzD,CAAC,CAAC;IACJ,CAAC;IAGD,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"datasetTasksUtils.js","sourceRoot":"","sources":["../../../src/tasks/dataset/datasetTasksUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC3C,UAAsB,EACtB,iBAAyB,EACzB,mBAA2B,EAC1B,EAAE;IAEH,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB,GAAG,mBAAmB,EAAE,CAAC;QAC1E,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE;YACxE,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,CAAC,IAAI,EAAE;SACzD,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ;SACnC,GAAG,CAAC,CAAC,OAAO,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAG/C,IAAI,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CAAC,8CAA8C,EAAE;YACzE,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,CAAC,IAAI,EAAE;SACzD,CAAC,CAAC;IACJ,CAAC;IAGD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,mBAAmB,EAAE,CAAC;QAClE,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE;YACxE,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,CAAC,IAAI,EAAE;SACzD,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAG/C,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrD,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE;YACzD,OAAO,EAAE;gBACR,cAAc,EAAE,uBAAuB,CAAC,IAAI;gBAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;aAC1C;SACD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -202,7 +202,7 @@ var ImgCaptchaManager = class extends CaptchaManager {
|
|
|
202
202
|
}));
|
|
203
203
|
const totalImages = storedCaptchas[0]?.items.length || 0;
|
|
204
204
|
if (selectionsLookScripted(pairs, inputMethods) && process.env.NODE_ENV !== "test") {
|
|
205
|
-
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId,
|
|
205
|
+
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId, ResultReason.CAPTCHA_INVALID_SOLUTION, pairs)];
|
|
206
206
|
if (pendingRecord.sessionId) {
|
|
207
207
|
writePromises.push(this.updateSessionRecordWithCache(pendingRecord.sessionId, {
|
|
208
208
|
userSubmitted: true,
|
|
@@ -243,7 +243,7 @@ var ImgCaptchaManager = class extends CaptchaManager {
|
|
|
243
243
|
}
|
|
244
244
|
await Promise.all(writePromises);
|
|
245
245
|
} else {
|
|
246
|
-
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId,
|
|
246
|
+
const writePromises = [this.db.disapproveDappUserCommitment(commitmentId, ResultReason.CAPTCHA_INVALID_SOLUTION, pairs)];
|
|
247
247
|
if (pendingRecord.sessionId) {
|
|
248
248
|
writePromises.push(this.updateSessionRecordWithCache(pendingRecord.sessionId, {
|
|
249
249
|
userSubmitted: true,
|