keyspy 1.0.7 → 1.1.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 (103) hide show
  1. package/README.md +110 -3
  2. package/bin/keyspy +24 -0
  3. package/dist/cli.d.ts +9 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +359 -0
  6. package/{build → dist}/index.d.ts +10 -10
  7. package/{build → dist}/index.d.ts.map +1 -1
  8. package/dist/index.js +156 -0
  9. package/{build/ts/X11KeyServer.d.ts → dist/platforms/linux/index.d.ts} +5 -5
  10. package/dist/platforms/linux/index.d.ts.map +1 -0
  11. package/dist/platforms/linux/index.js +181 -0
  12. package/dist/platforms/linux/keymap.d.ts +3 -0
  13. package/dist/platforms/linux/keymap.d.ts.map +1 -0
  14. package/dist/platforms/linux/keymap.js +144 -0
  15. package/{build/ts/MacKeyServer.d.ts → dist/platforms/mac/index.d.ts} +5 -5
  16. package/dist/platforms/mac/index.d.ts.map +1 -0
  17. package/dist/platforms/mac/index.js +181 -0
  18. package/dist/platforms/mac/keymap.d.ts +3 -0
  19. package/dist/platforms/mac/keymap.d.ts.map +1 -0
  20. package/dist/platforms/mac/keymap.js +155 -0
  21. package/{build/ts/WinKeyServer.d.ts → dist/platforms/windows/index.d.ts} +5 -5
  22. package/dist/platforms/windows/index.d.ts.map +1 -0
  23. package/dist/platforms/windows/index.js +110 -0
  24. package/{build/ts/_data/WinGlobalKeyLookup.d.ts → dist/platforms/windows/keymap.d.ts} +2 -2
  25. package/dist/platforms/windows/keymap.d.ts.map +1 -0
  26. package/{build/ts/_data/WinGlobalKeyLookup.js → dist/platforms/windows/keymap.js} +1 -1
  27. package/{build/ts/_types → dist/types}/IConfig.d.ts +2 -0
  28. package/dist/types/IConfig.d.ts.map +1 -0
  29. package/{build/ts/_types → dist/types}/IConfig.js +1 -1
  30. package/{build/ts/_types → dist/types}/IGlobalKey.d.ts +1 -1
  31. package/dist/types/IGlobalKey.d.ts.map +1 -0
  32. package/{build/ts/_types → dist/types}/IGlobalKey.js +1 -1
  33. package/dist/types/IGlobalKeyDownMap.d.ts.map +1 -0
  34. package/{build/ts/_types → dist/types}/IGlobalKeyDownMap.js +1 -1
  35. package/dist/types/IGlobalKeyEvent.d.ts.map +1 -0
  36. package/{build/ts/_types → dist/types}/IGlobalKeyEvent.js +1 -1
  37. package/dist/types/IGlobalKeyListener.d.ts.map +1 -0
  38. package/{build/ts/_types → dist/types}/IGlobalKeyListener.js +1 -1
  39. package/dist/types/IGlobalKeyListenerRaw.d.ts.map +1 -0
  40. package/{build/ts/_types → dist/types}/IGlobalKeyListenerRaw.js +1 -1
  41. package/dist/types/IGlobalKeyLookup.d.ts.map +1 -0
  42. package/{build/ts/_types → dist/types}/IGlobalKeyLookup.js +1 -1
  43. package/dist/types/IGlobalKeyResult.d.ts.map +1 -0
  44. package/{build/ts/_types → dist/types}/IGlobalKeyResult.js +1 -1
  45. package/dist/types/IGlobalKeyServer.d.ts.map +1 -0
  46. package/{build/ts/_types → dist/types}/IGlobalKeyServer.js +1 -1
  47. package/{build/ts/_types → dist/types}/IMacConfig.d.ts +2 -0
  48. package/dist/types/IMacConfig.d.ts.map +1 -0
  49. package/{build/ts/_types → dist/types}/IMacConfig.js +1 -1
  50. package/dist/types/IWindowsConfig.d.ts.map +1 -0
  51. package/{build/ts/_types → dist/types}/IWindowsConfig.js +1 -1
  52. package/{build/ts/_types → dist/types}/IX11Config.d.ts +2 -0
  53. package/dist/types/IX11Config.d.ts.map +1 -0
  54. package/{build/ts/_types → dist/types}/IX11Config.js +1 -1
  55. package/dist/utils/permissions.d.ts +10 -0
  56. package/dist/utils/permissions.d.ts.map +1 -0
  57. package/dist/utils/permissions.js +115 -0
  58. package/dist/utils.d.ts +22 -0
  59. package/dist/utils.d.ts.map +1 -0
  60. package/dist/utils.js +39 -0
  61. package/native/MacKeyServer/main.swift +326 -0
  62. package/native/WinKeyServer/main.cpp +402 -0
  63. package/native/X11KeyServer/main.cpp +118 -0
  64. package/package.json +49 -32
  65. package/runtime/MacKeyServer +0 -0
  66. package/scripts/download-binaries.js +7 -7
  67. package/build/index.js +0 -149
  68. package/build/ts/MacKeyServer.d.ts.map +0 -1
  69. package/build/ts/MacKeyServer.js +0 -159
  70. package/build/ts/WinKeyServer.d.ts.map +0 -1
  71. package/build/ts/WinKeyServer.js +0 -88
  72. package/build/ts/X11KeyServer.d.ts.map +0 -1
  73. package/build/ts/X11KeyServer.js +0 -159
  74. package/build/ts/_data/MacGlobalKeyLookup.d.ts +0 -3
  75. package/build/ts/_data/MacGlobalKeyLookup.d.ts.map +0 -1
  76. package/build/ts/_data/MacGlobalKeyLookup.js +0 -155
  77. package/build/ts/_data/WinGlobalKeyLookup.d.ts.map +0 -1
  78. package/build/ts/_data/X11GlobalKeyLookup.d.ts +0 -3
  79. package/build/ts/_data/X11GlobalKeyLookup.d.ts.map +0 -1
  80. package/build/ts/_data/X11GlobalKeyLookup.js +0 -144
  81. package/build/ts/_types/IConfig.d.ts.map +0 -1
  82. package/build/ts/_types/IGlobalKey.d.ts.map +0 -1
  83. package/build/ts/_types/IGlobalKeyDownMap.d.ts.map +0 -1
  84. package/build/ts/_types/IGlobalKeyEvent.d.ts.map +0 -1
  85. package/build/ts/_types/IGlobalKeyListener.d.ts.map +0 -1
  86. package/build/ts/_types/IGlobalKeyListenerRaw.d.ts.map +0 -1
  87. package/build/ts/_types/IGlobalKeyLookup.d.ts.map +0 -1
  88. package/build/ts/_types/IGlobalKeyResult.d.ts.map +0 -1
  89. package/build/ts/_types/IGlobalKeyServer.d.ts.map +0 -1
  90. package/build/ts/_types/IMacConfig.d.ts.map +0 -1
  91. package/build/ts/_types/IWindowsConfig.d.ts.map +0 -1
  92. package/build/ts/_types/IX11Config.d.ts.map +0 -1
  93. package/build/ts/isSpawnEventSupported.d.ts +0 -6
  94. package/build/ts/isSpawnEventSupported.d.ts.map +0 -1
  95. package/build/ts/isSpawnEventSupported.js +0 -18
  96. /package/{build/ts/_types → dist/types}/IGlobalKeyDownMap.d.ts +0 -0
  97. /package/{build/ts/_types → dist/types}/IGlobalKeyEvent.d.ts +0 -0
  98. /package/{build/ts/_types → dist/types}/IGlobalKeyListener.d.ts +0 -0
  99. /package/{build/ts/_types → dist/types}/IGlobalKeyListenerRaw.d.ts +0 -0
  100. /package/{build/ts/_types → dist/types}/IGlobalKeyLookup.d.ts +0 -0
  101. /package/{build/ts/_types → dist/types}/IGlobalKeyResult.d.ts +0 -0
  102. /package/{build/ts/_types → dist/types}/IGlobalKeyServer.d.ts +0 -0
  103. /package/{build/ts/_types → dist/types}/IWindowsConfig.d.ts +0 -0
