@tracetail/angular
Version:
Angular SDK for TraceTail browser fingerprinting - over 99.5% accuracy
51 lines • 6.76 kB
JavaScript
import { Injectable } from '@angular/core';
import { map, take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../tracetail.service";
import * as i2 from "@angular/router";
export class FraudProtectionGuard {
traceTail;
router;
constructor(traceTail, router) {
this.traceTail = traceTail;
this.router = router;
}
canActivate(route, state) {
// Get risk threshold from route data or use default
const maxRiskScore = route.data['maxRiskScore'] ?? 0.7;
const verificationUrl = route.data['verificationUrl'] ?? '/verify';
return this.traceTail.fingerprint$.pipe(take(1), map(fingerprint => {
if (!fingerprint) {
// No fingerprint yet, allow but monitor
console.warn('No fingerprint available for fraud check');
return true;
}
// Check if user is fraudulent or high risk
if (fingerprint.fraudulent || fingerprint.riskScore > maxRiskScore) {
console.warn('High risk user blocked:', {
visitorId: fingerprint.visitorId,
riskScore: fingerprint.riskScore,
fraudulent: fingerprint.fraudulent
});
// Redirect to verification page
return this.router.createUrlTree([verificationUrl], {
queryParams: {
reason: fingerprint.fraudulent ? 'fraud' : 'risk',
returnUrl: state.url
}
});
}
// User is safe, allow access
return true;
}));
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FraudProtectionGuard, deps: [{ token: i1.TraceTailService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FraudProtectionGuard, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FraudProtectionGuard, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.TraceTailService }, { type: i2.Router }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhdWQtcHJvdGVjdGlvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZ3VhcmRzL2ZyYXVkLXByb3RlY3Rpb24uZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBTTNDLE1BQU0sT0FBTyxvQkFBb0I7SUFFckI7SUFDQTtJQUZWLFlBQ1UsU0FBMkIsRUFDM0IsTUFBYztRQURkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVKLFdBQVcsQ0FDVCxLQUE2QixFQUM3QixLQUEwQjtRQUUxQixvREFBb0Q7UUFDcEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDdkQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUVuRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQix3Q0FBd0M7Z0JBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztnQkFDekQsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELDJDQUEyQztZQUMzQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUU7Z0JBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7b0JBQ3RDLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUztvQkFDaEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO29CQUNoQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7aUJBQ25DLENBQUMsQ0FBQztnQkFFSCxnQ0FBZ0M7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDbEQsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU07d0JBQ2pELFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRztxQkFDckI7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7WUFFRCw2QkFBNkI7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt3R0E1Q1Usb0JBQW9COzRHQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENhbkFjdGl2YXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBSb3V0ZXIsXG4gIFVybFRyZWVcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYWNlVGFpbFNlcnZpY2UgfSBmcm9tICcuLi90cmFjZXRhaWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZyYXVkUHJvdGVjdGlvbkd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYWNlVGFpbDogVHJhY2VUYWlsU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBjYW5BY3RpdmF0ZShcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XG4gICAgLy8gR2V0IHJpc2sgdGhyZXNob2xkIGZyb20gcm91dGUgZGF0YSBvciB1c2UgZGVmYXVsdFxuICAgIGNvbnN0IG1heFJpc2tTY29yZSA9IHJvdXRlLmRhdGFbJ21heFJpc2tTY29yZSddID8/IDAuNztcbiAgICBjb25zdCB2ZXJpZmljYXRpb25VcmwgPSByb3V0ZS5kYXRhWyd2ZXJpZmljYXRpb25VcmwnXSA/PyAnL3ZlcmlmeSc7XG5cbiAgICByZXR1cm4gdGhpcy50cmFjZVRhaWwuZmluZ2VycHJpbnQkLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKGZpbmdlcnByaW50ID0+IHtcbiAgICAgICAgaWYgKCFmaW5nZXJwcmludCkge1xuICAgICAgICAgIC8vIE5vIGZpbmdlcnByaW50IHlldCwgYWxsb3cgYnV0IG1vbml0b3JcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIGZpbmdlcnByaW50IGF2YWlsYWJsZSBmb3IgZnJhdWQgY2hlY2snKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgZnJhdWR1bGVudCBvciBoaWdoIHJpc2tcbiAgICAgICAgaWYgKGZpbmdlcnByaW50LmZyYXVkdWxlbnQgfHwgZmluZ2VycHJpbnQucmlza1Njb3JlID4gbWF4Umlza1Njb3JlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdIaWdoIHJpc2sgdXNlciBibG9ja2VkOicsIHtcbiAgICAgICAgICAgIHZpc2l0b3JJZDogZmluZ2VycHJpbnQudmlzaXRvcklkLFxuICAgICAgICAgICAgcmlza1Njb3JlOiBmaW5nZXJwcmludC5yaXNrU2NvcmUsXG4gICAgICAgICAgICBmcmF1ZHVsZW50OiBmaW5nZXJwcmludC5mcmF1ZHVsZW50XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB2ZXJpZmljYXRpb24gcGFnZVxuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFt2ZXJpZmljYXRpb25VcmxdLCB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICByZWFzb246IGZpbmdlcnByaW50LmZyYXVkdWxlbnQgPyAnZnJhdWQnIDogJ3Jpc2snLFxuICAgICAgICAgICAgICByZXR1cm5Vcmw6IHN0YXRlLnVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlciBpcyBzYWZlLCBhbGxvdyBhY2Nlc3NcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn0iXX0=