brave-real-playwright-core
Version:
Brave-optimized Playwright Core (v1.55.0) with comprehensive stealth patches and error stack sanitization
309 lines (308 loc) • 9.51 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var androidDispatcher_exports = {};
__export(androidDispatcher_exports, {
AndroidDeviceDispatcher: () => AndroidDeviceDispatcher,
AndroidDispatcher: () => AndroidDispatcher,
AndroidSocketDispatcher: () => AndroidSocketDispatcher
});
module.exports = __toCommonJS(androidDispatcher_exports);
var import_browserContextDispatcher = require("./browserContextDispatcher");
var import_dispatcher = require("./dispatcher");
var import_android = require("../android/android");
var import_eventsHelper = require("../utils/eventsHelper");
var import_instrumentation = require("../instrumentation");
class AndroidDispatcher extends import_dispatcher.Dispatcher {
constructor(scope, android) {
super(scope, android, "Android", {});
this._type_Android = true;
}
async devices(params, progress) {
const devices = await this._object.devices(progress, params);
return {
devices: devices.map((d) => AndroidDeviceDispatcher.from(this, d))
};
}
}
class AndroidDeviceDispatcher extends import_dispatcher.Dispatcher {
constructor(scope, device) {
super(scope, device, "AndroidDevice", {
model: device.model,
serial: device.serial
});
this._type_EventTarget = true;
this._type_AndroidDevice = true;
for (const webView of device.webViews())
this._dispatchEvent("webViewAdded", { webView });
this.addObjectListener(import_android.AndroidDevice.Events.WebViewAdded, (webView) => this._dispatchEvent("webViewAdded", { webView }));
this.addObjectListener(import_android.AndroidDevice.Events.WebViewRemoved, (socketName) => this._dispatchEvent("webViewRemoved", { socketName }));
this.addObjectListener(import_android.AndroidDevice.Events.Close, () => this._dispatchEvent("close"));
}
static from(scope, device) {
const result = scope.connection.existingDispatcher(device);
return result || new AndroidDeviceDispatcher(scope, device);
}
async wait(params, progress) {
await progress.race(this._object.send("wait", params));
}
async fill(params, progress) {
await progress.race(this._object.send("click", { selector: params.androidSelector }));
await progress.race(this._object.send("fill", params));
}
async tap(params, progress) {
await progress.race(this._object.send("click", params));
}
async drag(params, progress) {
await progress.race(this._object.send("drag", params));
}
async fling(params, progress) {
await progress.race(this._object.send("fling", params));
}
async longTap(params, progress) {
await progress.race(this._object.send("longClick", params));
}
async pinchClose(params, progress) {
await progress.race(this._object.send("pinchClose", params));
}
async pinchOpen(params, progress) {
await progress.race(this._object.send("pinchOpen", params));
}
async scroll(params, progress) {
await progress.race(this._object.send("scroll", params));
}
async swipe(params, progress) {
await progress.race(this._object.send("swipe", params));
}
async info(params, progress) {
const info = await progress.race(this._object.send("info", params));
fixupAndroidElementInfo(info);
return { info };
}
async inputType(params, progress) {
const text = params.text;
const keyCodes = [];
for (let i = 0; i < text.length; ++i) {
const code = keyMap.get(text[i].toUpperCase());
if (code === void 0)
throw new Error("No mapping for " + text[i] + " found");
keyCodes.push(code);
}
await progress.race(Promise.all(keyCodes.map((keyCode) => this._object.send("inputPress", { keyCode }))));
}
async inputPress(params, progress) {
if (!keyMap.has(params.key))
throw new Error("Unknown key: " + params.key);
await progress.race(this._object.send("inputPress", { keyCode: keyMap.get(params.key) }));
}
async inputTap(params, progress) {
await progress.race(this._object.send("inputClick", params));
}
async inputSwipe(params, progress) {
await progress.race(this._object.send("inputSwipe", params));
}
async inputDrag(params, progress) {
await progress.race(this._object.send("inputDrag", params));
}
async screenshot(params, progress) {
return { binary: await progress.race(this._object.screenshot()) };
}
async shell(params, progress) {
return { result: await progress.race(this._object.shell(params.command)) };
}
async open(params, progress) {
const socket = await this._object.open(progress, params.command);
return { socket: new AndroidSocketDispatcher(this, new SocketSdkObject(this._object, socket)) };
}
async installApk(params, progress) {
await this._object.installApk(progress, params.file, { args: params.args });
}
async push(params, progress) {
await progress.race(this._object.push(progress, params.file, params.path, params.mode));
}
async launchBrowser(params, progress) {
const context = await this._object.launchBrowser(progress, params.pkg, params);
return { context: import_browserContextDispatcher.BrowserContextDispatcher.from(this, context) };
}
async close(params, progress) {
await this._object.close();
}
async connectToWebView(params, progress) {
return { context: import_browserContextDispatcher.BrowserContextDispatcher.from(this, await this._object.connectToWebView(progress, params.socketName)) };
}
}
class SocketSdkObject extends import_instrumentation.SdkObject {
constructor(parent, socket) {
super(parent, "socket");
this._socket = socket;
this._eventListeners = [
import_eventsHelper.eventsHelper.addEventListener(socket, "data", (data) => this.emit("data", data)),
import_eventsHelper.eventsHelper.addEventListener(socket, "close", () => {
import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
this.emit("close");
})
];
}
async write(data) {
await this._socket.write(data);
}
close() {
this._socket.close();
}
}
class AndroidSocketDispatcher extends import_dispatcher.Dispatcher {
constructor(scope, socket) {
super(scope, socket, "AndroidSocket", {});
this._type_AndroidSocket = true;
this.addObjectListener("data", (data) => this._dispatchEvent("data", { data }));
this.addObjectListener("close", () => {
this._dispatchEvent("close");
this._dispose();
});
}
async write(params, progress) {
await progress.race(this._object.write(params.data));
}
async close(params, progress) {
this._object.close();
}
}
const keyMap = /* @__PURE__ */ new Map([
["Unknown", 0],
["SoftLeft", 1],
["SoftRight", 2],
["Home", 3],
["Back", 4],
["Call", 5],
["EndCall", 6],
["0", 7],
["1", 8],
["2", 9],
["3", 10],
["4", 11],
["5", 12],
["6", 13],
["7", 14],
["8", 15],
["9", 16],
["Star", 17],
["*", 17],
["Pound", 18],
["#", 18],
["DialUp", 19],
["DialDown", 20],
["DialLeft", 21],
["DialRight", 22],
["DialCenter", 23],
["VolumeUp", 24],
["VolumeDown", 25],
["Power", 26],
["Camera", 27],
["Clear", 28],
["A", 29],
["B", 30],
["C", 31],
["D", 32],
["E", 33],
["F", 34],
["G", 35],
["H", 36],
["I", 37],
["J", 38],
["K", 39],
["L", 40],
["M", 41],
["N", 42],
["O", 43],
["P", 44],
["Q", 45],
["R", 46],
["S", 47],
["T", 48],
["U", 49],
["V", 50],
["W", 51],
["X", 52],
["Y", 53],
["Z", 54],
["Comma", 55],
[",", 55],
["Period", 56],
[".", 56],
["AltLeft", 57],
["AltRight", 58],
["ShiftLeft", 59],
["ShiftRight", 60],
["Tab", 61],
[" ", 61],
["Space", 62],
[" ", 62],
["Sym", 63],
["Explorer", 64],
["Envelop", 65],
["Enter", 66],
["Del", 67],
["Grave", 68],
["Minus", 69],
["-", 69],
["Equals", 70],
["=", 70],
["LeftBracket", 71],
["(", 71],
["RightBracket", 72],
[")", 72],
["Backslash", 73],
["\\", 73],
["Semicolon", 74],
[";", 74],
["Apostrophe", 75],
["`", 75],
["Slash", 76],
["/", 76],
["At", 77],
["@", 77],
["Num", 78],
["HeadsetHook", 79],
["Focus", 80],
["Plus", 81],
["Menu", 82],
["Notification", 83],
["Search", 84],
["ChannelUp", 166],
["ChannelDown", 167],
["AppSwitch", 187],
["Assist", 219],
["Cut", 277],
["Copy", 278],
["Paste", 279]
]);
function fixupAndroidElementInfo(info) {
info.clazz = info.clazz || "";
info.pkg = info.pkg || "";
info.res = info.res || "";
info.desc = info.desc || "";
info.text = info.text || "";
for (const child of info.children || [])
fixupAndroidElementInfo(child);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
AndroidDeviceDispatcher,
AndroidDispatcher,
AndroidSocketDispatcher
});