Skip to content

Repository files navigation

AV.by Валюты

Mozilla Add-on Users Chrome Web Store Users

Браузерное расширение (Manifest V3) для Firefox и Chrome-based браузеров, которое автоматически заменяет цены на AV.by из белорусских рублей (BYN) в выбранную валюту: USD, EUR или RUB. Курсы берутся из публичного API Национального банка Республики Беларусь.

Основная функция расширения — менять отображаемые цены на страницах AV.by, чтобы пользователь сразу видел стоимость автомобиля в удобной валюте.

Возможности

  • Замена цен на AV.by из BYN в USD, EUR или RUB.
  • Возврат к оригинальным ценам в BYN при выборе валюты BYN.
  • Поддержка цен в списках объявлений, карточках автомобилей, похожих объявлениях, салонных блоках и текстах ежемесячного платежа.
  • Сохранение выбранной валюты в локальном хранилище браузера.
  • Popup с текущими курсами НБРБ и простым конвертером валют.
  • Автоматическое обновление курсов каждые 4 часа.
  • Работа с кэшированными курсами, если API временно недоступен.
  • Обмен VIN-кодами - чтобы автоматически получать и делиться VIN на карточках авто с другими пользователями (по умолчанию выключена).
  • Пользовательские курсы валют — возможность задать свой курс валют. Курс сохраняется локально и используется для замены цен на AV.by и в конвертере. Сбрасывается при обновлении курсов из НБРБ.

Как пользоваться

  1. Установите расширение в Firefox или Chrome-based браузер.
  2. Откройте popup расширения.
  3. В поле Валюта на av.by выберите USD, EUR, RUB или BYN.
  4. Откройте или обновите страницу на https://av.by/.
  5. Цены на странице будут заменены на выбранную валюту.
  6. В блоке VIN включите обмен VIN-кодами, чтобы автоматически получать и делиться VIN на карточках авто (по умолчанию выключено).

Модули

manifest.json

Базовый манифест расширения: имя, версию, разрешения, popup, background script и content script для AV.by.

Для Firefox используется исходный manifest.json, а для Chrome build-скрипт генерирует совместимый манифест в build/chrome/manifest.json.

Важные разрешения:

  • storage — хранение курсов, ошибок обновления и выбранной валюты.
  • alarms — периодическое обновление курсов.
  • https://api.nbrb.by/* — загрузка курсов НБРБ.
  • https://avby.currencies-bel.top — чтение/отправка VIN-данных через Cloudflare Worker.
  • https://av.by/*, https://*.av.by/* — запуск content script на AV.by.

background.js

Фоновый модуль расширения.

Функции:

  • Загружает курсы НБРБ.
  • Проверяет, что в ответе есть USD, EUR и RUB.
  • Сохраняет валидные курсы в browser.storage.local.
  • Не перезаписывает последние валидные курсы при ошибке API.
  • Обновляет курсы при установке, запуске браузера, по расписанию и по кнопке Обновить в popup.
  • Отвечает на сообщения popup: getRates и refreshRates.
  • Проксирует сообщения content script для VIN: getVinForPage и submitVinForPage.

content/avby.js

Content script, который работает на страницах AV.by.

Функции:

  • Читает выбранную валюту и сохраненные курсы из browser.storage.local.
  • Находит элементы цен на странице AV.by.
  • Сохраняет оригинальный BYN-текст, чтобы можно было точно вернуть исходное отображение.
  • Конвертирует BYN в выбранную валюту.
  • Заменяет цену на странице без добавления второго значения рядом.
  • Обрабатывает динамически добавленные элементы через MutationObserver.
  • Реагирует на изменение выбранной валюты без переустановки расширения.
  • При включенной опции VIN делает запросы к Worker через background, подставляет VIN при безопасном совпадении префикса и отправляет уже раскрытый VIN для подтверждения.

lib/rates.js

Чистый модуль бизнес-логики без зависимостей от браузерных API.

