Skip to content

Latest commit

 

History

History
634 lines (486 loc) · 40.2 KB

File metadata and controls

634 lines (486 loc) · 40.2 KB

Помощник прокси

Расширение Chrome Расширение Firefox Manifest V3 Многоязычный

Мощное расширение для управления прокси-серверами в браузере, поддерживающее Chrome/Firefox/Edge и другие браузеры, с поддержкой множественных сценариев, для легкой настройки и переключения сетевых прокси.

1. ✨ Функции

1.1 🔌 Поддержка нескольких протоколов прокси

  • HTTP - Традиционный HTTP-прокси
  • HTTPS - Безопасный HTTPS-прокси
  • SOCKS5 - SOCKS5-прокси с поддержкой TCP/UDP
  • SOCKS4 - Совместимость со старым SOCKS4-прокси

1.2 🌐 Поддержка нескольких браузеров

  • Chrome - Использование Manifest V3 + Service Worker
  • Firefox - Использование Manifest V3 + API proxy.onRequest для перехвата запросов прокси
  • Edge - Полная совместимость с расширениями Chrome, на основе ядра Chromium

1.3 🔄 Три режима прокси

Режим Описание
Отключить Отключить прокси, использовать системное подключение по умолчанию
Вручную Вручную выбрать прокси из списка
Автоматически Автоматически выбирать соответствующий прокси на основе правил URL (режим PAC)

1.4 🎬 Режим сценария

  • Поддержка множественных сценариев: Создание различных наборов конфигураций прокси (например: Компания, Дом, Среда разработки)
  • Быстрое переключение: Переключение списков прокси между различными сценариями одним кликом
  • Гибкое управление: Поддержка добавления, переименования, удаления и сортировки сценариев
  • Миграция прокси: Поддержка перемещения прокси между различными сценариями
  • Автоматическое применение: Автоматический выбор и применение прокси при смене сценария в ручном режиме

1.5 📥 Функция подписки прокси

  • Поддержка нескольких форматов: Поддержка форматов подписки AutoProxy, SwitchyLegacy, SwitchyOmega, PAC
  • Автоматическое обновление: Поддержка запланированного автоматического обновления (1мин/6ч/12ч/1день)
  • Инверсия правил: Поддержка инверсии правил соответствия и обхода подписки (режим белого/черного списка)
  • Предпросмотр правил: Быстрый просмотр извлеченных правил соответствия и обхода из подписки
  • Уникальный ID: Каждый прокси и сценарий имеет уникальный ID для точного управления

1.6 📋 Гибкая настройка правил URL

  • Адреса без прокси (bypass_rules): Домены/IP для прямого подключения в ручном режиме
  • Адреса с прокси (include_rules): Домены, требующие прокси-доступ в автоматическом режиме
  • Стратегия отката: В автоматическом режиме выбрать прямое подключение или отклонение при сбое подключения
  • Поддержка подстановочного знака * и сопоставления доменов
  • Подходит для сценариев, где разные сайты используют разные прокси

1.7 🔐 Поддержка аутентификации прокси

  • Аутентификация по имени пользователя/паролю
  • Автоматическая обработка запросов аутентификации прокси-сервера
  • Безопасное хранение учетных данных

1.8 🧪 Функции тестирования прокси

  • Тест подключения: Проверить доступность прокси
  • Измерение задержки: Тестировать время ответа прокси
  • Пакетное тестирование: Тестировать все прокси одним кликом
  • Цветовые индикаторы: Зеленый(<500ms) / Оранжевый(≥500ms) / Красный(Ошибка)

1.9 🏃 Определение состояния прокси

  • Определить текущие настройки прокси браузера
  • Проверить, успешно ли расширение взяло под контроль прокси
  • Определить, заняли ли другие расширения контроль над прокси
  • Предоставить три результата определения: состояние, предупреждение, ошибка

1.10 🔍 Предпросмотр PAC-скрипта

  • Просмотр скрипта: Просмотр автоматически сгенерированного содержимого PAC-скрипта
  • Список правил: Четкое отображение всех активных правил сопоставления прокси
  • Поддержка отладки: Удобный поиск и устранение проблем сопоставления в автоматическом режиме