package/README.md CHANGED
@@ -47,6 +47,8 @@ Choosing the right keyboard listener for your Node.js project can be challenging
47
47
  | macOS | ✅ Full | Swift (CGEventTap) | macOS 10.14+ |
48
48
  | Linux | ✅ X11 Only | C++ (XInput2) | Ubuntu, Arch Linux |
49
49
 
50
+
51
+
50
52
  ## 🚀 Quick Start
51
53
 
52
54
  ```ts
@@ -60,6 +62,57 @@ keyspy.addListener((e, down) => {
60
62
  });
61
63
  ```
62
64
 
65
+ ## 🔍 Testing Your Setup
66
+
67
+ ```bash
68
+ # Clone and test
69
+ git clone https://github.com/teomyth/keyspy.git
70
+ cd keyspy
71
+ npm install
72
+ npm run cli # General key monitoring with clean table output
73
+ ```
74
+
75
+ The test tool will show real-time key detection for all keyboard and mouse events.
76
+
77
+ **Features:**
78
+ - ✅ Clean, aligned table output (no terminal echo interference)
79
+ - ✅ Real-time event detection with optimized column widths
80
+ - ✅ Standard Unicode symbols for modifier keys (⇧⌃⌥⌘)
81
+ - ✅ Detailed key information (name, code, modifiers, location)
82
+ - ✅ Cross-platform compatibility
83
+
84
+ ### Sample Output
85
+
86
+ When you run `npm run cli`, you'll see a clean, real-time table like this:
87
+
88
+ **Default output (KEYSPY_DEBUG=0 - clean table format):**
89
+ ```
90
+ === keyspy Key Monitor ===
91
+ Real-time keyboard and mouse event detection
92
+ Debug level: 0
93
+ Exit: ESC, Ctrl+C, or CMD+Q
94
+ ==========================================
95
+
96
+ # Time State Key Name Mods Raw Key Loc vKey
97
+ #1 14:32:16 DN F3 kVK_F3 0.0,0.0 0x63
98
+ #2 14:32:16 UP F3 kVK_F3 0.0,0.0 0x63
99
+ #3 14:32:17 DN A kVK_ANSI_A 0.0,0.0 0x00
100
+ #4 14:32:17 UP A kVK_ANSI_A 0.0,0.0 0x00
101
+ #5 14:32:18 DN SPACE ⌘ kVK_Space 0.0,0.0 0x31
102
+ #6 14:32:19 DN MOUSE LEFT CGMouseButton.left 245.7,156.3 0x00
103
+ #7 14:32:20 DN C ⇧+⌃+⌥+⌘ kVK_ANSI_C 0.0,0.0 0x08
104
+ #8 14:32:21 DN UNKNOWN UNKNOWN_0xA0 0.0,0.0 0xA0
105
+ ```
106
+
107
+ **Debug output (KEYSPY_DEBUG=1 - with unknown key detection):**
108
+ ```
109
+ #8 14:32:21 DN UNKNOWN UNKNOWN_0xA0 0.0,0.0 0xA0
110
+ ❓ UNKNOWN key detected - vKey: 0xA0, Raw: UNKNOWN_0xA0
111
+ This key is not in our lookup table but was captured successfully
112
+ ```
113
+
114
+ Some keys may appear as `UNKNOWN` if they're not in our lookup tables, but you'll still get the key code (vKey) to identify them.
115
+
63
116
  ## 📖 Usage Examples