Функции:

  • parseRates — извлекает USD, EUR и RUB из ответа API НБРБ.
  • convert — переводит сумму из выбранной валюты в BYN.
  • convertFromBYN — переводит сумму из BYN в выбранную валюту.
  • parseBynPrice — извлекает числовую цену из текста AV.by.
  • formatDisplayPrice — форматирует цену для отображения на странице.
  • formatRateLabel, formatRate, formatDate, formatTime — форматирование курсов и дат для popup.

popup/

Интерфейс расширения.

Функции:

  • Показывает текущие курсы USD, EUR и RUB к BYN.
  • Показывает время последнего обновления.
  • Позволяет вручную обновить курсы.
  • Содержит простой конвертер валют в BYN.
  • Позволяет выбрать валюту, в которую будут заменяться цены на AV.by.

tests/

Тесты на Vitest.

Покрывают:

  • Парсинг ответа НБРБ.
  • Конвертацию валют.
  • Форматирование цен.
  • Поведение content script на сохраненных HTML-примерах AV.by.
  • Восстановление оригинальных BYN-цен.

scripts/build-chrome.mjs

Build-скрипт для Chrome-based браузеров.

Функции:

  • Создает build/chrome/.
  • Копирует файлы расширения для Chrome-пакета.
  • Генерирует build/chrome/manifest.json из manifest.json (заменяет background на service_worker, удаляет browser_specific_settings).
  • Добавляет в build/chrome/README_CHROME_INSTALL.txt напоминание, что в Chrome нужно выбирать именно build/chrome, а не корень репозитория.

В исходных entrypoint-файлах (background.js, content/avby.js, popup/popup.js) есть shim globalThis.browser ??= globalThis.chrome;, чтобы один код работал с Firefox browser.* и Chrome chrome.* API.

Ссылки

Расширение в Addons Mozilla.org

Расширение в Chrome Webstore

Приватность

Расширение обращается к API НБРБ для получения курсов валют и к Cloudflare Worker для опциональной функции VIN (только если пользователь включил ее в popup).

Выбранная валюта и последние курсы хранятся локально в браузере через browser.storage.local.

Для VIN-функции в Worker передаются: pageId, URL карточки и полный VIN. Worker также считает подтверждения чтения/записи и использует только хэшированный идентификатор запроса (без сохранения сырого IP и User-Agent).

Функция VIN (обмен кодами)

На AV.by просмотр VIN доступен только зарегистрированным пользователям и требует нажатия кнопки «Показать VIN», количество которых ограничено для бесплатных аккаунтов. Расширение позволяет пользователям делиться VIN-кодами через общую базу.

Как это работает:

  1. Сбор. Когда вы нажимаете «Показать VIN» на AV.by, расширение автоматически сохраняет его в общую базу по ID объявления.
  2. Получение. Когда вы открываете карточку авто, расширение проверяет базу. Если VIN уже есть — он отображается сразу, без траты вашего лимита.
  3. Подтверждение. Каждый просмотр и каждая отправка VIN считаются подтверждением. Чем больше подтверждений — тем достовернее VIN.
  4. Защита. Если кто-то попробует сохранить другой VIN для того же объявления — система откажет. VIN можно только подтверждать, но не заменять.

Безопасность: IP-адрес и User-Agent не хранятся в открытом виде. Для идентификации используется односторонний хэш SHA256(соль + IP + UA), восстановить исходные данные невозможно.

Подробное описание логики — в VIN-LOGIC.md.

ID расширения Firefox

В manifest.json задан стабильный ID:

"id": "av-by-currencies@redpandadev"

ID можно менять до первого публичного релиза. После релиза его лучше не менять, потому что Firefox использует ID для идентичности расширения, обновлений и локальных данных.

Если расширение будет публиковаться в AMO как новое listed add-on, Firefox Add-ons может назначить ID автоматически. Для self-hosted, unlisted или стабильного локального тестирования фиксированный ID в манифесте полезен.

Releases

Used by

Contributors

Languages