@ghostery/trackerdb 0.1.3 → 1.0.1

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/README.md CHANGED
@@ -19,6 +19,26 @@ The Tracker Database is used in [Ghostery Browser Extension](https://www.ghoster
19
19
 
20
20
  It is also used by universities, journalists, and companies that want to understand the nature of the web data exchange.
21
21
 
22
+ ## SDK
23
+
24
+ The Ghostery Tracker Database comes with a JavaScript SDK. Sample usage:
25
+
26
+ ```js
27
+ import loadTrackerDB from '@ghostery/trackerdb';
28
+
29
+ const trackerDB = await loadTrackerDB();
30
+
31
+ const domainMatches = await trackerDB.matchDomain('google.com');
32
+
33
+ const urlMatches = await trackerDB.matchUrl({
34
+ url: 'https://google.com/gen_204',
35
+ type: 'xhr',
36
+ sourceUrl: 'https://google.com/'
37
+ }, {
38
+ getDomainMetadata: true,
39
+ });
40
+ ```
41
+
22
42
  ## CLI
23
43
 
24
44
  Ghostery Tracker Database can also be used in a commnad line, for example with:
package/cli.js CHANGED
@@ -1,10 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import path from 'node:path';
4
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
- import { FiltersEngine, Request, ENGINE_VERSION } from '@cliqz/adblocker';
6
-
7
- import { BASE_PATH } from './scripts/helpers.js';
3
+ import { readFileSync } from 'node:fs';
4
+ import { FiltersEngine, Request } from '@cliqz/adblocker';
5
+ import { generateEngine } from './src/prepare.js';
8
6
 
9
7
  const debug = process.env.DEBUG === 'true' ? console.log : () => {};
10
8
 
@@ -17,30 +15,16 @@ const debug = process.env.DEBUG === 'true' ? console.log : () => {};
17
15
  process.exit(1);
18
16
  }
19
17
 
20
- // Generate input JSON if missing
21
- const trackerDBPath = path.join(BASE_PATH, 'dist', 'trackerdb.json');
22
- if (!existsSync(trackerDBPath)) {
23
- await import('./scripts/export-json/index.js');
24
- }
25
-
26
- // Generate binary engine if missing
27
- const trackerEnginePath = path.join(
28
- BASE_PATH,
29
- 'dist',
30
- `trackerdb_${ENGINE_VERSION}.engine`,
31
- );
32
- if (!existsSync(trackerEnginePath)) {
33
- const rawTrackerDB = JSON.parse(readFileSync(trackerDBPath, 'utf-8'));
34
- const engine = FiltersEngine.fromTrackerDB(rawTrackerDB);
35
- writeFileSync(trackerEnginePath, engine.serialize());
36
- }
18
+ const trackerEnginePath = await generateEngine();
37
19
 
38
20
  const loadingStart = Date.now();
39
21
  const engine = FiltersEngine.deserialize(readFileSync(trackerEnginePath));
40
22
  const loadingEnd = Date.now();
41
23
 
42
24
  const matches = url.startsWith('http')
43
- ? engine.getPatternMetadata(Request.fromRawDetails({ url }))
25
+ ? engine.getPatternMetadata(Request.fromRawDetails({ url, type: 'xhr' }), {
26
+ getDomainMetadata: true,
27
+ })
44
28
  : engine.metadata.fromDomain(url);
45
29
  const matchingEnd = Date.now();
46
30
 
package/index.js ADDED
@@ -0,0 +1,31 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { FiltersEngine, Request, ENGINE_VERSION } from '@cliqz/adblocker';
3
+
4
+ import { generateEngine } from './src/prepare.js';
5
+
6
+ export { Request as AdblockerRequest };
7
+
8
+ export default async function loadTrackerDBEngine() {
9
+ const trackerEnginePath = await generateEngine();
10
+ const engine = FiltersEngine.deserialize(readFileSync(trackerEnginePath));
11
+ return {
12
+ ENGINE_VERSION,
13
+ engine,
14
+ matchUrl(
15
+ requestArgs,
16
+ getPatternMetadataParams = { getDomainMetadata: true },
17
+ ) {
18
+ const params = { ...requestArgs };
19
+ if (params.type === undefined) {
20
+ params.type = 'xhr';
21
+ }
22
+ return engine.getPatternMetadata(
23
+ Request.fromRawDetails(params),
24
+ getPatternMetadataParams,
25
+ );
26
+ },
27
+ matchDomain(domain) {
28
+ return engine.metadata.fromDomain(domain);
29
+ },
30
+ };
31
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ghostery/trackerdb",
3
- "version": "0.1.3",
3
+ "version": "1.0.1",
4
4
  "description": "Ghostery Tracker Database",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -10,6 +10,8 @@
10
10
  "export-engine": "node scripts/export-engine/index.js",
11
11
  "export-json": "node scripts/export-json/index.js"
12
12
  },
13
+ "main": "./index.js",
14
+ "exports": "./index.js",
13
15
  "bin": {
14
16
  "trackerdb": "./cli.js"
15
17
  },
@@ -17,7 +19,7 @@
17
19
  "type": "git",
18
20
  "url": "git+https://github.com/ghostery/trackerdb.git"
19
21
  },
20
- "author": "Ghostery",
22
+ "author": "Ghostery GmbH.",
21
23
  "license": "CC-BY-NC-SA-4.0",
22
24
  "bugs": {
23
25
  "url": "https://github.com/ghostery/trackerdb/issues"
@@ -27,7 +29,7 @@
27
29
  "node": ">=18.0"
28
30
  },
29
31
  "dependencies": {
30
- "@cliqz/adblocker": "^1.26.0",
32
+ "@cliqz/adblocker": "^1.26.5",
31
33
  "enolib": "^0.8.2",
32
34
  "iso-3166-1-alpha-2": "^1.0.0",
33
35
  "sqlite": "^4.1.2",
package/src/prepare.js ADDED
@@ -0,0 +1,28 @@
1
+ import path from 'node:path';
2
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { FiltersEngine, ENGINE_VERSION } from '@cliqz/adblocker';
4
+
5
+ import { BASE_PATH } from '../scripts/helpers.js';
6
+
7
+ export async function generateEngine() {
8
+ // Generate input JSON if missing
9
+ const trackerDBPath = path.join(BASE_PATH, 'dist', 'trackerdb.json');
10
+ if (!existsSync(trackerDBPath)) {
11
+ await import('../scripts/export-json/index.js');
12
+ }
13
+
14
+ // Generate binary engine if missing
15
+ const trackerEnginePath = path.join(
16
+ BASE_PATH,
17
+ 'dist',
18
+ `trackerdb_${ENGINE_VERSION}.engine`,
19
+ );
20
+
21
+ if (!existsSync(trackerEnginePath)) {
22
+ const rawTrackerDB = JSON.parse(readFileSync(trackerDBPath, 'utf-8'));
23
+ const engine = FiltersEngine.fromTrackerDB(rawTrackerDB);
24
+ writeFileSync(trackerEnginePath, engine.serialize());
25
+ }
26
+
27
+ return trackerEnginePath;
28
+ }