@prosopo/provider-mock 2.6.12 → 2.7.13

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/CHANGELOG.md CHANGED
@@ -1,5 +1,105 @@
1
1
  # @prosopo/provider-mock
2
2
 
3
+ ## 2.7.13
4
+ ### Patch Changes
5
+
6
+ - Updated dependencies [9671152]
7
+ - @prosopo/api-express-router@3.0.3
8
+ - @prosopo/provider@3.0.6
9
+
10
+ ## 2.7.12
11
+ ### Patch Changes
12
+
13
+ - @prosopo/provider@3.0.5
14
+
15
+ ## 2.7.11
16
+ ### Patch Changes
17
+
18
+ - @prosopo/provider@3.0.4
19
+
20
+ ## 2.7.10
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [f682f0c]
24
+ - @prosopo/types@3.0.2
25
+ - @prosopo/provider@3.0.3
26
+ - @prosopo/common@3.0.2
27
+ - @prosopo/api-express-router@3.0.2
28
+
29
+ ## 2.7.9
30
+ ### Patch Changes
31
+
32
+ - @prosopo/common@3.0.1
33
+ - @prosopo/types@3.0.1
34
+ - @prosopo/api-express-router@3.0.1
35
+ - @prosopo/provider@3.0.2
36
+
37
+ ## 2.7.8
38
+ ### Patch Changes
39
+
40
+ - @prosopo/provider@3.0.1
41
+
42
+ ## 2.7.7
43
+ ### Patch Changes
44
+
45
+ - Updated dependencies [64b5bcd]
46
+ - @prosopo/api-express-router@3.0.0
47
+ - @prosopo/provider@3.0.0
48
+ - @prosopo/common@3.0.0
49
+ - @prosopo/types@3.0.0
50
+
51
+ ## 2.7.6
52
+ ### Patch Changes
53
+
54
+ - Updated dependencies [aee3efe]
55
+ - @prosopo/provider@2.14.0
56
+ - @prosopo/types@2.10.0
57
+
58
+ ## 2.7.5
59
+ ### Patch Changes
60
+
61
+ - Updated dependencies [d5f2e95]
62
+ - @prosopo/provider@2.13.0
63
+
64
+ ## 2.7.4
65
+ ### Patch Changes
66
+
67
+ - 86c22b8: structured logging
68
+ - Updated dependencies [86c22b8]
69
+ - @prosopo/api-express-router@2.6.4
70
+ - @prosopo/provider@2.12.1
71
+ - @prosopo/common@2.7.2
72
+ - @prosopo/types@2.9.1
73
+
74
+ ## 2.7.3
75
+ ### Patch Changes
76
+
77
+ - Updated dependencies [d6de900]
78
+ - @prosopo/provider@2.12.0
79
+
80
+ ## 2.7.2
81
+ ### Patch Changes
82
+
83
+ - Updated dependencies [30bb383]
84
+ - @prosopo/provider@2.11.0
85
+ - @prosopo/types@2.9.0
86
+ - @prosopo/common@2.7.1
87
+ - @prosopo/api-express-router@2.6.3
88
+
89
+ ## 2.7.1
90
+ ### Patch Changes
91
+
92
+ - Updated dependencies [8f0644a]
93
+ - @prosopo/provider@2.10.0
94
+ - @prosopo/common@2.7.0
95
+ - @prosopo/types@2.8.0
96
+ - @prosopo/api-express-router@2.6.2
97
+
98
+ ## 2.7.0
99
+ ### Minor Changes
100
+
101
+ - 6f3d993: Add docker packages to workspace. Release 2.6.8
102
+
3
103
  ## 2.6.12
4
104
 
5
105
  ### Patch Changes
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAuBA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAQ/C,wBAAgB,aAAa,IAAI,MAAM,CAgNtC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAsBA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAQ/C,wBAAgB,aAAa,IAAI,MAAM,CAqFtC"}
package/dist/api.js CHANGED
@@ -1,11 +1,11 @@
1
- import { createHash } from "node:crypto";
2
- import { Readable } from "node:stream";
3
- import { ProsopoApiError } from "@prosopo/common";
1
+ import { ProsopoApiError, getLogger } from "@prosopo/common";
2
+ import { getJA4 } from "@prosopo/provider";
4
3
  import { ClientApiPaths, VerifySolutionBody, decodeProcaptchaOutput, } from "@prosopo/types";
5
4
  import express from "express";
