@intentic/desktop-automation 1.249.0 → 1.251.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.
- package/README.md +25 -6
- package/dist/apps-windows.d.ts +2 -1
- package/dist/apps-windows.d.ts.map +1 -1
- package/dist/apps-windows.js +68 -20
- package/dist/apps-windows.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/parse.d.ts +3 -1
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +27 -0
- package/dist/parse.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,11 +50,30 @@ one row.
|
|
|
50
50
|
**Taking focus on Windows needs more than `SetForegroundWindow`.** Windows refuses that call from a process
|
|
51
51
|
that is not already in the foreground, and refuses it *quietly*: it flashes the taskbar button and leaves the
|
|
52
52
|
keyboard where it was, so the next `type` or `key` goes to whatever the person at that desk had open. A backend
|
|
53
|
-
running from a fresh `powershell.exe` misses every qualifying condition at once,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
running from a fresh `powershell.exe` misses every qualifying condition at once, so `focusWindow` asks for
|
|
54
|
+
three of them together:
|
|
55
|
+
|
|
56
|
+
- it attaches its input queue to the foreground window's thread and the target's, which is what earns the right;
|
|
57
|
+
- it zeroes the **foreground-lock timeout** for the duration of the call and puts it back after. While that
|
|
58
|
+
timeout is armed the refusal is unconditional, and no amount of queue attachment outvotes it. It is armed by
|
|
59
|
+
ordinary desktop activity, and raised outright by gaming and anti-focus-stealing utilities;
|
|
60
|
+
- it synthesises a lone ALT *key-up*, which makes this process the one that received the last input event —
|
|
61
|
+
another of the documented conditions. A key-up with no key-down before it is the half of the pair that no
|
|
62
|
+
window reads as a press, so nothing on the desktop sees an ALT.
|
|
63
|
+
|
|
64
|
+
Then it *checks*, over three rounds, because the refusal is not always permanent: a window still mapping, or an
|
|
65
|
+
app that activates itself a moment after being asked to, loses the first round and wins the second. If the
|
|
66
|
+
keyboard still went elsewhere it raises a `DesktopError` **naming the window that kept it**, rather than
|
|
67
|
+
returning to a caller that is about to type into the wrong one.
|
|
68
|
+
|
|
69
|
+
**A refused focus states its cause, and `windowsSession()` is where it comes from.** The foreground can be held
|
|
70
|
+
by a window `windows()` does not return — a cloaked one, or the lock screen's, which has no row anywhere — so
|
|
71
|
+
looking for the holder in the window list answers "nobody" in exactly the case that matters. That read is the
|
|
72
|
+
OS's: `GetForegroundWindow` for the holder, and the presence of `LogonUI` for whether Windows is drawing its
|
|
73
|
+
sign-in screen over the desktop at all, which is a state in which nothing can be focused and nothing typed
|
|
74
|
+
lands. The message used to list every cause it might have been ("a UAC prompt, a full-screen app, or a locked
|
|
75
|
+
session") on every refusal; it now says which one the machine reported, and only admits to guessing when the
|
|
76
|
+
read itself failed. Windows-only, and named so: no compositor on Linux answers the second half.
|
|
58
77
|
|
|
59
78
|
**Wayland enumeration mostly cannot happen**, and that is a design decision rather than a gap: a compositor does
|
|
60
79
|
not let one client enumerate another's windows, the same protection that stops it synthesising input. The
|
|
@@ -78,7 +97,7 @@ coupling this package exists to remove.
|
|
|
78
97
|
|
|
79
98
|
- [src/index.ts](src/index.ts): the public surface.
|
|
80
99
|
- [src/input-linux.ts](src/input-linux.ts) / [src/input-windows.ts](src/input-windows.ts): pointer, keys and text, per platform.
|
|
81
|
-
- [src/apps-linux.ts](src/apps-linux.ts) / [src/apps-windows.ts](src/apps-windows.ts): windows, focus, launching and the clipboard, per platform.
|
|
100
|
+
- [src/apps-linux.ts](src/apps-linux.ts) / [src/apps-windows.ts](src/apps-windows.ts): windows, focus, launching and the clipboard, per platform — and on Windows, whether the desktop can be driven at all.
|
|
82
101
|
- [src/screen.ts](src/screen.ts): capturing the screen.
|
|
83
102
|
- [src/keys.ts](src/keys.ts): chord and key-name parsing, shared by both platforms.
|
|
84
103
|
- [src/run.ts](src/run.ts): how commands are invoked without a native module.
|
package/dist/apps-windows.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type WindowInfo } from "./types.js";
|
|
1
|
+
import { type SessionState, type WindowInfo } from "./types.js";
|
|
2
|
+
export declare const windowsSession: () => Promise<SessionState>;
|
|
2
3
|
export declare const windowsApps: {
|
|
3
4
|
windows: () => Promise<WindowInfo[]>;
|
|
4
5
|
focusWindow: (id: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps-windows.d.ts","sourceRoot":"","sources":["../src/apps-windows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"apps-windows.d.ts","sourceRoot":"","sources":["../src/apps-windows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AA2H9E,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,YAAY,CAO3D,CAAC;AAEF,eAAO,MAAM,WAAW;IACpB,OAAO,QAAY,OAAO,CAAC,UAAU,EAAE,CAAC;IAMxC,WAAW,OAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IA6C9C,MAAM,WAAiB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,aAAa,QAAY,OAAO,CAAC,MAAM,CAAC;IAExC,cAAc,SAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;CAItD,CAAC"}
|
package/dist/apps-windows.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseWindowsJson } from "./parse.js";
|
|
1
|
+
import { focusRefusal, parseSessionJson, parseWindowsJson } from "./parse.js";
|
|
2
2
|
import { run } from "./run.js";
|
|
3
3
|
import { DesktopError } from "./types.js";
|
|
4
4
|
const SHIM = `
|
|
@@ -21,11 +21,22 @@ public class IntenticWin {
|
|
|
21
21
|
[DllImport("user32.dll")] public static extern bool AttachThreadInput(uint from, uint to, bool attach);
|
|
22
22
|
[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr h, int cmd);
|
|
23
23
|
[DllImport("user32.dll")] public static extern bool IsIconic(IntPtr h);
|
|
24
|
+
[DllImport("user32.dll")] public static extern void keybd_event(byte key, byte scan, uint flags, IntPtr extra);
|
|
25
|
+
// Two declarations of one export: SPI_GETFOREGROUNDLOCKTIMEOUT writes the timeout THROUGH pvParam, and
|
|
26
|
+
// SPI_SETFOREGROUNDLOCKTIMEOUT passes the new one IN it. One signature cannot spell both.
|
|
27
|
+
[DllImport("user32.dll", EntryPoint = "SystemParametersInfoW")] public static extern bool ReadSetting(uint action, uint param, ref uint value, uint notify);
|
|
28
|
+
[DllImport("user32.dll", EntryPoint = "SystemParametersInfoW")] public static extern bool WriteSetting(uint action, uint param, IntPtr value, uint notify);
|
|
24
29
|
[DllImport("kernel32.dll")] public static extern uint GetCurrentThreadId();
|
|
25
30
|
}
|
|
26
31
|
"@ -ErrorAction SilentlyContinue;
|
|
27
32
|
`;
|
|
28
33
|
const SW_RESTORE = 9;
|
|
34
|
+
const SPI_GET_FOREGROUND_LOCK_TIMEOUT = 0x2000;
|
|
35
|
+
const SPI_SET_FOREGROUND_LOCK_TIMEOUT = 0x2001;
|
|
36
|
+
const SPIF_SENDCHANGE = 0x0002;
|
|
37
|
+
const VK_MENU = 0x12;
|
|
38
|
+
const KEYEVENTF_KEYUP = 0x0002;
|
|
39
|
+
const FOCUS_ATTEMPTS = 3;
|
|
29
40
|
const FOCUS_POLLS = 20;
|
|
30
41
|
const FOCUS_POLL_MS = 50;
|
|
31
42
|
const LIST = `
|
|
@@ -55,34 +66,71 @@ $callback = [IntenticWin+EnumWindowsProc] {
|
|
|
55
66
|
[void][IntenticWin]::EnumWindows($callback, [IntPtr]::Zero);
|
|
56
67
|
ConvertTo-Json -Compress -Depth 3 -InputObject $items;
|
|
57
68
|
`;
|
|
69
|
+
const SESSION = `
|
|
70
|
+
$fg = [IntenticWin]::GetForegroundWindow();
|
|
71
|
+
$id = '0'; $title = ''; $app = '';
|
|
72
|
+
if ($fg -ne [IntPtr]::Zero) {
|
|
73
|
+
$id = [string]($fg.ToInt64());
|
|
74
|
+
$text = [System.Text.StringBuilder]::new([IntenticWin]::GetWindowTextLength($fg) + 1);
|
|
75
|
+
[void][IntenticWin]::GetWindowText($fg, $text, $text.Capacity);
|
|
76
|
+
$title = $text.ToString();
|
|
77
|
+
[uint32]$owner = 0;
|
|
78
|
+
[void][IntenticWin]::GetWindowThreadProcessId($fg, [ref]$owner);
|
|
79
|
+
$program = (Get-Process -Id $owner -ErrorAction SilentlyContinue).ProcessName;
|
|
80
|
+
if ($program) { $app = $program };
|
|
81
|
+
}
|
|
82
|
+
$mine = (Get-Process -Id $PID).SessionId;
|
|
83
|
+
$locked = @(Get-Process -Name 'LogonUI' -ErrorAction SilentlyContinue | Where-Object { $_.SessionId -eq $mine }).Count -gt 0;
|
|
84
|
+
ConvertTo-Json -Compress -InputObject ([pscustomobject]@{ locked = $locked; id = $id; title = $title; app = $app });
|
|
85
|
+
`;
|
|
58
86
|
const powershell = (script) => run("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", `${SHIM}${script}`]);
|
|
87
|
+
export const windowsSession = async () => {
|
|
88
|
+
const answer = (await powershell(SESSION)).trim();
|
|
89
|
+
const state = parseSessionJson(answer);
|
|
90
|
+
if (state === undefined) {
|
|
91
|
+
throw new DesktopError(`Could not read which window holds this desktop's keyboard: ${answer === "" ? "PowerShell said nothing" : answer}`);
|
|
92
|
+
}
|
|
93
|
+
return state;
|
|
94
|
+
};
|
|
59
95
|
export const windowsApps = {
|
|
60
96
|
windows: async () => parseWindowsJson((await powershell(LIST)).trim()),
|
|
61
97
|
focusWindow: async (id) => {
|
|
62
98
|
const settled = await powershell(`$h = [IntPtr]::new([int64]${JSON.stringify(id)});
|
|
63
99
|
if ([IntenticWin]::IsIconic($h)) { [void][IntenticWin]::ShowWindow($h, ${SW_RESTORE}) };
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
[IntenticWin]::
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
foreach ($queue in $queues) { [void][IntenticWin]::AttachThreadInput($mine, $queue, $
|
|
100
|
+
[uint32]$lock = 0;
|
|
101
|
+
$armed = [IntenticWin]::ReadSetting(${SPI_GET_FOREGROUND_LOCK_TIMEOUT}, 0, [ref]$lock, 0);
|
|
102
|
+
if ($armed) { [void][IntenticWin]::WriteSetting(${SPI_SET_FOREGROUND_LOCK_TIMEOUT}, 0, [IntPtr]::Zero, ${SPIF_SENDCHANGE}) };
|
|
103
|
+
try {
|
|
104
|
+
for ($attempt = 0; $attempt -lt ${FOCUS_ATTEMPTS}; $attempt++) {
|
|
105
|
+
if ([IntenticWin]::GetForegroundWindow() -eq $h) { break };
|
|
106
|
+
[uint32]$ignored = 0;
|
|
107
|
+
$mine = [IntenticWin]::GetCurrentThreadId();
|
|
108
|
+
$queues = @(
|
|
109
|
+
[IntenticWin]::GetWindowThreadProcessId([IntenticWin]::GetForegroundWindow(), [ref]$ignored),
|
|
110
|
+
[IntenticWin]::GetWindowThreadProcessId($h, [ref]$ignored)
|
|
111
|
+
) | Where-Object { $_ -ne 0 -and $_ -ne $mine } | Select-Object -Unique;
|
|
112
|
+
foreach ($queue in $queues) { [void][IntenticWin]::AttachThreadInput($mine, $queue, $true) };
|
|
113
|
+
try {
|
|
114
|
+
[IntenticWin]::keybd_event(${VK_MENU}, 0, ${KEYEVENTF_KEYUP}, [IntPtr]::Zero);
|
|
115
|
+
[void][IntenticWin]::BringWindowToTop($h);
|
|
116
|
+
[void][IntenticWin]::SetForegroundWindow($h);
|
|
117
|
+
} finally {
|
|
118
|
+
foreach ($queue in $queues) { [void][IntenticWin]::AttachThreadInput($mine, $queue, $false) };
|
|
119
|
+
}
|
|
120
|
+
for ($poll = 0; $poll -lt ${FOCUS_POLLS}; $poll++) {
|
|
121
|
+
if ([IntenticWin]::GetForegroundWindow() -eq $h) { break };
|
|
122
|
+
Start-Sleep -Milliseconds ${FOCUS_POLL_MS};
|
|
123
|
+
}
|
|
77
124
|
}
|
|
125
|
+
} finally {
|
|
126
|
+
if ($armed) { [void][IntenticWin]::WriteSetting(${SPI_SET_FOREGROUND_LOCK_TIMEOUT}, 0, [IntPtr]::new([int64]$lock), ${SPIF_SENDCHANGE}) };
|
|
78
127
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}`);
|
|
83
|
-
if (settled.trim() !== `focused`) {
|
|
84
|
-
throw new DesktopError(`Windows would not give window ${id} the keyboard: it is gone, or something is holding the foreground (a UAC prompt, a full-screen app, or a locked session).`);
|
|
128
|
+
if ([IntenticWin]::GetForegroundWindow() -eq $h) { Write-Output 'focused' } else { Write-Output 'refused' }`);
|
|
129
|
+
if (settled.trim() === `focused`) {
|
|
130
|
+
return;
|
|
85
131
|
}
|
|
132
|
+
const state = await windowsSession().catch(() => undefined);
|
|
133
|
+
throw new DesktopError(focusRefusal(id, FOCUS_ATTEMPTS, state));
|
|
86
134
|
},
|
|
87
135
|
launch: async (target) => {
|
|
88
136
|
await powershell(`Start-Process -FilePath ${JSON.stringify(target)};`);
|
package/dist/apps-windows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps-windows.js","sourceRoot":"","sources":["../src/apps-windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"apps-windows.js","sourceRoot":"","sources":["../src/apps-windows.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type Desktop } from "./types.js";
|
|
2
|
+
export { windowsSession } from "./apps-windows.js";
|
|
2
3
|
export { parseChord, windowsChord, wtypeArgs, xdotoolChord, type Chord, type Modifier } from "./keys.js";
|
|
3
|
-
export { looksLikeUrl, parseSwayTree, parseWindowsJson, parseWmctrl } from "./parse.js";
|
|
4
|
+
export { focusRefusal, looksLikeUrl, parseSessionJson, parseSwayTree, parseWindowsJson, parseWmctrl } from "./parse.js";
|
|
4
5
|
export { capture, frame, hasGraphicalSession, isWayland, pngSize } from "./screen.js";
|
|
5
|
-
export { DesktopError, type Desktop, type MouseButton, type Point, type ScreenFrame, type ScrollDirection, type WindowInfo } from "./types.js";
|
|
6
|
+
export { DesktopError, type Desktop, type ForegroundWindow, type MouseButton, type Point, type ScreenFrame, type ScrollDirection, type SessionState, type WindowInfo, } from "./types.js";
|
|
6
7
|
export declare const desktop: () => Desktop;
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAgB,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAgB,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EACH,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,GAClB,MAAM,YAAY,CAAC;AAUpB,eAAO,MAAM,OAAO,QAAO,OAkC1B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,10 +4,11 @@ import { linuxInput } from "./input-linux.js";
|
|
|
4
4
|
import { windowsInput } from "./input-windows.js";
|
|
5
5
|
import { capture, frame } from "./screen.js";
|
|
6
6
|
import { DesktopError } from "./types.js";
|
|
7
|
+
export { windowsSession } from "./apps-windows.js";
|
|
7
8
|
export { parseChord, windowsChord, wtypeArgs, xdotoolChord } from "./keys.js";
|
|
8
|
-
export { looksLikeUrl, parseSwayTree, parseWindowsJson, parseWmctrl } from "./parse.js";
|
|
9
|
+
export { focusRefusal, looksLikeUrl, parseSessionJson, parseSwayTree, parseWindowsJson, parseWmctrl } from "./parse.js";
|
|
9
10
|
export { capture, frame, hasGraphicalSession, isWayland, pngSize } from "./screen.js";
|
|
10
|
-
export { DesktopError } from "./types.js";
|
|
11
|
+
export { DesktopError, } from "./types.js";
|
|
11
12
|
const unsupported = async () => {
|
|
12
13
|
throw new DesktopError(`Controlling the screen is not supported on ${process.platform} yet: only Windows and Linux.`);
|
|
13
14
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAA6B,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/parse.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { WindowInfo } from "./types.js";
|
|
1
|
+
import type { SessionState, WindowInfo } from "./types.js";
|
|
2
2
|
export declare const parseWmctrl: (output: string, focusedId?: string) => WindowInfo[];
|
|
3
3
|
export declare const parseSwayTree: (json: string) => WindowInfo[];
|
|
4
4
|
export declare const parseWindowsJson: (json: string) => WindowInfo[];
|
|
5
|
+
export declare const parseSessionJson: (json: string) => SessionState | undefined;
|
|
6
|
+
export declare const focusRefusal: (id: string, attempts: number, state: SessionState | undefined) => string;
|
|
5
7
|
export declare const looksLikeUrl: (target: string) => boolean;
|
|
6
8
|
//# sourceMappingURL=parse.d.ts.map
|
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO3D,eAAO,MAAM,WAAW,WAAY,MAAM,cAAc,MAAM,KAAG,UAAU,EA2BjE,CAAC;AAoCX,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,UAAU,EAMtD,CAAC;AAIF,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,UAAU,EA6BzD,CAAC;AAKF,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,YAAY,GAAG,SAe9D,CAAC;AASF,eAAO,MAAM,YAAY,OAAQ,MAAM,YAAY,MAAM,SAAS,YAAY,GAAG,SAAS,KAAG,MAU5F,CAAC;AAIF,eAAO,MAAM,YAAY,WAAY,MAAM,KAAG,OAAsF,CAAC"}
|
package/dist/parse.js
CHANGED
|
@@ -81,5 +81,32 @@ export const parseWindowsJson = (json) => {
|
|
|
81
81
|
];
|
|
82
82
|
});
|
|
83
83
|
};
|
|
84
|
+
export const parseSessionJson = (json) => {
|
|
85
|
+
let parsed;
|
|
86
|
+
try {
|
|
87
|
+
parsed = JSON.parse(json);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const record = parsed;
|
|
93
|
+
if (record === null || typeof record !== "object" || typeof record["locked"] !== "boolean") {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const id = String(record["id"] ?? "");
|
|
97
|
+
const foreground = id === "" || id === "0" ? undefined : { id, title: String(record["title"] ?? ""), app: String(record["app"] ?? "unknown") };
|
|
98
|
+
return { locked: record["locked"], foreground };
|
|
99
|
+
};
|
|
100
|
+
const heldBy = (foreground) => foreground.title === "" ? `an untitled window [${foreground.app}]` : `"${foreground.title}" [${foreground.app}]`;
|
|
101
|
+
export const focusRefusal = (id, attempts, state) => {
|
|
102
|
+
const cause = state === undefined
|
|
103
|
+
? `nothing here could read which window has it`
|
|
104
|
+
: state.locked
|
|
105
|
+
? `Windows is drawing its sign-in screen over this session (LogonUI is running), so the keyboard is on a desktop no ordinary process can reach — somebody has to sign in on that machine`
|
|
106
|
+
: state.foreground === undefined
|
|
107
|
+
? `nothing holds the foreground: the window is gone, or it belongs to another desktop`
|
|
108
|
+
: `${heldBy(state.foreground)} holds it and would not let go (a UAC prompt, a full-screen app, or a lock screen still up)`;
|
|
109
|
+
return `Windows would not give window ${id} the keyboard after ${attempts} attempts: ${cause}.`;
|
|
110
|
+
};
|
|
84
111
|
export const looksLikeUrl = (target) => /^[a-z][a-z0-9+.-]*:\/\//i.test(target) || /^(www\.|mailto:)/i.test(target);
|
|
85
112
|
//# sourceMappingURL=parse.js.map
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,SAAkB,EAAgB,EAAE,CAC5E,MAAM;KACD,KAAK,CAAC,OAAO,CAAC;KACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;KAC7B,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IAEd,MAAM,MAAM,GAAG,gFAAgF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3G,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,CAAC,EAAE,EAAE,EAAE,AAAD,EAAG,AAAD,EAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,AAAD,EAAG,QAAQ,CAAC,GAAG,MAAM,CAAC;IACpE,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,OAAO;QACH;YACI,EAAE;YACF,KAAK;YACL,GAAG;YACH,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;YAEpF,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC;SACvE;KACJ,CAAC;AACN,CAAC,CAAC,CAAC;AAeX,MAAM,YAAY,GAAG,CAAC,IAAc,EAAgB,EAAE;IAClD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC;IAE/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,OAAO;QACH;YACI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;YACjC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5F,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI;SACjC;QACD,GAAG,WAAW;KACjB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAgB,EAAE;IACxD,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAgB,EAAE;IAC3D,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACpD,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO;YACH;gBACI,EAAE;gBACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;gBACvC,MAAM,EAAE;oBACJ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3B,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACxC;gBACD,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI;aACtC;SACJ,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAA4B,EAAE;IACvE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,MAAwC,CAAC;IACxD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC;IAC/I,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,UAAmD,EAAU,EAAE,CAC3E,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,MAAM,UAAU,CAAC,GAAG,GAAG,CAAC;AAMrH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,QAAgB,EAAE,KAA+B,EAAU,EAAE;IAClG,MAAM,KAAK,GACP,KAAK,KAAK,SAAS;QACf,CAAC,CAAC,6CAA6C;QAC/C,CAAC,CAAC,KAAK,CAAC,MAAM;YACZ,CAAC,CAAC,uLAAuL;YACzL,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;gBAC9B,CAAC,CAAC,oFAAoF;gBACtF,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,6FAA6F,CAAC;IACvI,OAAO,iCAAiC,EAAE,uBAAuB,QAAQ,cAAc,KAAK,GAAG,CAAC;AACpG,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -21,6 +21,15 @@ export interface WindowInfo {
|
|
|
21
21
|
};
|
|
22
22
|
readonly focused: boolean;
|
|
23
23
|
}
|
|
24
|
+
export interface ForegroundWindow {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly title: string;
|
|
27
|
+
readonly app: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SessionState {
|
|
30
|
+
readonly locked: boolean;
|
|
31
|
+
readonly foreground: ForegroundWindow | undefined;
|
|
32
|
+
}
|
|
24
33
|
export interface Desktop {
|
|
25
34
|
readonly frame: () => Promise<ScreenFrame>;
|
|
26
35
|
readonly capture: () => Promise<Buffer>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAI/D,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;CAC1B;AAID,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7G,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,OAAO;IAEpB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1F,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE9C,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAID,qBAAa,YAAa,SAAQ,KAAK;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAI5C;CACJ"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA6EA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC1B,OAAO,CAAqB;IACrC,YAAY,OAAe,EAAE,OAAgB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/desktop-automation",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.251.0",
|
|
4
4
|
"description": "Drive a desktop from Node: capture the screen, move the pointer, click, type and scroll, Windows and Linux, no native modules",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|