Что возвращает resolveProxy в Electron
Дождитесь решения, специфичного для URL, из фактической сессии окна и отличайте возвращённую строку в стиле PAC от установленного соединения.
В асинхронной функции главного процесса с существующим окном запросите сессию, которую это окно действительно использует:
const selectedSession = mainWindow.webContents.session;
const route = await selectedSession.resolveProxy('https://api.example/');
Текущий API возвращает Promise, разрешающийся в строку. Дождитесь завершения ожидающей операции setProxy, прежде чем проверять изменение конфигурации.
Результат — это решение о прокси, специфичное для URL. Гипотетическое значение может быть таким:
PROXY proxy-a.example:8080; PROXY proxy-b.example:8080; DIRECT
Это упорядоченный список кандидатов в синтаксисе стиля PAC, а не одно имя хоста. DIRECT явно обозначает прямого кандидата. Обрабатывайте пустой результат отдельно; не считайте молча каждую пустую или нераспознанную строку значением DIRECT.
Запрашивайте фактический целевой URL, потому что решения PAC и обхода могут различаться в зависимости от назначения. Точно так же окно с разделённой сессией не обязано иметь ту же политику, что и session.defaultSession.
Разрешение прокси может включать работу автоматической конфигурации, например получение скрипта PAC. Возвращённый выбор всё равно не является завершённым запросом к целевому сайту, успешным входом в прокси или доказательством его публичного выходного IP. Сохраняйте сессию, URL и разрешённых кандидатов при сравнении их с результатом последующего запроса.