64
117
 
65
118
  ### Basic Event Logging
@@ -100,15 +153,22 @@ keyspy.addListener((e, down) => {
100
153
 
101
154
  ```ts
102
155
  const keyspy = new GlobalKeyboardListener({
156
+ // Global app name for permission requests (default: "KeySpy")
157
+ appName: "My Awesome App",
158
+
103
159
  windows: {
104
160
  onError: (errorCode) => console.error("Windows error:", errorCode),
105
161
  onInfo: (info) => console.info("Windows info:", info)
106
162
  },
107
163
  mac: {
108
164
  onError: (errorCode) => console.error("macOS error:", errorCode),
165
+ // Platform-specific app name (overrides global appName)
166
+ appName: "My Mac App"
109
167
  },
110
168
  x11: {
111
169
  onError: (errorCode) => console.error("Linux error:", errorCode),
170
+ // Platform-specific app name (overrides global appName)
171
+ appName: "My Linux App"
112
172
  }
113
173
  });
114
174
  ```
@@ -152,7 +212,7 @@ npm run build:native
152
212
  npm run dev # TypeScript watch mode
153
213
  npm run build # Production build
154
214
  npm test # Run all tests
155
- npm run test:manual # Interactive testing
215
+ npm run cli # Interactive testing with clean table output
156
216
  ```
157
217
 
158
218
  ### Building Native Binaries
@@ -191,8 +251,25 @@ npm run release:dry # Preview release without publishing
191
251
 
192
252
  ```bash
193
253
  npm run test:unit # Unit tests
194
- npm run test:integration # Integration tests
195
- npm run test:manual # Manual interactive testing
254
+ npm run test:integration # Integration tests (may prompt for permissions)
255
+ npm run test:integration:safe # Check permissions first, then run integration tests
256
+ npm run check-permissions # Check if permissions are granted
257
+ npm run dev:cli # Manual interactive testing with clean table output
258
+
259
+ # Verbose levels for CLI tool
260
+ npm run cli # Clean table output only (default)
261
+ npm run cli:v # + UNKNOWN key detection (-v)
262
+ npm run cli:vv # + All debug information (-vv)
263
+ npm run cli:vvv # + Detailed debug info (-vvv)
264
+
265
+ # Or use environment variable
266
+ KEYSPY_DEBUG=0 npm run cli # Clean table output only (default)
267
+ KEYSPY_DEBUG=1 npm run cli # + UNKNOWN key detection
268
+ KEYSPY_DEBUG=2 npm run cli # + All debug information
269
+ KEYSPY_DEBUG=3 npm run cli # + Detailed debug info
270
+
271
+ # Skip integration tests if permissions are not available
272
+ SKIP_INTEGRATION_TESTS=true npm test
196
273
  ```
197
274
 
198
275
  ## 📋 API Reference
@@ -224,6 +301,36 @@ interface IGlobalKeyEvent {
224
301
  }
225
302
  ```
226
303
 
304
+ #### Configuration Options
305
+
306
+ ```ts
307
+ interface IConfig {
308
+ appName?: string; // Default app name for permission requests (default: "KeySpy")
309
+ disposeDelay?: number; // Delay before disposing server when no listeners (default: 100ms)
310
+
311
+ // Platform-specific configurations
312
+ windows?: {
313
+ onError?: (errorCode: number) => void;
314
+ onInfo?: (info: string) => void;
315
+ serverPath?: string; // Custom path to Windows binary
316
+ };
317
+
318
+ mac?: {
319
+ onError?: (errorCode: number | null) => void;
320
+ onInfo?: (info: string) => void;
321
+ serverPath?: string; // Custom path to macOS binary
322
+ appName?: string; // macOS-specific app name (overrides global appName)
323
+ };
324
+
325
+ x11?: {
326
+ onError?: (errorCode: number | null) => void;
327
+ onInfo?: (info: string) => void;
328
+ serverPath?: string; // Custom path to Linux binary
329
+ appName?: string; // Linux-specific app name (overrides global appName)
330
+ };
331
+ }
332
+ ```
333
+
227
334
  ## 🔒 Security & Permissions
228
335
 
229
336
  ### macOS
package/bin/keyspy ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+
6
+ // Get the directory where this script is located
7
+ const binDir = __dirname;
8
+ // Get the package root directory (parent of bin/)
9
+ const packageRoot = path.dirname(binDir);
10
+ // Path to the compiled CLI script
11
+ const cliScript = path.join(packageRoot, 'dist', 'cli.js');
12
+
13
+ // Check if the compiled CLI script exists
14
+ if (!fs.existsSync(cliScript)) {
15
+ console.error('Error: CLI script not found at', cliScript);
16
+ console.error('Please run "npm run build" first to compile the TypeScript code.');
17
+ process.exit(1);
18
+ }
19
+
20
+ // Execute the CLI script
21
+ const { run } = require(cliScript);
22
+
23
+ // Call the run function with command line arguments
24
+ run({}, process.argv);
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Main CLI function that can be called externally
3
+ * @param options Configuration options for the CLI
4
+ * @param args Command line arguments (defaults to process.argv)
5
+ */
6
+ export declare function run(options?: {
7
+ debugLevel?: number;
8
+ }, args?: string[]): void;
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAqGA;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,EAAE,IAAI,GAAE,MAAM,EAAiB,QAwRvF"}
package/dist/cli.js ADDED
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ var _a;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.run = run;
8
+ const index_1 = require("./index");
9
+ const cli_table3_1 = __importDefault(require("cli-table3"));
10
+ // ANSI color codes for better output
11
+ const colors = {
12
+ reset: "\x1b[0m",
13
+ bright: "\x1b[1m",
14
+ dim: "\x1b[2m",
15
+ red: "\x1b[31m",
16
+ green: "\x1b[32m",
17
+ yellow: "\x1b[33m",
18
+ blue: "\x1b[34m",
19
+ magenta: "\x1b[35m",
20
+ cyan: "\x1b[36m",
21
+ white: "\x1b[37m",
22
+ gray: "\x1b[90m",
23
+ bgRed: "\x1b[41m",
24
+ bgGreen: "\x1b[42m",
25
+ bgYellow: "\x1b[43m",
26
+ bgBlue: "\x1b[44m",
27
+ bgMagenta: "\x1b[45m",
28
+ bgCyan: "\x1b[46m",
29
+ };
30
+ /**
31
+ * Parse command line arguments
32
+ * @param args Command line arguments (defaults to process.argv)
33
+ */
34
+ function parseArgs(args = process.argv) {
35
+ const options = {};
36
+ for (let i = 2; i < args.length; i++) {
37
+ const arg = args[i];
38
+ if (arg === '--help' || arg === '-h') {
39
+ options.help = true;
40
+ }
41
+ else if (arg === '-v') {
42
+ options.debugLevel = 1;
43
+ }
44
+ else if (arg === '-vv') {
45
+ options.debugLevel = 2;
46
+ }
47
+ else if (arg === '-vvv') {
48
+ options.debugLevel = 3;
49
+ }
50
+ else if (arg === '--verbose') {
51
+ const nextArg = args[i + 1];
52
+ if (nextArg && !nextArg.startsWith('-')) {
53
+ options.debugLevel = Number.parseInt(nextArg);
54
+ i++; // Skip next argument as it's the debug level
55
+ }
56
+ else {
57
+ options.debugLevel = 1; // Default verbose level
58
+ }
59
+ }
60
+ else if (arg.startsWith('--verbose=')) {
61
+ options.debugLevel = Number.parseInt(arg.split('=')[1]);
62
+ }
63
+ }
64
+ return options;
65
+ }
66
+ /**
67
+ * Show help information
68
+ */
69
+ function showHelp() {
70
+ console.log(`
71
+ ${colors.cyan}${colors.bright}KeySpy - Global Keyboard and Mouse Listener${colors.reset}
72
+
73
+ ${colors.bright}USAGE:${colors.reset}
74
+ keyspy [OPTIONS]
75
+
76
+ ${colors.bright}OPTIONS:${colors.reset}
77
+ -h, --help Show this help message
78
+ -v Verbose mode (level 1) - show UNKNOWN key detection
79
+ -vv More verbose (level 2) - show all debug information
80
+ -vvv Most verbose (level 3) - show detailed debug info
81
+ --verbose [LEVEL] Set verbose level (1-3)
82
+ --verbose=LEVEL Set verbose level (1-3)
83
+
84
+ ${colors.bright}VERBOSE LEVELS:${colors.reset}
85
+ 0 Clean table output only (default)
86
+ 1 + UNKNOWN key detection (-v)
87
+ 2 + All debug information (-vv)
88
+ 3 + Detailed debug info (-vvv)
89
+
90
+ ${colors.bright}ENVIRONMENT VARIABLES:${colors.reset}
91
+ KEYSPY_DEBUG Set debug level (0-3)
92
+ SKIP_INTEGRATION_TESTS Skip integration tests
93
+
94
+ ${colors.bright}EXIT KEYS:${colors.reset}
95
+ ESC Exit the application
96
+ Ctrl+C Exit the application
97
+ CMD+Q (macOS) Exit the application
98
+
99
+ ${colors.bright}EXAMPLES:${colors.reset}
100
+ keyspy Start with default settings
101
+ keyspy -v Start with verbose mode (level 1)
102
+ keyspy -vv Start with more verbose mode (level 2)
103
+ keyspy -vvv Start with most verbose mode (level 3)
104
+ keyspy --verbose=2 Start with verbose level 2
105
+ keyspy --help Show this help message
106
+ `);
107
+ }
108
+ /**
109
+ * Main CLI function that can be called externally
110
+ * @param options Configuration options for the CLI
111
+ * @param args Command line arguments (defaults to process.argv)
112
+ */
113
+ function run(options = {}, args = process.argv) {
114
+ var _a, _b, _c, _d;
115
+ // Parse command line arguments
116
+ const cliOptions = parseArgs(args);
117
+ // Show help if requested
118
+ if (cliOptions.help) {
119
+ showHelp();
120
+ return;
121
+ }
122
+ // Debug level configuration (CLI args override options, options override env)
123
+ // 0 = minimal (clean table output only)
124
+ // 1 = verbose (+ unknown key detection)
125
+ // 2 = more verbose (+ all debug info)
126
+ // 3 = most verbose (+ detailed debug info)
127
+ const DEBUG_LEVEL = (_b = (_a = cliOptions.debugLevel) !== null && _a !== void 0 ? _a : options.debugLevel) !== null && _b !== void 0 ? _b : Number.parseInt(process.env.KEYSPY_DEBUG || "0");
128
+ // Disable terminal echo to prevent key characters from appearing
129
+ (_d = (_c = process.stdin).setRawMode) === null || _d === void 0 ? void 0 : _d.call(_c, true);
130
+ process.stdin.resume();
131
+ let eventCount = 0;
132
+ const events = [];
133
+ function cleanup() {
134
+ var _a, _b;
135
+ // Restore terminal settings
136
+ (_b = (_a = process.stdin).setRawMode) === null || _b === void 0 ? void 0 : _b.call(_a, false);
137
+ process.stdin.pause();
138
+ // Clear screen and show final summary
139
+ process.stdout.write("\x1b[2J\x1b[H");
140
+ console.log(`\n${colors.cyan}${"=".repeat(60)}${colors.reset}`);
141
+ console.log(`${colors.bright}${colors.white}📊 SESSION SUMMARY${colors.reset}`);
142
+ console.log(`${colors.green} Total events detected: ${eventCount}${colors.reset}`);
143
+ console.log(`${colors.yellow} Thank you for testing keyspy!${colors.reset}`);
144
+ console.log(`${colors.cyan}${"=".repeat(60)}${colors.reset}`);
145
+ process.exit(0);
146
+ }
147
+ // Handle Ctrl+C manually since we're in raw mode
148
+ process.stdin.on("data", (key) => {
149
+ // Ctrl+C is represented as \u0003
150
+ if (key.toString() === "\u0003") {
151
+ console.log(`\n${colors.red}🔴 Ctrl+C received...${colors.reset}`);
152
+ cleanup();
153
+ }
154
+ });
155
+ console.log(`${colors.cyan}${colors.bright}=== keyspy Key Monitor ===${colors.reset}`);
156
+ console.log("Real-time keyboard and mouse event detection");
157
+ console.log(`${colors.gray}Verbose level: ${DEBUG_LEVEL} (set KEYSPY_DEBUG=0-3 to change)${colors.reset}`);
158
+ console.log(`${colors.red}Exit: ESC, Ctrl+C, or CMD+Q${colors.reset}`);
159
+ console.log(`${colors.cyan}==========================================${colors.reset}\n`);
160
+ const listener = new index_1.GlobalKeyboardListener({
161
+ windows: {
162
+ onError: (errorCode) => console.error("ERROR:", errorCode),
163
+ onInfo: (info) => console.info("INFO:", info),
164
+ },
165
+ mac: {
166
+ onError: (errorCode) => console.error("ERROR:", errorCode),
167
+ onInfo: (info) => console.info("INFO:", info),
168
+ },
169
+ x11: {
170
+ onError: (errorCode) => console.error("ERROR:", errorCode),
171
+ onInfo: (info) => console.info("INFO:", info),
172
+ },
173
+ });
174
+ console.log(`${colors.green}Starting keyboard listener...${colors.reset}`);
175
+ function displayTable() {
176
+ // Clear screen and move cursor to top
177
+ process.stdout.write("\x1b[2J\x1b[H");
178
+ // Show header
179
+ console.log(`${colors.cyan}${colors.bright}=== keyspy Key Monitor ===${colors.reset}`);
180
+ console.log("Real-time keyboard and mouse event detection");
181
+ console.log(`${colors.gray}Verbose level: ${DEBUG_LEVEL}${colors.reset}`);
182
+ console.log(`${colors.red}Exit: ESC, Ctrl+C, or CMD+Q${colors.reset}`);
183
+ console.log(`${colors.cyan}${"=".repeat(50)}${colors.reset}\n`);
184
+ // Create table with no borders - just for column alignment
185
+ const table = new cli_table3_1.default({
186
+ head: ["#", "Time", "State", "Key Name", "Mods", "Raw Key", "Loc", "vKey"],
187
+ colWidths: [5, 10, 6, 18, 14, 22, 14, 6],
188
+ style: {
189
+ head: ["cyan"],
190
+ border: [],
191
+ compact: true,
192
+ "padding-left": 0,
193
+ "padding-right": 1,
194
+ },
195
+ chars: {
196
+ top: "",
197
+ "top-mid": "",
198
+ "top-left": "",
199
+ "top-right": "",
200
+ bottom: "",
201
+ "bottom-mid": "",
202
+ "bottom-left": "",
203
+ "bottom-right": "",
204
+ left: "",
205
+ "left-mid": "",
206
+ mid: "",
207
+ "mid-mid": "",
208
+ right: "",
209
+ "right-mid": "",
210
+ middle: " ",
211
+ },
212
+ });
213
+ if (events.length === 0) {
214
+ // Show empty table with placeholder
215
+ table.push(["", "", "", "Waiting for key events...", "", "", "", ""]);
216
+ }
217
+ else {
218
+ // Add recent events (last 20)
219
+ const recentEvents = events.slice(-20);
220
+ for (const event of recentEvents) {
221
+ const stateColor = event.state === "DOWN" ? colors.green : colors.red;
222
+ // Abbreviate state if needed to fit in column
223
+ const stateDisplay = event.state === "DOWN" ? "DN" : "UP";
224
+ table.push([
225
+ `${colors.dim}#${event.count}${colors.reset}`,
226
+ `${colors.gray}${event.time}${colors.reset}`,
227
+ `${stateColor}${stateDisplay}${colors.reset}`,
228
+ event.keyName,
229
+ `${colors.blue}${event.modifiers}${colors.reset}`,
230
+ `${colors.gray}${event.rawKey}${colors.reset}`,
231
+ `${colors.dim}${event.location}${colors.reset}`,
232
+ `${colors.yellow}${event.vKey}${colors.reset}`,
233
+ ]);
234
+ }
235
+ }
236
+ console.log(table.toString());
237
+ if (events.length > 20) {
238
+ console.log(`${colors.dim}... showing last 20 of ${events.length} events${colors.reset}`);
239
+ }
240
+ }
241
+ listener
242
+ .addListener((e, down) => {
243
+ var _a;
244
+ eventCount++;
245
+ // Format event information
246
+ const timestamp = new Date().toLocaleTimeString("en-US", { hour12: false });
247
+ const keyName = e.name || "UNKNOWN";
248
+ const rawName = ((_a = e.rawKey) === null || _a === void 0 ? void 0 : _a._nameRaw) || "N/A";
249
+ const location = e.location
250
+ ? `${e.location[0].toFixed(1)},${e.location[1].toFixed(1)}`
251
+ : "0.0,0.0";
252
+ const vKey = e.vKey !== undefined ? `0x${e.vKey.toString(16).toUpperCase().padStart(2, "0")}` : "N/A";
253
+ // Show currently pressed modifier keys using standard Unicode symbols
254
+ const modifiers = [];
255
+ if (down["LEFT SHIFT"] || down["RIGHT SHIFT"])
256
+ modifiers.push("⇧");
257
+ if (down["LEFT CTRL"] || down["RIGHT CTRL"])
258
+ modifiers.push("⌃");
259
+ if (down["LEFT ALT"] || down["RIGHT ALT"])
260
+ modifiers.push("⌥");
261
+ if (down["LEFT META"] || down["RIGHT META"])
262
+ modifiers.push("⌘");
263
+ if (down["CAPS LOCK"])
264
+ modifiers.push("⇪");
265
+ if (down.FN)
266
+ modifiers.push("Fn");
267
+ const modText = modifiers.length > 0 ? modifiers.join("+") : "";
268
+ // Store event data
269
+ events.push({
270
+ time: timestamp,
271
+ state: e.state,
272
+ count: eventCount,
273
+ keyName: keyName,
274
+ modifiers: modText,
275
+ rawKey: rawName,
276
+ location: location,
277
+ vKey: vKey,
278
+ });
279
+ // Update display
280
+ displayTable();
281
+ // Only show debug info if explicitly requested
282
+ if (DEBUG_LEVEL >= 1) {
283
+ // Handle UNKNOWN keys - show them clearly with their key codes
284
+ if (keyName === "UNKNOWN") {
285
+ console.log(`${colors.red}❓ UNKNOWN key detected - vKey: ${vKey}, Raw: ${rawName}${colors.reset}`);
286
+ console.log(`${colors.red} This key is not in our lookup table but was captured successfully${colors.reset}`);
287
+ }
288
+ }
289
+ // Level 2: Show all events with basic info
290
+ if (DEBUG_LEVEL >= 2) {
291
+ console.log(`${colors.dim}[${timestamp}] ${e.state} ${keyName} (vKey: ${vKey}, scanCode: ${e.scanCode})${colors.reset}`);
292
+ }
293
+ // Level 3: Show detailed event information
294
+ if (DEBUG_LEVEL >= 3) {
295
+ console.log(`${colors.dim}Raw event data:${colors.reset}`);
296
+ console.log(`${colors.dim} _raw: ${e._raw}${colors.reset}`);
297
+ console.log(`${colors.dim} rawKey: ${JSON.stringify(e.rawKey)}${colors.reset}`);
298
+ console.log(`${colors.dim} location: ${JSON.stringify(e.location)}${colors.reset}`);
299
+ console.log(`${colors.dim} down map: ${JSON.stringify(down)}${colors.reset}`);
300
+ }
301
+ // Exit conditions
302
+ if (e.state === "DOWN" && e.name === "ESCAPE") {
303
+ console.log(`\n${colors.red}🔴 ESC pressed - Exiting...${colors.reset}`);
304
+ cleanup();
305
+ }
306
+ if (e.state === "DOWN" && e.name === "Q" && (down["LEFT META"] || down["RIGHT META"])) {
307
+ console.log(`\n${colors.red}🔴 CMD+Q pressed - Exiting...${colors.reset}`);
308
+ cleanup();
309
+ }
310
+ // Additional Ctrl+C detection through keyboard listener
311
+ if (e.state === "DOWN" && e.name === "C" && (down["LEFT CTRL"] || down["RIGHT CTRL"])) {
312
+ console.log(`\n${colors.red}🔴 Ctrl+C detected - Exiting...${colors.reset}`);
313
+ cleanup();
314
+ }
315
+ // Don't block other events
316
+ return false;
317
+ })
318
+ .then(() => {
319
+ // Initial display
320
+ displayTable();
321
+ console.log(`${colors.green}✅ Listener started - Press keys to see events${colors.reset}\n`);
322
+ })
323
+ .catch((e) => {
324
+ console.error("❌ Failed to start keyboard listener:", e);
325
+ process.exit(1);
326
+ });
327
+ // Handle process exit signals (this won't work in raw mode, but keep for safety)
328
+ process.on("SIGINT", () => {
329
+ console.log(`\n${colors.red}🔴 Ctrl+C signal received...${colors.reset}`);
330
+ cleanup();
331
+ });
332
+ process.on("SIGTERM", () => {
333
+ console.log("\n🔴 Termination signal received...");
334
+ cleanup();
335
+ });
336
+ // Handle uncaught exceptions
337
+ process.on("uncaughtException", (error) => {
338
+ console.error("\n❌ Exception:", error.message);
339
+ cleanup();
340
+ });
341
+ process.on("unhandledRejection", (reason) => {
342
+ console.error("\n❌ Rejection:", reason);
343
+ cleanup();
344
+ });
345
+ // Handle terminal close
346
+ process.on("exit", () => {
347
+ var _a, _b;
348
+ // Restore terminal settings on any exit
349
+ (_b = (_a = process.stdin).setRawMode) === null || _b === void 0 ? void 0 : _b.call(_a, false);
350
+ });
351
+ }
352
+ // Check if this module is being run directly (not via bin script)
353
+ // When run via bin/keyspy, the bin script will call run() explicitly
354
+ // When run directly with node dist/cli.js, we should call run()
355
+ const isDirectRun = require.main === module && !((_a = process.argv[1]) === null || _a === void 0 ? void 0 : _a.endsWith('bin/keyspy'));
356
+ if (isDirectRun) {
357
+ run({}, process.argv);
358
+ }
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUEwR0Esa0JBd1JDO0FBbFlELG1DQUFpRDtBQUNqRCw0REFBK0I7QUFFL0IscUNBQXFDO0FBQ3JDLE1BQU0sTUFBTSxHQUFHO0lBQ2IsS0FBSyxFQUFFLFNBQVM7SUFDaEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsVUFBVTtJQUNmLEtBQUssRUFBRSxVQUFVO0lBQ2pCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxVQUFVO0lBQ2pCLElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxVQUFVO0lBQ2pCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLE1BQU0sRUFBRSxVQUFVO0NBQ25CLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxPQUFpQixPQUFPLENBQUMsSUFBSTtJQUM5QyxNQUFNLE9BQU8sR0FBNEMsRUFBRSxDQUFDO0lBRTVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBCLElBQUksR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hC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
@@ -1,13 +1,13 @@
1
- import type { IConfig } from "./ts/_types/IConfig";
2
- import type { IGlobalKeyListener } from "./ts/_types/IGlobalKeyListener";
3
- import type { IGlobalKeyServer } from "./ts/_types/IGlobalKeyServer";
4
- export * from "./ts/_types/IGlobalKeyListener";
5
- export * from "./ts/_types/IGlobalKeyEvent";
6
- export * from "./ts/_types/IGlobalKey";
7
- export * from "./ts/_types/IGlobalKeyDownMap";
8
- export * from "./ts/_types/IWindowsConfig";
9
- export * from "./ts/_types/IConfig";
10
- export * from "./ts/_types/IGlobalKeyResult";
1
+ import type { IConfig } from "./types/IConfig";
2
+ import type { IGlobalKeyListener } from "./types/IGlobalKeyListener";
3
+ import type { IGlobalKeyServer } from "./types/IGlobalKeyServer";
4
+ export * from "./types/IGlobalKeyListener";
5
+ export * from "./types/IGlobalKeyEvent";
6
+ export * from "./types/IGlobalKey";
7
+ export * from "./types/IGlobalKeyDownMap";
8
+ export * from "./types/IWindowsConfig";
9
+ export * from "./types/IConfig";
10
+ export * from "./types/IGlobalKeyResult";
11
11
  /**
12
12
  * A cross-platform global keyboard listener. Ideal for setting up global keyboard shortcuts
13
13
  * and key-loggers (usually for automation).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAE7C;;;;;;GAMG;AACH,qBAAa,sBAAsB;IACjC,6EAA6E;IAC7E,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACtC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B,8CAA8C;IAC9C,SAAS,CAAC,SAAS,UAAS;IAC5B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAK;IAErD,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C;;;OAGG;gBACgB,MAAM,GAAE,OAAY;IAmBvC;;;;OAIG;IACU,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE;;;OAGG;IACI,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAWzD,wDAAwD;IACjD,IAAI;IAKX,2BAA2B;IAC3B,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,0BAA0B;IAC1B,SAAS,CAAC,IAAI,IAAI,IAAI;IAKtB,+EAA+E;IAC/E,OAAO,CAAC,YAAY,CA+BlB;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AAEzC;;;;;;GAMG;AACH,qBAAa,sBAAsB;IACjC,6EAA6E;IAC7E,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACtC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B,8CAA8C;IAC9C,SAAS,CAAC,SAAS,UAAS;IAC5B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAK;IAErD,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C;;;OAGG;gBACgB,MAAM,GAAE,OAAY;IAyBvC;;;;OAIG;IACU,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE;;;OAGG;IACI,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAWzD,wDAAwD;IACjD,IAAI;IAKX,2BAA2B;IAC3B,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,0BAA0B;IAC1B,SAAS,CAAC,IAAI,IAAI,IAAI;IAKtB,+EAA+E;IAC/E,OAAO,CAAC,YAAY,CA+BlB;CACH"}