@prosopo/provider-mock 2.6.11 → 2.7.12

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,104 @@
1
1
  # @prosopo/provider-mock
2
2
 
3
+ ## 2.7.12
4
+ ### Patch Changes
5
+
6
+ - @prosopo/provider@3.0.5
7
+
8
+ ## 2.7.11
9
+ ### Patch Changes
10
+
11
+ - @prosopo/provider@3.0.4
12
+
13
+ ## 2.7.10
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [f682f0c]
17
+ - @prosopo/types@3.0.2
18
+ - @prosopo/provider@3.0.3
19
+ - @prosopo/common@3.0.2
20
+ - @prosopo/api-express-router@3.0.2
21
+
22
+ ## 2.7.9
23
+ ### Patch Changes
24
+
25
+ - @prosopo/common@3.0.1
26
+ - @prosopo/types@3.0.1
27
+ - @prosopo/api-express-router@3.0.1
28
+ - @prosopo/provider@3.0.2
29
+
30
+ ## 2.7.8
31
+ ### Patch Changes
32
+
33
+ - @prosopo/provider@3.0.1
34
+
35
+ ## 2.7.7
36
+ ### Patch Changes
37
+
38
+ - Updated dependencies [64b5bcd]
39
+ - @prosopo/api-express-router@3.0.0
40
+ - @prosopo/provider@3.0.0
41
+ - @prosopo/common@3.0.0
42
+ - @prosopo/types@3.0.0
43
+
44
+ ## 2.7.6
45
+ ### Patch Changes
46
+
47
+ - Updated dependencies [aee3efe]
48
+ - @prosopo/provider@2.14.0
49
+ - @prosopo/types@2.10.0
50
+
51
+ ## 2.7.5
52
+ ### Patch Changes
53
+
54
+ - Updated dependencies [d5f2e95]
55
+ - @prosopo/provider@2.13.0
56
+
57
+ ## 2.7.4
58
+ ### Patch Changes
59
+
60
+ - 86c22b8: structured logging
61
+ - Updated dependencies [86c22b8]
62
+ - @prosopo/api-express-router@2.6.4
63
+ - @prosopo/provider@2.12.1
64
+ - @prosopo/common@2.7.2
65
+ - @prosopo/types@2.9.1
66
+
67
+ ## 2.7.3
68
+ ### Patch Changes
69
+
70
+ - Updated dependencies [d6de900]
71
+ - @prosopo/provider@2.12.0
72
+
73
+ ## 2.7.2
74
+ ### Patch Changes
75
+
76
+ - Updated dependencies [30bb383]
77
+ - @prosopo/provider@2.11.0
78
+ - @prosopo/types@2.9.0
79
+ - @prosopo/common@2.7.1
80
+ - @prosopo/api-express-router@2.6.3
81
+
82
+ ## 2.7.1
83
+ ### Patch Changes
84
+
85
+ - Updated dependencies [8f0644a]
86
+ - @prosopo/provider@2.10.0
87
+ - @prosopo/common@2.7.0
88
+ - @prosopo/types@2.8.0
89
+ - @prosopo/api-express-router@2.6.2
90
+
91
+ ## 2.7.0
92
+ ### Minor Changes
93
+
94
+ - 6f3d993: Add docker packages to workspace. Release 2.6.8
95
+
96
+ ## 2.6.12
97
+
98
+ ### Patch Changes
99
+
100
+ - @prosopo/provider@2.9.8
101
+
3
102
  ## 2.6.11
4
103
 
5
104
  ### 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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"}