@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/dist/db.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { type Logger } from "@prosopo/common";
2
+ import { MongoDatabase } from "@prosopo/database";
3
+ import type { Tables } from "@prosopo/types-database";
4
+ import type mongoose from "mongoose";
5
+ declare enum TableNames {
6
+ ja4 = "ja4"
7
+ }
8
+ type JA4Data = {
9
+ application?: string;
10
+ library?: string;
11
+ device?: string;
12
+ os?: string;
13
+ user_agent_string: string;
14
+ certificate_authority?: string;
15
+ observation_count?: number;
16
+ verified?: boolean;
17
+ notes?: string;
18
+ ja4_fingerprint: string;
19
+ ja4_fingerprint_string?: string;
20
+ ja4s_fingerprint?: string;
21
+ ja4h_fingerprint?: string;
22
+ ja4x_fingerprint?: string;
23
+ ja4t_fingerprint?: string;
24
+ ja4ts_fingerprint?: string;
25
+ ja4tscan_fingerprint?: string;
26
+ };
27
+ type JA4Record = JA4Data & mongoose.Document;
28
+ export declare class JA4Database extends MongoDatabase {
29
+ tables: Tables<TableNames>;
30
+ constructor(url: string, dbname?: string, authSource?: string, logger?: Logger);
31
+ connect(): Promise<void>;
32
+ getTables(): Tables<TableNames>;
33
+ getJA4Records(): Promise<JA4Record[]>;
34
+ getJA4RecordByFingerprintAndUserAgent(ja4Fingerprint: string, userAgentString: string): Promise<JA4Record | null>;
35
+ addOrUpdateJA4Record(ja4Record: JA4Data): Promise<JA4Record | null>;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,aAAK,UAAU;IACd,GAAG,QAAQ;CACX;AAED,KAAK,OAAO,GAAG;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAgC7C,qBAAa,WAAY,SAAQ,aAAa;IAC7C,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAG1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM;IAMD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC;IAUzB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIrC,qCAAqC,CAC1C,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAStB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAezE"}
package/dist/db.js ADDED
@@ -0,0 +1,79 @@
1
+ import { ProsopoDBError } from "@prosopo/common";
2
+ import { MongoDatabase } from "@prosopo/database";
3
+ import { Schema } from "mongoose";
4
+ var TableNames;
5
+ (function (TableNames) {
6
+ TableNames["ja4"] = "ja4";
7
+ })(TableNames || (TableNames = {}));
8
+ const JA4Schema = new Schema({
9
+ application: String,
10
+ library: String,
11
+ device: String,
12
+ os: String,
13
+ user_agent_string: String,
14
+ certificate_authority: String,
15
+ observation_count: { type: Number, default: 1 },
16
+ verified: { type: Boolean, default: false },
17
+ notes: { type: String, default: "" },
18
+ ja4_fingerprint: { type: String, required: true },
19
+ ja4_fingerprint_string: String,
20
+ ja4s_fingerprint: String,
21
+ ja4h_fingerprint: String,
22
+ ja4x_fingerprint: String,
23
+ ja4t_fingerprint: String,
24
+ ja4ts_fingerprint: String,
25
+ ja4tscan_fingerprint: String,
26
+ });
27
+ JA4Schema.index({ ja4_fingerprint: 1, user_agent_string: 1 }, { unique: true });
28
+ const DATA_TABLES = [
29
+ {
30
+ collectionName: TableNames.ja4,
31
+ modelName: TableNames.ja4,
32
+ schema: JA4Schema,
33
+ },
34
+ ];
35
+ export class JA4Database extends MongoDatabase {
36
+ constructor(url, dbname, authSource, logger) {
37
+ super(url, dbname, authSource, logger);
38
+ this.tables = {};
39
+ }
40
+ async connect() {
41
+ await super.connect();
42
+ DATA_TABLES.map(({ collectionName, modelName, schema }) => {
43
+ if (this.connection) {
44
+ this.tables[collectionName] = this.connection.model(modelName, schema);
45
+ }
46
+ });
47
+ }
48
+ getTables() {
49
+ if (!this.tables) {
50
+ throw new ProsopoDBError("DATABASE.TABLES_UNDEFINED", {
51
+ context: { failedFuncName: this.getTables.name },
52
+ logger: this.logger,
53
+ });
54
+ }
55
+ return this.tables;
56
+ }
57
+ async getJA4Records() {
58
+ return this.tables.ja4.find({});
59
+ }
60
+ async getJA4RecordByFingerprintAndUserAgent(ja4Fingerprint, userAgentString) {
61
+ return this.tables.ja4.findOne({
62
+ ja4_fingerprint: ja4Fingerprint,
63
+ user_agent_string: userAgentString,
64
+ });
65
+ }
66
+ async addOrUpdateJA4Record(ja4Record) {
67
+ const existingRecord = await this.getJA4RecordByFingerprintAndUserAgent(ja4Record.ja4_fingerprint, ja4Record.user_agent_string ? ja4Record.user_agent_string : "");
68
+ if (existingRecord) {
69
+ existingRecord.observation_count =
70
+ (existingRecord.observation_count || 0) + 1;
71
+ await existingRecord.save();
72
+ return existingRecord;
73
+ }
74
+ const newRecord = new this.tables.ja4(ja4Record);
75
+ await newRecord.save();
76
+ return newRecord;
77
+ }
78
+ }
79
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
package/dist/start.js CHANGED
@@ -14,11 +14,13 @@ async function startApi() {
14
14
  apiApp.use(prosopoRouter());
15
15
  apiApp.use(handleErrors);
16
16
  apiApp.listen(apiPort, () => {
17
- logger.info(`Prosopo app listening at http://localhost:${apiPort}`);
17
+ logger.info(() => ({
18
+ msg: `Prosopo app listening at http://localhost:${apiPort}`,
19
+ }));
18
20
  });
19
21
  }
20
22
  startApi().catch((error) => {
21
- logger.error(error);
23
+ logger.error(() => ({ err: error, msg: "Failed to start API" }));
22
24
  process.exit(1);
23
25
  });
24
26
  //# sourceMappingURL=start.js.map
package/dist/start.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;AAE/E,KAAK,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B,MAAM,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEzB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;AAE/E,KAAK,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B,MAAM,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEzB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,6CAA6C,OAAO,EAAE;SAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/provider-mock",
3
- "version": "2.6.11",
3
+ "version": "2.7.12",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -13,26 +13,34 @@
13
13
  "test": "echo \"No test specified\"",
14
14
  "clean": "tsc --build --clean",
15
15
  "build": "tsc --build --verbose",
16
- "build:cjs": "echo 'no cjs build'"
16
+ "build:cjs": "echo 'no cjs build'",
17
+ "bundle": "NODE_ENV=${NODE_ENV:-production}; vite build --config vite.config.ts --mode $NODE_ENV"
17
18
  },
