Skip to content

Commit 5798dd8

Browse files
committed
Lifecycles
1 parent 77603e7 commit 5798dd8

30 files changed

Lines changed: 2151 additions & 379 deletions

README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ npm run verify
1313
### ESM
1414

1515
```js
16-
import { loadClient } from '@fingerprint-framework/core';
16+
import { hashComponents, loadClient } from '@fingerprint-framework/core';
1717

1818
const client = await loadClient({
1919
namespace: 'my-product',
@@ -25,6 +25,12 @@ const result = await client.get({
2525
});
2626

2727
console.log(result.visitorId, result.confidence.score);
28+
29+
const recalculated = await hashComponents(result.components, {
30+
namespace: 'my-product'
31+
});
32+
33+
console.log(recalculated.visitorId);
2834
```
2935

3036
### Standalone Browser Script
@@ -56,12 +62,14 @@ After building, include the generated file directly:
5662
- Collector API for custom signals.
5763
- Policy layer with allow/deny collectors, categories, sensitivity limits, and consent gates.
5864
- Deterministic canonical normalization before hashing.
59-
- Browser quirk detection for known unstable Safari, Firefox, iOS, Chromium, and Samsung Internet paths.
60-
- Expanded built-in collectors for client hints, screen frame, media preferences, touch, architecture, plugins, vendor flavors, PDF viewer, Apple Pay, Private Click Measurement, DOM blockers, fonts, audio, WebGL extensions, canvas, and math behavior.
65+
- Browser quirk detection for known unstable Safari, Firefox, Firefox iOS, iOS desktop mode, Chromium, and Samsung Internet paths.
66+
- Expanded built-in collectors for client hints, navigator properties, screen frame, media preferences, touch, architecture, storage capabilities, plugins, vendor flavors, PDF viewer, Apple Pay, Private Click Measurement, DOM blockers, iframe-isolated fonts, font preferences, audio base latency, audio fingerprinting, WebGL extensions, canvas, and math behavior.
6167
- SHA-256 via Web Crypto or Node Crypto, with fallback support for constrained runtimes.
6268
- Confidence scoring and collector error metadata.
6369
- Optional visit state storage through `localStorage` or a custom adapter.
64-
- `loadClient()` / `prepare()` / `get()` flow for startup warmup and faster later identification.
70+
- `loadClient()` / `prepare()` / `get()` flow with collector preparation, consent checks, and prepared values reused during later identification.
71+
- Passive collectors run in parallel, while active collectors run in declared order to reduce cross-source interference.
72+
- `hashComponents()` for recalculating a visitor ID after product-side component filtering.
6573
- `componentsToDebugString()` and `client.debug()` for human-readable diagnostics.
6674
- Script-tag global API: `FingerprintFramework`.
6775

dist/browser/fingerprint-framework.js

Lines changed: 395 additions & 84 deletions
Large diffs are not rendered by default.

dist/browser/fingerprint-framework.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/collectors.d.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,31 @@ export interface CollectorContext {
1212
now: () => number;
1313
}
1414

15-
export interface CollectorDefinition<T = unknown> {
15+
export interface CollectorDefinition<T = unknown, Prepared = unknown> {
1616
id: string;
1717
version?: string;
1818
category?: string;
1919
sensitivity?: Sensitivity;
2020
mode?: CollectorMode;
2121
stability?: 'stable' | 'volatile' | string;
2222
weight?: number;
23-
collect(context: CollectorContext): T | Promise<T>;
23+
prepare?(context: CollectorContext): Prepared | Promise<Prepared>;
24+
collect(context: CollectorContext, prepared?: Prepared): T | Promise<T>;
2425
}
2526

26-
export interface Collector<T = unknown> extends Required<Omit<CollectorDefinition<T>, 'collect'>> {
27-
collect(context: CollectorContext): T | Promise<T>;
27+
export interface Collector<T = unknown, Prepared = unknown> {
28+
id: string;
29+
version: string;
30+
category: string;
31+
sensitivity: Sensitivity;
32+
mode: CollectorMode;
33+
stability: string;
34+
weight: number;
35+
prepare: null | ((context: CollectorContext) => Prepared | Promise<Prepared>);
36+
collect(context: CollectorContext, prepared?: Prepared): T | Promise<T>;
2837
}
2938

30-
export function createCollector<T = unknown>(definition: CollectorDefinition<T>): Collector<T>;
39+
export function createCollector<T = unknown, Prepared = unknown>(definition: CollectorDefinition<T, Prepared>): Collector<T, Prepared>;
3140
export function createDefaultCollectors(): Collector[];
3241
export function createBrowserCollectorPack(): Collector[];
42+
export function createNavigatorPropertiesCollector(): Collector;

0 commit comments

Comments
 (0)