@authored/tracker
v1.0.0
Published
Privacy-preserving keystroke biometrics tracker for human verification
Maintainers
Readme
@authored/tracker
Privacy-preserving keystroke biometrics tracker for human verification.
Features
- 🔒 Privacy-first: Captures ONLY timing data and key categories, never actual content
- ⚡ Real-time metrics: WPM, pause distribution, error patterns
- 🎯 Biometric data: Dwell times, flight times, digraph/trigraph analysis
- 📦 Zero dependencies: Lightweight (~10KB minified)
- 🌐 Browser-based: Works with any text input or editor
Installation
npm install @authored/trackerQuick Start
import { KeystrokeTracker } from '@authored/tracker';
const tracker = new KeystrokeTracker({
// Called when events buffer is full or on interval
onFlush: async (events) => {
await fetch('/api/events', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(events)
});
},
// Real-time metrics updates
onMetricsUpdate: (metrics) => {
console.log('WPM:', metrics.wpm);
console.log('Backspace ratio:', metrics.backspaceRatio);
},
// Called when user stops typing
onIdle: (metrics) => {
console.log('User idle, final metrics:', metrics);
}
});
// Start tracking on an element
const editor = document.getElementById('editor');
tracker.start(editor);
// When done
tracker.stop();API
KeystrokeTracker
Constructor Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| bufferSize | number | 50 | Events to buffer before flush |
| flushInterval | number | 5000 | Auto-flush interval in ms |
| idleTimeout | number | 3000 | Idle detection timeout in ms |
| onFlush | function | - | Callback when events are flushed |
| onMetricsUpdate | function | - | Callback for real-time metrics |
| onIdle | function | - | Callback when user becomes idle |
Methods
start(element: HTMLElement)- Start tracking on an elementstop()- Stop tracking and flush remaining eventsreset()- Reset all tracking dataflush()- Manually flush buffered eventsforceFlush()- Async flush with completion waitgetMetrics()- Get current metrics snapshotgetBiometricData()- Get complete biometric data for MLisActive()- Check if tracker is runninggetBufferSize()- Get current buffer size
Types
interface KeystrokeEvent {
type: 'keydown' | 'keyup' | 'paste';
timestamp: number;
keyCategory: KeyCategory;
flightTime?: number;
dwellTime?: number;
// ...
}
interface KeystrokeMetrics {
totalKeystrokes: number;
totalBackspaces: number;
backspaceRatio: number;
avgDwellTime: number;
avgFlightTime: number;
wpm: number;
pauseDistribution: PauseBuckets;
errorPatterns: ErrorPatterns;
}Privacy
This library is designed with privacy as a core principle:
- ✅ Captures timing (dwell time, flight time)
- ✅ Captures key categories (letter, number, space, backspace)
- ❌ Never captures actual characters typed
- ❌ Never captures text content
- ❌ Never stores or transmits readable text
License
MIT License - Copyright (c) 2024-2026 Authored Technologies S.r.l.
Links
- Website: https://authored.tech
- Documentation: https://docs.authored.tech
