Files
2026-03-03 23:49:13 +01:00

54 lines
2.5 KiB
JavaScript

import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
// Playwriter extension IDs - used for validation and Chrome flag commands
export const EXTENSION_IDS = [
'jfeammnjpkecdekppnclgkkffahnhfhe', // Production (Chrome Web Store)
'pebbngnfojnignonigcnkdilknapkgid', // Dev extension (stable ID from manifest key)
];
/**
* Parse a relay host string into HTTP and WebSocket base URLs.
* Supports both plain hostnames (appends port) and full URLs (uses as-is).
*
* Examples:
* "192.168.1.10" → http://192.168.1.10:19988, ws://192.168.1.10:19988
* "https://my-machine-tunnel.traforo.dev" → https://my-machine-tunnel.traforo.dev, wss://my-machine-tunnel.traforo.dev
*/
export function parseRelayHost(host, port = 19988) {
if (host.startsWith('https://') || host.startsWith('http://')) {
const url = new URL(host);
const httpBaseUrl = url.origin;
const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
const wsBaseUrl = `${wsProtocol}//${url.host}`;
return { httpBaseUrl, wsBaseUrl };
}
return {
httpBaseUrl: `http://${host}:${port}`,
wsBaseUrl: `ws://${host}:${port}`,
};
}
export function getCdpUrl({ port = 19988, host = '127.0.0.1', token, extensionId, } = {}) {
const id = `${Math.random().toString(36).substring(2, 15)}_${Date.now()}`;
const params = new URLSearchParams();
if (token) {
params.set('token', token);
}
if (extensionId) {
params.set('extensionId', extensionId);
}
const queryString = params.toString();
const suffix = queryString ? `?${queryString}` : '';
const { wsBaseUrl } = parseRelayHost(host, port);
return `${wsBaseUrl}/cdp/${id}${suffix}`;
}
// Use ~/.playwriter for logs so each OS user gets their own dir (avoids permission errors on shared machines, see #44)
const LOG_BASE_DIR = path.join(os.homedir(), '.playwriter');
export const LOG_FILE_PATH = process.env.PLAYWRITER_LOG_FILE_PATH || path.join(LOG_BASE_DIR, 'relay-server.log');
export const LOG_CDP_FILE_PATH = process.env.PLAYWRITER_CDP_LOG_FILE_PATH || path.join(path.dirname(LOG_FILE_PATH), 'cdp.jsonl');
const packageJsonPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
export const VERSION = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')).version;
export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
//# sourceMappingURL=utils.js.map