@keverdjs/fraud-sdk 1.0.0 → 2.0.0

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.
Files changed (32) hide show
  1. package/README.md +9 -2
  2. package/dist/collectors/audio-fingerprint.d.ts +29 -0
  3. package/dist/collectors/battery-api.d.ts +28 -0
  4. package/dist/collectors/behavioral.d.ts +29 -61
  5. package/dist/collectors/browser-capabilities.d.ts +33 -0
  6. package/dist/collectors/canvas-fingerprint.d.ts +25 -0
  7. package/dist/collectors/cpu-memory.d.ts +33 -0
  8. package/dist/collectors/fingerprint-manager.d.ts +34 -0
  9. package/dist/collectors/fingerprintjs.d.ts +17 -0
  10. package/dist/collectors/font-detection.d.ts +23 -0
  11. package/dist/collectors/form-interactions.d.ts +63 -0
  12. package/dist/collectors/hardware-signals.d.ts +31 -0
  13. package/dist/collectors/keystroke-monitor.d.ts +49 -0
  14. package/dist/collectors/kinematic-engine.d.ts +66 -0
  15. package/dist/collectors/media-devices.d.ts +24 -0
  16. package/dist/collectors/page-interactions.d.ts +54 -0
  17. package/dist/collectors/permissions-api.d.ts +28 -0
  18. package/dist/collectors/plugin-mime.d.ts +26 -0
  19. package/dist/collectors/privacy-signals.d.ts +34 -0
  20. package/dist/collectors/screen-display.d.ts +35 -0
  21. package/dist/collectors/storage-database.d.ts +50 -0
  22. package/dist/collectors/timezone-locale.d.ts +38 -0
  23. package/dist/collectors/touch-pointer.d.ts +34 -0
  24. package/dist/collectors/visitor-id-generator.d.ts +28 -0
  25. package/dist/collectors/webgl-fingerprint.d.ts +27 -0
  26. package/dist/collectors/webrtc-ip.d.ts +26 -0
  27. package/dist/core/sdk.d.ts +81 -2
  28. package/dist/fintechrisk.js +1 -1
  29. package/dist/index.d.ts +4 -1
  30. package/dist/types/fingerprint.d.ts +145 -0
  31. package/dist/types.d.ts +124 -1
  32. package/package.json +2 -2
package/README.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  Vanilla JavaScript SDK for Keverd fraud detection and device fingerprinting. Works in any JavaScript environment (browser, Node.js, etc.).
4
4
 
5
+ ## ✨ Features
6
+
7
+ - **Custom Fingerprinting System**: Built from scratch with 15+ fingerprint collectors (no external dependencies)
8
+ - **Stable Visitor ID**: Deterministic device identification across browsers
9
+ - **Behavioral Biometrics**: Typing patterns, mouse movements, swipe gestures
10
+ - **Privacy Signals**: Incognito mode, VPN, automation detection
11
+ - **Use-Case Specific**: Login, checkout, registration, password reset, account change verification
12
+ - **Zero Dependencies**: No external libraries required
13
+
5
14
  ## Installation
6
15
 
