| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // OS input injection for Windows via user32 SendInput (koffi FFI).
- // On non-Windows platforms, exports a stub that logs instead of injecting,
- // so the agent can run in dev/test environments.
-
- const { toVirtualKey } = require('./keymap');
-
- const MOUSEEVENTF_MOVE = 0x0001;
- const MOUSEEVENTF_ABSOLUTE = 0x8000;
- const MOUSEEVENTF_LEFTDOWN = 0x0002;
- const MOUSEEVENTF_LEFTUP = 0x0004;
- const MOUSEEVENTF_RIGHTDOWN = 0x0008;
- const MOUSEEVENTF_RIGHTUP = 0x0010;
- const MOUSEEVENTF_MIDDLEDOWN = 0x0020;
- const MOUSEEVENTF_MIDDLEUP = 0x0040;
- const MOUSEEVENTF_WHEEL = 0x0800;
- const KEYEVENTF_KEYUP = 0x0002;
- const INPUT_MOUSE = 0;
- const INPUT_KEYBOARD = 1;
-
- const BUTTON_DOWN = { 0: MOUSEEVENTF_LEFTDOWN, 1: MOUSEEVENTF_MIDDLEDOWN, 2: MOUSEEVENTF_RIGHTDOWN };
- const BUTTON_UP = { 0: MOUSEEVENTF_LEFTUP, 1: MOUSEEVENTF_MIDDLEUP, 2: MOUSEEVENTF_RIGHTUP };
-
- function createWindowsInjector() {
- const koffi = require('koffi');
- const user32 = koffi.load('user32.dll');
-
- const MOUSEINPUT = koffi.struct('MOUSEINPUT', {
- dx: 'long', dy: 'long', mouseData: 'int32',
- dwFlags: 'uint32', time: 'uint32', dwExtraInfo: 'uintptr_t',
- });
- const KEYBDINPUT = koffi.struct('KEYBDINPUT', {
- wVk: 'uint16', wScan: 'uint16',
- dwFlags: 'uint32', time: 'uint32', dwExtraInfo: 'uintptr_t',
- });
- const HARDWAREINPUT = koffi.struct('HARDWAREINPUT', {
- uMsg: 'uint32', wParamL: 'uint16', wParamH: 'uint16',
- });
- const INPUT_UNION = koffi.union('INPUT_UNION', {
- mi: MOUSEINPUT, ki: KEYBDINPUT, hi: HARDWAREINPUT,
- });
- const INPUT = koffi.struct('INPUT', { type: 'uint32', u: INPUT_UNION });
-
- const SendInput = user32.func('uint32 SendInput(uint32 cInputs, INPUT *pInputs, int cbSize)');
- const INPUT_SIZE = koffi.sizeof(INPUT);
-
- function sendMouse(mi) {
- SendInput(1, [{ type: INPUT_MOUSE, u: { mi:
|