6
- import { readTlsClientHello } from "read-tls-client-hello";
5
+ import { JA4Database } from "./db.js";
7
6
  export function prosopoRouter() {
8
7
  const router = express.Router();
8
+ const db = new JA4Database(process.env.MONGO_URL || "mongodb://localhost:27017", process.env.MONGO_DBNAME || "client", process.env.MONGO_AUTH_SOURCE || "admin");
9
9
  router.post(ClientApiPaths.VerifyImageCaptchaSolutionDapp, async (req, res, next) => {
10
10
  let body;
11
11
  try {
@@ -48,77 +48,19 @@ export function prosopoRouter() {
48
48
  }
49
49
  });
50
50
  router.get("/test", async (req, res) => {
51
- console.log(req.headers);
52
- console.log(req.rawHeaders);
53
- const headers = req.headers;
54
- if (!headers["x-tls-clienthello"] ||
55
- !headers["x-tls-version"] ||
56
- !headers["x-tls-server-name"]) {
57
- console.error("Missing required headers.");
58
- return res.status(400).send("Missing required headers.");
59
- }
60
- if (typeof headers["x-tls-clienthello"] !== "string" ||
61
- typeof headers["x-tls-version"] !== "string" ||
62
- typeof headers["x-tls-server-name"] !== "string") {
63
- console.error("Client Hello message is not a string.");
64
- return res.status(400).send("Client Hello message is not a string.");
65
- }
66
51
  try {
67
- const clientHelloBuffer = Buffer.from(headers["x-tls-clienthello"], "base64");
68
- console.log("ClientHello First Bytes:", clientHelloBuffer.slice(0, 5).toString("hex"));
69
- if (clientHelloBuffer[5] !== 0x01) {
70
- return { error: "Invalid ClientHello message: First byte is not 0x01" };
71
- }
72
- const tlsVersionMap = {
73
- "tls1.3": Buffer.from([0x03, 0x04]),
74
- "tls1.2": Buffer.from([0x03, 0x03]),
75
- "tls1.1": Buffer.from([0x03, 0x02]),
76
- "tls1.0": Buffer.from([0x03, 0x01]),
77
- };
78
- console.log("Headers TLS Version:", headers["x-tls-version"].toLowerCase());
79
- const tlsVersion = tlsVersionMap[headers["x-tls-version"].toLowerCase()] ||
80
- Buffer.from([0x03, 0x03]);
81
- const readableStream = new Readable({
82
- read() {
83
- this.push(clientHelloBuffer);
84
- },
52
+ const logger = getLogger("info", import.meta.url);
53
+ const ja4PlusFingerprint = await getJA4(req.headers, logger);
54
+ await db.connect();
55
+ await db.addOrUpdateJA4Record({
56
+ ja4_fingerprint: ja4PlusFingerprint.ja4PlusFingerprint,
57
+ user_agent_string: req.headers["user-agent"] || "",
58
+ });
59
+ await db.close();
60
+ return res.json({
61
+ ja4: ja4PlusFingerprint.ja4PlusFingerprint,
62
+ ua: req.headers["user-agent"],
85
63
  });
86
- const clientHello = await readTlsClientHello(readableStream);
87
- console.log("Parsed TLS Client Hello:", clientHello);
88
- const { alpnProtocols } = clientHello;
89
- const [_tlsVersion, cipherSuites, extensions] = clientHello.fingerprintData;
90
- console.log("TLS Version:", _tlsVersion);
91
- console.log("Cipher Suites:", cipherSuites);
92
- console.log("Extensions:", extensions);
93
- const transport = "t";
94
- if (tlsVersion.readUInt16BE(0) !== _tlsVersion) {
95
- console.warn("TLS version mismatch.", tlsVersion.readUInt16BE(0), _tlsVersion);
96
- }
97
- const sniIndicator = headers["x-tls-server-name"] ? "d" : "i";
98
- const validCipherSuites = cipherSuites.filter((cs) => (cs & 0x0f0f) !== 0x0a0a);
99
- const cipherCount = validCipherSuites.length;
100
- const validExtensions = extensions.filter((ext) => (ext & 0x0f0f) !== 0x0a0a);
101
- const extensionCount = validExtensions.length;
102
- const alpn = alpnProtocols?.length ? alpnProtocols[0] : "";
103
- const alpnLabel = alpn ? `${alpn[0]}${alpn[alpn.length - 1]}` : "00";
104
- const sortedCiphers = validCipherSuites
105
- .map((cs) => cs.toString(16).padStart(4, "0"))
106
- .sort()
107
- .join(",");
108
- const cipherHash = createHash("sha256")
109
- .update(sortedCiphers)
110
- .digest("hex")
111
- .slice(0, 12);
112
- const sortedExtensions = extensions
113
- .map((ext) => ext.toString(16).padStart(4, "0"))
114
- .sort()
115
- .join(",");
116
- const extensionHash = createHash("sha256")
117
- .update(sortedExtensions)
118
- .digest("hex")
119
- .slice(0, 12);
120
- const ja4PlusFingerprint = `${transport}${tlsVersion}${sniIndicator}${cipherCount}${extensionCount}${alpnLabel}_${cipherHash}_${extensionHash}`;
121
- return res.json({ ja4PlusFingerprint });
122
64
  }
123
65
  catch (e) {
124
66
  console.error("Error parsing ClientHello:", e);
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}