54 lines
2.5 KiB
JavaScript
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
|