@epsilon-asi/actors 0.0.22 → 0.0.33
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/dist/browser/RuntimeConfig.d.ts +26 -0
- package/dist/browser/RuntimeConfig.d.ts.map +1 -1
- package/dist/browser/RuntimeConfig.js +29 -1
- package/dist/browser/RuntimeConfig.js.map +1 -1
- package/dist/core/ActorContext.d.ts +2 -0
- package/dist/core/ActorContext.d.ts.map +1 -1
- package/dist/core/ActorRunner.d.ts +3 -0
- package/dist/core/ActorRunner.d.ts.map +1 -1
- package/dist/core/ActorRunner.js +11 -1
- package/dist/core/ActorRunner.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/native/CompositeNativeWindowDriver.d.ts +11 -0
- package/dist/native/CompositeNativeWindowDriver.d.ts.map +1 -0
- package/dist/native/CompositeNativeWindowDriver.js +31 -0
- package/dist/native/CompositeNativeWindowDriver.js.map +1 -0
- package/dist/native/NativeActionRegistry.d.ts +14 -0
- package/dist/native/NativeActionRegistry.d.ts.map +1 -0
- package/dist/native/NativeActionRegistry.js +101 -0
- package/dist/native/NativeActionRegistry.js.map +1 -0
- package/dist/native/NativeAutomation.d.ts +3 -0
- package/dist/native/NativeAutomation.d.ts.map +1 -0
- package/dist/native/NativeAutomation.js +12 -0
- package/dist/native/NativeAutomation.js.map +1 -0
- package/dist/native/NativeCoordinateMapper.d.ts +23 -0
- package/dist/native/NativeCoordinateMapper.d.ts.map +1 -0
- package/dist/native/NativeCoordinateMapper.js +201 -0
- package/dist/native/NativeCoordinateMapper.js.map +1 -0
- package/dist/native/NativeFileDialogService.d.ts +26 -0
- package/dist/native/NativeFileDialogService.d.ts.map +1 -0
- package/dist/native/NativeFileDialogService.js +121 -0
- package/dist/native/NativeFileDialogService.js.map +1 -0
- package/dist/native/NativeImageFinder.d.ts +12 -0
- package/dist/native/NativeImageFinder.d.ts.map +1 -0
- package/dist/native/NativeImageFinder.js +29 -0
- package/dist/native/NativeImageFinder.js.map +1 -0
- package/dist/native/NativeKeyboard.d.ts +10 -0
- package/dist/native/NativeKeyboard.d.ts.map +1 -0
- package/dist/native/NativeKeyboard.js +16 -0
- package/dist/native/NativeKeyboard.js.map +1 -0
- package/dist/native/NativeMouse.d.ts +38 -0
- package/dist/native/NativeMouse.d.ts.map +1 -0
- package/dist/native/NativeMouse.js +82 -0
- package/dist/native/NativeMouse.js.map +1 -0
- package/dist/native/NativeWindowService.d.ts +31 -0
- package/dist/native/NativeWindowService.d.ts.map +1 -0
- package/dist/native/NativeWindowService.js +183 -0
- package/dist/native/NativeWindowService.js.map +1 -0
- package/dist/native/UnsupportedNativeAutomation.d.ts +4 -0
- package/dist/native/UnsupportedNativeAutomation.d.ts.map +1 -0
- package/dist/native/UnsupportedNativeAutomation.js +77 -0
- package/dist/native/UnsupportedNativeAutomation.js.map +1 -0
- package/dist/native/WindowMatcher.d.ts +4 -0
- package/dist/native/WindowMatcher.d.ts.map +1 -0
- package/dist/native/WindowMatcher.js +39 -0
- package/dist/native/WindowMatcher.js.map +1 -0
- package/dist/native/drivers.d.ts +37 -0
- package/dist/native/drivers.d.ts.map +1 -0
- package/dist/native/drivers.js +2 -0
- package/dist/native/drivers.js.map +1 -0
- package/dist/native/errors.d.ts +23 -0
- package/dist/native/errors.d.ts.map +1 -0
- package/dist/native/errors.js +45 -0
- package/dist/native/errors.js.map +1 -0
- package/dist/native/index.d.ts +13 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +13 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/macos/MacOSAccessibilityWindowDriver.d.ts +11 -0
- package/dist/native/macos/MacOSAccessibilityWindowDriver.d.ts.map +1 -0
- package/dist/native/macos/MacOSAccessibilityWindowDriver.js +180 -0
- package/dist/native/macos/MacOSAccessibilityWindowDriver.js.map +1 -0
- package/dist/native/macos/MacOSAppleScriptClient.d.ts +24 -0
- package/dist/native/macos/MacOSAppleScriptClient.d.ts.map +1 -0
- package/dist/native/macos/MacOSAppleScriptClient.js +163 -0
- package/dist/native/macos/MacOSAppleScriptClient.js.map +1 -0
- package/dist/native/macos/MacOSFileDialogAccessibilityStrategy.d.ts +10 -0
- package/dist/native/macos/MacOSFileDialogAccessibilityStrategy.d.ts.map +1 -0
- package/dist/native/macos/MacOSFileDialogAccessibilityStrategy.js +12 -0
- package/dist/native/macos/MacOSFileDialogAccessibilityStrategy.js.map +1 -0
- package/dist/native/macos/MacOSNativeAutomation.d.ts +3 -0
- package/dist/native/macos/MacOSNativeAutomation.d.ts.map +1 -0
- package/dist/native/macos/MacOSNativeAutomation.js +88 -0
- package/dist/native/macos/MacOSNativeAutomation.js.map +1 -0
- package/dist/native/nut/NutNativeImageFinder.d.ts +17 -0
- package/dist/native/nut/NutNativeImageFinder.d.ts.map +1 -0
- package/dist/native/nut/NutNativeImageFinder.js +84 -0
- package/dist/native/nut/NutNativeImageFinder.js.map +1 -0
- package/dist/native/nut/NutNativeKeyboardDriver.d.ts +8 -0
- package/dist/native/nut/NutNativeKeyboardDriver.d.ts.map +1 -0
- package/dist/native/nut/NutNativeKeyboardDriver.js +39 -0
- package/dist/native/nut/NutNativeKeyboardDriver.js.map +1 -0
- package/dist/native/nut/NutNativeMouseDriver.d.ts +8 -0
- package/dist/native/nut/NutNativeMouseDriver.d.ts.map +1 -0
- package/dist/native/nut/NutNativeMouseDriver.js +24 -0
- package/dist/native/nut/NutNativeMouseDriver.js.map +1 -0
- package/dist/native/nut/NutNativeScreenDriver.d.ts +6 -0
- package/dist/native/nut/NutNativeScreenDriver.d.ts.map +1 -0
- package/dist/native/nut/NutNativeScreenDriver.js +12 -0
- package/dist/native/nut/NutNativeScreenDriver.js.map +1 -0
- package/dist/native/nut/NutNativeWindowDriver.d.ts +6 -0
- package/dist/native/nut/NutNativeWindowDriver.d.ts.map +1 -0
- package/dist/native/nut/NutNativeWindowDriver.js +53 -0
- package/dist/native/nut/NutNativeWindowDriver.js.map +1 -0
- package/dist/native/nut/loadNut.d.ts +58 -0
- package/dist/native/nut/loadNut.d.ts.map +1 -0
- package/dist/native/nut/loadNut.js +25 -0
- package/dist/native/nut/loadNut.js.map +1 -0
- package/dist/native/types.d.ts +194 -0
- package/dist/native/types.d.ts.map +1 -0
- package/dist/native/types.js +2 -0
- package/dist/native/types.js.map +1 -0
- package/dist/native/utils/appleScriptEscape.d.ts +7 -0
- package/dist/native/utils/appleScriptEscape.d.ts.map +1 -0
- package/dist/native/utils/appleScriptEscape.js +11 -0
- package/dist/native/utils/appleScriptEscape.js.map +1 -0
- package/dist/native/utils/geometry.d.ts +12 -0
- package/dist/native/utils/geometry.d.ts.map +1 -0
- package/dist/native/utils/geometry.js +77 -0
- package/dist/native/utils/geometry.js.map +1 -0
- package/dist/native/utils/redactNative.d.ts +2 -0
- package/dist/native/utils/redactNative.d.ts.map +1 -0
- package/dist/native/utils/redactNative.js +7 -0
- package/dist/native/utils/redactNative.js.map +1 -0
- package/dist/native/utils/waitFor.d.ts +7 -0
- package/dist/native/utils/waitFor.d.ts.map +1 -0
- package/dist/native/utils/waitFor.js +17 -0
- package/dist/native/utils/waitFor.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.actor.d.ts +4 -1
- package/dist/sites/upwork-com/upwork-com.actor.d.ts.map +1 -1
- package/dist/sites/upwork-com/upwork-com.actor.js +31 -11
- package/dist/sites/upwork-com/upwork-com.actor.js.map +1 -1
- package/dist/sites/upwork-com/upwork-com.types.d.ts +3 -1
- package/dist/sites/upwork-com/upwork-com.types.d.ts.map +1 -1
- package/dist/sites/upwork-com/upwork-com.types.js.map +1 -1
- package/dist/sites/upwork-com/util/parseJobApplicationDetails.d.ts +70 -0
- package/dist/sites/upwork-com/util/parseJobApplicationDetails.d.ts.map +1 -0
- package/dist/sites/upwork-com/util/parseJobApplicationDetails.js +334 -0
- package/dist/sites/upwork-com/util/parseJobApplicationDetails.js.map +1 -0
- package/npmrc +5 -0
- package/package.json +5 -1
- package/src/browser/RuntimeConfig.ts +57 -1
- package/src/core/ActorContext.ts +2 -0
- package/src/core/ActorRunner.ts +13 -1
- package/src/index.ts +2 -0
- package/src/native/CompositeNativeWindowDriver.ts +30 -0
- package/src/native/NativeActionRegistry.ts +114 -0
- package/src/native/NativeAutomation.ts +15 -0
- package/src/native/NativeCoordinateMapper.ts +258 -0
- package/src/native/NativeFileDialogService.ts +138 -0
- package/src/native/NativeImageFinder.ts +33 -0
- package/src/native/NativeKeyboard.ts +18 -0
- package/src/native/NativeMouse.ts +116 -0
- package/src/native/NativeWindowService.ts +229 -0
- package/src/native/UnsupportedNativeAutomation.ts +92 -0
- package/src/native/WindowMatcher.ts +31 -0
- package/src/native/drivers.ts +38 -0
- package/src/native/errors.ts +51 -0
- package/src/native/index.ts +12 -0
- package/src/native/macos/MacOSAccessibilityWindowDriver.ts +183 -0
- package/src/native/macos/MacOSAppleScriptClient.ts +182 -0
- package/src/native/macos/MacOSFileDialogAccessibilityStrategy.ts +11 -0
- package/src/native/macos/MacOSNativeAutomation.ts +86 -0
- package/src/native/nut/NutNativeImageFinder.ts +98 -0
- package/src/native/nut/NutNativeKeyboardDriver.ts +38 -0
- package/src/native/nut/NutNativeMouseDriver.ts +27 -0
- package/src/native/nut/NutNativeScreenDriver.ts +14 -0
- package/src/native/nut/NutNativeWindowDriver.ts +61 -0
- package/src/native/nut/loadNut.ts +86 -0
- package/src/native/types.ts +224 -0
- package/src/native/utils/appleScriptEscape.ts +11 -0
- package/src/native/utils/geometry.ts +88 -0
- package/src/native/utils/redactNative.ts +6 -0
- package/src/native/utils/waitFor.ts +25 -0
- package/src/sites/upwork-com/upwork-com.actor.ts +47 -14
- package/src/sites/upwork-com/upwork-com.types.ts +4 -1
- package/src/sites/upwork-com/util/parseJobApplicationDetails.ts +622 -0
- package/tests/fixtures/makeContext.ts +7 -2
- package/tests/fixtures/native/FakeNativeAutomation.ts +138 -0
- package/tests/unit/browser/RuntimeConfig.native.test.ts +63 -0
- package/tests/unit/core/ActorRunner.native.test.ts +69 -0
- package/tests/unit/native/MacOSAppleScriptClient.test.ts +35 -0
- package/tests/unit/native/NativeActionRegistry.test.ts +34 -0
- package/tests/unit/native/NativeCoordinateMapper.test.ts +92 -0
- package/tests/unit/native/NativeFileDialogService.test.ts +91 -0
- package/tests/unit/native/NativeMouse.test.ts +91 -0
- package/tests/unit/native/NativeWindowService.test.ts +87 -0
- package/tests/unit/native/WindowMatcher.test.ts +32 -0
- package/tests/unit/native/appleScriptEscape.test.ts +9 -0
- package/tests/unit/sites/myvistage-com.login.test.ts +1 -1
- package/tests/unit/sites/myvistage-com.postComment.test.ts +0 -1
- package/tests/unit/sites/upwork-com.login.test.ts +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NativeKeyboardDriver } from '../drivers.js';
|
|
2
|
+
export declare class NutNativeKeyboardDriver implements NativeKeyboardDriver {
|
|
3
|
+
type(text: string): Promise<void>;
|
|
4
|
+
pressKey(key: string): Promise<void>;
|
|
5
|
+
pressShortcut(keys: readonly string[]): Promise<void>;
|
|
6
|
+
private resolveKey;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=NutNativeKeyboardDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeKeyboardDriver.d.ts","sourceRoot":"","sources":["../../../src/native/nut/NutNativeKeyboardDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAc1D,qBAAa,uBAAwB,YAAW,oBAAoB;IAC5D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { loadNut } from './loadNut.js';
|
|
2
|
+
function keyName(key) {
|
|
3
|
+
const normalized = key.toLowerCase();
|
|
4
|
+
if (normalized === 'enter' || normalized === 'return')
|
|
5
|
+
return 'ENTER';
|
|
6
|
+
if (normalized === 'escape' || normalized === 'esc')
|
|
7
|
+
return 'ESCAPE';
|
|
8
|
+
if (normalized === 'meta' || normalized === 'command' || normalized === 'cmd')
|
|
9
|
+
return 'LEFT_META';
|
|
10
|
+
if (normalized === 'control' || normalized === 'ctrl')
|
|
11
|
+
return 'LEFT_CONTROL';
|
|
12
|
+
if (normalized === 'shift')
|
|
13
|
+
return 'LEFT_SHIFT';
|
|
14
|
+
if (normalized === 'alt' || normalized === 'option')
|
|
15
|
+
return 'LEFT_ALT';
|
|
16
|
+
return key.toUpperCase();
|
|
17
|
+
}
|
|
18
|
+
export class NutNativeKeyboardDriver {
|
|
19
|
+
async type(text) {
|
|
20
|
+
const nut = await loadNut();
|
|
21
|
+
await nut.keyboard.type(text);
|
|
22
|
+
}
|
|
23
|
+
async pressKey(key) {
|
|
24
|
+
const nut = await loadNut();
|
|
25
|
+
await nut.keyboard.pressKey(this.resolveKey(nut.Key, key));
|
|
26
|
+
}
|
|
27
|
+
async pressShortcut(keys) {
|
|
28
|
+
const nut = await loadNut();
|
|
29
|
+
const resolved = keys.map(key => this.resolveKey(nut.Key, key));
|
|
30
|
+
await nut.keyboard.pressKey(...resolved);
|
|
31
|
+
if (nut.keyboard.releaseKey !== undefined) {
|
|
32
|
+
await nut.keyboard.releaseKey(...resolved.slice().reverse());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
resolveKey(keyMap, key) {
|
|
36
|
+
return keyMap?.[keyName(key)] ?? key;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=NutNativeKeyboardDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeKeyboardDriver.js","sourceRoot":"","sources":["../../../src/native/nut/NutNativeKeyboardDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IACtE,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IACrE,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC;IAClG,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC7E,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC;IAChD,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACvE,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAuB;QACzC,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAA2C,EAAE,GAAW;QACzE,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NativeMouseDriver } from '../drivers.js';
|
|
2
|
+
import type { NativeMouseButton, NativePoint } from '../types.js';
|
|
3
|
+
export declare class NutNativeMouseDriver implements NativeMouseDriver {
|
|
4
|
+
getPosition(): Promise<NativePoint>;
|
|
5
|
+
move(point: NativePoint): Promise<void>;
|
|
6
|
+
click(button: NativeMouseButton): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=NutNativeMouseDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeMouseDriver.d.ts","sourceRoot":"","sources":["../../../src/native/nut/NutNativeMouseDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AASlE,qBAAa,oBAAqB,YAAW,iBAAiB;IACtD,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAKnC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAKtD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { loadNut } from './loadNut.js';
|
|
2
|
+
function buttonName(button) {
|
|
3
|
+
if (button === 'left')
|
|
4
|
+
return 'LEFT';
|
|
5
|
+
if (button === 'right')
|
|
6
|
+
return 'RIGHT';
|
|
7
|
+
return 'MIDDLE';
|
|
8
|
+
}
|
|
9
|
+
export class NutNativeMouseDriver {
|
|
10
|
+
async getPosition() {
|
|
11
|
+
const nut = await loadNut();
|
|
12
|
+
return nut.mouse.getPosition();
|
|
13
|
+
}
|
|
14
|
+
async move(point) {
|
|
15
|
+
const nut = await loadNut();
|
|
16
|
+
await nut.mouse.move(nut.straightTo({ x: point.x, y: point.y }));
|
|
17
|
+
}
|
|
18
|
+
async click(button) {
|
|
19
|
+
const nut = await loadNut();
|
|
20
|
+
const nutButton = nut.Button?.[buttonName(button)] ?? button;
|
|
21
|
+
await nut.mouse.click(nutButton);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=NutNativeMouseDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeMouseDriver.js","sourceRoot":"","sources":["../../../src/native/nut/NutNativeMouseDriver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,SAAS,UAAU,CAAC,MAAyB;IAC3C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,oBAAoB;IAC/B,KAAK,CAAC,WAAW;QACf,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAkB;QAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAyB;QACnC,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;QAC7D,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeScreenDriver.d.ts","sourceRoot":"","sources":["../../../src/native/nut/NutNativeScreenDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,qBAAa,qBAAsB,YAAW,kBAAkB;IACxD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CAIhC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { loadNut } from './loadNut.js';
|
|
2
|
+
export class NutNativeScreenDriver {
|
|
3
|
+
async width() {
|
|
4
|
+
const nut = await loadNut();
|
|
5
|
+
return nut.screen.width();
|
|
6
|
+
}
|
|
7
|
+
async height() {
|
|
8
|
+
const nut = await loadNut();
|
|
9
|
+
return nut.screen.height();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=NutNativeScreenDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeScreenDriver.js","sourceRoot":"","sources":["../../../src/native/nut/NutNativeScreenDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,KAAK;QACT,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NativeWindowDriver, NativeWindowHandle } from '../drivers.js';
|
|
2
|
+
export declare class NutNativeWindowDriver implements NativeWindowDriver {
|
|
3
|
+
list(): Promise<NativeWindowHandle[]>;
|
|
4
|
+
active(): Promise<NativeWindowHandle | null>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=NutNativeWindowDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeWindowDriver.d.ts","sourceRoot":"","sources":["../../../src/native/nut/NutNativeWindowDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAgD5E,qBAAa,qBAAsB,YAAW,kBAAkB;IACxD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAMrC,MAAM,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CAKnD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { loadNut } from './loadNut.js';
|
|
2
|
+
function toRegion(region) {
|
|
3
|
+
return {
|
|
4
|
+
x: region.left ?? region.x ?? 0,
|
|
5
|
+
y: region.top ?? region.y ?? 0,
|
|
6
|
+
width: region.width,
|
|
7
|
+
height: region.height
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
class NutNativeWindowHandle {
|
|
11
|
+
window;
|
|
12
|
+
constructor(window) {
|
|
13
|
+
this.window = window;
|
|
14
|
+
}
|
|
15
|
+
async info() {
|
|
16
|
+
const [title, region] = await Promise.all([
|
|
17
|
+
Promise.resolve(this.window.title),
|
|
18
|
+
Promise.resolve(this.window.region)
|
|
19
|
+
]);
|
|
20
|
+
return {
|
|
21
|
+
title,
|
|
22
|
+
region: toRegion(region)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async focus() {
|
|
26
|
+
await this.window.focus();
|
|
27
|
+
}
|
|
28
|
+
async minimize() {
|
|
29
|
+
await this.window.minimize();
|
|
30
|
+
}
|
|
31
|
+
async restore() {
|
|
32
|
+
await this.window.restore();
|
|
33
|
+
}
|
|
34
|
+
async move(point) {
|
|
35
|
+
await this.window.move({ x: point.x, y: point.y });
|
|
36
|
+
}
|
|
37
|
+
async resize(size) {
|
|
38
|
+
await this.window.resize(size);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class NutNativeWindowDriver {
|
|
42
|
+
async list() {
|
|
43
|
+
const nut = await loadNut();
|
|
44
|
+
const windows = await nut.getWindows();
|
|
45
|
+
return windows.map(window => new NutNativeWindowHandle(window));
|
|
46
|
+
}
|
|
47
|
+
async active() {
|
|
48
|
+
const nut = await loadNut();
|
|
49
|
+
const window = await nut.getActiveWindow();
|
|
50
|
+
return new NutNativeWindowHandle(window);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=NutNativeWindowDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NutNativeWindowDriver.js","sourceRoot":"","sources":["../../../src/native/nut/NutNativeWindowDriver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkC,MAAM,cAAc,CAAC;AAEvE,SAAS,QAAQ,CAAC,MAAiB;IACjC,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC;QAC/B,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB;IACI;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAElD,KAAK,CAAC,IAAI;QACR,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,OAAO;YACL,KAAK;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAkB;QAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAgB;QAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;QAC3C,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface NutPoint {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface NutRegion {
|
|
6
|
+
left?: number;
|
|
7
|
+
top?: number;
|
|
8
|
+
x?: number;
|
|
9
|
+
y?: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
}
|
|
13
|
+
export interface NutWindow {
|
|
14
|
+
title: Promise<string> | string;
|
|
15
|
+
region: Promise<NutRegion> | NutRegion;
|
|
16
|
+
focus(): Promise<void>;
|
|
17
|
+
minimize(): Promise<void>;
|
|
18
|
+
restore(): Promise<void>;
|
|
19
|
+
move(point: NutPoint): Promise<void>;
|
|
20
|
+
resize(size: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface NutModule {
|
|
26
|
+
mouse: {
|
|
27
|
+
getPosition(): Promise<NutPoint>;
|
|
28
|
+
move(path: unknown): Promise<void>;
|
|
29
|
+
click(button: unknown): Promise<void>;
|
|
30
|
+
};
|
|
31
|
+
keyboard: {
|
|
32
|
+
type(text: string): Promise<void>;
|
|
33
|
+
pressKey(...keys: unknown[]): Promise<void>;
|
|
34
|
+
releaseKey?(...keys: unknown[]): Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
screen: {
|
|
37
|
+
width(): Promise<number>;
|
|
38
|
+
height(): Promise<number>;
|
|
39
|
+
find?(resource: unknown, options?: unknown): Promise<NutRegion>;
|
|
40
|
+
waitFor?(resource: unknown, timeoutMs?: number, intervalMs?: number): Promise<NutRegion>;
|
|
41
|
+
config?: {
|
|
42
|
+
confidence?: number;
|
|
43
|
+
resourceDirectory?: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
getWindows(): Promise<NutWindow[]>;
|
|
47
|
+
getActiveWindow(): Promise<NutWindow>;
|
|
48
|
+
straightTo(point: NutPoint): unknown;
|
|
49
|
+
imageResource?(path: string): unknown;
|
|
50
|
+
Button?: Record<string, unknown>;
|
|
51
|
+
Key?: Record<string, unknown>;
|
|
52
|
+
}
|
|
53
|
+
export interface NlMatcherModule {
|
|
54
|
+
useNlMatcher(): void;
|
|
55
|
+
}
|
|
56
|
+
export declare function loadNut(): Promise<NutModule>;
|
|
57
|
+
export declare function loadNlMatcher(): Promise<void>;
|
|
58
|
+
//# sourceMappingURL=loadNut.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadNut.d.ts","sourceRoot":"","sources":["../../../src/native/nut/loadNut.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE;QACL,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACvC,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC;IACF,MAAM,EAAE;QACN,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACzF,MAAM,CAAC,EAAE;YACP,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;IACF,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnC,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IACrC,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,IAAI,IAAI,CAAC;CACtB;AAKD,wBAAsB,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAQlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CASnD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NativeDependencyError } from '../errors.js';
|
|
2
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
3
|
+
let nutModulePromise = null;
|
|
4
|
+
let nlMatcherLoaded = false;
|
|
5
|
+
export async function loadNut() {
|
|
6
|
+
nutModulePromise ??= dynamicImport('@nut-tree/nut-js')
|
|
7
|
+
.then(module => module)
|
|
8
|
+
.catch(error => {
|
|
9
|
+
nutModulePromise = null;
|
|
10
|
+
throw new NativeDependencyError('@nut-tree/nut-js', error);
|
|
11
|
+
});
|
|
12
|
+
return nutModulePromise;
|
|
13
|
+
}
|
|
14
|
+
export async function loadNlMatcher() {
|
|
15
|
+
if (nlMatcherLoaded)
|
|
16
|
+
return;
|
|
17
|
+
const module = await dynamicImport('@nut-tree/nl-matcher')
|
|
18
|
+
.then(value => value)
|
|
19
|
+
.catch(error => {
|
|
20
|
+
throw new NativeDependencyError('@nut-tree/nl-matcher', error);
|
|
21
|
+
});
|
|
22
|
+
module.useNlMatcher();
|
|
23
|
+
nlMatcherLoaded = true;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=loadNut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadNut.js","sourceRoot":"","sources":["../../../src/native/nut/loadNut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAIrD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAkB,CAAC;AA2D7F,IAAI,gBAAgB,GAA8B,IAAI,CAAC;AACvD,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,gBAAgB,KAAK,aAAa,CAAC,kBAAkB,CAAC;SACnD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAmB,CAAC;SACnC,KAAK,CAAC,KAAK,CAAC,EAAE;QACb,gBAAgB,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,qBAAqB,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACL,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,eAAe;QAAE,OAAO;IAC5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC;SACvD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAwB,CAAC;SACvC,KAAK,CAAC,KAAK,CAAC,EAAE;QACb,MAAM,IAAI,qBAAqB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,YAAY,EAAE,CAAC;IACtB,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import type { BrowserSession } from '../browser/BrowserSession.js';
|
|
2
|
+
import type { PageLike } from '../browser/PuppeteerLike.js';
|
|
3
|
+
import type { RuntimeConfig } from '../browser/RuntimeConfig.js';
|
|
4
|
+
import type { Logger } from '../logging/Logger.js';
|
|
5
|
+
export type NativePlatform = 'macos';
|
|
6
|
+
export type NativeMouseButton = 'left' | 'right' | 'middle';
|
|
7
|
+
export type NativeFileDialogStrategy = 'auto' | 'applescript' | 'visual' | 'keyboard';
|
|
8
|
+
export type NativeWindowControlStrategy = 'auto' | 'accessibility' | 'visual';
|
|
9
|
+
export interface NativePoint {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ScreenPoint extends NativePoint {
|
|
14
|
+
}
|
|
15
|
+
export interface BrowserPoint extends NativePoint {
|
|
16
|
+
}
|
|
17
|
+
export interface NativeSize {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
}
|
|
21
|
+
export interface NativeRegion extends NativePoint, NativeSize {
|
|
22
|
+
}
|
|
23
|
+
export interface WaitOptions {
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
intervalMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface WindowMatcher {
|
|
28
|
+
appName?: string;
|
|
29
|
+
title?: string;
|
|
30
|
+
titleIncludes?: string;
|
|
31
|
+
titleRegex?: RegExp | string;
|
|
32
|
+
bundleId?: string;
|
|
33
|
+
role?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface NativeWindowInfo {
|
|
36
|
+
id?: string | number;
|
|
37
|
+
title: string;
|
|
38
|
+
appName?: string;
|
|
39
|
+
bundleId?: string;
|
|
40
|
+
role?: string;
|
|
41
|
+
region: NativeRegion;
|
|
42
|
+
isFocused?: boolean;
|
|
43
|
+
isMinimized?: boolean;
|
|
44
|
+
isFullscreen?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface EnsureWindowInViewOptions extends WaitOptions {
|
|
47
|
+
restore?: boolean;
|
|
48
|
+
focus?: boolean;
|
|
49
|
+
moveIntoPrimaryDisplay?: boolean;
|
|
50
|
+
minimumVisibleWidth?: number;
|
|
51
|
+
minimumVisibleHeight?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface WindowButtonOptions extends WaitOptions {
|
|
54
|
+
strategy?: NativeWindowControlStrategy;
|
|
55
|
+
fullscreenButtonTemplate?: string;
|
|
56
|
+
searchRegionPaddingPx?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface SelectFileOptions extends WaitOptions {
|
|
59
|
+
appName?: string;
|
|
60
|
+
dialogTitle?: string;
|
|
61
|
+
openButtonTemplate?: string;
|
|
62
|
+
inputFieldTemplate?: string;
|
|
63
|
+
strategy?: NativeFileDialogStrategy;
|
|
64
|
+
clickOpen?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface NativeMouseMoveOptions {
|
|
67
|
+
precise?: boolean;
|
|
68
|
+
jitterPixels?: number;
|
|
69
|
+
minJitterPixels?: number;
|
|
70
|
+
moveSpeed?: number;
|
|
71
|
+
disableHumanPath?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface NativeMouseClickOptions extends NativeMouseMoveOptions {
|
|
74
|
+
button?: NativeMouseButton;
|
|
75
|
+
delayBeforeClickMs?: number;
|
|
76
|
+
delayAfterMoveMs?: number;
|
|
77
|
+
regionPaddingPx?: number;
|
|
78
|
+
}
|
|
79
|
+
export interface NativeKeyboardTypeOptions {
|
|
80
|
+
delayMs?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface NativeKeyboard {
|
|
83
|
+
type(text: string, options?: NativeKeyboardTypeOptions): Promise<void>;
|
|
84
|
+
pressKey(key: string): Promise<void>;
|
|
85
|
+
pressShortcut(keys: readonly string[]): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
export interface NativeMouse {
|
|
88
|
+
moveTo(point: ScreenPoint, options?: NativeMouseMoveOptions): Promise<void>;
|
|
89
|
+
click(point: ScreenPoint, options?: NativeMouseClickOptions): Promise<void>;
|
|
90
|
+
clickRegion(region: NativeRegion, options?: NativeMouseClickOptions): Promise<void>;
|
|
91
|
+
clickBrowserPoint(page: PageLike, point: BrowserPoint, options?: NativeMouseClickOptions): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
export interface NativeTemplateRef {
|
|
94
|
+
name: string;
|
|
95
|
+
buffer?: Uint8Array;
|
|
96
|
+
}
|
|
97
|
+
export interface NativeImageSearchOptions extends WaitOptions {
|
|
98
|
+
searchRegion?: NativeRegion;
|
|
99
|
+
confidence?: number;
|
|
100
|
+
}
|
|
101
|
+
export interface NativeImageMatch {
|
|
102
|
+
region: NativeRegion;
|
|
103
|
+
confidence?: number;
|
|
104
|
+
}
|
|
105
|
+
export interface NativeImageFinder {
|
|
106
|
+
findTemplate(template: string | NativeTemplateRef, options?: NativeImageSearchOptions): Promise<NativeImageMatch | null>;
|
|
107
|
+
waitForTemplate(template: string | NativeTemplateRef, options?: NativeImageSearchOptions): Promise<NativeImageMatch>;
|
|
108
|
+
}
|
|
109
|
+
export interface NativeWindowService {
|
|
110
|
+
list(): Promise<NativeWindowInfo[]>;
|
|
111
|
+
find(matcher: WindowMatcher, options?: WaitOptions): Promise<NativeWindowInfo | null>;
|
|
112
|
+
waitFor(matcher: WindowMatcher, options?: WaitOptions): Promise<NativeWindowInfo>;
|
|
113
|
+
isOpen(matcher: WindowMatcher): Promise<boolean>;
|
|
114
|
+
focus(matcher: WindowMatcher): Promise<NativeWindowInfo>;
|
|
115
|
+
ensureInView(matcher: WindowMatcher, options?: EnsureWindowInViewOptions): Promise<NativeWindowInfo>;
|
|
116
|
+
setFullscreen(matcher: WindowMatcher, fullscreen: boolean, options?: WindowButtonOptions): Promise<void>;
|
|
117
|
+
toggleFullscreen(matcher: WindowMatcher, options?: WindowButtonOptions): Promise<void>;
|
|
118
|
+
minimize(matcher: WindowMatcher): Promise<void>;
|
|
119
|
+
restore(matcher: WindowMatcher): Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
export interface NativeFileDialogService {
|
|
122
|
+
selectFile(filePath: string, options?: SelectFileOptions): Promise<void>;
|
|
123
|
+
}
|
|
124
|
+
export interface BrowserViewportSnapshot {
|
|
125
|
+
screenX: number;
|
|
126
|
+
screenY: number;
|
|
127
|
+
outerWidth: number;
|
|
128
|
+
outerHeight: number;
|
|
129
|
+
innerWidth: number;
|
|
130
|
+
innerHeight: number;
|
|
131
|
+
devicePixelRatio: number;
|
|
132
|
+
}
|
|
133
|
+
export interface CoordinateTransform {
|
|
134
|
+
offsetX: number;
|
|
135
|
+
offsetY: number;
|
|
136
|
+
scaleX: number;
|
|
137
|
+
scaleY: number;
|
|
138
|
+
calibratedAt: number;
|
|
139
|
+
viewport: Pick<BrowserViewportSnapshot, 'innerWidth' | 'innerHeight' | 'devicePixelRatio'>;
|
|
140
|
+
window?: NativeWindowInfo;
|
|
141
|
+
}
|
|
142
|
+
export interface CalibrationOptions extends WaitOptions {
|
|
143
|
+
markerSizePx?: number;
|
|
144
|
+
markerA?: BrowserPoint;
|
|
145
|
+
markerB?: BrowserPoint;
|
|
146
|
+
cacheTtlMs?: number;
|
|
147
|
+
windowMatcher?: WindowMatcher;
|
|
148
|
+
}
|
|
149
|
+
export interface CoordinateMapOptions {
|
|
150
|
+
page?: PageLike;
|
|
151
|
+
useCache?: boolean;
|
|
152
|
+
}
|
|
153
|
+
export interface NativeCoordinateMapper {
|
|
154
|
+
calibrate(page: PageLike, options?: CalibrationOptions): Promise<CoordinateTransform>;
|
|
155
|
+
browserToScreen(point: BrowserPoint, options?: CoordinateMapOptions): Promise<ScreenPoint>;
|
|
156
|
+
screenToBrowser(point: ScreenPoint, options?: CoordinateMapOptions): Promise<BrowserPoint>;
|
|
157
|
+
invalidate(): void;
|
|
158
|
+
}
|
|
159
|
+
export interface NativeActionContext {
|
|
160
|
+
automation: NativeAutomation;
|
|
161
|
+
logger: Logger;
|
|
162
|
+
}
|
|
163
|
+
export interface NativeAction<TInput = unknown, TOutput = unknown> {
|
|
164
|
+
name: string;
|
|
165
|
+
description?: string;
|
|
166
|
+
run(context: NativeActionContext, input: TInput): Promise<TOutput>;
|
|
167
|
+
}
|
|
168
|
+
export interface NativeActionMetadata {
|
|
169
|
+
name: string;
|
|
170
|
+
description?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface NativeActionRegistry {
|
|
173
|
+
register<TInput, TOutput>(action: NativeAction<TInput, TOutput>): this;
|
|
174
|
+
get<TInput = unknown, TOutput = unknown>(name: string): NativeAction<TInput, TOutput>;
|
|
175
|
+
run<TInput = unknown, TOutput = unknown>(name: string, input: TInput): Promise<TOutput>;
|
|
176
|
+
list(): NativeActionMetadata[];
|
|
177
|
+
}
|
|
178
|
+
export interface NativeAutomation {
|
|
179
|
+
windows: NativeWindowService;
|
|
180
|
+
fileDialogs: NativeFileDialogService;
|
|
181
|
+
mouse: NativeMouse;
|
|
182
|
+
keyboard: NativeKeyboard;
|
|
183
|
+
coordinates: NativeCoordinateMapper;
|
|
184
|
+
images: NativeImageFinder;
|
|
185
|
+
actions: NativeActionRegistry;
|
|
186
|
+
}
|
|
187
|
+
export interface NativeAutomationFactoryArgs {
|
|
188
|
+
session: BrowserSession;
|
|
189
|
+
page: PageLike;
|
|
190
|
+
config: RuntimeConfig;
|
|
191
|
+
logger: Logger;
|
|
192
|
+
}
|
|
193
|
+
export type NativeAutomationFactory = (args: NativeAutomationFactoryArgs) => NativeAutomation;
|
|
194
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escapes arbitrary text for use as an AppleScript string literal.
|
|
3
|
+
* AppleScript string literals are double-quoted and escape double quotes/backslashes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function appleScriptString(value: string): string;
|
|
6
|
+
export declare function appleScriptRegexLiteral(value: RegExp | string): string;
|
|
7
|
+
//# sourceMappingURL=appleScriptEscape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appleScriptEscape.d.ts","sourceRoot":"","sources":["../../../src/native/utils/appleScriptEscape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escapes arbitrary text for use as an AppleScript string literal.
|
|
3
|
+
* AppleScript string literals are double-quoted and escape double quotes/backslashes.
|
|
4
|
+
*/
|
|
5
|
+
export function appleScriptString(value) {
|
|
6
|
+
return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
7
|
+
}
|
|
8
|
+
export function appleScriptRegexLiteral(value) {
|
|
9
|
+
return value instanceof RegExp ? value.source : value;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=appleScriptEscape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appleScriptEscape.js","sourceRoot":"","sources":["../../../src/native/utils/appleScriptEscape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,OAAO,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NativePoint, NativeRegion } from '../types.js';
|
|
2
|
+
export declare function centerOf(region: NativeRegion): NativePoint;
|
|
3
|
+
export declare function normalizeRegion(region: NativeRegion): NativeRegion;
|
|
4
|
+
export declare function isPointInsideRegion(point: NativePoint, region: NativeRegion): boolean;
|
|
5
|
+
export declare function clampPointToRegion(point: NativePoint, region: NativeRegion): NativePoint;
|
|
6
|
+
export declare function paddedRegion(region: NativeRegion, paddingPx: number): NativeRegion;
|
|
7
|
+
export declare function intersects(a: NativeRegion, b: NativeRegion): boolean;
|
|
8
|
+
export declare function intersection(a: NativeRegion, b: NativeRegion): NativeRegion;
|
|
9
|
+
export declare function visibleEnough(region: NativeRegion, viewport: NativeRegion, minimumWidth: number, minimumHeight: number): boolean;
|
|
10
|
+
export declare function randomPointInRegion(region: NativeRegion, random: () => number, paddingPx?: number): NativePoint;
|
|
11
|
+
export declare function roundPoint(point: NativePoint): NativePoint;
|
|
12
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/native/utils/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAK1D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAOlE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAKrF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,CAKxF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CASlF;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAKpE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAY3E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAIhI;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,SAAI,GAAG,WAAW,CAU1G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAK1D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export function centerOf(region) {
|
|
2
|
+
return {
|
|
3
|
+
x: region.x + region.width / 2,
|
|
4
|
+
y: region.y + region.height / 2
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function normalizeRegion(region) {
|
|
8
|
+
return {
|
|
9
|
+
x: region.x,
|
|
10
|
+
y: region.y,
|
|
11
|
+
width: Math.max(0, region.width),
|
|
12
|
+
height: Math.max(0, region.height)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function isPointInsideRegion(point, region) {
|
|
16
|
+
return point.x >= region.x
|
|
17
|
+
&& point.x <= region.x + region.width
|
|
18
|
+
&& point.y >= region.y
|
|
19
|
+
&& point.y <= region.y + region.height;
|
|
20
|
+
}
|
|
21
|
+
export function clampPointToRegion(point, region) {
|
|
22
|
+
return {
|
|
23
|
+
x: Math.min(Math.max(point.x, region.x), region.x + region.width),
|
|
24
|
+
y: Math.min(Math.max(point.y, region.y), region.y + region.height)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function paddedRegion(region, paddingPx) {
|
|
28
|
+
const x = region.x + paddingPx;
|
|
29
|
+
const y = region.y + paddingPx;
|
|
30
|
+
return normalizeRegion({
|
|
31
|
+
x,
|
|
32
|
+
y,
|
|
33
|
+
width: region.width - paddingPx * 2,
|
|
34
|
+
height: region.height - paddingPx * 2
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function intersects(a, b) {
|
|
38
|
+
return a.x < b.x + b.width
|
|
39
|
+
&& a.x + a.width > b.x
|
|
40
|
+
&& a.y < b.y + b.height
|
|
41
|
+
&& a.y + a.height > b.y;
|
|
42
|
+
}
|
|
43
|
+
export function intersection(a, b) {
|
|
44
|
+
const x = Math.max(a.x, b.x);
|
|
45
|
+
const y = Math.max(a.y, b.y);
|
|
46
|
+
const right = Math.min(a.x + a.width, b.x + b.width);
|
|
47
|
+
const bottom = Math.min(a.y + a.height, b.y + b.height);
|
|
48
|
+
return normalizeRegion({
|
|
49
|
+
x,
|
|
50
|
+
y,
|
|
51
|
+
width: right - x,
|
|
52
|
+
height: bottom - y
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function visibleEnough(region, viewport, minimumWidth, minimumHeight) {
|
|
56
|
+
if (!intersects(region, viewport))
|
|
57
|
+
return false;
|
|
58
|
+
const visible = intersection(region, viewport);
|
|
59
|
+
return visible.width >= Math.min(region.width, minimumWidth) && visible.height >= Math.min(region.height, minimumHeight);
|
|
60
|
+
}
|
|
61
|
+
export function randomPointInRegion(region, random, paddingPx = 0) {
|
|
62
|
+
const safe = paddedRegion(region, paddingPx);
|
|
63
|
+
if (safe.width <= 0 || safe.height <= 0) {
|
|
64
|
+
return centerOf(region);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
x: safe.x + random() * safe.width,
|
|
68
|
+
y: safe.y + random() * safe.height
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function roundPoint(point) {
|
|
72
|
+
return {
|
|
73
|
+
x: Math.round(point.x),
|
|
74
|
+
y: Math.round(point.y)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=geometry.js.map
|