// Public library helpers that expose the native automation commands as plain functions. import { createBridge } from './bridge.js' import type { NativeModule } from './native-lib.js' import type { DisplayInfo, MouseButton, Point, ScreenshotResult, WindowInfo, } from './types.js' const bridge = createBridge() export type NativeScreenshotInput = Parameters[0] export type NativeClickInput = Parameters[0] export type NativeTypeTextInput = Parameters[0] export type NativePressInput = Parameters[0] export type NativeScrollInput = Parameters[0] export type NativeDragInput = Parameters[0] export type NativeMouseButtonInput = Parameters[0] export async function screenshot(input: NativeScreenshotInput): Promise { return bridge.screenshot({ path: input.path ?? undefined, display: input.display ?? undefined, window: input.window ?? undefined, region: input.region ?? undefined, annotate: input.annotate ?? undefined, }) } export async function click(input: NativeClickInput): Promise { return bridge.click({ point: input.point, button: normalizeMouseButton(input.button), count: input.count ?? 1, modifiers: input.modifiers ?? [], }) } export async function typeText(input: NativeTypeTextInput): Promise { return bridge.typeText({ text: input.text, delayMs: input.delayMs ?? undefined, }) } export async function press(input: NativePressInput): Promise { return bridge.press({ key: input.key, count: input.count ?? 1, delayMs: input.delayMs ?? undefined, }) } export async function scroll(input: NativeScrollInput): Promise { return bridge.scroll({ direction: normalizeDirection(input.direction), amount: input.amount, at: input.at ?? undefined, }) } export async function drag(input: NativeDragInput): Promise { return bridge.drag({ from: input.from, to: input.to, cp: input.cp ?? undefined, button: normalizeMouseButton(input.button), }) } export async function hover(input: Point): Promise { return bridge.hover(input) } export async function mouseMove(input: Point): Promise { return bridge.mouseMove(input) } export async function mouseDown(input: NativeMouseButtonInput): Promise { return bridge.mouseDown({ button: normalizeMouseButton(input.button), }) } export async function mouseUp(input: NativeMouseButtonInput): Promise { return bridge.mouseUp({ button: normalizeMouseButton(input.button), }) } export async function mousePosition(): Promise { return bridge.mousePosition() } export async function displayList(): Promise { return bridge.displayList() } export async function windowList(): Promise { return bridge.windowList() } function normalizeMouseButton(input: MouseButton | null): MouseButton { return input ?? 'left' } function normalizeDirection(input: string): 'up' | 'down' | 'left' | 'right' { if (input === 'up' || input === 'down' || input === 'left' || input === 'right') { return input } throw new Error(`Invalid direction "${input}". Expected up, down, left, or right`) }