1.11 🌙 Режимы темы

  • Светлая тема: Для дневного использования
  • Темная тема: Для ночного использования
  • Автоматическое переключение: Автоматически переключать тему по времени (настраиваемый период)

1.12 ☁️ Хранение и синхронизация данных

1.12.1 Стратегия хранения

Тип хранилища Содержимое хранилища Описание
Локальное хранилище (local) Список прокси, настройки темы, настройки языка, конфигурация синхронизации Всегда активно, обеспечивая автономную доступность и сохранность данных
Облачная синхронизация (sync) Полные данные конфигурации (фрагментированное хранение) Опционально, использует фрагментированное хранение для обхода лимитов квоты

1.12.2 Методы синхронизации

1.12.2.1 Родная синхронизация браузера (Native Sync)
  • Использует API chrome.storage.sync (Chrome) или browser.storage.sync (Firefox)
  • Автоматическая синхронизация через учетную запись Chrome/Firefox
  • Подходит для синхронизации между несколькими устройствами с одной учетной записью браузера
  • Фрагментированное хранение: Данные конфигурации автоматически разбиваются на фрагменты (7КБ на фрагмент) для обхода лимита квоты в 8КБ на элемент
  • Целостность данных: Использование контрольных сумм для обеспечения целостности данных синхронизации
  • Атомарные операции: Операция Push удаляет старые данные перед записью новых для обеспечения согласованности
  • Отображение квоты: Отображение в реальном времени использованной/общей квоты (100КБ) и количества фрагментов
1.12.2.2 Синхронизация GitHub Gist
  • Синхронизация конфигурации между браузерами и устройствами через GitHub Gist
  • Требуется настройка GitHub Personal Access Token
  • Поддерживает ручной push/pull или автоматическую синхронизацию
  • Содержимое конфигурации хранится в зашифрованном виде, конфиденциальная информация автоматически удаляется при экспорте
Элемент конфигурации Описание
Ключ доступа GitHub Personal Access Token (требуется разрешение gist)
Имя файла Имя файла в Gist, по умолчанию proxy_assistant_config.json
ID Gist Автоматическое распознавание и сохранение, ручной ввод не требуется

1.12.3 Операции синхронизации

Операция Описание
Push Загрузить локальную конфигурацию в облако/Gist
Pull Загрузить конфигурацию из облака/Gist локально
Проверить подключение Проверить действительность Gist Token и состояние конфигурации

1.12.4 Импорт/Экспорт

  • Экспорт конфигурации: Создать JSON-файл со всей информацией о прокси, настройками темы, настройками языка и т.д.
  • Импорт конфигурации: Поддержка восстановления конфигурации из JSON-файла
  • Безопасность данных: Экспортируемый файл автоматически удаляет конфиденциальную информацию (Token, пароль)
  • Совместимость форматов: Поддержка импорта файлов конфигурации из старых версий

1.13 🌍 Многоязычная поддержка

Это расширение поддерживает следующие языки:

Язык Код Статус
简体中文 zh-CN ✅ Поддерживается
繁體中文 zh-TW ✅ Поддерживается
English en ✅ Поддерживается
日本語 ja ✅ Поддерживается
Français fr ✅ Поддерживается
Deutsch de ✅ Поддерживается
Español es ✅ Поддерживается
Português pt ✅ Поддерживается
Русский ru ✅ Поддерживается
한국어 ko ✅ Поддерживается

2. 📷 Интерфейс настроек

3. 📁 Структура проекта

