@midscene/web 1.16.5 → 1.17.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/dist/es/bridge-mode/io-client.mjs +1 -1
- package/dist/es/bridge-mode/io-server.mjs +2 -2
- package/dist/es/bridge-mode/page-browser-side.mjs +1 -1
- package/dist/es/cli.mjs +1 -1
- package/dist/es/web-page.mjs +3 -0
- package/dist/es/web-page.mjs.map +1 -1
- package/dist/lib/bridge-mode/io-client.js +1 -1
- package/dist/lib/bridge-mode/io-server.js +2 -2
- package/dist/lib/bridge-mode/page-browser-side.js +1 -1
- package/dist/lib/cli.js +1 -1
- package/dist/lib/web-page.js +3 -0
- package/dist/lib/web-page.js.map +1 -1
- package/dist/types/web-page.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -101,7 +101,7 @@ class BridgeServer {
|
|
|
101
101
|
logMsg('one client connected');
|
|
102
102
|
this.socket = socket;
|
|
103
103
|
const clientVersion = socket.handshake.query.version;
|
|
104
|
-
logMsg(`Bridge connected, cli-side version v1.
|
|
104
|
+
logMsg(`Bridge connected, cli-side version v1.17.0, browser-side version v${clientVersion}`);
|
|
105
105
|
socket.on(BridgeEvent.CallResponse, (params)=>{
|
|
106
106
|
const id = params.id;
|
|
107
107
|
const response = params.response;
|
|
@@ -125,7 +125,7 @@ class BridgeServer {
|
|
|
125
125
|
setTimeout(()=>{
|
|
126
126
|
this.onConnect?.();
|
|
127
127
|
const payload = {
|
|
128
|
-
version: "1.
|
|
128
|
+
version: "1.17.0"
|
|
129
129
|
};
|
|
130
130
|
socket.emit(BridgeEvent.Connected, payload);
|
|
131
131
|
Promise.resolve().then(()=>{
|
|
@@ -100,7 +100,7 @@ class ExtensionBridgePageBrowserSide extends page {
|
|
|
100
100
|
throw new Error('Connection denied by user');
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
this.onLogMessage(`Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v1.
|
|
103
|
+
this.onLogMessage(`Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v1.17.0`, 'log');
|
|
104
104
|
}
|
|
105
105
|
async connect() {
|
|
106
106
|
return await this.setupBridgeClient();
|
package/dist/es/cli.mjs
CHANGED
package/dist/es/web-page.mjs
CHANGED
|
@@ -264,6 +264,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
264
264
|
}),
|
|
265
265
|
defineAction({
|
|
266
266
|
name: 'Reload',
|
|
267
|
+
supportedBySystemOne: true,
|
|
267
268
|
description: 'Reload the current page',
|
|
268
269
|
call: async ()=>{
|
|
269
270
|
if (!page.reload) throw new Error('Reload operation is not supported on this page type');
|
|
@@ -273,6 +274,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
273
274
|
}),
|
|
274
275
|
defineAction({
|
|
275
276
|
name: 'GoBack',
|
|
277
|
+
supportedBySystemOne: true,
|
|
276
278
|
description: 'Navigate back in browser history',
|
|
277
279
|
call: async ()=>{
|
|
278
280
|
if (!page.goBack) throw new Error('GoBack operation is not supported on this page type');
|
|
@@ -282,6 +284,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
282
284
|
}),
|
|
283
285
|
defineAction({
|
|
284
286
|
name: 'GoForward',
|
|
287
|
+
supportedBySystemOne: true,
|
|
285
288
|
description: 'Navigate forward in browser history',
|
|
286
289
|
call: async ()=>{
|
|
287
290
|
if (!page.goForward) throw new Error('GoForward operation is not supported on this page type');
|
package/dist/es/web-page.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-page.mjs","sources":["../../src/web-page.ts"],"sourcesContent":["import type { Point } from '@midscene/core';\nimport { z } from '@midscene/core';\nimport {\n AbstractInterface,\n type BrowserInputPrimitives,\n type DeviceAction,\n type InputStrategy,\n defineAction,\n defineActionsFromInputPrimitives,\n resolveTextInputOptions,\n sendTextSequentially,\n} from '@midscene/core/device';\n\nimport { sleep } from '@midscene/core/utils';\nimport type { ElementInfo } from '@midscene/shared/extractor';\nimport { transformHotkeyInput } from '@midscene/shared/us-keyboard-layout';\n\nconst navigateParamSchema = z.object({\n url: z\n .string()\n .describe(\n 'The URL to navigate to. Must start with https://, file://, or a similar protocol.',\n ),\n});\n\nfunction normalizeKeyInputs(value: string | string[]): string[] {\n const inputs = Array.isArray(value) ? value : [value];\n const result: string[] = [];\n\n for (const input of inputs) {\n if (typeof input !== 'string') {\n result.push(input as unknown as string);\n continue;\n }\n\n const trimmed = input.trim();\n if (!trimmed) {\n result.push(input);\n continue;\n }\n\n let normalized = trimmed;\n if (normalized.length > 1 && normalized.includes('+')) {\n normalized = normalized.replace(/\\s*\\+\\s*/g, ' ');\n }\n if (/\\s/.test(normalized)) {\n normalized = normalized.replace(/\\s+/g, ' ');\n }\n\n const transformed = transformHotkeyInput(normalized);\n if (transformed.length === 1 && transformed[0] === '' && trimmed !== '') {\n result.push(input);\n continue;\n }\n if (transformed.length === 0) {\n result.push(input);\n continue;\n }\n\n result.push(...transformed);\n }\n\n return result;\n}\n\nexport function getKeyCommands(\n value: string | string[],\n): Array<{ key: string; command?: string }> {\n const keys = normalizeKeyInputs(value);\n\n return keys.reduce((acc: Array<{ key: string; command?: string }>, k) => {\n const includeMeta = keys.includes('Meta') || keys.includes('Control');\n if (includeMeta && (k === 'a' || k === 'A')) {\n return acc.concat([{ key: k, command: 'SelectAll' }]);\n }\n if (includeMeta && (k === 'c' || k === 'C')) {\n return acc.concat([{ key: k, command: 'Copy' }]);\n }\n if (includeMeta && (k === 'v' || k === 'V')) {\n return acc.concat([{ key: k, command: 'Paste' }]);\n }\n return acc.concat([{ key: k }]);\n }, []);\n}\n\n// this is copied from puppeteer, but we don't want to import puppeteer here\nexport declare type KeyInput =\n | '0'\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | 'Power'\n | 'Eject'\n | 'Abort'\n | 'Help'\n | 'Backspace'\n | 'Tab'\n | 'Numpad5'\n | 'NumpadEnter'\n | 'Enter'\n | '\\r'\n | '\\n'\n | 'ShiftLeft'\n | 'ShiftRight'\n | 'ControlLeft'\n | 'ControlRight'\n | 'AltLeft'\n | 'AltRight'\n | 'Pause'\n | 'CapsLock'\n | 'Escape'\n | 'Convert'\n | 'NonConvert'\n | 'Space'\n | 'Numpad9'\n | 'PageUp'\n | 'Numpad3'\n | 'PageDown'\n | 'End'\n | 'Numpad1'\n | 'Home'\n | 'Numpad7'\n | 'ArrowLeft'\n | 'Numpad4'\n | 'Numpad8'\n | 'ArrowUp'\n | 'ArrowRight'\n | 'Numpad6'\n | 'Numpad2'\n | 'ArrowDown'\n | 'Select'\n | 'Open'\n | 'PrintScreen'\n | 'Insert'\n | 'Numpad0'\n | 'Delete'\n | 'NumpadDecimal'\n | 'Digit0'\n | 'Digit1'\n | 'Digit2'\n | 'Digit3'\n | 'Digit4'\n | 'Digit5'\n | 'Digit6'\n | 'Digit7'\n | 'Digit8'\n | 'Digit9'\n | 'KeyA'\n | 'KeyB'\n | 'KeyC'\n | 'KeyD'\n | 'KeyE'\n | 'KeyF'\n | 'KeyG'\n | 'KeyH'\n | 'KeyI'\n | 'KeyJ'\n | 'KeyK'\n | 'KeyL'\n | 'KeyM'\n | 'KeyN'\n | 'KeyO'\n | 'KeyP'\n | 'KeyQ'\n | 'KeyR'\n | 'KeyS'\n | 'KeyT'\n | 'KeyU'\n | 'KeyV'\n | 'KeyW'\n | 'KeyX'\n | 'KeyY'\n | 'KeyZ'\n | 'MetaLeft'\n | 'MetaRight'\n | 'ContextMenu'\n | 'NumpadMultiply'\n | 'NumpadAdd'\n | 'NumpadSubtract'\n | 'NumpadDivide'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | 'F13'\n | 'F14'\n | 'F15'\n | 'F16'\n | 'F17'\n | 'F18'\n | 'F19'\n | 'F20'\n | 'F21'\n | 'F22'\n | 'F23'\n | 'F24'\n | 'NumLock'\n | 'ScrollLock'\n | 'AudioVolumeMute'\n | 'AudioVolumeDown'\n | 'AudioVolumeUp'\n | 'MediaTrackNext'\n | 'MediaTrackPrevious'\n | 'MediaStop'\n | 'MediaPlayPause'\n | 'Semicolon'\n | 'Equal'\n | 'NumpadEqual'\n | 'Comma'\n | 'Minus'\n | 'Period'\n | 'Slash'\n | 'Backquote'\n | 'BracketLeft'\n | 'Backslash'\n | 'BracketRight'\n | 'Quote'\n | 'AltGraph'\n | 'Props'\n | 'Cancel'\n | 'Clear'\n | 'Shift'\n | 'Control'\n | 'Alt'\n | 'Accept'\n | 'ModeChange'\n | ' '\n | 'Print'\n | 'Execute'\n | '\\u0000'\n | 'a'\n | 'b'\n | 'c'\n | 'd'\n | 'e'\n | 'f'\n | 'g'\n | 'h'\n | 'i'\n | 'j'\n | 'k'\n | 'l'\n | 'm'\n | 'n'\n | 'o'\n | 'p'\n | 'q'\n | 'r'\n | 's'\n | 't'\n | 'u'\n | 'v'\n | 'w'\n | 'x'\n | 'y'\n | 'z'\n | 'Meta'\n | '*'\n | '+'\n | '-'\n | '/'\n | ';'\n | '='\n | ','\n | '.'\n | '`'\n | '['\n | '\\\\'\n | ']'\n | \"'\"\n | 'Attn'\n | 'CrSel'\n | 'ExSel'\n | 'EraseEof'\n | 'Play'\n | 'ZoomOut'\n | ')'\n | '!'\n | '@'\n | '#'\n | '$'\n | '%'\n | '^'\n | '&'\n | '('\n | 'A'\n | 'B'\n | 'C'\n | 'D'\n | 'E'\n | 'F'\n | 'G'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'P'\n | 'Q'\n | 'R'\n | 'S'\n | 'T'\n | 'U'\n | 'V'\n | 'W'\n | 'X'\n | 'Y'\n | 'Z'\n | ':'\n | '<'\n | '_'\n | '>'\n | '?'\n | '~'\n | '{'\n | '|'\n | '}'\n | '\"'\n | 'SoftLeft'\n | 'SoftRight'\n | 'Camera'\n | 'Call'\n | 'EndCall'\n | 'VolumeDown'\n | 'VolumeUp';\n\nexport type MouseButton = 'left' | 'right' | 'middle';\n\nexport interface MouseAction {\n click: (\n x: number,\n y: number,\n options: { button: MouseButton; count?: number },\n ) => Promise<void>;\n wheel: (deltaX: number, deltaY: number) => Promise<void>;\n move: (x: number, y: number) => Promise<void>;\n drag: (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => Promise<void>;\n}\n\nexport interface KeyboardAction {\n type: (text: string, options?: { delay?: number }) => Promise<void>;\n insertText: (text: string) => Promise<void>;\n press: (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => Promise<void>;\n}\n\nexport interface ChromePageDestroyOptions {\n closeTab?: boolean; // should close the tab when the page object is destroyed\n}\n\nexport abstract class AbstractWebPage extends AbstractInterface {\n readonly keyboardTypeDelay?: number;\n readonly inputStrategy?: InputStrategy;\n navigate?(url: string): Promise<void>;\n reload?(): Promise<void>;\n goBack?(): Promise<void>;\n goForward?(): Promise<void>;\n stopLoading?(): Promise<void>;\n navigationState?(): Promise<{ isLoading: boolean }>;\n flushPendingVisualUpdate?(force?: boolean): Promise<void>;\n schedulePendingVisualUpdate?(force?: boolean): void;\n waitForDomQuiet?(opts?: {\n quietMs?: number;\n timeoutMs?: number;\n target?: ElementInfo;\n }): Promise<void>;\n\n get mouse(): MouseAction {\n return {\n click: async (\n x: number,\n y: number,\n options: { button: MouseButton },\n ) => {},\n wheel: async (deltaX: number, deltaY: number) => {},\n move: async (x: number, y: number) => {},\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {},\n };\n }\n\n get keyboard(): KeyboardAction {\n return {\n type: async (text: string, options?: { delay?: number }) => {},\n insertText: async (text: string) => {},\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {},\n };\n }\n\n async clearInput(element?: ElementInfo): Promise<void> {}\n\n async selectAllInput(element?: ElementInfo): Promise<void> {\n throw new Error('Bulk text input is not supported by this web page');\n }\n\n abstract scrollUntilTop(startingPoint?: Point): Promise<void>;\n abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;\n abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;\n abstract scrollUntilRight(startingPoint?: Point): Promise<void>;\n abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;\n abstract longPress(x: number, y: number, duration?: number): Promise<void>;\n abstract swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ): Promise<void>;\n abstract pinch(\n centerX: number,\n centerY: number,\n startDistance: number,\n endDistance: number,\n duration?: number,\n ): Promise<void>;\n}\n\nconst scheduleWebVisualUpdate = (\n page: AbstractWebPage,\n force = false,\n): void => {\n if (page.schedulePendingVisualUpdate) {\n if (force) {\n page.schedulePendingVisualUpdate(true);\n } else {\n page.schedulePendingVisualUpdate();\n }\n return;\n }\n\n const pendingRefresh = force\n ? page.flushPendingVisualUpdate?.(true)\n : page.flushPendingVisualUpdate?.();\n void pendingRefresh?.catch(() => undefined);\n};\n\nexport function createWebInputPrimitives(\n page: AbstractWebPage,\n): BrowserInputPrimitives {\n const scheduleVisualUpdate = () => scheduleWebVisualUpdate(page);\n\n return {\n pointer: {\n tap: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left' });\n scheduleVisualUpdate();\n },\n rightClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'right' });\n scheduleVisualUpdate();\n },\n doubleClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left', count: 2 });\n scheduleVisualUpdate();\n },\n hover: async ({ x, y }) => {\n await page.mouse.move(x, y);\n scheduleVisualUpdate();\n },\n dragAndDrop: async (from, to) => {\n await page.mouse.drag(from, to);\n scheduleVisualUpdate();\n },\n longPress: async ({ x, y }, opts) => {\n await page.longPress(x, y, opts?.duration);\n scheduleVisualUpdate();\n },\n },\n keyboard: {\n typeText: async (value, opts) => {\n const element = opts?.target;\n const { inputStrategy, keyboardTypeDelay } = resolveTextInputOptions(\n opts,\n page,\n );\n if (element && opts?.replace !== false) {\n if (inputStrategy === 'bulk') {\n // Keep the current value selected so insertText replaces it in one\n // input operation instead of emitting a separate empty value.\n await page.selectAllInput(element as ElementInfo);\n } else {\n await page.clearInput(element as ElementInfo);\n // Frameworks (React/Vue/etc.) often re-render in response to\n // the `input` event fired by clearing. If that re-render lands\n // between clearInput returning and the first typed character,\n // the keypresses can be dropped. Wait for the DOM to settle\n // before starting to type.\n await page.waitForDomQuiet?.({ target: element as ElementInfo });\n }\n } else if (element && opts?.focusOnly) {\n const target = element as ElementInfo;\n await page.mouse.click(target.center[0], target.center[1], {\n button: 'left',\n });\n await page.keyboard.press([{ key: 'End' }]);\n }\n\n if (opts?.focusOnly) {\n return;\n }\n\n if (inputStrategy === 'bulk') {\n await page.keyboard.insertText(value);\n } else if (inputStrategy === 'sequential') {\n await sendTextSequentially(\n value,\n {\n // The shared loop owns the inter-character delay. Explicitly\n // disable the page default so action-level zero remains\n // effective and positive delays are not applied twice.\n sendCharacter: (character) =>\n page.keyboard.type(character, { delay: 0 }),\n wait: sleep,\n },\n { delayMs: keyboardTypeDelay },\n );\n } else {\n const keyboardTypeOptions =\n keyboardTypeDelay === undefined\n ? undefined\n : { delay: keyboardTypeDelay };\n await page.keyboard.type(value, keyboardTypeOptions);\n }\n scheduleVisualUpdate();\n },\n keyboardPress: async (keyName, opts) => {\n const element = opts?.target as\n | { center: [number, number] }\n | undefined;\n if (element) {\n await page.mouse.click(element.center[0], element.center[1], {\n button: 'left',\n });\n }\n\n const keys = getKeyCommands(keyName);\n await page.keyboard.press(keys as any);\n scheduleVisualUpdate();\n },\n cursorMove: async (direction, times = 1) => {\n const arrowKey = direction === 'left' ? 'ArrowLeft' : 'ArrowRight';\n for (let i = 0; i < times; i++) {\n await page.keyboard.press([{ key: arrowKey as any }]);\n await sleep(100);\n }\n },\n clearInput: async (target) => {\n await page.clearInput(target as ElementInfo | undefined);\n },\n },\n touch: {\n pinch: async ({ x, y }, opts) => {\n await page.pinch(\n x,\n y,\n opts.startDistance,\n opts.endDistance,\n opts.duration,\n );\n },\n swipe: async (from, to, opts) => {\n await page.swipe(from, to, opts?.duration);\n },\n },\n scroll: {\n scroll: async (param) => {\n const element = param.locate;\n const startingPoint = element\n ? {\n left: element.center[0],\n top: element.center[1],\n }\n : undefined;\n const scrollToEventName = param?.scrollType;\n if (scrollToEventName === 'scrollToTop') {\n await page.scrollUntilTop(startingPoint);\n } else if (scrollToEventName === 'scrollToBottom') {\n await page.scrollUntilBottom(startingPoint);\n } else if (scrollToEventName === 'scrollToRight') {\n await page.scrollUntilRight(startingPoint);\n } else if (scrollToEventName === 'scrollToLeft') {\n await page.scrollUntilLeft(startingPoint);\n } else if (scrollToEventName === 'singleAction' || !scrollToEventName) {\n if (param?.direction === 'down' || !param || !param.direction) {\n await page.scrollDown(param?.distance || undefined, startingPoint);\n } else if (param.direction === 'up') {\n await page.scrollUp(param.distance || undefined, startingPoint);\n } else if (param.direction === 'left') {\n await page.scrollLeft(param.distance || undefined, startingPoint);\n } else if (param.direction === 'right') {\n await page.scrollRight(param.distance || undefined, startingPoint);\n } else {\n throw new Error(`Unknown scroll direction: ${param.direction}`);\n }\n await sleep(500);\n } else {\n throw new Error(\n `Unknown scroll event type: ${scrollToEventName}, param: ${JSON.stringify(\n param,\n )}`,\n );\n }\n scheduleVisualUpdate();\n },\n },\n };\n}\n\nexport const commonWebActionsForWebPage = <T extends AbstractWebPage>(\n page: T,\n includeTouchEvents = false,\n): DeviceAction<any>[] => {\n const input = createWebInputPrimitives(page);\n return [\n ...defineActionsFromInputPrimitives(input, {\n size: () => page.size(),\n includeSwipe: includeTouchEvents,\n }),\n\n defineAction<typeof navigateParamSchema, { url: string }>({\n name: 'Navigate',\n description:\n 'Navigate the browser to a specified URL. Opens the URL in the current tab.',\n paramSchema: navigateParamSchema,\n sample: {\n url: 'https://www.example.com',\n },\n call: async (param) => {\n if (!page.navigate) {\n throw new Error(\n 'Navigate operation is not supported on this page type',\n );\n }\n await page.navigate(param.url);\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'Reload',\n description: 'Reload the current page',\n call: async () => {\n if (!page.reload) {\n throw new Error(\n 'Reload operation is not supported on this page type',\n );\n }\n await page.reload();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'GoBack',\n description: 'Navigate back in browser history',\n call: async () => {\n if (!page.goBack) {\n throw new Error(\n 'GoBack operation is not supported on this page type',\n );\n }\n await page.goBack();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n defineAction({\n name: 'GoForward',\n description: 'Navigate forward in browser history',\n call: async () => {\n if (!page.goForward) {\n throw new Error(\n 'GoForward operation is not supported on this page type',\n );\n }\n await page.goForward();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n ];\n};\n"],"names":["navigateParamSchema","z","normalizeKeyInputs","value","inputs","Array","result","input","trimmed","normalized","transformed","transformHotkeyInput","getKeyCommands","keys","acc","k","includeMeta","AbstractWebPage","AbstractInterface","x","y","options","deltaX","deltaY","from","to","text","action","element","Error","scheduleWebVisualUpdate","page","force","pendingRefresh","undefined","createWebInputPrimitives","scheduleVisualUpdate","opts","inputStrategy","keyboardTypeDelay","resolveTextInputOptions","target","sendTextSequentially","character","sleep","keyboardTypeOptions","keyName","direction","times","arrowKey","i","param","startingPoint","scrollToEventName","JSON","commonWebActionsForWebPage","includeTouchEvents","defineActionsFromInputPrimitives","defineAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-page.mjs","sources":["../../src/web-page.ts"],"sourcesContent":["import type { Point } from '@midscene/core';\nimport { z } from '@midscene/core';\nimport {\n AbstractInterface,\n type BrowserInputPrimitives,\n type DeviceAction,\n type InputStrategy,\n defineAction,\n defineActionsFromInputPrimitives,\n resolveTextInputOptions,\n sendTextSequentially,\n} from '@midscene/core/device';\n\nimport { sleep } from '@midscene/core/utils';\nimport type { ElementInfo } from '@midscene/shared/extractor';\nimport { transformHotkeyInput } from '@midscene/shared/us-keyboard-layout';\n\nconst navigateParamSchema = z.object({\n url: z\n .string()\n .describe(\n 'The URL to navigate to. Must start with https://, file://, or a similar protocol.',\n ),\n});\n\nfunction normalizeKeyInputs(value: string | string[]): string[] {\n const inputs = Array.isArray(value) ? value : [value];\n const result: string[] = [];\n\n for (const input of inputs) {\n if (typeof input !== 'string') {\n result.push(input as unknown as string);\n continue;\n }\n\n const trimmed = input.trim();\n if (!trimmed) {\n result.push(input);\n continue;\n }\n\n let normalized = trimmed;\n if (normalized.length > 1 && normalized.includes('+')) {\n normalized = normalized.replace(/\\s*\\+\\s*/g, ' ');\n }\n if (/\\s/.test(normalized)) {\n normalized = normalized.replace(/\\s+/g, ' ');\n }\n\n const transformed = transformHotkeyInput(normalized);\n if (transformed.length === 1 && transformed[0] === '' && trimmed !== '') {\n result.push(input);\n continue;\n }\n if (transformed.length === 0) {\n result.push(input);\n continue;\n }\n\n result.push(...transformed);\n }\n\n return result;\n}\n\nexport function getKeyCommands(\n value: string | string[],\n): Array<{ key: string; command?: string }> {\n const keys = normalizeKeyInputs(value);\n\n return keys.reduce((acc: Array<{ key: string; command?: string }>, k) => {\n const includeMeta = keys.includes('Meta') || keys.includes('Control');\n if (includeMeta && (k === 'a' || k === 'A')) {\n return acc.concat([{ key: k, command: 'SelectAll' }]);\n }\n if (includeMeta && (k === 'c' || k === 'C')) {\n return acc.concat([{ key: k, command: 'Copy' }]);\n }\n if (includeMeta && (k === 'v' || k === 'V')) {\n return acc.concat([{ key: k, command: 'Paste' }]);\n }\n return acc.concat([{ key: k }]);\n }, []);\n}\n\n// this is copied from puppeteer, but we don't want to import puppeteer here\nexport declare type KeyInput =\n | '0'\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | 'Power'\n | 'Eject'\n | 'Abort'\n | 'Help'\n | 'Backspace'\n | 'Tab'\n | 'Numpad5'\n | 'NumpadEnter'\n | 'Enter'\n | '\\r'\n | '\\n'\n | 'ShiftLeft'\n | 'ShiftRight'\n | 'ControlLeft'\n | 'ControlRight'\n | 'AltLeft'\n | 'AltRight'\n | 'Pause'\n | 'CapsLock'\n | 'Escape'\n | 'Convert'\n | 'NonConvert'\n | 'Space'\n | 'Numpad9'\n | 'PageUp'\n | 'Numpad3'\n | 'PageDown'\n | 'End'\n | 'Numpad1'\n | 'Home'\n | 'Numpad7'\n | 'ArrowLeft'\n | 'Numpad4'\n | 'Numpad8'\n | 'ArrowUp'\n | 'ArrowRight'\n | 'Numpad6'\n | 'Numpad2'\n | 'ArrowDown'\n | 'Select'\n | 'Open'\n | 'PrintScreen'\n | 'Insert'\n | 'Numpad0'\n | 'Delete'\n | 'NumpadDecimal'\n | 'Digit0'\n | 'Digit1'\n | 'Digit2'\n | 'Digit3'\n | 'Digit4'\n | 'Digit5'\n | 'Digit6'\n | 'Digit7'\n | 'Digit8'\n | 'Digit9'\n | 'KeyA'\n | 'KeyB'\n | 'KeyC'\n | 'KeyD'\n | 'KeyE'\n | 'KeyF'\n | 'KeyG'\n | 'KeyH'\n | 'KeyI'\n | 'KeyJ'\n | 'KeyK'\n | 'KeyL'\n | 'KeyM'\n | 'KeyN'\n | 'KeyO'\n | 'KeyP'\n | 'KeyQ'\n | 'KeyR'\n | 'KeyS'\n | 'KeyT'\n | 'KeyU'\n | 'KeyV'\n | 'KeyW'\n | 'KeyX'\n | 'KeyY'\n | 'KeyZ'\n | 'MetaLeft'\n | 'MetaRight'\n | 'ContextMenu'\n | 'NumpadMultiply'\n | 'NumpadAdd'\n | 'NumpadSubtract'\n | 'NumpadDivide'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | 'F13'\n | 'F14'\n | 'F15'\n | 'F16'\n | 'F17'\n | 'F18'\n | 'F19'\n | 'F20'\n | 'F21'\n | 'F22'\n | 'F23'\n | 'F24'\n | 'NumLock'\n | 'ScrollLock'\n | 'AudioVolumeMute'\n | 'AudioVolumeDown'\n | 'AudioVolumeUp'\n | 'MediaTrackNext'\n | 'MediaTrackPrevious'\n | 'MediaStop'\n | 'MediaPlayPause'\n | 'Semicolon'\n | 'Equal'\n | 'NumpadEqual'\n | 'Comma'\n | 'Minus'\n | 'Period'\n | 'Slash'\n | 'Backquote'\n | 'BracketLeft'\n | 'Backslash'\n | 'BracketRight'\n | 'Quote'\n | 'AltGraph'\n | 'Props'\n | 'Cancel'\n | 'Clear'\n | 'Shift'\n | 'Control'\n | 'Alt'\n | 'Accept'\n | 'ModeChange'\n | ' '\n | 'Print'\n | 'Execute'\n | '\\u0000'\n | 'a'\n | 'b'\n | 'c'\n | 'd'\n | 'e'\n | 'f'\n | 'g'\n | 'h'\n | 'i'\n | 'j'\n | 'k'\n | 'l'\n | 'm'\n | 'n'\n | 'o'\n | 'p'\n | 'q'\n | 'r'\n | 's'\n | 't'\n | 'u'\n | 'v'\n | 'w'\n | 'x'\n | 'y'\n | 'z'\n | 'Meta'\n | '*'\n | '+'\n | '-'\n | '/'\n | ';'\n | '='\n | ','\n | '.'\n | '`'\n | '['\n | '\\\\'\n | ']'\n | \"'\"\n | 'Attn'\n | 'CrSel'\n | 'ExSel'\n | 'EraseEof'\n | 'Play'\n | 'ZoomOut'\n | ')'\n | '!'\n | '@'\n | '#'\n | '$'\n | '%'\n | '^'\n | '&'\n | '('\n | 'A'\n | 'B'\n | 'C'\n | 'D'\n | 'E'\n | 'F'\n | 'G'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'P'\n | 'Q'\n | 'R'\n | 'S'\n | 'T'\n | 'U'\n | 'V'\n | 'W'\n | 'X'\n | 'Y'\n | 'Z'\n | ':'\n | '<'\n | '_'\n | '>'\n | '?'\n | '~'\n | '{'\n | '|'\n | '}'\n | '\"'\n | 'SoftLeft'\n | 'SoftRight'\n | 'Camera'\n | 'Call'\n | 'EndCall'\n | 'VolumeDown'\n | 'VolumeUp';\n\nexport type MouseButton = 'left' | 'right' | 'middle';\n\nexport interface MouseAction {\n click: (\n x: number,\n y: number,\n options: { button: MouseButton; count?: number },\n ) => Promise<void>;\n wheel: (deltaX: number, deltaY: number) => Promise<void>;\n move: (x: number, y: number) => Promise<void>;\n drag: (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => Promise<void>;\n}\n\nexport interface KeyboardAction {\n type: (text: string, options?: { delay?: number }) => Promise<void>;\n insertText: (text: string) => Promise<void>;\n press: (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => Promise<void>;\n}\n\nexport interface ChromePageDestroyOptions {\n closeTab?: boolean; // should close the tab when the page object is destroyed\n}\n\nexport abstract class AbstractWebPage extends AbstractInterface {\n readonly keyboardTypeDelay?: number;\n readonly inputStrategy?: InputStrategy;\n navigate?(url: string): Promise<void>;\n reload?(): Promise<void>;\n goBack?(): Promise<void>;\n goForward?(): Promise<void>;\n stopLoading?(): Promise<void>;\n navigationState?(): Promise<{ isLoading: boolean }>;\n flushPendingVisualUpdate?(force?: boolean): Promise<void>;\n schedulePendingVisualUpdate?(force?: boolean): void;\n waitForDomQuiet?(opts?: {\n quietMs?: number;\n timeoutMs?: number;\n target?: ElementInfo;\n }): Promise<void>;\n\n get mouse(): MouseAction {\n return {\n click: async (\n x: number,\n y: number,\n options: { button: MouseButton },\n ) => {},\n wheel: async (deltaX: number, deltaY: number) => {},\n move: async (x: number, y: number) => {},\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {},\n };\n }\n\n get keyboard(): KeyboardAction {\n return {\n type: async (text: string, options?: { delay?: number }) => {},\n insertText: async (text: string) => {},\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {},\n };\n }\n\n async clearInput(element?: ElementInfo): Promise<void> {}\n\n async selectAllInput(element?: ElementInfo): Promise<void> {\n throw new Error('Bulk text input is not supported by this web page');\n }\n\n abstract scrollUntilTop(startingPoint?: Point): Promise<void>;\n abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;\n abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;\n abstract scrollUntilRight(startingPoint?: Point): Promise<void>;\n abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;\n abstract longPress(x: number, y: number, duration?: number): Promise<void>;\n abstract swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ): Promise<void>;\n abstract pinch(\n centerX: number,\n centerY: number,\n startDistance: number,\n endDistance: number,\n duration?: number,\n ): Promise<void>;\n}\n\nconst scheduleWebVisualUpdate = (\n page: AbstractWebPage,\n force = false,\n): void => {\n if (page.schedulePendingVisualUpdate) {\n if (force) {\n page.schedulePendingVisualUpdate(true);\n } else {\n page.schedulePendingVisualUpdate();\n }\n return;\n }\n\n const pendingRefresh = force\n ? page.flushPendingVisualUpdate?.(true)\n : page.flushPendingVisualUpdate?.();\n void pendingRefresh?.catch(() => undefined);\n};\n\nexport function createWebInputPrimitives(\n page: AbstractWebPage,\n): BrowserInputPrimitives {\n const scheduleVisualUpdate = () => scheduleWebVisualUpdate(page);\n\n return {\n pointer: {\n tap: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left' });\n scheduleVisualUpdate();\n },\n rightClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'right' });\n scheduleVisualUpdate();\n },\n doubleClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left', count: 2 });\n scheduleVisualUpdate();\n },\n hover: async ({ x, y }) => {\n await page.mouse.move(x, y);\n scheduleVisualUpdate();\n },\n dragAndDrop: async (from, to) => {\n await page.mouse.drag(from, to);\n scheduleVisualUpdate();\n },\n longPress: async ({ x, y }, opts) => {\n await page.longPress(x, y, opts?.duration);\n scheduleVisualUpdate();\n },\n },\n keyboard: {\n typeText: async (value, opts) => {\n const element = opts?.target;\n const { inputStrategy, keyboardTypeDelay } = resolveTextInputOptions(\n opts,\n page,\n );\n if (element && opts?.replace !== false) {\n if (inputStrategy === 'bulk') {\n // Keep the current value selected so insertText replaces it in one\n // input operation instead of emitting a separate empty value.\n await page.selectAllInput(element as ElementInfo);\n } else {\n await page.clearInput(element as ElementInfo);\n // Frameworks (React/Vue/etc.) often re-render in response to\n // the `input` event fired by clearing. If that re-render lands\n // between clearInput returning and the first typed character,\n // the keypresses can be dropped. Wait for the DOM to settle\n // before starting to type.\n await page.waitForDomQuiet?.({ target: element as ElementInfo });\n }\n } else if (element && opts?.focusOnly) {\n const target = element as ElementInfo;\n await page.mouse.click(target.center[0], target.center[1], {\n button: 'left',\n });\n await page.keyboard.press([{ key: 'End' }]);\n }\n\n if (opts?.focusOnly) {\n return;\n }\n\n if (inputStrategy === 'bulk') {\n await page.keyboard.insertText(value);\n } else if (inputStrategy === 'sequential') {\n await sendTextSequentially(\n value,\n {\n // The shared loop owns the inter-character delay. Explicitly\n // disable the page default so action-level zero remains\n // effective and positive delays are not applied twice.\n sendCharacter: (character) =>\n page.keyboard.type(character, { delay: 0 }),\n wait: sleep,\n },\n { delayMs: keyboardTypeDelay },\n );\n } else {\n const keyboardTypeOptions =\n keyboardTypeDelay === undefined\n ? undefined\n : { delay: keyboardTypeDelay };\n await page.keyboard.type(value, keyboardTypeOptions);\n }\n scheduleVisualUpdate();\n },\n keyboardPress: async (keyName, opts) => {\n const element = opts?.target as\n | { center: [number, number] }\n | undefined;\n if (element) {\n await page.mouse.click(element.center[0], element.center[1], {\n button: 'left',\n });\n }\n\n const keys = getKeyCommands(keyName);\n await page.keyboard.press(keys as any);\n scheduleVisualUpdate();\n },\n cursorMove: async (direction, times = 1) => {\n const arrowKey = direction === 'left' ? 'ArrowLeft' : 'ArrowRight';\n for (let i = 0; i < times; i++) {\n await page.keyboard.press([{ key: arrowKey as any }]);\n await sleep(100);\n }\n },\n clearInput: async (target) => {\n await page.clearInput(target as ElementInfo | undefined);\n },\n },\n touch: {\n pinch: async ({ x, y }, opts) => {\n await page.pinch(\n x,\n y,\n opts.startDistance,\n opts.endDistance,\n opts.duration,\n );\n },\n swipe: async (from, to, opts) => {\n await page.swipe(from, to, opts?.duration);\n },\n },\n scroll: {\n scroll: async (param) => {\n const element = param.locate;\n const startingPoint = element\n ? {\n left: element.center[0],\n top: element.center[1],\n }\n : undefined;\n const scrollToEventName = param?.scrollType;\n if (scrollToEventName === 'scrollToTop') {\n await page.scrollUntilTop(startingPoint);\n } else if (scrollToEventName === 'scrollToBottom') {\n await page.scrollUntilBottom(startingPoint);\n } else if (scrollToEventName === 'scrollToRight') {\n await page.scrollUntilRight(startingPoint);\n } else if (scrollToEventName === 'scrollToLeft') {\n await page.scrollUntilLeft(startingPoint);\n } else if (scrollToEventName === 'singleAction' || !scrollToEventName) {\n if (param?.direction === 'down' || !param || !param.direction) {\n await page.scrollDown(param?.distance || undefined, startingPoint);\n } else if (param.direction === 'up') {\n await page.scrollUp(param.distance || undefined, startingPoint);\n } else if (param.direction === 'left') {\n await page.scrollLeft(param.distance || undefined, startingPoint);\n } else if (param.direction === 'right') {\n await page.scrollRight(param.distance || undefined, startingPoint);\n } else {\n throw new Error(`Unknown scroll direction: ${param.direction}`);\n }\n await sleep(500);\n } else {\n throw new Error(\n `Unknown scroll event type: ${scrollToEventName}, param: ${JSON.stringify(\n param,\n )}`,\n );\n }\n scheduleVisualUpdate();\n },\n },\n };\n}\n\nexport const commonWebActionsForWebPage = <T extends AbstractWebPage>(\n page: T,\n includeTouchEvents = false,\n): DeviceAction<any>[] => {\n const input = createWebInputPrimitives(page);\n return [\n ...defineActionsFromInputPrimitives(input, {\n size: () => page.size(),\n includeSwipe: includeTouchEvents,\n }),\n\n defineAction<typeof navigateParamSchema, { url: string }>({\n name: 'Navigate',\n description:\n 'Navigate the browser to a specified URL. Opens the URL in the current tab.',\n paramSchema: navigateParamSchema,\n sample: {\n url: 'https://www.example.com',\n },\n call: async (param) => {\n if (!page.navigate) {\n throw new Error(\n 'Navigate operation is not supported on this page type',\n );\n }\n await page.navigate(param.url);\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'Reload',\n supportedBySystemOne: true,\n description: 'Reload the current page',\n call: async () => {\n if (!page.reload) {\n throw new Error(\n 'Reload operation is not supported on this page type',\n );\n }\n await page.reload();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'GoBack',\n supportedBySystemOne: true,\n description: 'Navigate back in browser history',\n call: async () => {\n if (!page.goBack) {\n throw new Error(\n 'GoBack operation is not supported on this page type',\n );\n }\n await page.goBack();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n defineAction({\n name: 'GoForward',\n supportedBySystemOne: true,\n description: 'Navigate forward in browser history',\n call: async () => {\n if (!page.goForward) {\n throw new Error(\n 'GoForward operation is not supported on this page type',\n );\n }\n await page.goForward();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n ];\n};\n"],"names":["navigateParamSchema","z","normalizeKeyInputs","value","inputs","Array","result","input","trimmed","normalized","transformed","transformHotkeyInput","getKeyCommands","keys","acc","k","includeMeta","AbstractWebPage","AbstractInterface","x","y","options","deltaX","deltaY","from","to","text","action","element","Error","scheduleWebVisualUpdate","page","force","pendingRefresh","undefined","createWebInputPrimitives","scheduleVisualUpdate","opts","inputStrategy","keyboardTypeDelay","resolveTextInputOptions","target","sendTextSequentially","character","sleep","keyboardTypeOptions","keyName","direction","times","arrowKey","i","param","startingPoint","scrollToEventName","JSON","commonWebActionsForWebPage","includeTouchEvents","defineActionsFromInputPrimitives","defineAction"],"mappings":"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"}
|
|
@@ -130,7 +130,7 @@ class BridgeServer {
|
|
|
130
130
|
(0, shared_utils_namespaceObject.logMsg)('one client connected');
|
|
131
131
|
this.socket = socket;
|
|
132
132
|
const clientVersion = socket.handshake.query.version;
|
|
133
|
-
(0, shared_utils_namespaceObject.logMsg)(`Bridge connected, cli-side version v1.
|
|
133
|
+
(0, shared_utils_namespaceObject.logMsg)(`Bridge connected, cli-side version v1.17.0, browser-side version v${clientVersion}`);
|
|
134
134
|
socket.on(external_common_js_namespaceObject.BridgeEvent.CallResponse, (params)=>{
|
|
135
135
|
const id = params.id;
|
|
136
136
|
const response = params.response;
|
|
@@ -154,7 +154,7 @@ class BridgeServer {
|
|
|
154
154
|
setTimeout(()=>{
|
|
155
155
|
this.onConnect?.();
|
|
156
156
|
const payload = {
|
|
157
|
-
version: "1.
|
|
157
|
+
version: "1.17.0"
|
|
158
158
|
};
|
|
159
159
|
socket.emit(external_common_js_namespaceObject.BridgeEvent.Connected, payload);
|
|
160
160
|
Promise.resolve().then(()=>{
|
|
@@ -138,7 +138,7 @@ class ExtensionBridgePageBrowserSide extends page_js_default() {
|
|
|
138
138
|
throw new Error('Connection denied by user');
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
-
this.onLogMessage(`Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v1.
|
|
141
|
+
this.onLogMessage(`Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v1.17.0`, 'log');
|
|
142
142
|
}
|
|
143
143
|
async connect() {
|
|
144
144
|
return await this.setupBridgeClient();
|
package/dist/lib/cli.js
CHANGED
|
@@ -42,7 +42,7 @@ Promise.resolve().then(()=>{
|
|
|
42
42
|
return (0, cli_namespaceObject.runToolsCLI)(tools, 'midscene-web', {
|
|
43
43
|
stripPrefix: 'web_',
|
|
44
44
|
argv: parsedOptions.argv,
|
|
45
|
-
version: "1.
|
|
45
|
+
version: "1.17.0",
|
|
46
46
|
extraCommands: (0, core_namespaceObject.createReportCliCommands)()
|
|
47
47
|
});
|
|
48
48
|
}).catch((e)=>{
|
package/dist/lib/web-page.js
CHANGED
|
@@ -295,6 +295,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
295
295
|
}),
|
|
296
296
|
(0, device_namespaceObject.defineAction)({
|
|
297
297
|
name: 'Reload',
|
|
298
|
+
supportedBySystemOne: true,
|
|
298
299
|
description: 'Reload the current page',
|
|
299
300
|
call: async ()=>{
|
|
300
301
|
if (!page.reload) throw new Error('Reload operation is not supported on this page type');
|
|
@@ -304,6 +305,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
304
305
|
}),
|
|
305
306
|
(0, device_namespaceObject.defineAction)({
|
|
306
307
|
name: 'GoBack',
|
|
308
|
+
supportedBySystemOne: true,
|
|
307
309
|
description: 'Navigate back in browser history',
|
|
308
310
|
call: async ()=>{
|
|
309
311
|
if (!page.goBack) throw new Error('GoBack operation is not supported on this page type');
|
|
@@ -313,6 +315,7 @@ const commonWebActionsForWebPage = (page, includeTouchEvents = false)=>{
|
|
|
313
315
|
}),
|
|
314
316
|
(0, device_namespaceObject.defineAction)({
|
|
315
317
|
name: 'GoForward',
|
|
318
|
+
supportedBySystemOne: true,
|
|
316
319
|
description: 'Navigate forward in browser history',
|
|
317
320
|
call: async ()=>{
|
|
318
321
|
if (!page.goForward) throw new Error('GoForward operation is not supported on this page type');
|
package/dist/lib/web-page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-page.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../src/web-page.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Point } from '@midscene/core';\nimport { z } from '@midscene/core';\nimport {\n AbstractInterface,\n type BrowserInputPrimitives,\n type DeviceAction,\n type InputStrategy,\n defineAction,\n defineActionsFromInputPrimitives,\n resolveTextInputOptions,\n sendTextSequentially,\n} from '@midscene/core/device';\n\nimport { sleep } from '@midscene/core/utils';\nimport type { ElementInfo } from '@midscene/shared/extractor';\nimport { transformHotkeyInput } from '@midscene/shared/us-keyboard-layout';\n\nconst navigateParamSchema = z.object({\n url: z\n .string()\n .describe(\n 'The URL to navigate to. Must start with https://, file://, or a similar protocol.',\n ),\n});\n\nfunction normalizeKeyInputs(value: string | string[]): string[] {\n const inputs = Array.isArray(value) ? value : [value];\n const result: string[] = [];\n\n for (const input of inputs) {\n if (typeof input !== 'string') {\n result.push(input as unknown as string);\n continue;\n }\n\n const trimmed = input.trim();\n if (!trimmed) {\n result.push(input);\n continue;\n }\n\n let normalized = trimmed;\n if (normalized.length > 1 && normalized.includes('+')) {\n normalized = normalized.replace(/\\s*\\+\\s*/g, ' ');\n }\n if (/\\s/.test(normalized)) {\n normalized = normalized.replace(/\\s+/g, ' ');\n }\n\n const transformed = transformHotkeyInput(normalized);\n if (transformed.length === 1 && transformed[0] === '' && trimmed !== '') {\n result.push(input);\n continue;\n }\n if (transformed.length === 0) {\n result.push(input);\n continue;\n }\n\n result.push(...transformed);\n }\n\n return result;\n}\n\nexport function getKeyCommands(\n value: string | string[],\n): Array<{ key: string; command?: string }> {\n const keys = normalizeKeyInputs(value);\n\n return keys.reduce((acc: Array<{ key: string; command?: string }>, k) => {\n const includeMeta = keys.includes('Meta') || keys.includes('Control');\n if (includeMeta && (k === 'a' || k === 'A')) {\n return acc.concat([{ key: k, command: 'SelectAll' }]);\n }\n if (includeMeta && (k === 'c' || k === 'C')) {\n return acc.concat([{ key: k, command: 'Copy' }]);\n }\n if (includeMeta && (k === 'v' || k === 'V')) {\n return acc.concat([{ key: k, command: 'Paste' }]);\n }\n return acc.concat([{ key: k }]);\n }, []);\n}\n\n// this is copied from puppeteer, but we don't want to import puppeteer here\nexport declare type KeyInput =\n | '0'\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | 'Power'\n | 'Eject'\n | 'Abort'\n | 'Help'\n | 'Backspace'\n | 'Tab'\n | 'Numpad5'\n | 'NumpadEnter'\n | 'Enter'\n | '\\r'\n | '\\n'\n | 'ShiftLeft'\n | 'ShiftRight'\n | 'ControlLeft'\n | 'ControlRight'\n | 'AltLeft'\n | 'AltRight'\n | 'Pause'\n | 'CapsLock'\n | 'Escape'\n | 'Convert'\n | 'NonConvert'\n | 'Space'\n | 'Numpad9'\n | 'PageUp'\n | 'Numpad3'\n | 'PageDown'\n | 'End'\n | 'Numpad1'\n | 'Home'\n | 'Numpad7'\n | 'ArrowLeft'\n | 'Numpad4'\n | 'Numpad8'\n | 'ArrowUp'\n | 'ArrowRight'\n | 'Numpad6'\n | 'Numpad2'\n | 'ArrowDown'\n | 'Select'\n | 'Open'\n | 'PrintScreen'\n | 'Insert'\n | 'Numpad0'\n | 'Delete'\n | 'NumpadDecimal'\n | 'Digit0'\n | 'Digit1'\n | 'Digit2'\n | 'Digit3'\n | 'Digit4'\n | 'Digit5'\n | 'Digit6'\n | 'Digit7'\n | 'Digit8'\n | 'Digit9'\n | 'KeyA'\n | 'KeyB'\n | 'KeyC'\n | 'KeyD'\n | 'KeyE'\n | 'KeyF'\n | 'KeyG'\n | 'KeyH'\n | 'KeyI'\n | 'KeyJ'\n | 'KeyK'\n | 'KeyL'\n | 'KeyM'\n | 'KeyN'\n | 'KeyO'\n | 'KeyP'\n | 'KeyQ'\n | 'KeyR'\n | 'KeyS'\n | 'KeyT'\n | 'KeyU'\n | 'KeyV'\n | 'KeyW'\n | 'KeyX'\n | 'KeyY'\n | 'KeyZ'\n | 'MetaLeft'\n | 'MetaRight'\n | 'ContextMenu'\n | 'NumpadMultiply'\n | 'NumpadAdd'\n | 'NumpadSubtract'\n | 'NumpadDivide'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | 'F13'\n | 'F14'\n | 'F15'\n | 'F16'\n | 'F17'\n | 'F18'\n | 'F19'\n | 'F20'\n | 'F21'\n | 'F22'\n | 'F23'\n | 'F24'\n | 'NumLock'\n | 'ScrollLock'\n | 'AudioVolumeMute'\n | 'AudioVolumeDown'\n | 'AudioVolumeUp'\n | 'MediaTrackNext'\n | 'MediaTrackPrevious'\n | 'MediaStop'\n | 'MediaPlayPause'\n | 'Semicolon'\n | 'Equal'\n | 'NumpadEqual'\n | 'Comma'\n | 'Minus'\n | 'Period'\n | 'Slash'\n | 'Backquote'\n | 'BracketLeft'\n | 'Backslash'\n | 'BracketRight'\n | 'Quote'\n | 'AltGraph'\n | 'Props'\n | 'Cancel'\n | 'Clear'\n | 'Shift'\n | 'Control'\n | 'Alt'\n | 'Accept'\n | 'ModeChange'\n | ' '\n | 'Print'\n | 'Execute'\n | '\\u0000'\n | 'a'\n | 'b'\n | 'c'\n | 'd'\n | 'e'\n | 'f'\n | 'g'\n | 'h'\n | 'i'\n | 'j'\n | 'k'\n | 'l'\n | 'm'\n | 'n'\n | 'o'\n | 'p'\n | 'q'\n | 'r'\n | 's'\n | 't'\n | 'u'\n | 'v'\n | 'w'\n | 'x'\n | 'y'\n | 'z'\n | 'Meta'\n | '*'\n | '+'\n | '-'\n | '/'\n | ';'\n | '='\n | ','\n | '.'\n | '`'\n | '['\n | '\\\\'\n | ']'\n | \"'\"\n | 'Attn'\n | 'CrSel'\n | 'ExSel'\n | 'EraseEof'\n | 'Play'\n | 'ZoomOut'\n | ')'\n | '!'\n | '@'\n | '#'\n | '$'\n | '%'\n | '^'\n | '&'\n | '('\n | 'A'\n | 'B'\n | 'C'\n | 'D'\n | 'E'\n | 'F'\n | 'G'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'P'\n | 'Q'\n | 'R'\n | 'S'\n | 'T'\n | 'U'\n | 'V'\n | 'W'\n | 'X'\n | 'Y'\n | 'Z'\n | ':'\n | '<'\n | '_'\n | '>'\n | '?'\n | '~'\n | '{'\n | '|'\n | '}'\n | '\"'\n | 'SoftLeft'\n | 'SoftRight'\n | 'Camera'\n | 'Call'\n | 'EndCall'\n | 'VolumeDown'\n | 'VolumeUp';\n\nexport type MouseButton = 'left' | 'right' | 'middle';\n\nexport interface MouseAction {\n click: (\n x: number,\n y: number,\n options: { button: MouseButton; count?: number },\n ) => Promise<void>;\n wheel: (deltaX: number, deltaY: number) => Promise<void>;\n move: (x: number, y: number) => Promise<void>;\n drag: (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => Promise<void>;\n}\n\nexport interface KeyboardAction {\n type: (text: string, options?: { delay?: number }) => Promise<void>;\n insertText: (text: string) => Promise<void>;\n press: (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => Promise<void>;\n}\n\nexport interface ChromePageDestroyOptions {\n closeTab?: boolean; // should close the tab when the page object is destroyed\n}\n\nexport abstract class AbstractWebPage extends AbstractInterface {\n readonly keyboardTypeDelay?: number;\n readonly inputStrategy?: InputStrategy;\n navigate?(url: string): Promise<void>;\n reload?(): Promise<void>;\n goBack?(): Promise<void>;\n goForward?(): Promise<void>;\n stopLoading?(): Promise<void>;\n navigationState?(): Promise<{ isLoading: boolean }>;\n flushPendingVisualUpdate?(force?: boolean): Promise<void>;\n schedulePendingVisualUpdate?(force?: boolean): void;\n waitForDomQuiet?(opts?: {\n quietMs?: number;\n timeoutMs?: number;\n target?: ElementInfo;\n }): Promise<void>;\n\n get mouse(): MouseAction {\n return {\n click: async (\n x: number,\n y: number,\n options: { button: MouseButton },\n ) => {},\n wheel: async (deltaX: number, deltaY: number) => {},\n move: async (x: number, y: number) => {},\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {},\n };\n }\n\n get keyboard(): KeyboardAction {\n return {\n type: async (text: string, options?: { delay?: number }) => {},\n insertText: async (text: string) => {},\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {},\n };\n }\n\n async clearInput(element?: ElementInfo): Promise<void> {}\n\n async selectAllInput(element?: ElementInfo): Promise<void> {\n throw new Error('Bulk text input is not supported by this web page');\n }\n\n abstract scrollUntilTop(startingPoint?: Point): Promise<void>;\n abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;\n abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;\n abstract scrollUntilRight(startingPoint?: Point): Promise<void>;\n abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;\n abstract longPress(x: number, y: number, duration?: number): Promise<void>;\n abstract swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ): Promise<void>;\n abstract pinch(\n centerX: number,\n centerY: number,\n startDistance: number,\n endDistance: number,\n duration?: number,\n ): Promise<void>;\n}\n\nconst scheduleWebVisualUpdate = (\n page: AbstractWebPage,\n force = false,\n): void => {\n if (page.schedulePendingVisualUpdate) {\n if (force) {\n page.schedulePendingVisualUpdate(true);\n } else {\n page.schedulePendingVisualUpdate();\n }\n return;\n }\n\n const pendingRefresh = force\n ? page.flushPendingVisualUpdate?.(true)\n : page.flushPendingVisualUpdate?.();\n void pendingRefresh?.catch(() => undefined);\n};\n\nexport function createWebInputPrimitives(\n page: AbstractWebPage,\n): BrowserInputPrimitives {\n const scheduleVisualUpdate = () => scheduleWebVisualUpdate(page);\n\n return {\n pointer: {\n tap: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left' });\n scheduleVisualUpdate();\n },\n rightClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'right' });\n scheduleVisualUpdate();\n },\n doubleClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left', count: 2 });\n scheduleVisualUpdate();\n },\n hover: async ({ x, y }) => {\n await page.mouse.move(x, y);\n scheduleVisualUpdate();\n },\n dragAndDrop: async (from, to) => {\n await page.mouse.drag(from, to);\n scheduleVisualUpdate();\n },\n longPress: async ({ x, y }, opts) => {\n await page.longPress(x, y, opts?.duration);\n scheduleVisualUpdate();\n },\n },\n keyboard: {\n typeText: async (value, opts) => {\n const element = opts?.target;\n const { inputStrategy, keyboardTypeDelay } = resolveTextInputOptions(\n opts,\n page,\n );\n if (element && opts?.replace !== false) {\n if (inputStrategy === 'bulk') {\n // Keep the current value selected so insertText replaces it in one\n // input operation instead of emitting a separate empty value.\n await page.selectAllInput(element as ElementInfo);\n } else {\n await page.clearInput(element as ElementInfo);\n // Frameworks (React/Vue/etc.) often re-render in response to\n // the `input` event fired by clearing. If that re-render lands\n // between clearInput returning and the first typed character,\n // the keypresses can be dropped. Wait for the DOM to settle\n // before starting to type.\n await page.waitForDomQuiet?.({ target: element as ElementInfo });\n }\n } else if (element && opts?.focusOnly) {\n const target = element as ElementInfo;\n await page.mouse.click(target.center[0], target.center[1], {\n button: 'left',\n });\n await page.keyboard.press([{ key: 'End' }]);\n }\n\n if (opts?.focusOnly) {\n return;\n }\n\n if (inputStrategy === 'bulk') {\n await page.keyboard.insertText(value);\n } else if (inputStrategy === 'sequential') {\n await sendTextSequentially(\n value,\n {\n // The shared loop owns the inter-character delay. Explicitly\n // disable the page default so action-level zero remains\n // effective and positive delays are not applied twice.\n sendCharacter: (character) =>\n page.keyboard.type(character, { delay: 0 }),\n wait: sleep,\n },\n { delayMs: keyboardTypeDelay },\n );\n } else {\n const keyboardTypeOptions =\n keyboardTypeDelay === undefined\n ? undefined\n : { delay: keyboardTypeDelay };\n await page.keyboard.type(value, keyboardTypeOptions);\n }\n scheduleVisualUpdate();\n },\n keyboardPress: async (keyName, opts) => {\n const element = opts?.target as\n | { center: [number, number] }\n | undefined;\n if (element) {\n await page.mouse.click(element.center[0], element.center[1], {\n button: 'left',\n });\n }\n\n const keys = getKeyCommands(keyName);\n await page.keyboard.press(keys as any);\n scheduleVisualUpdate();\n },\n cursorMove: async (direction, times = 1) => {\n const arrowKey = direction === 'left' ? 'ArrowLeft' : 'ArrowRight';\n for (let i = 0; i < times; i++) {\n await page.keyboard.press([{ key: arrowKey as any }]);\n await sleep(100);\n }\n },\n clearInput: async (target) => {\n await page.clearInput(target as ElementInfo | undefined);\n },\n },\n touch: {\n pinch: async ({ x, y }, opts) => {\n await page.pinch(\n x,\n y,\n opts.startDistance,\n opts.endDistance,\n opts.duration,\n );\n },\n swipe: async (from, to, opts) => {\n await page.swipe(from, to, opts?.duration);\n },\n },\n scroll: {\n scroll: async (param) => {\n const element = param.locate;\n const startingPoint = element\n ? {\n left: element.center[0],\n top: element.center[1],\n }\n : undefined;\n const scrollToEventName = param?.scrollType;\n if (scrollToEventName === 'scrollToTop') {\n await page.scrollUntilTop(startingPoint);\n } else if (scrollToEventName === 'scrollToBottom') {\n await page.scrollUntilBottom(startingPoint);\n } else if (scrollToEventName === 'scrollToRight') {\n await page.scrollUntilRight(startingPoint);\n } else if (scrollToEventName === 'scrollToLeft') {\n await page.scrollUntilLeft(startingPoint);\n } else if (scrollToEventName === 'singleAction' || !scrollToEventName) {\n if (param?.direction === 'down' || !param || !param.direction) {\n await page.scrollDown(param?.distance || undefined, startingPoint);\n } else if (param.direction === 'up') {\n await page.scrollUp(param.distance || undefined, startingPoint);\n } else if (param.direction === 'left') {\n await page.scrollLeft(param.distance || undefined, startingPoint);\n } else if (param.direction === 'right') {\n await page.scrollRight(param.distance || undefined, startingPoint);\n } else {\n throw new Error(`Unknown scroll direction: ${param.direction}`);\n }\n await sleep(500);\n } else {\n throw new Error(\n `Unknown scroll event type: ${scrollToEventName}, param: ${JSON.stringify(\n param,\n )}`,\n );\n }\n scheduleVisualUpdate();\n },\n },\n };\n}\n\nexport const commonWebActionsForWebPage = <T extends AbstractWebPage>(\n page: T,\n includeTouchEvents = false,\n): DeviceAction<any>[] => {\n const input = createWebInputPrimitives(page);\n return [\n ...defineActionsFromInputPrimitives(input, {\n size: () => page.size(),\n includeSwipe: includeTouchEvents,\n }),\n\n defineAction<typeof navigateParamSchema, { url: string }>({\n name: 'Navigate',\n description:\n 'Navigate the browser to a specified URL. Opens the URL in the current tab.',\n paramSchema: navigateParamSchema,\n sample: {\n url: 'https://www.example.com',\n },\n call: async (param) => {\n if (!page.navigate) {\n throw new Error(\n 'Navigate operation is not supported on this page type',\n );\n }\n await page.navigate(param.url);\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'Reload',\n description: 'Reload the current page',\n call: async () => {\n if (!page.reload) {\n throw new Error(\n 'Reload operation is not supported on this page type',\n );\n }\n await page.reload();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'GoBack',\n description: 'Navigate back in browser history',\n call: async () => {\n if (!page.goBack) {\n throw new Error(\n 'GoBack operation is not supported on this page type',\n );\n }\n await page.goBack();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n defineAction({\n name: 'GoForward',\n description: 'Navigate forward in browser history',\n call: async () => {\n if (!page.goForward) {\n throw new Error(\n 'GoForward operation is not supported on this page type',\n );\n }\n await page.goForward();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n ];\n};\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","navigateParamSchema","z","normalizeKeyInputs","value","inputs","Array","result","input","trimmed","normalized","transformed","transformHotkeyInput","getKeyCommands","keys","acc","k","includeMeta","AbstractWebPage","AbstractInterface","x","y","options","deltaX","deltaY","from","to","text","action","element","Error","scheduleWebVisualUpdate","page","force","pendingRefresh","undefined","createWebInputPrimitives","scheduleVisualUpdate","opts","inputStrategy","keyboardTypeDelay","resolveTextInputOptions","target","sendTextSequentially","character","sleep","keyboardTypeOptions","keyName","direction","times","arrowKey","i","param","startingPoint","scrollToEventName","JSON","commonWebActionsForWebPage","includeTouchEvents","defineActionsFromInputPrimitives","defineAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-page.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../src/web-page.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Point } from '@midscene/core';\nimport { z } from '@midscene/core';\nimport {\n AbstractInterface,\n type BrowserInputPrimitives,\n type DeviceAction,\n type InputStrategy,\n defineAction,\n defineActionsFromInputPrimitives,\n resolveTextInputOptions,\n sendTextSequentially,\n} from '@midscene/core/device';\n\nimport { sleep } from '@midscene/core/utils';\nimport type { ElementInfo } from '@midscene/shared/extractor';\nimport { transformHotkeyInput } from '@midscene/shared/us-keyboard-layout';\n\nconst navigateParamSchema = z.object({\n url: z\n .string()\n .describe(\n 'The URL to navigate to. Must start with https://, file://, or a similar protocol.',\n ),\n});\n\nfunction normalizeKeyInputs(value: string | string[]): string[] {\n const inputs = Array.isArray(value) ? value : [value];\n const result: string[] = [];\n\n for (const input of inputs) {\n if (typeof input !== 'string') {\n result.push(input as unknown as string);\n continue;\n }\n\n const trimmed = input.trim();\n if (!trimmed) {\n result.push(input);\n continue;\n }\n\n let normalized = trimmed;\n if (normalized.length > 1 && normalized.includes('+')) {\n normalized = normalized.replace(/\\s*\\+\\s*/g, ' ');\n }\n if (/\\s/.test(normalized)) {\n normalized = normalized.replace(/\\s+/g, ' ');\n }\n\n const transformed = transformHotkeyInput(normalized);\n if (transformed.length === 1 && transformed[0] === '' && trimmed !== '') {\n result.push(input);\n continue;\n }\n if (transformed.length === 0) {\n result.push(input);\n continue;\n }\n\n result.push(...transformed);\n }\n\n return result;\n}\n\nexport function getKeyCommands(\n value: string | string[],\n): Array<{ key: string; command?: string }> {\n const keys = normalizeKeyInputs(value);\n\n return keys.reduce((acc: Array<{ key: string; command?: string }>, k) => {\n const includeMeta = keys.includes('Meta') || keys.includes('Control');\n if (includeMeta && (k === 'a' || k === 'A')) {\n return acc.concat([{ key: k, command: 'SelectAll' }]);\n }\n if (includeMeta && (k === 'c' || k === 'C')) {\n return acc.concat([{ key: k, command: 'Copy' }]);\n }\n if (includeMeta && (k === 'v' || k === 'V')) {\n return acc.concat([{ key: k, command: 'Paste' }]);\n }\n return acc.concat([{ key: k }]);\n }, []);\n}\n\n// this is copied from puppeteer, but we don't want to import puppeteer here\nexport declare type KeyInput =\n | '0'\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | 'Power'\n | 'Eject'\n | 'Abort'\n | 'Help'\n | 'Backspace'\n | 'Tab'\n | 'Numpad5'\n | 'NumpadEnter'\n | 'Enter'\n | '\\r'\n | '\\n'\n | 'ShiftLeft'\n | 'ShiftRight'\n | 'ControlLeft'\n | 'ControlRight'\n | 'AltLeft'\n | 'AltRight'\n | 'Pause'\n | 'CapsLock'\n | 'Escape'\n | 'Convert'\n | 'NonConvert'\n | 'Space'\n | 'Numpad9'\n | 'PageUp'\n | 'Numpad3'\n | 'PageDown'\n | 'End'\n | 'Numpad1'\n | 'Home'\n | 'Numpad7'\n | 'ArrowLeft'\n | 'Numpad4'\n | 'Numpad8'\n | 'ArrowUp'\n | 'ArrowRight'\n | 'Numpad6'\n | 'Numpad2'\n | 'ArrowDown'\n | 'Select'\n | 'Open'\n | 'PrintScreen'\n | 'Insert'\n | 'Numpad0'\n | 'Delete'\n | 'NumpadDecimal'\n | 'Digit0'\n | 'Digit1'\n | 'Digit2'\n | 'Digit3'\n | 'Digit4'\n | 'Digit5'\n | 'Digit6'\n | 'Digit7'\n | 'Digit8'\n | 'Digit9'\n | 'KeyA'\n | 'KeyB'\n | 'KeyC'\n | 'KeyD'\n | 'KeyE'\n | 'KeyF'\n | 'KeyG'\n | 'KeyH'\n | 'KeyI'\n | 'KeyJ'\n | 'KeyK'\n | 'KeyL'\n | 'KeyM'\n | 'KeyN'\n | 'KeyO'\n | 'KeyP'\n | 'KeyQ'\n | 'KeyR'\n | 'KeyS'\n | 'KeyT'\n | 'KeyU'\n | 'KeyV'\n | 'KeyW'\n | 'KeyX'\n | 'KeyY'\n | 'KeyZ'\n | 'MetaLeft'\n | 'MetaRight'\n | 'ContextMenu'\n | 'NumpadMultiply'\n | 'NumpadAdd'\n | 'NumpadSubtract'\n | 'NumpadDivide'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | 'F13'\n | 'F14'\n | 'F15'\n | 'F16'\n | 'F17'\n | 'F18'\n | 'F19'\n | 'F20'\n | 'F21'\n | 'F22'\n | 'F23'\n | 'F24'\n | 'NumLock'\n | 'ScrollLock'\n | 'AudioVolumeMute'\n | 'AudioVolumeDown'\n | 'AudioVolumeUp'\n | 'MediaTrackNext'\n | 'MediaTrackPrevious'\n | 'MediaStop'\n | 'MediaPlayPause'\n | 'Semicolon'\n | 'Equal'\n | 'NumpadEqual'\n | 'Comma'\n | 'Minus'\n | 'Period'\n | 'Slash'\n | 'Backquote'\n | 'BracketLeft'\n | 'Backslash'\n | 'BracketRight'\n | 'Quote'\n | 'AltGraph'\n | 'Props'\n | 'Cancel'\n | 'Clear'\n | 'Shift'\n | 'Control'\n | 'Alt'\n | 'Accept'\n | 'ModeChange'\n | ' '\n | 'Print'\n | 'Execute'\n | '\\u0000'\n | 'a'\n | 'b'\n | 'c'\n | 'd'\n | 'e'\n | 'f'\n | 'g'\n | 'h'\n | 'i'\n | 'j'\n | 'k'\n | 'l'\n | 'm'\n | 'n'\n | 'o'\n | 'p'\n | 'q'\n | 'r'\n | 's'\n | 't'\n | 'u'\n | 'v'\n | 'w'\n | 'x'\n | 'y'\n | 'z'\n | 'Meta'\n | '*'\n | '+'\n | '-'\n | '/'\n | ';'\n | '='\n | ','\n | '.'\n | '`'\n | '['\n | '\\\\'\n | ']'\n | \"'\"\n | 'Attn'\n | 'CrSel'\n | 'ExSel'\n | 'EraseEof'\n | 'Play'\n | 'ZoomOut'\n | ')'\n | '!'\n | '@'\n | '#'\n | '$'\n | '%'\n | '^'\n | '&'\n | '('\n | 'A'\n | 'B'\n | 'C'\n | 'D'\n | 'E'\n | 'F'\n | 'G'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'P'\n | 'Q'\n | 'R'\n | 'S'\n | 'T'\n | 'U'\n | 'V'\n | 'W'\n | 'X'\n | 'Y'\n | 'Z'\n | ':'\n | '<'\n | '_'\n | '>'\n | '?'\n | '~'\n | '{'\n | '|'\n | '}'\n | '\"'\n | 'SoftLeft'\n | 'SoftRight'\n | 'Camera'\n | 'Call'\n | 'EndCall'\n | 'VolumeDown'\n | 'VolumeUp';\n\nexport type MouseButton = 'left' | 'right' | 'middle';\n\nexport interface MouseAction {\n click: (\n x: number,\n y: number,\n options: { button: MouseButton; count?: number },\n ) => Promise<void>;\n wheel: (deltaX: number, deltaY: number) => Promise<void>;\n move: (x: number, y: number) => Promise<void>;\n drag: (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => Promise<void>;\n}\n\nexport interface KeyboardAction {\n type: (text: string, options?: { delay?: number }) => Promise<void>;\n insertText: (text: string) => Promise<void>;\n press: (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => Promise<void>;\n}\n\nexport interface ChromePageDestroyOptions {\n closeTab?: boolean; // should close the tab when the page object is destroyed\n}\n\nexport abstract class AbstractWebPage extends AbstractInterface {\n readonly keyboardTypeDelay?: number;\n readonly inputStrategy?: InputStrategy;\n navigate?(url: string): Promise<void>;\n reload?(): Promise<void>;\n goBack?(): Promise<void>;\n goForward?(): Promise<void>;\n stopLoading?(): Promise<void>;\n navigationState?(): Promise<{ isLoading: boolean }>;\n flushPendingVisualUpdate?(force?: boolean): Promise<void>;\n schedulePendingVisualUpdate?(force?: boolean): void;\n waitForDomQuiet?(opts?: {\n quietMs?: number;\n timeoutMs?: number;\n target?: ElementInfo;\n }): Promise<void>;\n\n get mouse(): MouseAction {\n return {\n click: async (\n x: number,\n y: number,\n options: { button: MouseButton },\n ) => {},\n wheel: async (deltaX: number, deltaY: number) => {},\n move: async (x: number, y: number) => {},\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {},\n };\n }\n\n get keyboard(): KeyboardAction {\n return {\n type: async (text: string, options?: { delay?: number }) => {},\n insertText: async (text: string) => {},\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {},\n };\n }\n\n async clearInput(element?: ElementInfo): Promise<void> {}\n\n async selectAllInput(element?: ElementInfo): Promise<void> {\n throw new Error('Bulk text input is not supported by this web page');\n }\n\n abstract scrollUntilTop(startingPoint?: Point): Promise<void>;\n abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;\n abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;\n abstract scrollUntilRight(startingPoint?: Point): Promise<void>;\n abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;\n abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;\n abstract longPress(x: number, y: number, duration?: number): Promise<void>;\n abstract swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ): Promise<void>;\n abstract pinch(\n centerX: number,\n centerY: number,\n startDistance: number,\n endDistance: number,\n duration?: number,\n ): Promise<void>;\n}\n\nconst scheduleWebVisualUpdate = (\n page: AbstractWebPage,\n force = false,\n): void => {\n if (page.schedulePendingVisualUpdate) {\n if (force) {\n page.schedulePendingVisualUpdate(true);\n } else {\n page.schedulePendingVisualUpdate();\n }\n return;\n }\n\n const pendingRefresh = force\n ? page.flushPendingVisualUpdate?.(true)\n : page.flushPendingVisualUpdate?.();\n void pendingRefresh?.catch(() => undefined);\n};\n\nexport function createWebInputPrimitives(\n page: AbstractWebPage,\n): BrowserInputPrimitives {\n const scheduleVisualUpdate = () => scheduleWebVisualUpdate(page);\n\n return {\n pointer: {\n tap: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left' });\n scheduleVisualUpdate();\n },\n rightClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'right' });\n scheduleVisualUpdate();\n },\n doubleClick: async ({ x, y }) => {\n await page.mouse.click(x, y, { button: 'left', count: 2 });\n scheduleVisualUpdate();\n },\n hover: async ({ x, y }) => {\n await page.mouse.move(x, y);\n scheduleVisualUpdate();\n },\n dragAndDrop: async (from, to) => {\n await page.mouse.drag(from, to);\n scheduleVisualUpdate();\n },\n longPress: async ({ x, y }, opts) => {\n await page.longPress(x, y, opts?.duration);\n scheduleVisualUpdate();\n },\n },\n keyboard: {\n typeText: async (value, opts) => {\n const element = opts?.target;\n const { inputStrategy, keyboardTypeDelay } = resolveTextInputOptions(\n opts,\n page,\n );\n if (element && opts?.replace !== false) {\n if (inputStrategy === 'bulk') {\n // Keep the current value selected so insertText replaces it in one\n // input operation instead of emitting a separate empty value.\n await page.selectAllInput(element as ElementInfo);\n } else {\n await page.clearInput(element as ElementInfo);\n // Frameworks (React/Vue/etc.) often re-render in response to\n // the `input` event fired by clearing. If that re-render lands\n // between clearInput returning and the first typed character,\n // the keypresses can be dropped. Wait for the DOM to settle\n // before starting to type.\n await page.waitForDomQuiet?.({ target: element as ElementInfo });\n }\n } else if (element && opts?.focusOnly) {\n const target = element as ElementInfo;\n await page.mouse.click(target.center[0], target.center[1], {\n button: 'left',\n });\n await page.keyboard.press([{ key: 'End' }]);\n }\n\n if (opts?.focusOnly) {\n return;\n }\n\n if (inputStrategy === 'bulk') {\n await page.keyboard.insertText(value);\n } else if (inputStrategy === 'sequential') {\n await sendTextSequentially(\n value,\n {\n // The shared loop owns the inter-character delay. Explicitly\n // disable the page default so action-level zero remains\n // effective and positive delays are not applied twice.\n sendCharacter: (character) =>\n page.keyboard.type(character, { delay: 0 }),\n wait: sleep,\n },\n { delayMs: keyboardTypeDelay },\n );\n } else {\n const keyboardTypeOptions =\n keyboardTypeDelay === undefined\n ? undefined\n : { delay: keyboardTypeDelay };\n await page.keyboard.type(value, keyboardTypeOptions);\n }\n scheduleVisualUpdate();\n },\n keyboardPress: async (keyName, opts) => {\n const element = opts?.target as\n | { center: [number, number] }\n | undefined;\n if (element) {\n await page.mouse.click(element.center[0], element.center[1], {\n button: 'left',\n });\n }\n\n const keys = getKeyCommands(keyName);\n await page.keyboard.press(keys as any);\n scheduleVisualUpdate();\n },\n cursorMove: async (direction, times = 1) => {\n const arrowKey = direction === 'left' ? 'ArrowLeft' : 'ArrowRight';\n for (let i = 0; i < times; i++) {\n await page.keyboard.press([{ key: arrowKey as any }]);\n await sleep(100);\n }\n },\n clearInput: async (target) => {\n await page.clearInput(target as ElementInfo | undefined);\n },\n },\n touch: {\n pinch: async ({ x, y }, opts) => {\n await page.pinch(\n x,\n y,\n opts.startDistance,\n opts.endDistance,\n opts.duration,\n );\n },\n swipe: async (from, to, opts) => {\n await page.swipe(from, to, opts?.duration);\n },\n },\n scroll: {\n scroll: async (param) => {\n const element = param.locate;\n const startingPoint = element\n ? {\n left: element.center[0],\n top: element.center[1],\n }\n : undefined;\n const scrollToEventName = param?.scrollType;\n if (scrollToEventName === 'scrollToTop') {\n await page.scrollUntilTop(startingPoint);\n } else if (scrollToEventName === 'scrollToBottom') {\n await page.scrollUntilBottom(startingPoint);\n } else if (scrollToEventName === 'scrollToRight') {\n await page.scrollUntilRight(startingPoint);\n } else if (scrollToEventName === 'scrollToLeft') {\n await page.scrollUntilLeft(startingPoint);\n } else if (scrollToEventName === 'singleAction' || !scrollToEventName) {\n if (param?.direction === 'down' || !param || !param.direction) {\n await page.scrollDown(param?.distance || undefined, startingPoint);\n } else if (param.direction === 'up') {\n await page.scrollUp(param.distance || undefined, startingPoint);\n } else if (param.direction === 'left') {\n await page.scrollLeft(param.distance || undefined, startingPoint);\n } else if (param.direction === 'right') {\n await page.scrollRight(param.distance || undefined, startingPoint);\n } else {\n throw new Error(`Unknown scroll direction: ${param.direction}`);\n }\n await sleep(500);\n } else {\n throw new Error(\n `Unknown scroll event type: ${scrollToEventName}, param: ${JSON.stringify(\n param,\n )}`,\n );\n }\n scheduleVisualUpdate();\n },\n },\n };\n}\n\nexport const commonWebActionsForWebPage = <T extends AbstractWebPage>(\n page: T,\n includeTouchEvents = false,\n): DeviceAction<any>[] => {\n const input = createWebInputPrimitives(page);\n return [\n ...defineActionsFromInputPrimitives(input, {\n size: () => page.size(),\n includeSwipe: includeTouchEvents,\n }),\n\n defineAction<typeof navigateParamSchema, { url: string }>({\n name: 'Navigate',\n description:\n 'Navigate the browser to a specified URL. Opens the URL in the current tab.',\n paramSchema: navigateParamSchema,\n sample: {\n url: 'https://www.example.com',\n },\n call: async (param) => {\n if (!page.navigate) {\n throw new Error(\n 'Navigate operation is not supported on this page type',\n );\n }\n await page.navigate(param.url);\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'Reload',\n supportedBySystemOne: true,\n description: 'Reload the current page',\n call: async () => {\n if (!page.reload) {\n throw new Error(\n 'Reload operation is not supported on this page type',\n );\n }\n await page.reload();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n\n defineAction({\n name: 'GoBack',\n supportedBySystemOne: true,\n description: 'Navigate back in browser history',\n call: async () => {\n if (!page.goBack) {\n throw new Error(\n 'GoBack operation is not supported on this page type',\n );\n }\n await page.goBack();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n defineAction({\n name: 'GoForward',\n supportedBySystemOne: true,\n description: 'Navigate forward in browser history',\n call: async () => {\n if (!page.goForward) {\n throw new Error(\n 'GoForward operation is not supported on this page type',\n );\n }\n await page.goForward();\n scheduleWebVisualUpdate(page, true);\n },\n }),\n ];\n};\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","navigateParamSchema","z","normalizeKeyInputs","value","inputs","Array","result","input","trimmed","normalized","transformed","transformHotkeyInput","getKeyCommands","keys","acc","k","includeMeta","AbstractWebPage","AbstractInterface","x","y","options","deltaX","deltaY","from","to","text","action","element","Error","scheduleWebVisualUpdate","page","force","pendingRefresh","undefined","createWebInputPrimitives","scheduleVisualUpdate","opts","inputStrategy","keyboardTypeDelay","resolveTextInputOptions","target","sendTextSequentially","character","sleep","keyboardTypeOptions","keyName","direction","times","arrowKey","i","param","startingPoint","scrollToEventName","JSON","commonWebActionsForWebPage","includeTouchEvents","defineActionsFromInputPrimitives","defineAction"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-page.d.ts","sourceRoot":"","sources":["../../src/web-page.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"web-page.d.ts","sourceRoot":"","sources":["../../src/web-page.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"Browser use",
|
|
9
9
|
"Android use"
|
|
10
10
|
],
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.17.0",
|
|
12
12
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
13
13
|
"homepage": "https://midscenejs.com/",
|
|
14
14
|
"main": "./dist/lib/index.js",
|
|
@@ -122,9 +122,9 @@
|
|
|
122
122
|
"socket.io-client": "4.8.1",
|
|
123
123
|
"ws": "^8.18.1",
|
|
124
124
|
"zod": "^3.25.1",
|
|
125
|
-
"@midscene/core": "1.
|
|
126
|
-
"@midscene/
|
|
127
|
-
"@midscene/
|
|
125
|
+
"@midscene/core": "1.17.0",
|
|
126
|
+
"@midscene/playground": "1.17.0",
|
|
127
|
+
"@midscene/shared": "1.17.0"
|
|
128
128
|
},
|
|
129
129
|
"devDependencies": {
|
|
130
130
|
"@playwright/test": "^1.45.0",
|