puppeteer-vision-mcp-server
Version:
MCP Server for scraping webpages and converting to markdown
60 lines (59 loc) • 2.35 kB
JavaScript
import fs from 'fs';
import path from 'path';
/**
* Copies session state from a regular Chrome profile to make it available for Chrome for Testing
* @param sourceUserDataDir Path to the source Chrome user data directory
* @returns Whether the copy operation succeeded
*/
export async function copySessionState(sourceUserDataDir) {
try {
console.log(`Attempting to copy session state from: ${sourceUserDataDir}`);
// Validate that the source directory exists
if (!fs.existsSync(sourceUserDataDir)) {
console.error(`Source user data directory does not exist: ${sourceUserDataDir}`);
return false;
}
// The Default profile contains most user data
const defaultProfilePath = path.join(sourceUserDataDir, 'Default');
if (!fs.existsSync(defaultProfilePath)) {
console.error(`Default profile not found in user data directory: ${defaultProfilePath}`);
return false;
}
// Cookie files to copy (critical for maintaining login sessions)
const filesToCopy = [
'Cookies',
'Cookies-journal',
'Login Data',
'Login Data-journal',
'Web Data',
'Web Data-journal'
];
// Check if files exist and copy them
let filesCopied = 0;
for (const fileName of filesToCopy) {
const sourcePath = path.join(defaultProfilePath, fileName);
if (fs.existsSync(sourcePath)) {
try {
// Create a backup first
const backupPath = `${sourcePath}.backup`;
fs.copyFileSync(sourcePath, backupPath);
// Log successful backup
console.log(`Created backup: ${backupPath}`);
filesCopied++;
}
catch (err) {
console.error(`Failed to create backup for ${sourcePath}:`, err);
}
}
else {
console.log(`File not found, skipping: ${sourcePath}`);
}
}
console.log(`Successfully processed ${filesCopied} session files`);
return filesCopied > 0;
}
catch (error) {
console.error('Error copying session state:', error);
return false;
}
}