import { BrowserExtensionTab, BrowserConnected, BrowserInfo } from './browser.interface.js'; import { KeyboardBrowserTypeOptions, KeyboardKeyDownOptions, KeyboardKeyUpOptions } from './keyboard.interface.js'; import '../utils/constant/shortcut.const.js'; interface BrowserGetTextOptions { onlyVisibleText: boolean; } interface BrowserGetHTMLOptions { outerHTML: boolean; } interface BrowserWaitForSelectorOptions { timeout?: number; state?: 'attached' | 'detached' | 'visible' | 'hidden'; } interface BrowserSelectFileData { fileName: string; mimeType: string; lastModified: number; contents: ArrayBuffer; } interface BrowserSelectFileOptions { action?: 'select' | 'drag-drop'; } interface WSAckErrorResult { error: boolean; errorMessage: string; } type WSAckCallback = (result: T | WSAckErrorResult) => void; interface ExtensionWSClientToServerEvents { 'browser:last-accessed': (data: { browserId: string; lastAccessed: number; }) => void; } interface ExtensionBrowserTabDetail { tabId: number; } interface ExtensionBrowserTab { id: number; url: string; title: string; active: boolean; windowId: number; } interface ExtensionBrowserElementSelector { selector: string; elementIndex?: number; parentSelector?: string; parentSelectorIndex?: number; } type ExtensionWSAckHandler = (...args: [...T, cb: WSAckCallback]) => void; type ExtensionWSAckTabHandler = (tab: ExtensionBrowserTabDetail, ...args: [...T, cb: WSAckCallback]) => void; type ExtensionWSAckElementHandler = ExtensionWSAckTabHandler<[ selector: ExtensionBrowserElementSelector, ...T ], R>; interface ExtensionTabsQueryOptions { url?: string; index?: number; title?: string; active?: boolean; lastFocusedWindow?: boolean; status?: 'loading' | 'complete'; } interface ExtensionActiveTabActionWSEvents { 'tabs:is-closed': ExtensionWSAckTabHandler<[], boolean>; 'tabs:query': ExtensionWSAckHandler<[ query: ExtensionTabsQueryOptions & { lastFocusedBrowser?: boolean; } ], ExtensionBrowserTab[]>; 'tabs:get-detail': ExtensionWSAckTabHandler<[], ExtensionBrowserTab | null>; 'tabs:click': ExtensionWSAckElementHandler; 'tabs:mouse-up': ExtensionWSAckElementHandler; 'tabs:mouse-down': ExtensionWSAckElementHandler; 'tabs:type': ExtensionWSAckElementHandler<[ text: string, options: Partial ]>; 'tabs:select-file': ExtensionWSAckElementHandler<[ files: BrowserSelectFileData[], options: BrowserSelectFileOptions ]>; 'tabs:get-text': ExtensionWSAckElementHandler<[ options: Partial ], string>; 'tabs:get-html': ExtensionWSAckElementHandler<[ options: Partial ], string>; 'tabs:select': ExtensionWSAckElementHandler<[values: string[]], string[]>; 'tabs:key-down': ExtensionWSAckElementHandler<[ key: string, options: KeyboardKeyDownOptions ]>; 'tabs:key-up': ExtensionWSAckElementHandler<[ key: string, options: KeyboardKeyUpOptions ]>; 'tabs:press': ExtensionWSAckElementHandler<[ key: string, options: KeyboardKeyDownOptions & KeyboardKeyUpOptions ]>; 'tabs:get-attributes': ExtensionWSAckElementHandler<[ attrNames: string | string[] | null ], string | null | Record>; 'tabs:set-attributes': ExtensionWSAckElementHandler<[ attrs: Record ]>; 'tabs:element-exists': ExtensionWSAckElementHandler<[ multiple: boolean ], boolean | number[]>; 'tabs:wait-for-selector': ExtensionWSAckElementHandler<[ options: BrowserWaitForSelectorOptions ]>; 'tabs:select-element': ExtensionWSAckTabHandler<[ options: { title?: string; description?: string; filter?: { selector?: string; }; } ], { canceled: boolean; selector: string; }>; 'tabs:reload': ExtensionWSAckTabHandler; } interface ExtensionWSServerToClientEvents extends ExtensionActiveTabActionWSEvents { 'tabs:get-active': ExtensionWSAckHandler<[], BrowserExtensionTab>; 'browser:get-active': ExtensionWSAckHandler<[], BrowserConnected | null>; 'tabs:create-new': ExtensionWSAckHandler<[url: string], BrowserExtensionTab>; } interface ExtensionWSInterServerEvents { } interface ExtensionSocketData { browserInfo: BrowserInfo; } export type { BrowserGetHTMLOptions, BrowserGetTextOptions, BrowserSelectFileData, BrowserSelectFileOptions, BrowserWaitForSelectorOptions, ExtensionActiveTabActionWSEvents, ExtensionBrowserElementSelector, ExtensionBrowserTab, ExtensionBrowserTabDetail, ExtensionSocketData, ExtensionWSClientToServerEvents, ExtensionWSInterServerEvents, ExtensionWSServerToClientEvents, WSAckCallback, WSAckErrorResult };