18
19
  "dependencies": {
19
- "@prosopo/api-express-router": "2.6.1",
20
- "@prosopo/common": "2.6.1",
21
- "@prosopo/provider": "2.9.7",
22
- "@prosopo/types": "2.7.1",
20
+ "@prosopo/api-express-router": "3.0.2",
21
+ "@prosopo/common": "3.0.2",
22
+ "@prosopo/provider": "3.0.5",
23
+ "@prosopo/types": "3.0.2",
24
+ "@typegoose/auto-increment": "4.13.0",
25
+ "axios": "1.10.0",
23
26
  "cors": "2.8.5",
27
+ "esbuild": "0.25.6",
24
28
  "express": "4.21.2",
25
- "read-tls-client-hello": "1.1.0"
29
+ "mongodb": "6.9.0",
30
+ "mongoose": "8.13.0",
31
+ "openpgp": "5.11.3",
32
+ "read-tls-client-hello": "1.1.0",
33
+ "webpack-dev-server": "5.2.2"
26
34
  },
27
35
  "devDependencies": {
28
36
  "@vitest/coverage-v8": "3.0.9",
29
37
  "concurrently": "9.0.1",
30
38
  "del-cli": "6.0.0",
31
- "npm-run-all": "2.1.0",
39
+ "npm-run-all": "4.1.5",
32
40
  "tslib": "2.7.0",
33
- "tsx": "4.19.1",
41
+ "tsx": "4.20.3",
34
42
  "typescript": "5.6.2",
35
- "vite": "6.2.3",
43
+ "vite": "6.3.5",
36
44
  "vitest": "3.0.9"
37
45
  },
38
46
  "repository": {
package/vite.config.ts ADDED
@@ -0,0 +1,59 @@
1
+ // Copyright 2021-2025 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import * as path from "node:path";
15
+ import { ViteBackendConfig } from "@prosopo/config";
16
+ import { loadEnv } from "@prosopo/dotenv";
17
+ import { defineConfig } from "vite";
18
+ import { version } from "./package.json";
19
+
20
+ // load env using our util because vite loadEnv is not working for .env.development
21
+ loadEnv();
22
+
23
+ // Package specific config
24
+ const packageName = "@prosopo/provider-mock";
25
+ const bundleName = "provider-mock";
26
+ const dir = path.resolve();
27
+ const entry = "./src/start.ts";
28
+ const packageVersion = version;
29
+
30
+ process.env.TS_NODE_PROJECT = path.resolve("./tsconfig.json");
31
+
32
+ // Merge with generic backend config
33
+ export default defineConfig(async ({ command, mode }) => {
34
+ const backendConfig = await ViteBackendConfig(
35
+ packageName,
36
+ packageVersion,
37
+ bundleName,
38
+ dir,
39
+ entry,
40
+ command,
41
+ mode,
42
+ );
43
+ return defineConfig({
44
+ define: {
45
+ ...backendConfig.define,
46
+ ...(process.env.PROSOPO_MONGO_EVENTS_URI && {
47
+ "process.env.PROSOPO_MONGO_EVENTS_URI": JSON.stringify(
48
+ process.env.PROSOPO_MONGO_EVENTS_URI,
49
+ ),
50
+ }),
51
+ ...(process.env._DEV_ONLY_WATCH_EVENTS && {
52
+ "process.env._DEV_ONLY_WATCH_EVENTS": JSON.stringify(
53
+ process.env._DEV_ONLY_WATCH_EVENTS,
54
+ ),
55
+ }),
56
+ },
57
+ ...backendConfig,
58
+ });
59
+ });