Skip to main content

Angular usage

Angular integration for ThumbmarkJS - browser fingerprinting library. Requires Angular 16+ (standalone APIs).

Installation

npm install @thumbmarkjs/thumbmarkjs @thumbmarkjs/angular

Setup

Standalone (Angular 16+)

// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideThumbmark } from '@thumbmarkjs/angular';

export const appConfig: ApplicationConfig = {
providers: [
provideThumbmark({
apiKey: 'your-api-key', // optional
}),
],
};

You can also pass configuration options:

provideThumbmark({
apiKey: 'your-api-key',
options: {
timeout: 3000,
exclude: ['webgl'],
},
}),

Usage

import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ThumbmarkService } from '@thumbmarkjs/angular';

@Component({
selector: 'app-example',
standalone: true,
imports: [CommonModule],
template: `
<div *ngIf="thumbmarkService.isLoading$ | async">Loading...</div>
<div *ngIf="!(thumbmarkService.isLoading$ | async)">
<p>Thumbmark: {{ thumbmarkService.thumbmark$ | async }}</p>
<p>Visitor ID: {{ thumbmarkService.visitorId$ | async }}</p>
<button (click)="thumbmarkService.reload()">Reload</button>
</div>
`,
})
export class ExampleComponent {
constructor(public thumbmarkService: ThumbmarkService) {}
}

The service automatically generates a thumbmark on construction. Call reload() to re-generate it on demand.

Subscribing manually

import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';
import { ThumbmarkService } from '@thumbmarkjs/angular';

@Component({
selector: 'app-example',
template: `
<div *ngIf="isLoading">Loading...</div>
<div *ngIf="!isLoading">
<p>Thumbmark: {{ thumbmark }}</p>
<p>Visitor ID: {{ visitorId }}</p>
<button (click)="reload()">Reload</button>
</div>
`,
})
export class ExampleComponent implements OnInit, OnDestroy {
thumbmark: string | null = null;
visitorId: string | null = null;
isLoading = false;

private subscriptions = new Subscription();

constructor(private thumbmarkService: ThumbmarkService) {}

ngOnInit(): void {
this.subscriptions.add(
this.thumbmarkService.thumbmark$.subscribe(v => (this.thumbmark = v))
);
this.subscriptions.add(
this.thumbmarkService.visitorId$.subscribe(v => (this.visitorId = v))
);
this.subscriptions.add(
this.thumbmarkService.isLoading$.subscribe(v => (this.isLoading = v))
);
}

reload(): void {
this.thumbmarkService.reload();
}

ngOnDestroy(): void {
this.subscriptions.unsubscribe();
}
}

API

provideThumbmark(config?)

Returns Angular providers for standalone applications.

OptionTypeDescription
apiKeystringOptional API key for the hosted ThumbmarkJS API
optionsThumbmarkOptionsOptional configuration options passed to the underlying Thumbmark instance

ThumbmarkService

Injectable service exposing the following observables:

ObservableTypeDescription
thumbmark$Observable<string | null>The generated thumbmark hash
visitorId$Observable<string | null>The visitor ID (when API is used)
components$Observable<Record<string, any> | null>Raw fingerprint components
info$Observable<Record<string, any> | null>Additional info returned by the API
isLoading$Observable<boolean>Loading state
error$Observable<Error | null>Error state

Methods:

MethodDescription
get()Generate a thumbmark (called automatically on service construction)
reload()Re-generate the thumbmark

The service is SSR-safe — it only runs on the client.

See also the configuration options.