ProxyAssistant/
├── conf/                     # Пример конфигурации
│   └── demo.json             # Пример файла конфигурации
├── readme/                   # Многоязычная документация
│   ├── README-zh-TW.md       # Китайский традиционный
│   ├── README-en.md          # Английский
│   ├── README-ja.md          # Японский
│   ├── README-fr.md          # Французский
│   ├── README-de.md          # Немецкий
│   ├── README-es.md          # Испанский
│   ├── README-pt.md          # Португальский
│   ├── README-ru.md          # Русский
│   └── README-ko.md          # Корейский
├── src/                      # Исходный код
│   ├── manifest_chrome.json  # Конфигурация расширения Chrome (Manifest V3)
│   ├── manifest_firefox.json # Конфигурация расширения Firefox
│   ├── main.html             # Страница настроек
│   ├── popup.html            # Всплывающая страница
│   ├── _locales/             # Ресурсы интернационализации
│   ├── js/
│   │   ├── main.js           # Основная логика страницы настроек
│   │   ├── popup.js          # Основная логика всплывающего окна
│   │   ├── worker.js         # Фоновый сервис (Chrome: Service Worker)
│   │   ├── i18n.js           # Поддержка интернационализации
│   │   ├── storage.js        # Модуль управления хранилищем
│   │   ├── proxy.js          # Модуль управления прокси
│   │   ├── scenarios.js      # Модуль управления сценариями
│   │   ├── sync.js           # Модуль синхронизации данных
│   │   ├── subscription.js   # Модуль функции подписки
│   │   ├── theme.js          # Модуль смены темы
│   │   ├── detection.js      # Модуль обнаружения прокси
│   │   ├── validator.js      # Модуль проверки данных
│   │   ├── language.js       # Модуль выбора языка
│   │   ├── utils.js          # Модуль утилит
│   │   ├── config.js         # Модуль констант конфигурации
│   │   ├── version.js        # Модуль управления версиями
│   │   └── jquery.js         # Библиотека jQuery
│   ├── css/
│   │   ├── main.css          # Стили страницы настроек (вкл. общие компоненты)
│   │   ├── popup.css         # Стили всплывающего окна
│   │   ├── theme.css         # Стили темы
│   │   ├── tabs.css          # Стили вкладок
│   │   └── eye-button.css    # Стили кнопки показа пароля
│   └── images/               # Ресурсы изображений
│       ├── icon-16.png
│       ├── icon-32.png
│       ├── icon-48.png
│       ├── icon-128.png
│       └── logo-128.png
├── public/                   # Публичные ресурсы
│   └── img/                  # Демонстрационные и промо-изображения
├── tests/                    # Тесты
│   ├── jest.config.js        # Конфигурация Jest
│   ├── setup.js              # Настройка тестовой среды
│   ├── __mocks__/            # Файлы Mock
│   │   └── chrome.js         # Mock API Chrome
│   ├── unit/                 # Модульные тесты
│   ├── integration/          # Интеграционные тесты
│   └── e2e/                  # Сквозные тесты
├── script/                   # Скрипты сборки
│   └── build.sh              # Скрипт сборки расширения
├── release/                  # Примечания к выпуску
│   └── *.md                  # Журналы обновлений версий
├── doc/                      # Каталог документации
├── build/                    # Каталог выходных файлов сборки
├── package.json              # Зависимости проекта
├── package-lock.json         # Блокировка версий зависимостей
├── Makefile                  # Входная точка команд сборки
├── jest.config.js            # Конфигурация Jest (указывает на tests/jest.config.js)
├── AGENTS.md                 # Руководство разработчика
└── LICENSE                   # Лицензия MIT

4. 🚀 Быстрый старт

4.1 Установка расширения

4.1.1 Chrome

Способ 1 (Рекомендуется): Установить из официального магазина Chrome

  1. Открыть Chrome, перейти в Chrome Web Store
  2. Поиск "Помощник прокси"
  3. Нажать "Установить в Chrome"

Способ 2: Локальная установка

  • Вариант А (использовать исходный код): Скачать исходный код, переименовать src/manifest_chrome.json в manifest.json, затем загрузить каталог src
  • Вариант Б (использовать пакет):
    1. Перейти на страницу GitHub Releases
    2. Скачать файл proxy-assistant-chrome-x.x.x.zip
    3. Распаковать скачанный ZIP-файл в любой каталог
    4. Открыть Chrome, перейти в chrome://extensions/
    5. Включить "Режим разработчика" в верхней правой части
    6. Нажать кнопку "Загрузить распакованное расширение" в верхней левой части
    7. Выбрать папку, распакованную в шаге 3
    8. Расширение появится в списке расширений после успешной установки

4.1.2 Firefox

Способ 1 (Рекомендуется): Установить из официальных дополнений Firefox

  1. Открыть Firefox, перейти в Дополнения Firefox
  2. Поиск "Помощник прокси"
  3. Нажать "Добавить в Firefox"

Способ 2: Локальная установка

  1. Скачать пакет установки Firefox (файл .xpi) из каталога release
  2. Открыть Firefox, перейти в about:addons
  3. Нажать значок шестеренкиУстановить дополнение из файла
  4. Выбрать скачанный файл .xpi

