93 lines
2.2 KiB
JavaScript
93 lines
2.2 KiB
JavaScript
import { app, ipcMain, shell, globalShortcut } from 'electron'
|
|
import { createRequire } from 'module'
|
|
import {
|
|
registerGlobalShortcuts,
|
|
setupSpotlightIPC
|
|
} from './spotlightWindow.js'
|
|
import {
|
|
createWindow,
|
|
setupMainWindowIPC,
|
|
setupMainWindowAppEvents,
|
|
setupDevAuthServer
|
|
} from './mainWindow.js'
|
|
|
|
// --- Keytar-backed auth session storage (main process) ---
|
|
const require = createRequire(import.meta.url)
|
|
let keytar = null
|
|
try {
|
|
// keytar is a native module; in some dev environments it may not be built yet.
|
|
keytar = require('keytar')
|
|
} catch (e) {
|
|
console.warn(
|
|
'[keytar] Not available; auth session persistence will be disabled.',
|
|
e?.message || e
|
|
)
|
|
}
|
|
|
|
const KEYTAR_SERVICE = app.name || 'Farm Control'
|
|
const KEYTAR_ACCOUNT = 'authSession'
|
|
|
|
app.whenReady().then(() => {
|
|
createWindow()
|
|
registerGlobalShortcuts()
|
|
setupSpotlightIPC()
|
|
setupMainWindowIPC()
|
|
setupMainWindowAppEvents(app)
|
|
setupDevAuthServer()
|
|
})
|
|
|
|
app.on('will-quit', () => {
|
|
globalShortcut.unregisterAll()
|
|
})
|
|
|
|
// IPC handler to get OS
|
|
ipcMain.handle('os-info', () => {
|
|
return {
|
|
platform: process.platform
|
|
}
|
|
})
|
|
|
|
ipcMain.handle('auth-session-get', async () => {
|
|
try {
|
|
if (!keytar) return null
|
|
const raw = await keytar.getPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT)
|
|
if (!raw) return null
|
|
return JSON.parse(raw)
|
|
} catch (e) {
|
|
console.warn('[keytar] Failed to read auth session.', e?.message || e)
|
|
return null
|
|
}
|
|
})
|
|
|
|
ipcMain.handle('auth-session-set', async (event, session) => {
|
|
try {
|
|
if (!keytar) return false
|
|
if (!session || typeof session !== 'object') return false
|
|
await keytar.setPassword(
|
|
KEYTAR_SERVICE,
|
|
KEYTAR_ACCOUNT,
|
|
JSON.stringify(session)
|
|
)
|
|
return true
|
|
} catch (e) {
|
|
console.warn('[keytar] Failed to write auth session.', e?.message || e)
|
|
return false
|
|
}
|
|
})
|
|
|
|
ipcMain.handle('auth-session-clear', async () => {
|
|
try {
|
|
if (!keytar) return false
|
|
return await keytar.deletePassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT)
|
|
} catch (e) {
|
|
console.warn('[keytar] Failed to clear auth session.', e?.message || e)
|
|
return false
|
|
}
|
|
})
|
|
|
|
// IPC handler for opening external URLs
|
|
ipcMain.handle('open-external-url', (event, url) => {
|
|
console.log('Opening external url...')
|
|
shell.openExternal(url)
|
|
})
|