web/src/lib/types.ts 1.7 K raw
1
export interface RawDigraph {
2
  id: number;
3
  keys: string;
4
  key1: string;
5
  key2: string;
6
  holdTime1: number;
7
  holdTime2: number;
8
  pressPress: number;
9
  releaseRelease: number;
10
  pressRelease: number;
11
  releasePress: number;
12
}
13
14
export interface MetricStats {
15
  mean: number;
16
  std: number;
17
  min: number;
18
  max: number;
19
  count: number;
20
}
21
22
export interface DigraphAggregation {
23
  normalizedKeys: string;
24
  count: number;
25
  holdTime1: MetricStats;
26
  holdTime2: MetricStats;
27
  pressPress: MetricStats;
28
  releaseRelease: MetricStats;
29
  pressRelease: MetricStats;
30
  releasePress: MetricStats;
31
}
32
33
export interface SessionMetadata {
34
  totalKeystrokes: number;
35
  backspaceCount: number;
36
  pauseCount: number;
37
  avgTypingSpeed: number;
38
  sessionDurationMs: number;
39
  pasteCount: number;
40
  pastedCharCount: number;
41
}
42
43
export interface Profile {
44
  id: string;
45
  name: string;
46
  createdAt: string;
47
  digraphCount: number;
48
  aggregations: DigraphAggregation[];
49
  metadata: SessionMetadata;
50
}
51
52
export interface ComparisonResult {
53
  overallDistance: number;
54
  similarityPercent: number;
55
  confidence: 'high' | 'medium' | 'low' | 'insufficient';
56
  sharedCount: number;
57
  perDigraph: PerDigraphComparison[];
58
}
59
60
export interface PerDigraphComparison {
61
  normalizedKeys: string;
62
  distance: number;
63
  matchPercent: number;
64
}
65
66
export interface HumannessResult {
67
  score: number;
68
  verdict: 'likely human' | 'uncertain' | 'likely bot';
69
  subScores: {
70
    timingVariance: number;
71
    correctionRate: number;
72
    pauseDistribution: number;
73
    distributionShape: number;
74
    flightTimeNegativity: number;
75
    burstPatterns: number;
76
  };
77
}
78
79
export type TabId = 'capture' | 'profile' | 'compare' | 'humanness';