4.1.3 Microsoft Edge

Браузер Edge основан на ядре Chromium и может напрямую устанавливать расширения Chrome.

Способ 1 (Рекомендуется): Установить из Chrome Web Store

  1. Открыть Edge, перейти в edge://extensions/
  2. В разделе "Найти новые расширения" нажать "Получить расширения из Chrome Web Store", перейти в Chrome Web Store
  3. Поиск "Помощник прокси"
  4. Нажать "Получить" затем "Добавить в Microsoft Edge"

Способ 2: Локальная установка

  1. Перейти на страницу GitHub Releases
  2. Скачать файл proxy-assistant-chrome-x.x.x.zip
  3. Распаковать скачанный ZIP-файл в любой каталог
  4. Открыть Edge, перейти в edge://extensions/
  5. Включить "Режим разработчика" в нижней левой части
  6. Нажать кнопку "Выбрать распакованный каталог"
  7. Выбрать папку, распакованную в шаге 3
  8. Расширение появится в списке расширений после успешной установки

4.2 Добавление прокси

  1. Нажать на значок расширения, чтобы открыть всплывающее окно
  2. Нажать кнопку "Настройки", чтобы открыть страницу настроек
  3. Нажать кнопку "Новый прокси", чтобы добавить новый прокси
  4. Заполнить информацию о прокси:
    • Имя прокси
    • Тип протокола (HTTP/HTTPS/SOCKS4/SOCKS5)
    • Адрес прокси (IP или домен)
    • Порт
    • (Опционально) Имя пользователя и пароль
    • (Опционально) Конфигурация правил URL
  5. Нажать кнопку "Сохранить"

4.3 Использование прокси

Ручной режим:

  1. Выбрать "Вручную" во всплывающем окне
  2. Выбрать прокси из списка
  3. Статус "Подключено" означает, что прокси активен

Автоматический режим:

  1. Выбрать "Автоматически" во всплывающем окне
  2. Настроить правила URL для каждого прокси на странице настроек
  3. Прокси автоматически выбирается в зависимости от посещаемого сайта

5. 🛠️ Руководство разработчика

5.1 Среда разработки

Требования:

  • Node.js >= 14
  • npm >= 6
  • Браузер Chrome / Firefox (для тестирования)
  • web-ext (для сборки Firefox XPI, опционально)

Установка зависимостей:

make test_init
# или
npm install

5.2 Команды тестирования

Команда Описание
make test Запустить все тесты (модульные + интеграционные + e2e)
make test_nocache Запустить тесты без кеша
make test_unit Запустить только модульные тесты
make test_integration Запустить только интеграционные тесты
make test_e2e Запустить только e2e тесты
make test_clean Очистка кеша тестов и файлов покрытия

Использование npm напрямую:

npm test                    # Запустить все тесты
npm run test:unit           # Запустить только модульные тесты
npm run test:integration    # Запустить только интеграционные тесты
npm run test:e2e            # Запустить только e2e тесты
npm run test:watch          # Запустить тесты в режиме наблюдения
npm run test:coverage       # Запустить тесты и создать отчет о покрытии

5.3 Команды сборки

Команда Описание
make build Сборка расширений Chrome и Firefox
make clean Очистка артефактов сборки
make test_clean Очистка кеша тестов и файлов покрытия

Указать версию:

make build VERSION=dev
# или
./script/build.sh dev

Артефакты сборки:

build/
├── ProxyAssistant_{VERSION}_chrome.zip      # Установочный пакет Chrome
├── ProxyAssistant_{VERSION}_chrome.tar.gz   # Пакет исходного кода Chrome
├── ProxyAssistant_{VERSION}_firefox.zip     # Установочный пакет Firefox
├── ProxyAssistant_{VERSION}_firefox.tar.gz  # Пакет исходного кода Firefox
└── ProxyAssistant_{VERSION}_firefox.xpi     # Официальный пакет расширения Firefox

5.4 Локальная разработка

Локальная установка Chrome:

  1. Переименовать src/manifest_chrome.json в manifest.json
  2. Открыть Chrome, перейти в chrome://extensions/
  3. Включить "Режим разработчика"
  4. Нажать "Загрузить распакованное расширение"
  5. Выбрать каталог src

