Power (monitor & save blocker)
Two small always-on modules, grouped together since both are tiny and both expose only flat, top-level window.Electron methods (no namespace). No config needed.
Power monitor (src/main/power-monitor.ts, channel prefix powerMonitor:*)
| Method | Returns | Notes |
|---|---|---|
getPowerMonitorIdleState(idleThreshold: number) |
Promise<'active' | 'idle' | 'locked' | 'unknown'> |
idleThreshold in seconds. |
getPowerMonitorIdleTime() |
Promise<number> |
Seconds since the last user input. |
onPowerMonitorEvent(callback: (data: { type: PowerMonitorEventName }) => void) |
() => void (unsubscribe) |
Broadcast to every open window. Not part of .safe (event subscription, never throws). |
PowerMonitorEventName: 'suspend' | 'resume' | 'lock-screen' | 'unlock-screen' | 'on-battery' | 'on-ac' | 'shutdown'.
const unsubscribe = window.Electron.onPowerMonitorEvent(({ type }) => {
if (type === 'suspend') pauseSync();
if (type === 'resume') resumeSync();
});
const idleState = await window.Electron.getPowerMonitorIdleState(60); // idle after 60s
Power save blocker (src/main/power-save-blocker.ts, channel prefix powerSaveBlocker:*)
Prevents the app or display from entering a lower-power mode — e.g. during a long export or an active screen-share.
| Method | Returns | Notes |
|---|---|---|
startPowerSaveBlocker(type: 'prevent-app-suspension' | 'prevent-display-sleep') |
Promise<number> |
Returns the blocker id. Throws VALIDATION for any other type. |
stopPowerSaveBlocker(id: number) |
Promise<boolean> |
false when id isn't active. Throws VALIDATION for a non-integer/negative id. |
isPowerSaveBlockerStarted(id: number) |
Promise<boolean> |
const id = await window.Electron.startPowerSaveBlocker('prevent-display-sleep');
// ... long-running work ...
await window.Electron.stopPowerSaveBlocker(id);
.safe
getPowerMonitorIdleState, getPowerMonitorIdleTime, startPowerSaveBlocker, stopPowerSaveBlocker, isPowerSaveBlockerStarted are all fully mirrored at window.Electron.safe.* (flat, same shape as the default surface). onPowerMonitorEvent has no .safe counterpart — it's a pure event subscription.