Багато Chrome extension, яким потрібні дані, функціонують за одним із двох сценаріїв: вони звертаються до зовнішнього API або зберігають невеликий обсяг даних користувача локально. EntryCheck відмовляється від обох підходів, впроваджуючи статичний набір даних про візові вимоги для понад 190 комбінацій паспорт/країна призначення безпосередньо у своє розширення. Це рішення обмінює великий розмір бандлу на миттєвий пошук та повну незалежність від API, що виявилося оптимальним для роботи з туристичними даними.
Чому статичні дані кращі за зовнішній API?
Візові вимоги не змінюються часто. Країна може оновлювати список віз при прибутті лише двічі чи тричі на рік. Використання API додало б латентності, вимагало б автентифікації та створювало б режим відмови (відсутність мережі, збій API, обмеження швидкості) у контексті, коли користувач зазвичай прагне швидко перевірити інформацію перед бронюванням рейсу. До того ж, на практиці немає надійного безкоштовного публічного API для візових вимог. Джерела даних — це державні вебсайти та референтні бази. Скрапінг або ліцензування цих даних для реального часу не виправдає вартості інструменту, чия головна цінність — швидкість і простота.
Як побудована структура даних?
Основний набір даних представлений у форматі JSON-об'єкта, який індексується за дволітерним кодом паспорта ISO, а потім за дволітерним кодом країни призначення. Це дозволяє реалізувати пошук за допомогою лише двох звернень до масиву.
- Формат даних: JSON-об'єкт, де ключі — це ISO-коди паспорта та країни призначення.
- Статуси візи: Можливі статуси включають
visa_free(безвізовий),visa_on_arrival(віза при прибутті),e_visa,visa_requiredтаnot_admitted. - Ефективність: Після стиснення Gzip повний набір даних займає менше 30KB, що є прийнятним обсягом для бандлу розширення.
Процес вбудовування та завантаження
Матриця даних зберігається у файлі visa-matrix.json у директорії public/. Framework WXT (фреймворк для розширень) копіює цю директорію безпосередньо в кореневий вихідний каталог. Сервісний воркер фону завантажує цей файл один раз під час встановлення та кешує результат у пам'яті.
Для доступу використовується функція chrome.runtime.getURL, яка перетворює відносний шлях на внутрішній URL розширення (chrome-extension://). Це стандартна практика для доступу до вбудованих активів із сервісного воркера та працює у MV3 без спеціальних дозволів.
Інтеграція з Google Flights
Хоча сам по собі пошуковий попап EntryCheck функціонує коректно, найбільш корисна функція — це автоматичне впровадження даних на сторінках Google Flights. Скрипт контенту розширення виявляє країну призначення після того, як користувач шукає рейс, перевіряє вимоги для збереженого паспорта та вставляє значок поруч із результатами пошуку.
Скрипт контенту зчитує поточну країну з параметрів URL і DOM сторінки. Потім він викликає фоновий сервіс через chrome.runtime.sendMessage для виконання пошуку, після чого відображається невеликий компонент-значок. Оскільки матриця даних знаходиться в пам'яті після першого завантаження, відповідь від фонового скрипта є синхронною з точки зору контент-скрипта.
Перспективи
Основний недолік статичних даних полягає в тому, що вони можуть застаріти. Поточний підхід розробника передбачає ручне оновлення JSON-файлу з кожним релізом розширення та його відправку як звичайного оновлення CWS (Chrome Web Store). Хоча це і є ручним процесом, він вважається керованим, оскільки візові вимоги змінюються не надто часто.