Локальная установка Firefox:

  1. Использовать make build для генерации XPI файла
  2. Открыть Firefox, перейти в about:addons
  3. Нажать значок шестеренкиУстановить дополнение из файла
  4. Выбрать сгенерированный файл .xpi

5.5 Стиль кода

  • Отступ: 2 пробела
  • Кавычки: Одинарные кавычки
  • Именование: camelCase, константы используют UPPER_SNAKE_CASE
  • Точка с запятой: Последовательное использование

Подробные спецификации см. в AGENTS.md

6. 📖 Подробная документация

6.1 Синтаксис правил URL

Поддерживаются следующие правила сопоставления:

# Точное совпадение
google.com

# Совпадение поддомена
.google.com
www.google.com

# Совпадение с подстановочным знаком
*.google.com
*.twitter.com

# IP-адрес
192.168.1.1
10.0.0.0/8

6.2 Стратегия отката

В автоматическом режиме, когда подключение к прокси не удается:

Стратегия Описание
Прямое подключение (DIRECT) Обойти прокси, подключиться напрямую к целевому сайту
Отклонить подключение (REJECT) Отклонить запрос

6.3 Автоматический режим с PAC-скриптом

Автоматический режим использует PAC (Proxy Auto-Config) скрипты:

  • Автоматически выбирать прокси на основе текущего URL
  • Сопоставлять по порядку списка прокси, возвращать первый совпадающий прокси
  • Поддерживать стратегию отката
  • Автоматически восстанавливать последнюю конфигурацию при запуске браузера

6.4 Операции быстрого доступа

Операция Метод
Развернуть/свернуть карточку прокси Клик по заголовку карточки
Развернуть/свернуть все карточки Клик по кнопке "Развернуть/свернуть все"
Переупорядочить прокси перетаскиванием Перетащить ручку на заголовке карточки
Показать/скрыть пароль Клик по значку глаза справа от поля пароля
Включить/отключить прокси отдельно Переключатель на карточке
Тестировать отдельный прокси Клик по кнопке "Тест подключения"
Тестировать все прокси Клик по кнопке "Тест всех"
Быстро закрыть всплывающее окно Нажать клавишу ESC на странице

6.5 Импорт/экспорт конфигурации

  1. Экспорт конфигурации: Нажать "Экспорт конфигурации" для скачивания JSON-файла
  2. Импорт конфигурации: Нажать "Импорт конфигурации" и выбрать JSON-файл для восстановления

Конфигурация включает:

  • Всю информацию о прокси
  • Настройки темы
  • Период ночного режима
  • Настройки языка
  • Состояние переключателя синхронизации

6.6 Определение состояния прокси

Нажатие на кнопку "Определить эффект прокси" может:

  • Показать текущий режим прокси браузера
  • Проверить, успешно ли расширение управляет прокси
  • Определить, заняли ли другие расширения управление
  • Получить диагностику и предложения по проблемам

7. 🔧 Техническая архитектура

7.1 Manifest V3

  • Chrome использует спецификацию Manifest V3
  • Service Worker заменяет фоновые страницы
  • Firefox использует background scripts + onRequest API
  • Поддерживает нативное хранилище синхронизации браузера и синхронизацию GitHub Gist

7.2 Основные модули

Модуль Файл Описание
Основной main.js Логика страницы настроек, управление сценариями, прокси CRUD, сортировка перетаскиванием, импорт/экспорт, определение прокси
Всплывающее окно popup.js Взаимодействие с интерфейсом всплывающего окна, отображение состояния прокси, быстрое переключение прокси, отображение автоматического соответствия
Фоновый worker.js Управление конфигурацией прокси, генерация PAC-скрипта, обработка аутентификации, тестирование прокси, автоматическое обновление подписки, мониторинг изменений хранилища
Хранилище storage.js Управление локальным/облачным хранилищем, фрагментированная синхронизация, проверка данных, импорт/экспорт конфигурации
i18n i18n.js Многоязычная поддержка, переключение в реальном времени, динамическая загрузка переводов
Тема theme.js Переключение светлой/темной темы, автоматическое переключение по времени
Сценарии scenarios.js Поддержка множественных сценариев, переключение сценариев, переименование/удаление/сортировка сценариев
Синхронизация sync.js Нативная синхронизация браузера, синхронизация GitHub Gist
Подписка subscription.js Разбор подписки прокси (AutoProxy/SwitchyLegacy/SwitchyOmega/PAC), автоматическое обновление
Прокси proxy.js Рендеринг списка прокси, редактирование, тестирование, сортировка перетаскиванием
Обнаружение detection.js Определение состояния прокси, определение контроля расширения, определение конфликтов
Валидация validator.js Проверка формата IP/домен/порт/правило
Утилиты utils.js Общие утилиты, помощники операций DOM
Язык language.js Обработка взаимодействия выпадающего меню языка
Конфигурация config.js Константы конфигурации по умолчанию, управление системной конфигурацией

