@agentic-intelligence/dom-engine
Version:
Agentic DOM Intelligence - A lightweight TypeScript library for DOM analysis and manipulation, designed for web automation and AI agents
270 lines • 7.81 kB
JavaScript
"use strict";
/**
* Type action functionality
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeTypeAction = executeTypeAction;
/**
* Simulates human-like interaction for input elements
*/
function simulateHumanInputInteraction(inputElement, textValue) {
// Get element position for realistic mouse events
const rect = inputElement.getBoundingClientRect();
const x = rect.left + rect.width / 2;
const y = rect.top + rect.height / 2;
// Simulate mouse events with real coordinates
const mouseEvents = [
new MouseEvent('mouseover', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('mousemove', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('mousedown', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 1
}),
new MouseEvent('mouseup', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('click', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
})
];
// Dispatch mouse events in sequence
mouseEvents.forEach(event => {
inputElement.dispatchEvent(event);
});
// Focus element (after mouse events)
inputElement.focus();
// Simulate keyboard events for activation
const keyboardEvents = [
new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
key: 'Tab',
code: 'Tab',
keyCode: 9
}),
new KeyboardEvent('keyup', {
bubbles: true,
cancelable: true,
key: 'Tab',
code: 'Tab',
keyCode: 9
})
];
keyboardEvents.forEach(event => {
inputElement.dispatchEvent(event);
});
// Set the value
inputElement.value = textValue || '';
// Simulate input/change events with realistic details
const inputEvent = new InputEvent('input', {
bubbles: true,
cancelable: true,
inputType: 'insertText',
data: textValue || ''
});
const changeEvent = new Event('change', {
bubbles: true,
cancelable: true
});
inputElement.dispatchEvent(inputEvent);
inputElement.dispatchEvent(changeEvent);
// Simulate final keyboard events
const finalKeyboardEvents = [
new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
key: 'Enter',
code: 'Enter',
keyCode: 13
}),
new KeyboardEvent('keyup', {
bubbles: true,
cancelable: true,
key: 'Enter',
code: 'Enter',
keyCode: 13
})
];
finalKeyboardEvents.forEach(event => {
inputElement.dispatchEvent(event);
});
}
/**
* Simulates human-like interaction for contentEditable elements
*/
function simulateHumanContentEditableInteraction(contentElement, textValue) {
// Get element position for realistic mouse events
const rect = contentElement.getBoundingClientRect();
const x = rect.left + rect.width / 2;
const y = rect.top + rect.height / 2;
// Simulate mouse events with real coordinates
const mouseEvents = [
new MouseEvent('mouseover', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('mousemove', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('mousedown', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 1
}),
new MouseEvent('mouseup', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
}),
new MouseEvent('click', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
button: 0,
buttons: 0
})
];
// Dispatch mouse events in sequence
mouseEvents.forEach(event => {
contentElement.dispatchEvent(event);
});
// Focus element (after mouse events)
contentElement.focus();
// Simulate keyboard events for activation
const keyboardEvents = [
new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
key: 'Tab',
code: 'Tab',
keyCode: 9
}),
new KeyboardEvent('keyup', {
bubbles: true,
cancelable: true,
key: 'Tab',
code: 'Tab',
keyCode: 9
})
];
keyboardEvents.forEach(event => {
contentElement.dispatchEvent(event);
});
// Set element content
contentElement.textContent = textValue || '';
// Simulate input/change events with realistic details
const inputEvent = new InputEvent('input', {
bubbles: true,
cancelable: true,
inputType: 'insertText',
data: textValue || ''
});
const changeEvent = new Event('change', {
bubbles: true,
cancelable: true
});
contentElement.dispatchEvent(inputEvent);
contentElement.dispatchEvent(changeEvent);
// Simulate final keyboard events
const finalKeyboardEvents = [
new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
key: 'Enter',
code: 'Enter',
keyCode: 13
}),
new KeyboardEvent('keyup', {
bubbles: true,
cancelable: true,
key: 'Enter',
code: 'Enter',
keyCode: 13
})
];
finalKeyboardEvents.forEach(event => {
contentElement.dispatchEvent(event);
});
}
/**
* Executes type action on an element
* @param element - Element to type into
* @param value - Text value to type
* @param agenticPurposeId - Unique identifier of the element
* @returns ActionResult with execution result
*/
function executeTypeAction(element, value, agenticPurposeId) {
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
// Simulate human interaction
simulateHumanInputInteraction(element, value);
return {
agenticPurposeId,
success: true,
action: 'type',
message: `Text "${value}" typed successfully`
};
}
else if (element instanceof HTMLElement && element.contentEditable === 'true') {
// Simulate human interaction for contentEditable elements
simulateHumanContentEditableInteraction(element, value);
return {
agenticPurposeId,
success: true,
action: 'type',
message: `Text "${value}" typed successfully in contentEditable element`
};
}
else {
return {
agenticPurposeId,
success: false,
action: 'type',
error: 'Element is not a text input field'
};
}
}
//# sourceMappingURL=type.js.map