Files
risa-web/main.js
2026-08-14 13:01:44 -04:00

104 lines
2.6 KiB
JavaScript

const { app, BrowserWindow, session, ipcMain } = require('electron');
const path = require('node:path');
const { ElectronBlocker } = require('@ghostery/adblocker-electron');
const fetch = require('cross-fetch');
const androidUA = 'Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.164 Mobile Safari/537.36';
let historyWindow = null;
async function setupBlocker(sess) {
try {
const blocker = await ElectronBlocker.fromPrebuiltAdsAndTracking(fetch);
blocker.enableBlockingInSession(sess);
console.log('Adblocker enabled');
} catch (err) {
console.error('Failed to load adblocker:', err);
}
}
const createWindow = () => {
const win = new BrowserWindow({
width: 1280,
height: 800,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: false,
nodeIntegration: true,
webSecurity: false,
webviewTag: true,
}
});
win.maximize();
win.loadFile('src/index.html');
};
function createHistoryWindow() {
// Focus if already opened
if (historyWindow) {
historyWindow.focus();
return;
}
historyWindow = new BrowserWindow({
width: 500,
height: 650,
title: 'Browsing History',
autoHideMenuBar: true,
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
}
});
historyWindow.loadFile('src/history.html');
historyWindow.on('closed', () => {
historyWindow = null;
});
}
// IPC Listener to handle popup creation
ipcMain.on('open-history-window', () => {
createHistoryWindow();
});
app.whenReady().then(async () => {
const sess = session.defaultSession;
sess.setUserAgent(androidUA);
await setupBlocker(sess);
sess.webRequest.onBeforeSendHeaders((details, callback) => {
details.requestHeaders['User-Agent'] = androidUA;
details.requestHeaders['Sec-CH-UA-Mobile'] = '?1';
details.requestHeaders['Sec-CH-UA-Platform'] = '"Android"';
callback({ requestHeaders: details.requestHeaders });
});
sess.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = { ...details.responseHeaders };
Object.keys(responseHeaders).forEach((key) => {
if (['x-frame-options', 'content-security-policy'].includes(key.toLowerCase())) {
delete responseHeaders[key];
}
});
callback({
cancel: false,
responseHeaders: responseHeaders
});
});
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});