7.3 Хранение данных

  • chrome.storage.local: Локальное хранилище (всегда используется)
  • chrome.storage.sync: Облачное хранилище синхронизации (опционально)
  • chrome.storage.session: Хранилище сессии (данные аутентификации, кеш состояния)
  • Принцип локального хранения в первую очередь, решает проблему квоты синхронизации
  • Фрагментированное хранение (7КБ на фрагмент) обходит лимит квоты в 8КБ

7.4 Версия формата конфигурации

Версия Описание
v1 Начальный формат
v2 Добавлена поддержка сценариев
v3 Добавлена поддержка подписки
v4 Унифицированный статус отключения прокси, использование уникальных ID, инверсия правил подписки

7.5 Совместимость браузера

Функция Chrome Firefox
Ручной режим
Автоматический режим
Аутентификация прокси
Тест прокси
Переключение темы
Синхронизация данных
Определение прокси
Подписка

7.6 Основные технологии реализации

  • Нативный JavaScript + jQuery: Без зависимости от фреймворка, легковесный
  • Manifest V3: Chrome использует Service Worker, Firefox использует background scripts
  • PAC-скрипт: Динамически генерируемый скрипт автоматической настройки прокси в автоматическом режиме
  • Аутентификация прокси: Использует API webRequestAuthProvider для обработки запросов аутентификации
  • Фрагментированная синхронизация: Пользовательский алгоритм фрагментации решает проблемы лимитов квоты Chrome storage.sync
  • Разбор подписки: Поддержка автоматического разбора и преобразования нескольких форматов подписки

8. 📝 Сценарии использования

8.1 Сценарий 1: Переключение между несколькими прокси

  • Настройка разных прокси для разных сетевых сред
  • Использование корпоративного прокси для офисной сети
  • Использование научного прокси для домашней сети
  • Быстрое переключение одним кликом

8.2 Сценарий 2: Интеллектуальная маршрутизация

  • Прямое подключение для отечественных сайтов
  • Определенные сайты через прокси
  • Автоматический выбор на основе домена

8.3 Сценарий 3: Тестирование пула прокси

  • Импорт нескольких прокси
  • Пакетное тестирование задержки
  • Выбор оптимального прокси для использования

8.4 Сценарий 4: Совместное использование в команде

  • Экспорт файла конфигурации
  • Обмен с членами команды
  • Единая конфигурация прокси

9. ⚠️ Важные примечания

  1. Описание разрешений: Расширение требует следующие разрешения:

    • proxy: Управление настройками прокси
    • storage: Хранение конфигураций
    • webRequest / webRequestAuthProvider: Обработка запросов аутентификации
    • <all_urls>: Доступ ко всем URL веб-сайтов
  2. Конфликты с другими расширениями: При конфликтах прокси отключить другие расширения прокси/VPN

  3. Безопасность: Учетные данные хранятся локально в браузере, пожалуйста, обеспечьте безопасность вашего устройства

  4. Требования к сети: Убедитесь, что прокси-сервер доступен

  5. Ограничение Firefox: Минимальная требуемая версия Firefox - 142.0

10. 📄 Политика конфиденциальности

Политика конфиденциальности

11. 📄 Лицензия

MIT License - Подробности см. в файле LICENSE

12. 🤝 Вклад

Отчеты об ошибках и pull requests приветствуются!

13. 📧 Контакт

По вопросам или предложениям отправляйте отзывы через GitHub Issues.


Если этот проект был вам полезен, пожалуйста, поставьте Star ⭐ в знак поддержки!