@prosopo/provider-mock 2.8.136 → 2.8.138
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 +12 -9
- package/.turbo/turbo-build$colon$tsc.log +26 -26
- package/.turbo/turbo-build.log +13 -10
- package/CHANGELOG.md +31 -0
- package/dist/_virtual/_rolldown/runtime.js +3 -0
- package/dist/api.js +80 -76
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/api.cjs +84 -78
- package/dist/cjs/db.cjs +82 -82
- package/dist/cjs/start.cjs +27 -22
- package/dist/db.js +80 -79
- package/dist/start.js +22 -17
- package/package.json +15 -15
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider-mock@2.8.
|
|
2
|
+
> @prosopo/provider-mock@2.8.138 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -53,13 +53,16 @@ ViteCommonJSConfig: .
|
|
|
53
53
|
'@prosopo/dotenv'
|
|
54
54
|
]
|
|
55
55
|
}
|
|
56
|
-
[
|
|
56
|
+
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
57
|
+
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
57
58
|
Bundle build started
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[32m✓[39m 3 modules transformed.
|
|
59
|
+
[2K
|
|
60
|
+
✓ 4 modules transformed.
|
|
61
61
|
rendering chunks...
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
computing gzip size...
|
|
63
|
+
dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
|
|
64
|
+
dist/cjs/start.cjs 1.15 kB │ gzip: 0.51 kB
|
|
65
|
+
dist/cjs/db.cjs 2.27 kB │ gzip: 0.87 kB
|
|
66
|
+
dist/cjs/api.cjs 3.06 kB │ gzip: 1.32 kB
|
|
67
|
+
|
|
68
|
+
[32m✓ built in 64ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider-mock@2.8.
|
|
2
|
+
> @prosopo/provider-mock@2.8.138 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
12:37:19 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../../packages/util/tsconfig.json
|
|
8
8
|
* ../../packages/logger/tsconfig.json
|
|
@@ -27,51 +27,51 @@
|
|
|
27
27
|
* ../../packages/dotenv/tsconfig.json
|
|
28
28
|
* tsconfig.json
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
12:37:19 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/index.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
12:37:19 PM - Project '../../packages/util/tsconfig.json' is up to date because newest input '../../packages/util/src/url.ts' is older than output '../../packages/util/tsconfig.tsbuildinfo'
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
12:37:19 PM - Project '../../packages/logger/tsconfig.json' is up to date because newest input '../../packages/logger/src/index.ts' is older than output '../../packages/logger/tsconfig.tsbuildinfo'
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
12:37:19 PM - Project '../../packages/api-route/tsconfig.json' is up to date because newest input '../../packages/api-route/src/tests/apiRoute.unit.test.ts' is older than output '../../packages/api-route/tsconfig.tsbuildinfo'
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
12:37:19 PM - Project '../../packages/locale/tsconfig.json' is up to date because newest input '../../packages/locale/src/translationKey.ts' is older than output '../../packages/locale/tsconfig.tsbuildinfo'
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
12:37:19 PM - Project '../../packages/util-crypto/tsconfig.json' is up to date because newest input '../../packages/util-crypto/src/types.ts' is older than output '../../packages/util-crypto/tsconfig.tsbuildinfo'
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
12:37:19 PM - Project '../../packages/types/tsconfig.json' is up to date because newest input '../../packages/types/src/provider/api.ts' is older than output '../../packages/types/tsconfig.tsbuildinfo'
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
12:37:19 PM - Project '../../packages/common/tsconfig.json' is up to date because newest input '../../packages/common/src/index.ts' is older than output '../../packages/common/tsconfig.tsbuildinfo'
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
12:37:19 PM - Project '../../packages/ipinfo/tsconfig.json' is up to date because newest input '../../packages/ipinfo/src/IpInfoService.ts' is older than output '../../packages/ipinfo/tsconfig.tsbuildinfo'
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
12:37:19 PM - Project '../../packages/redis-client/tsconfig.json' is up to date because newest input '../../packages/redis-client/src/index.ts' is older than output '../../packages/redis-client/tsconfig.tsbuildinfo'
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
12:37:19 PM - Project '../../packages/api/tsconfig.json' is up to date because newest input '../../packages/api/src/tests/apiHarness.ts' is older than output '../../packages/api/tsconfig.tsbuildinfo'
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
12:37:19 PM - Project '../../packages/user-access-policy/tsconfig.json' is up to date because newest input '../../packages/user-access-policy/src/transformRule.ts' is older than output '../../packages/user-access-policy/tsconfig.tsbuildinfo'
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
12:37:19 PM - Project '../../packages/types-database/tsconfig.json' is up to date because newest input '../../packages/types-database/src/types/bannedDomain.ts' is older than output '../../packages/types-database/tsconfig.tsbuildinfo'
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
12:37:19 PM - Project '../../packages/database/tsconfig.json' is up to date because newest input '../../packages/database/src/tests/unit/redisCacheEscalation.unit.test.ts' is older than output '../../packages/database/tsconfig.tsbuildinfo'
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
12:37:19 PM - Project '../../packages/keyring/tsconfig.json' is up to date because newest input '../../packages/keyring/src/keyring/keyring.ts' is older than output '../../packages/keyring/tsconfig.tsbuildinfo'
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
12:37:19 PM - Project '../../packages/types-env/tsconfig.json' is up to date because newest input '../../packages/types-env/src/index.ts' is older than output '../../packages/types-env/tsconfig.tsbuildinfo'
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
12:37:20 PM - Project '../../packages/env/tsconfig.json' is up to date because newest input '../../packages/env/src/env.ts' is older than output '../../packages/env/tsconfig.tsbuildinfo'
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
12:37:20 PM - Project '../../packages/api-express-router/tsconfig.json' is up to date because newest input '../../packages/api-express-router/src/tests/unit/testDoubles.ts' is older than output '../../packages/api-express-router/tsconfig.tsbuildinfo'
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
12:37:20 PM - Project '../../packages/datasets/tsconfig.json' is up to date because newest input '../../packages/datasets/src/tests/dataset.unit.test.ts' is older than output '../../packages/datasets/tsconfig.tsbuildinfo'
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
12:37:20 PM - Project '../../packages/load-balancer/tsconfig.json' is up to date because newest input '../../packages/load-balancer/src/tests/providers.unit.test.ts' is older than output '../../packages/load-balancer/tsconfig.tsbuildinfo'
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
12:37:20 PM - Project '../../packages/provider/tsconfig.json' is up to date because newest input '../../packages/provider/src/utils/normalizeRequestIp.ts' is older than output '../../packages/provider/tsconfig.tsbuildinfo'
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
12:37:20 PM - Project '../../packages/dotenv/tsconfig.json' is up to date because newest input '../../packages/dotenv/src/index.ts' is older than output '../../packages/dotenv/tsconfig.tsbuildinfo'
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
12:37:20 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
12:37:20 PM - Building project '/home/runner/work/captcha/captcha/demos/provider-mock/tsconfig.json'...
|
|
77
77
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider-mock@2.8.
|
|
2
|
+
> @prosopo/provider-mock@2.8.138 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider-mock@2.8.
|
|
6
|
+
> @prosopo/provider-mock@2.8.138 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -57,13 +57,16 @@ ViteEsmConfig: .
|
|
|
57
57
|
'@prosopo/dotenv'
|
|
58
58
|
]
|
|
59
59
|
}
|
|
60
|
-
[
|
|
60
|
+
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
61
|
+
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
61
62
|
Bundle build started
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
[32m✓[39m 3 modules transformed.
|
|
63
|
+
[2K
|
|
64
|
+
✓ 4 modules transformed.
|
|
65
65
|
rendering chunks...
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
computing gzip size...
|
|
67
|
+
dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
|
|
68
|
+
dist/start.js 0.90 kB │ gzip: 0.46 kB
|
|
69
|
+
dist/db.js 2.24 kB │ gzip: 0.86 kB
|
|
70
|
+
dist/api.js 2.81 kB │ gzip: 1.24 kB
|
|
71
|
+
|
|
72
|
+
[32m✓ built in 43ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @prosopo/provider-mock
|
|
2
2
|
|
|
3
|
+
## 2.8.138
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [508fee8]
|
|
7
|
+
- Updated dependencies [69f8dcd]
|
|
8
|
+
- @prosopo/api-express-router@3.1.52
|
|
9
|
+
- @prosopo/database@3.15.21
|
|
10
|
+
- @prosopo/provider@4.15.16
|
|
11
|
+
- @prosopo/types-database@4.11.18
|
|
12
|
+
|
|
13
|
+
## 2.8.137
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- e14fce6: chore(deps): bump vite to 6.4.3 and mongoose to 8.24.1, and adjust types for the mongoose 8.24 Document/ObjectId changes
|
|
17
|
+
- Updated dependencies [0e1171c]
|
|
18
|
+
- Updated dependencies [103318c]
|
|
19
|
+
- Updated dependencies [4cd9035]
|
|
20
|
+
- Updated dependencies [8fba211]
|
|
21
|
+
- Updated dependencies [8a400eb]
|
|
22
|
+
- Updated dependencies [270a8d8]
|
|
23
|
+
- Updated dependencies [e14fce6]
|
|
24
|
+
- @prosopo/locale@3.2.8
|
|
25
|
+
- @prosopo/provider@4.15.15
|
|
26
|
+
- @prosopo/types@4.10.0
|
|
27
|
+
- @prosopo/types-database@4.11.17
|
|
28
|
+
- @prosopo/dotenv@3.0.50
|
|
29
|
+
- @prosopo/common@3.1.48
|
|
30
|
+
- @prosopo/database@3.15.20
|
|
31
|
+
- @prosopo/api-express-router@3.1.51
|
|
32
|
+
- @prosopo/logger@2.0.4
|
|
33
|
+
|
|
3
34
|
## 2.8.136
|
|
4
35
|
### Patch Changes
|
|
5
36
|
|
package/dist/api.js
CHANGED
|
@@ -1,81 +1,85 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JA4Database } from "./db.js";
|
|
2
2
|
import { getLogger } from "@prosopo/logger";
|
|
3
|
+
import express from "express";
|
|
4
|
+
import { ProsopoApiError } from "@prosopo/common";
|
|
3
5
|
import { getJA4 } from "@prosopo/provider";
|
|
4
6
|
import { ClientApiPaths, VerifySolutionBody, decodeProcaptchaOutput } from "@prosopo/types";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
//#region src/api.ts
|
|
8
|
+
/**
|
|
9
|
+
* Returns a router connected to the database which can interact with the Proposo protocol
|
|
10
|
+
*
|
|
11
|
+
* @return {Router} - A middleware router that can interact with the Prosopo protocol
|
|
12
|
+
*/
|
|
7
13
|
function prosopoRouter() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return router;
|
|
14
|
+
const router = express.Router();
|
|
15
|
+
const db = new JA4Database(process.env.MONGO_URL || "mongodb://localhost:27017", process.env.MONGO_DBNAME || "client", process.env.MONGO_AUTH_SOURCE || "admin");
|
|
16
|
+
/**
|
|
17
|
+
* Verifies a user's solution as being approved or not
|
|
18
|
+
*
|
|
19
|
+
* @param {string} userAccount - Dapp User id
|
|
20
|
+
* @param {string} commitmentId - The captcha solution to look up
|
|
21
|
+
*/
|
|
22
|
+
router.post(ClientApiPaths.VerifyImageCaptchaSolutionDapp, async (req, res, next) => {
|
|
23
|
+
let body;
|
|
24
|
+
try {
|
|
25
|
+
body = VerifySolutionBody.parse(req.body);
|
|
26
|
+
} catch (err) {
|
|
27
|
+
return next(new ProsopoApiError("CAPTCHA.PARSE_ERROR", {
|
|
28
|
+
context: {
|
|
29
|
+
error: err,
|
|
30
|
+
code: 400
|
|
31
|
+
},
|
|
32
|
+
logLevel: "info"
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const { token } = body;
|
|
37
|
+
const { user, dapp, commitmentId } = decodeProcaptchaOutput(token);
|
|
38
|
+
const testCommitmentId = "0x123456789test";
|
|
39
|
+
const testAccount = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
|
|
40
|
+
const testDapp = "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM";
|
|
41
|
+
let statusMessage = "API.USER_NOT_VERIFIED";
|
|
42
|
+
let approved = false;
|
|
43
|
+
if (user && user === testAccount || commitmentId && commitmentId === testCommitmentId || dapp && dapp === testDapp) {
|
|
44
|
+
approved = true;
|
|
45
|
+
statusMessage = "API.USER_VERIFIED";
|
|
46
|
+
return res.json({
|
|
47
|
+
status: req.t(statusMessage),
|
|
48
|
+
verified: approved,
|
|
49
|
+
commitmentId: testCommitmentId
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return res.json({
|
|
53
|
+
status: req.t(statusMessage),
|
|
54
|
+
verified: false
|
|
55
|
+
});
|
|
56
|
+
} catch (err) {
|
|
57
|
+
return next(new ProsopoApiError("API.UNKNOWN", { context: {
|
|
58
|
+
error: err,
|
|
59
|
+
code: 500
|
|
60
|
+
} }));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
router.get("/test", async (req, res) => {
|
|
64
|
+
try {
|
|
65
|
+
const logger = getLogger("info", "provider-mock:api:test");
|
|
66
|
+
const ja4PlusFingerprint = await getJA4(req.headers, logger);
|
|
67
|
+
await db.connect();
|
|
68
|
+
await db.addOrUpdateJA4Record({
|
|
69
|
+
ja4_fingerprint: ja4PlusFingerprint.ja4PlusFingerprint,
|
|
70
|
+
user_agent_string: req.headers["user-agent"] || ""
|
|
71
|
+
});
|
|
72
|
+
await db.close();
|
|
73
|
+
return res.json({
|
|
74
|
+
ja4: ja4PlusFingerprint.ja4PlusFingerprint,
|
|
75
|
+
ua: req.headers["user-agent"]
|
|
76
|
+
});
|
|
77
|
+
} catch (e) {
|
|
78
|
+
console.error("Error parsing ClientHello:", e);
|
|
79
|
+
return res.status(500).send("Error parsing ClientHello.");
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return router;
|
|
78
83
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
};
|
|
84
|
+
//#endregion
|
|
85
|
+
export { prosopoRouter };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
package/dist/cjs/api.cjs
CHANGED
|
@@ -1,81 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_db = require("./db.cjs");
|
|
3
|
+
let _prosopo_logger = require("@prosopo/logger");
|
|
4
|
+
let express = require("express");
|
|
5
|
+
express = require_runtime.__toESM(express, 1);
|
|
6
|
+
let _prosopo_common = require("@prosopo/common");
|
|
7
|
+
let _prosopo_provider = require("@prosopo/provider");
|
|
8
|
+
let _prosopo_types = require("@prosopo/types");
|
|
9
|
+
//#region src/api.ts
|
|
10
|
+
/**
|
|
11
|
+
* Returns a router connected to the database which can interact with the Proposo protocol
|
|
12
|
+
*
|
|
13
|
+
* @return {Router} - A middleware router that can interact with the Prosopo protocol
|
|
14
|
+
*/
|
|
9
15
|
function prosopoRouter() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return router;
|
|
16
|
+
const router = express.default.Router();
|
|
17
|
+
const db = new require_db.JA4Database(process.env.MONGO_URL || "mongodb://localhost:27017", process.env.MONGO_DBNAME || "client", process.env.MONGO_AUTH_SOURCE || "admin");
|
|
18
|
+
/**
|
|
19
|
+
* Verifies a user's solution as being approved or not
|
|
20
|
+
*
|
|
21
|
+
* @param {string} userAccount - Dapp User id
|
|
22
|
+
* @param {string} commitmentId - The captcha solution to look up
|
|
23
|
+
*/
|
|
24
|
+
router.post(_prosopo_types.ClientApiPaths.VerifyImageCaptchaSolutionDapp, async (req, res, next) => {
|
|
25
|
+
let body;
|
|
26
|
+
try {
|
|
27
|
+
body = _prosopo_types.VerifySolutionBody.parse(req.body);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
return next(new _prosopo_common.ProsopoApiError("CAPTCHA.PARSE_ERROR", {
|
|
30
|
+
context: {
|
|
31
|
+
error: err,
|
|
32
|
+
code: 400
|
|
33
|
+
},
|
|
34
|
+
logLevel: "info"
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const { token } = body;
|
|
39
|
+
const { user, dapp, commitmentId } = (0, _prosopo_types.decodeProcaptchaOutput)(token);
|
|
40
|
+
const testCommitmentId = "0x123456789test";
|
|
41
|
+
const testAccount = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
|
|
42
|
+
const testDapp = "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM";
|
|
43
|
+
let statusMessage = "API.USER_NOT_VERIFIED";
|
|
44
|
+
let approved = false;
|
|
45
|
+
if (user && user === testAccount || commitmentId && commitmentId === testCommitmentId || dapp && dapp === testDapp) {
|
|
46
|
+
approved = true;
|
|
47
|
+
statusMessage = "API.USER_VERIFIED";
|
|
48
|
+
return res.json({
|
|
49
|
+
status: req.t(statusMessage),
|
|
50
|
+
verified: approved,
|
|
51
|
+
commitmentId: testCommitmentId
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return res.json({
|
|
55
|
+
status: req.t(statusMessage),
|
|
56
|
+
verified: false
|
|
57
|
+
});
|
|
58
|
+
} catch (err) {
|
|
59
|
+
return next(new _prosopo_common.ProsopoApiError("API.UNKNOWN", { context: {
|
|
60
|
+
error: err,
|
|
61
|
+
code: 500
|
|
62
|
+
} }));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
router.get("/test", async (req, res) => {
|
|
66
|
+
try {
|
|
67
|
+
const logger = (0, _prosopo_logger.getLogger)("info", "provider-mock:api:test");
|
|
68
|
+
const ja4PlusFingerprint = await (0, _prosopo_provider.getJA4)(req.headers, logger);
|
|
69
|
+
await db.connect();
|
|
70
|
+
await db.addOrUpdateJA4Record({
|
|
71
|
+
ja4_fingerprint: ja4PlusFingerprint.ja4PlusFingerprint,
|
|
72
|
+
user_agent_string: req.headers["user-agent"] || ""
|
|
73
|
+
});
|
|
74
|
+
await db.close();
|
|
75
|
+
return res.json({
|
|
76
|
+
ja4: ja4PlusFingerprint.ja4PlusFingerprint,
|
|
77
|
+
ua: req.headers["user-agent"]
|
|
78
|
+
});
|
|
79
|
+
} catch (e) {
|
|
80
|
+
console.error("Error parsing ClientHello:", e);
|
|
81
|
+
return res.status(500).send("Error parsing ClientHello.");
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return router;
|
|
80
85
|
}
|
|
86
|
+
//#endregion
|
|
81
87
|
exports.prosopoRouter = prosopoRouter;
|