7
16
  ```bash
@@ -32,7 +41,6 @@ import { Keverd } from '@keverdjs/fraud-sdk';
32
41
  // Initialize with configuration
33
42
  Keverd.init({
34
43
  apiKey: 'your-api-key',
35
- endpoint: 'https://app.keverd.com', // Optional
36
44
  debug: true, // Optional: enable debug logging
37
45
  });
38
46
 
@@ -57,7 +65,6 @@ Keverd.init('your-api-key');
57
65
  // With options
58
66
  Keverd.init({
59
67
  apiKey: 'your-api-key',
60
- endpoint: 'https://app.keverd.com',
61
68
  userId: 'optional-user-id',
62
69
  debug: false
63
70
  });
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Audio Fingerprint Collector
3
+ * Generates audio context fingerprint using oscillator analysis and frequency response
4
+ * This is a powerful technique for device identification
5
+ */
6
+ export interface AudioFingerprint {
7
+ value: number;
8
+ duration: number;
9
+ }
10
+ export declare class AudioFingerprintCollector {
11
+ private cachedFingerprint;
12
+ /**
13
+ * Generate audio fingerprint
14
+ * Returns null if audio context is not available
15
+ */
16
+ collect(): Promise<AudioFingerprint | null>;
17
+ /**
18
+ * Calculate fingerprint from audio data
19
+ */
20
+ private calculateFingerprint;
21
+ /**
22
+ * Get fallback fingerprint when audio processing fails
23
+ */
24
+ private getFallbackFingerprint;
25
+ /**
26
+ * Clear cached fingerprint
27
+ */
28
+ clearCache(): void;
29
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Battery API Collector
3
+ * Collects battery level, charging status, charging time (if available, with fallbacks)
4
+ * Note: Battery API is deprecated but still available in some browsers
5
+ */
6
+ export interface BatteryFingerprint {
7
+ level: number | null;
8
+ charging: boolean | null;
9
+ chargingTime: number | null;
10
+ dischargingTime: number | null;
11
+ duration: number;
12
+ }
13
+ export declare class BatteryAPICollector {
14
+ private cachedFingerprint;
15
+ /**
16
+ * Collect battery information
17
+ * Returns null if Battery API is not available
18
+ */
19
+ collect(): Promise<BatteryFingerprint | null>;
20
+ /**
21
+ * Get battery manager from various API locations
22
+ */
23
+ private getBatteryManager;
24
+ /**
25
+ * Clear cached fingerprint
26
+ */
27
+ clearCache(): void;
28
+ }
@@ -1,71 +1,39 @@
1
- /**
2
- * Behavioral Data Collector
3
- * Collects typing patterns, mouse movements, swipe gestures, and calculates session entropy
4
- * Matches React SDK implementation for consistency
5
- */
6
1
  import { BehavioralData } from '../types';
7
2
  export declare class BehavioralCollector {
8
- private keystrokes;
9
- private mouseMovements;
10
- private lastKeyDownTime;
11
- private lastKeyUpTime;
12
3
  private isActive;
13
- private sessionStartTime;
14
- private typingDwellTimes;
15
- private typingFlightTimes;
16
- private swipeVelocities;
17
4
  private sessionEvents;
18
- private touchStartPositions;
19
- private keyDownHandler;
20
- private keyUpHandler;
21
- private mouseMoveHandler;
22
- private touchStartHandler;
23
- private touchEndHandler;
24
- /**
25
- * Start collecting behavioral data
26
- * Uses passive listeners for efficiency (non-blocking)
27
- */
5
+ private kinematicEngine;
6
+ private keystrokeMonitor;
7
+ constructor();
28
8
  start(): void;
29
- /**
30
- * Stop collecting behavioral data
31
- */
32
9
  stop(): void;
33
- /**
34
- * Get collected behavioral data
35
- * Returns data in format expected by backend
36
- */
37
- getData(): BehavioralData;
38
- /**
39
- * Reset collected data
40
- */
41
10
  reset(): void;
42
- /**
43
- * Handle keydown event
44
- */
45
- private handleKeyDown;
46
- /**
47
- * Handle keyup event
48
- */
49
- private handleKeyUp;
50
- /**
51
- * Handle mouse move event
52
- */
53
- private handleMouseMove;
54
- /**
55
- * Handle touch start (for swipe detection)
56
- */
57
- private handleTouchStart;
58
- /**
59
- * Handle touch end (calculate swipe velocity)
60
- */
61
- private handleTouchEnd;
62
- /**
63
- * Calculate session entropy based on event diversity
64
- * Uses Shannon entropy formula as expected by backend
65
- */
11
+ getData(): BehavioralData;
12
+ private buildSequence;
13
+ private trackEvent;
66
14
  private calculateSessionEntropy;
67
15
  /**
68
- * Check if key should be ignored
69
- */
70
- private shouldIgnoreKey;
16
+ * Get mouse signals from kinematic engine
17
+ */
18
+ getMouseSignals(): {
19
+ totalDistance: number;
20
+ averageVelocity: number;
21
+ clickCount: number;
22
+ rightClickCount: number;
23
+ doubleClickCount: number;
24
+ scrollDistance: number;
25
+ scrollDirection: "up" | "down" | "both";
26
+ touchEvents: number;
27
+ };
28
+ /**
29
+ * Get keyboard signals from keystroke monitor
30
+ */
31
+ getKeyboardSignals(): {
32
+ keydownCount: number;
33
+ keyupCount: number;
34
+ specialKeyCount: number;
35
+ typingSpeed: number;
36
+ pauseCount: number;
37
+ backspaceRatio: number;
38
+ };
71
39
  }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Browser Capability Collector
3
+ * Collects browser API availability and capabilities
4
+ */
5
+ export interface BrowserCapabilities {
6
+ hasWebGL: boolean;
7
+ hasCanvas: boolean;
8
+ hasWebRTC: boolean;
9
+ hasServiceWorker: boolean;
10
+ hasIndexedDB: boolean;
11
+ hasLocalStorage: boolean;
12
+ hasSessionStorage: boolean;
13
+ cookieEnabled: boolean;
14
+ doNotTrack: boolean;
15
+ }
16
+ export declare class BrowserCapabilityCollector {
17
+ private cachedCapabilities;
18
+ /**
19
+ * Collect all browser capabilities
20
+ */
21
+ collect(): BrowserCapabilities;
22
+ private checkWebGL;
23
+ private checkCanvas;
24
+ private checkWebRTC;
25
+ private checkServiceWorker;
26
+ private checkIndexedDB;
27
+ private checkLocalStorage;
28
+ private checkSessionStorage;
29
+ /**
30
+ * Clear cached capabilities (useful for testing)
31
+ */
32
+ clearCache(): void;
33
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Canvas Fingerprint Collector
3
+ * Generates a stable canvas fingerprint using text rendering, shapes, and gradients
4
+ * This is a key component for device identification
5
+ */
6
+ export interface CanvasFingerprint {
7
+ value: string;
8
+ duration: number;
9
+ }
10
+ export declare class CanvasFingerprintCollector {
11
+ private cachedFingerprint;
12
+ /**
13
+ * Generate canvas fingerprint
14
+ * Returns null if canvas is not available
15
+ */
16
+ collect(): CanvasFingerprint | null;
17
+ /**
18
+ * Hash a string to create a stable fingerprint
19
+ */
20
+ private hashString;
21
+ /**
22
+ * Clear cached fingerprint
23
+ */
24
+ clearCache(): void;
25
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CPU & Memory Collector
3
+ * Collects hardwareConcurrency, deviceMemory, performance.memory (if available)
4
+ */
5
+ export interface CPUMemoryFingerprint {
6
+ hardwareConcurrency: number;
7
+ deviceMemory: number | null;
8
+ performanceMemory: {
9
+ jsHeapSizeLimit: number | null;
10
+ totalJSHeapSize: number | null;
11
+ usedJSHeapSize: number | null;
12
+ };
13
+ duration: number;
14
+ }
15
+ export declare class CPUMemoryCollector {
16
+ private cachedFingerprint;
17
+ /**
18
+ * Collect CPU and memory information
19
+ */
20
+ collect(): CPUMemoryFingerprint;
21
+ /**
22
+ * Get device memory (if available)
23
+ */
24
+ private getDeviceMemory;
25
+ /**
26
+ * Get performance memory information (Chrome-specific)
27
+ */
28
+ private getPerformanceMemory;
29
+ /**
30
+ * Clear cached fingerprint
31
+ */
32
+ clearCache(): void;
33
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Fingerprint Component Manager
3
+ * Orchestrates all fingerprint collectors, handles caching, error recovery, and component weighting
4
+ * This is the main entry point for custom fingerprinting (replaces FingerprintJS)
5
+ */
6
+ import { FingerprintData } from '../types/fingerprint';
7
+ export declare class FingerprintManager {
8
+ private collectors;
9
+ private visitorIDGenerator;
10
+ private cachedData;
11
+ private collectionStartTime;
12
+ constructor();
13
+ /**
14
+ * Collect all fingerprint data
15
+ * This is the main method that replaces FingerprintJS.get()
16
+ */
17
+ collect(): Promise<FingerprintData>;
18
+ /**
19
+ * Get visitor ID only (faster, uses cached data if available)
20
+ */
21
+ getVisitorId(): Promise<string>;
22
+ /**
23
+ * Clear all cached data
24
+ */
25
+ clearCache(): void;
26
+ /**
27
+ * Get collection statistics
28
+ */
29
+ getStats(): {
30
+ componentsCollected: number;
31
+ totalComponents: number;
32
+ collectionTime: number;
33
+ };
34
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @deprecated This collector is deprecated. Use FingerprintManager instead.
3
+ * This file is kept for backward compatibility but is no longer used.
4
+ *
5
+ * The SDK now uses custom fingerprinting modules (FingerprintManager) that
6
+ * collect all necessary data without external dependencies.
7
+ */
8
+ export interface FingerprintJSData {
9
+ visitorId: string;
10
+ confidence?: number;
11
+ components?: Record<string, any>;
12
+ }
13
+ export declare class FingerprintJSCollector {
14
+ collect(): Promise<FingerprintJSData | null>;
15
+ clearCache(): void;
16
+ isAvailable(): Promise<boolean>;
17
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Font Detection Collector
3
+ * Detects installed fonts using font measurement techniques and fallback detection
4
+ * This helps identify unique system configurations
5
+ */
6
+ export interface FontFingerprint {
7
+ availableFonts: string[];
8
+ missingFonts: string[];
9
+ duration: number;
10
+ }
11
+ export declare class FontDetectionCollector {
12
+ private cachedFingerprint;
13
+ private readonly testFonts;
14
+ /**
15
+ * Detect available fonts
16
+ * Returns null if detection fails
17
+ */
18
+ collect(): FontFingerprint | null;
19
+ /**
20
+ * Clear cached fingerprint
21
+ */
22
+ clearCache(): void;
23
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Form Interaction Collector
3
+ * Tracks form field interactions: focus/blur, copy/paste, autofill, etc.
4
+ */
5
+ export interface FormInteractions {
6
+ focusCount: number;
7
+ blurCount: number;
8
+ copyCount: number;
9
+ pasteCount: number;
10
+ cutCount: number;
11
+ autofillDetected: boolean;
12
+ autocompleteDetected: boolean;
13
+ fieldFocusOrder: string[];
14
+ timePerField: Record<string, number>;
15
+ backspaceCount: number;
16
+ deleteCount: number;
17
+ }
18
+ export declare class FormInteractionCollector {
19
+ private focusCount;
20
+ private blurCount;
21
+ private copyCount;
22
+ private pasteCount;
23
+ private cutCount;
24
+ private fieldFocusOrder;
25
+ private fieldFocusTimes;
26
+ private backspaceCount;
27
+ private deleteCount;
28
+ private autofillDetected;
29
+ private autocompleteDetected;
30
+ private isActive;
31
+ private focusHandler;
32
+ private blurHandler;
33
+ private copyHandler;
34
+ private pasteHandler;
35
+ private cutHandler;
36
+ private keydownHandler;
37
+ private inputHandler;
38
+ /**
39
+ * Start collecting form interactions
40
+ */
41
+ start(): void;
42
+ /**
43
+ * Stop collecting form interactions
44
+ */
45
+ stop(): void;
46
+ /**
47
+ * Get collected form interaction data
48
+ */
49
+ getData(): FormInteractions;
50
+ /**
51
+ * Reset all collected data
52
+ */
53
+ reset(): void;
54
+ private handleFocus;
55
+ private handleBlur;
56
+ private handleCopy;
57
+ private handlePaste;
58
+ private handleCut;
59
+ private handleKeyDown;
60
+ private handleInput;
61
+ private isFormField;
62
+ private getFieldId;
63
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hardware Signal Collector
3
+ * Collects hardware and network information
4
+ */
5
+ export interface HardwareSignals {
6
+ hardwareConcurrency: number;
7
+ deviceMemory: number | null;
8
+ maxTouchPoints: number;
9
+ connectionType: string | null;
10
+ effectiveType: string | null;
11
+ downlink: number | null;
12
+ rtt: number | null;
13
+ saveData: boolean | null;
14
+ }
15
+ export declare class HardwareSignalCollector {
16
+ private cachedSignals;
17
+ /**
18
+ * Collect all hardware signals
19
+ */
20
+ collect(): HardwareSignals;
21
+ private getDeviceMemory;
22
+ private getConnectionType;
23
+ private getEffectiveType;
24
+ private getDownlink;
25
+ private getRTT;
26
+ private getSaveData;
27
+ /**
28
+ * Clear cached signals (useful for testing)
29
+ */
30
+ clearCache(): void;
31
+ }
@@ -0,0 +1,49 @@
1
+ import { KeystrokeFeatureVector } from '../types';
2
+ type KeystrokeMonitorEvent = 'keydown' | 'keyup';
3
+ interface KeystrokeMonitorOptions {
4
+ onEvent?: (event: KeystrokeMonitorEvent) => void;
5
+ }
6
+ export declare class KeystrokeMonitor {
7
+ private keyDownTimes;
8
+ private lastKeyUpTime;
9
+ private lastKeyDownTime;
10
+ private featureVectors;
11
+ private dwellTimes;
12
+ private flightTimes;
13
+ private digraphLatencies;
14
+ private isActive;
15
+ private onEvent?;
16
+ private keydownCount;
17
+ private keyupCount;
18
+ private specialKeyCount;
19
+ private lastKeystrokeTime;
20
+ private pauseCount;
21
+ private PAUSE_THRESHOLD;
22
+ private keystrokeTimestamps;
23
+ private keyDownHandler;
24
+ private keyUpHandler;
25
+ constructor(options?: KeystrokeMonitorOptions);
26
+ start(): void;
27
+ stop(): void;
28
+ getVectors(): KeystrokeFeatureVector[];
29
+ getDwellTimes(limit?: number): number[];
30
+ getFlightTimes(limit?: number): number[];
31
+ /**
32
+ * Get enhanced keyboard signals
33
+ */
34
+ getKeyboardSignals(): {
35
+ keydownCount: number;
36
+ keyupCount: number;
37
+ specialKeyCount: number;
38
+ typingSpeed: number;
39
+ pauseCount: number;
40
+ backspaceRatio: number;
41
+ };
42
+ private getBackspaceCount;
43
+ reset(): void;
44
+ private handleKeyDown;
45
+ private handleKeyUp;
46
+ private appendVector;
47
+ private isTargetField;
48
+ }
49
+ export {};
@@ -0,0 +1,66 @@
1
+ import { KinematicFeatureVector } from '../types';
2
+ export type KinematicEngineEvent = 'mousemove' | 'mousedown' | 'mouseup';
3
+ interface KinematicEngineOptions {
4
+ onEvent?: (event: KinematicEngineEvent) => void;
5
+ maskValue?: number;
6
+ }
7
+ export declare class KinematicEngine {
8
+ private featureVectors;
9
+ private pointerQueue;
10
+ private lastVelocity;
11
+ private lastAcceleration;
12
+ private lastAngle;
13
+ private lastPoint;
14
+ private secondLastPoint;
15
+ private rafId;
16
+ private maxSwipeVelocity;
17
+ private onEvent?;
18
+ private maskValue;
19
+ private isActive;
20
+ private clickCount;
21
+ private rightClickCount;
22
+ private doubleClickCount;
23
+ private totalMouseDistance;
24
+ private lastClickTime;
25
+ private scrollDistance;
26
+ private lastScrollTop;
27
+ private touchEventCount;
28
+ private mouseMoveHandler;
29
+ private mouseDownHandler;
30
+ private mouseUpHandler;
31
+ private contextMenuHandler;
32
+ private scrollHandler;
33
+ private touchStartHandler;
34
+ private touchMoveHandler;
35
+ private touchEndHandler;
36
+ constructor(options?: KinematicEngineOptions);
37
+ start(): void;
38
+ stop(): void;
39
+ getVectors(): KinematicFeatureVector[];
40
+ getSuspiciousSwipeVelocity(): number;
41
+ /**
42
+ * Get enhanced mouse/touch signals
43
+ */
44
+ getMouseSignals(): {
45
+ totalDistance: number;
46
+ averageVelocity: number;
47
+ clickCount: number;
48
+ rightClickCount: number;
49
+ doubleClickCount: number;
50
+ scrollDistance: number;
51
+ scrollDirection: 'up' | 'down' | 'both';
52
+ touchEvents: number;
53
+ };
54
+ reset(): void;
55
+ private enqueuePoint;
56
+ private scheduleProcess;
57
+ private processQueue;
58
+ private computeFeatures;
59
+ private calculateCurvature;
60
+ private normalizeAngle;
61
+ private handleClick;
62
+ private handleRightClick;
63
+ private handleScroll;
64
+ private handleTouch;
65
+ }
66
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Media Devices Collector
3
+ * Lists audio/video devices and enumerates media devices with labels
4
+ * Requires user permission for device labels
5
+ */
6
+ export interface MediaDeviceFingerprint {
7
+ audioInputs: MediaDeviceInfo[];
8
+ audioOutputs: MediaDeviceInfo[];
9
+ videoInputs: MediaDeviceInfo[];
10
+ hasPermission: boolean;
11
+ duration: number;
12
+ }
13
+ export declare class MediaDevicesCollector {
14
+ private cachedFingerprint;
15
+ /**
16
+ * Collect media device information
17
+ * Returns null if MediaDevices API is not available
18
+ */
19
+ collect(): Promise<MediaDeviceFingerprint | null>;
20
+ /**
21
+ * Clear cached fingerprint
22
+ */
23
+ clearCache(): void;
24
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Page Interaction Collector
3
+ * Tracks page-level interactions: load time, scroll depth, clicks, etc.
4
+ */
5
+ export interface PageInteractions {
6
+ pageLoadTime: number;
7
+ timeToFirstInteraction: number;
8
+ timeOnPage: number;
9
+ scrollDepth: number;
10
+ clickCount: number;
11
+ linkClickCount: number;
12
+ imageViewCount: number;
13
+ videoPlayCount: number;
14
+ }
15
+ export declare class PageInteractionCollector {
16
+ private pageLoadTime;
17
+ private timeToFirstInteraction;
18
+ private startTime;
19
+ private firstInteractionTime;
20
+ private maxScrollDepth;
21
+ private clickCount;
22
+ private linkClickCount;
23
+ private imageViewCount;
24
+ private videoPlayCount;
25
+ private isActive;
26
+ private clickHandler;
27
+ private scrollHandler;
28
+ private loadHandler;
29
+ private imageLoadHandler;
30
+ private videoPlayHandler;
31
+ constructor();
32
+ /**
33
+ * Start collecting page interactions
34
+ */
35
+ start(): void;
36
+ /**
37
+ * Stop collecting page interactions
38
+ */
39
+ stop(): void;
40
+ /**
41
+ * Get collected page interaction data
42
+ */
43
+ getData(): PageInteractions;
44
+ /**
45
+ * Reset all collected data
46
+ */
47
+ reset(): void;
48
+ private handleLoad;
49
+ private handleClick;
50
+ private handleScroll;
51
+ private handleImageLoad;
52
+ private handleVideoPlay;
53
+ private calculateScrollDepth;
54
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Permissions API Collector
3
+ * Checks permissions for camera, microphone, notifications, geolocation
4
+ */
5
+ export interface PermissionsFingerprint {
6
+ camera: string | null;
7
+ microphone: string | null;
8
+ notifications: string | null;
9
+ geolocation: string | null;
10
+ persistentStorage: string | null;
11
+ duration: number;
12
+ }
13
+ export declare class PermissionsAPICollector {
14
+ private cachedFingerprint;
15
+ /**
16
+ * Collect permission states
17
+ * Returns null if Permissions API is not available
18
+ */
19
+ collect(): Promise<PermissionsFingerprint | null>;
20
+ /**
21
+ * Query a specific permission
22
+ */
23
+ private queryPermission;
24
+ /**
25
+ * Clear cached fingerprint
26
+ */
27
+ clearCache(): void;
28
+ }