# Сторонние компоненты и их лицензии Программа: Система электронной очереди «Минутка». Файл собирается скриптом `scripts/third-party-notices.mjs` (команда `npm run notices`) и руками не правится: правки вносятся в скрипт или в зависимости. Перечислены прямые зависимости веб-клиента, сервера и Android-приложения киоска с установленными версиями и лицензиями, а также шрифты, значки и другие материалы сторонних авторов. Транзитивные зависимости перечислены в `package-lock.json` и `server/package-lock.json` вместе с полем `license` каждого пакета. Тексты лицензий лежат в каталогах самих пакетов (`node_modules/<пакет>/LICENSE`) и на сайтах проектов. Исключительное право на саму программу принадлежит правообладателю, указанному в файле `LICENSE`; на сторонние компоненты действуют их собственные лицензии. ## Веб-клиент Источник: `package.json`. ### Входят в продукт | Пакет | Версия | Лицензия | Для чего | Сайт | |---|---|---|---|---| | `@fontsource-variable/inter` | 5.3.0 | OFL-1.1 | шрифт Inter (переменный), файлы шрифта в сборке | https://fontsource.org/fonts/inter | | `@fontsource-variable/nunito` | 5.3.0 | OFL-1.1 | шрифт Nunito (переменный) | https://fontsource.org/fonts/nunito | | `@fontsource/inter` | 5.2.8 | OFL-1.1 | шрифт Inter (статические начертания) | https://fontsource.org/fonts/inter | | `@fontsource/nunito` | 5.2.7 | OFL-1.1 | шрифт Nunito (статические начертания) | https://fontsource.org/fonts/nunito | | `@fontsource/onest` | 5.3.1 | OFL-1.1 | шрифт Onest | https://fontsource.org/fonts/onest | | `@fontsource/oswald` | 5.3.0 | OFL-1.1 | шрифт Oswald | https://fontsource.org/fonts/oswald | | `framer-motion` | 11.18.2 | MIT | анимации интерфейса | https://github.com/motiondivision/motion/ | | `html-to-image` | 1.11.13 | MIT | сохранение плаката и карточек картинкой | https://github.com/bubkoo/html-to-image | | `leaflet` | 1.9.4 | BSD-2-Clause | карта (запасной движок карты) | https://leafletjs.com/ | | `lucide-react` | 0.460.0 | ISC | значки интерфейса | https://lucide.dev | | `qrcode` | 1.5.4 | MIT | формирование QR-кодов | http://github.com/soldair/node-qrcode | | `react` | 18.3.1 | MIT | библиотека интерфейса | https://reactjs.org/ | | `react-dom` | 18.3.1 | MIT | отрисовка в браузере | https://reactjs.org/ | | `react-router-dom` | 6.30.4 | MIT | маршруты одностраничного приложения | https://github.com/remix-run/react-router | ### Средства разработки и сборки (в поставку не входят) | Пакет | Версия | Лицензия | Сайт | |---|---|---|---| | `@tailwindcss/vite` | 4.3.1 | MIT | https://tailwindcss.com | | `@types/leaflet` | 1.9.22 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/leaflet | | `@types/qrcode` | 1.5.6 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/qrcode | | `@types/react` | 18.3.31 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react | | `@types/react-dom` | 18.3.7 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom | | `@vitejs/plugin-react` | 4.7.0 | MIT | https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react | | `eslint` | 9.39.5 | MIT | https://eslint.org | | `eslint-plugin-react-hooks` | 5.2.0 | MIT | https://react.dev/ | | `tailwindcss` | 4.3.1 | MIT | https://tailwindcss.com | | `typescript` | 5.9.3 | Apache-2.0 | https://www.typescriptlang.org/ | | `typescript-eslint` | 8.69.0 | MIT | https://typescript-eslint.io/packages/typescript-eslint | | `vite` | 6.4.3 | MIT | https://vite.dev | | `vitest` | 4.1.10 | MIT | https://vitest.dev | ## Сервер Источник: `server/package.json`. ### Входят в продукт | Пакет | Версия | Лицензия | Для чего | Сайт | |---|---|---|---|---| | `@fastify/cookie` | 11.0.2 | MIT | cookie сеанса | https://github.com/fastify/fastify-cookie | | `@fastify/rate-limit` | 10.3.0 | MIT | ограничение частоты запросов | https://github.com/fastify/fastify-rate-limit | | `@fastify/static` | 10.1.3 | MIT | раздача собранного веб-клиента | https://github.com/fastify/fastify-static | | `@node-saml/node-saml` | 5.1.0 | MIT | единый вход SAML 2.0 | https://github.com/node-saml/node-saml | | `@resvg/resvg-js` (необязательная) | 2.6.2 | MPL-2.0 | картинка талона из SVG; без пакета функция отключается | https://github.com/yisibl/resvg-js | | `@xmldom/xmldom` | 0.8.15 | MIT | разбор XML (SAML, CalDAV, курс ЦБ) | https://github.com/xmldom/xmldom | | `bcryptjs` | 2.4.3 | MIT | хэширование паролей | https://github.com/dcodeIO/bcrypt.js | | `dotenv` | 16.6.1 | BSD-2-Clause | чтение файла окружения сервера | https://github.com/motdotla/dotenv | | `fastify` | 5.8.5 | MIT | веб-сервер и маршруты API | https://fastify.dev/ | | `jsonwebtoken` | 9.0.3 | MIT | токены сеанса (JWT) | https://github.com/auth0/node-jsonwebtoken | | `nodemailer` | 9.0.5 | MIT-0 | отправка почты по SMTP | https://nodemailer.com/ | | `pdfkit` | 0.19.1 | MIT | PDF: плакаты, отчёты, закрывающие документы | http://pdfkit.org/ | | `pg` | 8.22.0 | MIT | драйвер PostgreSQL | https://github.com/brianc/node-postgres | | `qrcode` | 1.5.4 | MIT | формирование QR-кодов | http://github.com/soldair/node-qrcode | | `web-push` | 3.6.7 | MPL-2.0 | уведомления Web Push (VAPID) | https://github.com/web-push-libs/web-push | | `zod` | 3.25.76 | MIT | проверка входных данных | https://zod.dev | ### Средства разработки и сборки (в поставку не входят) | Пакет | Версия | Лицензия | Сайт | |---|---|---|---| | `@types/bcryptjs` | 2.4.6 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/bcryptjs | | `@types/jsonwebtoken` | 9.0.10 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jsonwebtoken | | `@types/node` | 22.20.0 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node | | `@types/nodemailer` | 6.4.24 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/nodemailer | | `@types/pdfkit` | 0.17.6 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/pdfkit | | `@types/pg` | 8.20.0 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/pg | | `@types/qrcode` | 1.5.6 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/qrcode | | `@types/web-push` | 3.6.4 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/web-push | | `tsx` | 4.22.4 | MIT | https://tsx.hirok.io | | `typescript` | 5.9.3 | Apache-2.0 | https://www.typescriptlang.org/ | | `xml-crypto` | 6.3.2 | MIT | https://github.com/node-saml/xml-crypto | ## Android-приложение «Минутка Киоск» Источник: `android/gradle/libs.versions.toml`. Лицензии указаны по сведениям самих проектов: в репозитории они не записаны. Закрытых библиотек в составе приложения нет: QR-код подключения распознаёт открытая библиотека ZXing. ### Библиотеки | Библиотека | Версия | Лицензия | Для чего | |---|---|---|---| | `androidx.core:core-ktx` | 1.16.0 | Apache-2.0 | базовые расширения Android, заставка | | `androidx.activity:activity-compose` | 1.10.1 | Apache-2.0 | экраны Compose | | `androidx.lifecycle:lifecycle-runtime-compose` | 2.9.1 | Apache-2.0 | жизненный цикл экранов | | `androidx.lifecycle:lifecycle-viewmodel-compose` | 2.9.1 | Apache-2.0 | жизненный цикл экранов | | `androidx.core:core-splashscreen` | 1.0.1 | Apache-2.0 | базовые расширения Android, заставка | | `androidx.security:security-crypto` | 1.1.0-alpha06 | Apache-2.0 | шифрованное хранилище ключей (использует Google Tink, Apache-2.0) | | `androidx.compose:compose-bom` | 2025.06.00 | Apache-2.0 | набор версий Compose | | `androidx.compose.ui:ui` | по набору версий Compose 2025.06.00 | Apache-2.0 | интерфейс | | `androidx.compose.ui:ui-graphics` | по набору версий Compose 2025.06.00 | Apache-2.0 | интерфейс | | `androidx.compose.ui:ui-tooling` | по набору версий Compose 2025.06.00 | Apache-2.0 | интерфейс | | `androidx.compose.ui:ui-tooling-preview` | по набору версий Compose 2025.06.00 | Apache-2.0 | интерфейс | | `androidx.compose.foundation:foundation` | по набору версий Compose 2025.06.00 | Apache-2.0 | интерфейс | | `androidx.compose.animation:animation` | по набору версий Compose 2025.06.00 | Apache-2.0 | анимации | | `androidx.compose.material3:material3` | по набору версий Compose 2025.06.00 | Apache-2.0 | компоненты Material 3 | | `androidx.camera:camera-camera2` | 1.4.2 | Apache-2.0 | камера для сканирования QR-кода подключения | | `androidx.camera:camera-lifecycle` | 1.4.2 | Apache-2.0 | камера для сканирования QR-кода подключения | | `androidx.camera:camera-view` | 1.4.2 | Apache-2.0 | камера для сканирования QR-кода подключения | | `com.google.zxing:core` | 3.5.3 | Apache-2.0 | распознавание QR-кода подключения на устройстве | | `org.jetbrains.kotlinx:kotlinx-coroutines-android` | 1.10.2 | Apache-2.0 | асинхронность | | `junit:junit` | 4.13.2 | EPL-1.0 | юнит-тесты, в приложение не входит | ### Средства сборки (в приложение не входят) | Плагин | Версия | Лицензия | Для чего | |---|---|---|---| | `com.android.application` | 8.11.1 | Apache-2.0 | сборка (Android Gradle Plugin) | | `org.jetbrains.kotlin.android` | 2.2.0 | Apache-2.0 | компилятор Kotlin | | `org.jetbrains.kotlin.plugin.compose` | 2.2.0 | Apache-2.0 | компилятор Compose | ## Шрифты, значки, звук, картинки и данные | Что | Где | Автор и лицензия | Чем подтверждается | |---|---|---|---| | Шрифты Inter, Nunito, Onest, Oswald | пакеты `@fontsource*`, подключаются в `src/main.tsx`, раздаются со своего сервера | SIL Open Font License 1.1 (OFL-1.1) | поле `license` пакетов (таблица выше), файл `LICENSE` в каждом пакете | | Шрифт Onest в Android-приложении | `android/app/src/main/res/font/onest_*.ttf`, собран из `@fontsource/onest` скриптом `android/tools/build-fonts.mjs` | OFL-1.1, Copyright 2021 The Onest Project Authors | текст лицензии приложен: `android/app/src/main/assets/licenses/onest-OFL.txt` | | Шрифты табло: Comfortaa, Exo 2, Manrope, Montserrat, Roboto Condensed, Rubik, Russo One, Unbounded | `public/fonts/board/*.woff2` и `*.css`, грузятся только на табло с выбранным шрифтом (`src/lib/fontLoad.ts`) | SIL Open Font License 1.1 (OFL-1.1), авторы каждой гарнитуры перечислены в файле лицензии | текст лицензии с копирайтами приложен: `public/fonts/board/OFL-LICENSE.txt`; файлы взяты из пакетов `@fontsource-variable` и `@fontsource` | | Шрифты номера талона: Manrope, JetBrains Mono, IBM Plex Mono, Cormorant Garamond, Unbounded | `public/fonts/*.woff2` («Талон на телефоне», `ticketLook`) | SIL Open Font License 1.1 (OFL-1.1) | текст лицензии с копирайтами приложен: `public/fonts/ticket-fonts-OFL.txt`; файлы взяты из пакетов `@fontsource` 5.3.0 | | Шрифт флагов стран «Twemoji Country Flags» | `public/fonts/TwemojiCountryFlags.woff2`, подключён в `src/index.css` только для знаков флагов | Набор знаков шрифта Twemoji Mozilla 0.6.0 (проект mozilla/twemoji-colr). По сведениям проекта: рисунки Twemoji, Copyright Twitter, Inc. и другие авторы, лицензия CC BY 4.0 (требует указания авторства); код сборки шрифта Apache-2.0. Файл с таким именем распространяет проект country-flag-emoji-polyfill (MIT) | таблица имён внутри файла: «Twemoji Mozilla», «Version 0.6.0», «FontForge 2.0 : Twemoji Mozilla : 5-7-2021». Записи о лицензии в самом файле нет, пакета в зависимостях нет, в истории git файл появился в первом коммите без указания источника: лицензия указана по сведениям проектов, а не по файлу | | Значки интерфейса | пакет `lucide-react` | ISC, Lucide Contributors | поле `license` пакета (таблица выше) | | Значки Android-приложения | `android/app/src/main/res/drawable/ic_*.xml`, создаются скриптом `android/tools/icons.py` | собственные: контуры заданы координатами в самом скрипте, «в духе lucide» | комментарий и код `android/tools/icons.py` | | Библиотека карты Leaflet | пакет `leaflet` | BSD-2-Clause | поле `license` пакета (таблица выше) | | Данные карты OpenStreetMap | в репозитории не хранятся: плитки загружает браузер с `tile.openstreetmap.org`, когда карта рисуется на Leaflet | Open Database License (ODbL), © участники OpenStreetMap | подпись «© OpenStreetMap» выводится на карте (`src/components/map/leafletEngine.ts`, `OSM_ATTRIBUTION`) | | Звук вызова | `src/assets/call.mp3`, используется в `src/lib/speech.ts` | автор и лицензия не установлены | в истории git файл добавлен 02.08.2026 коммитом «Сигнал вызова: сведённый колокол вместо двух синусоид» без указания источника; в метаданных файла только кодировщик (Lavf, то есть ffmpeg). Скрипта, которым файл получен, в репозитории нет | | Картинки статей | `public/blog/*.webp` | собственные снимки экранов программы | имена файлов (ticket, board, kiosk, operator, cabinet и другие) и `docs/BLOG-PLAN.md`, где каталог описан как «скриншоты»; отдельной записи об авторе у файлов нет | | Снимки экранов справки | `public/help/ru`, `public/help/en` | собственные снимки экранов программы | снимки интерфейса | | Обучающие ролики и обложки | `public/video` | собственные записи экранов программы; как получена озвучка, в репозитории не записано | реестр роликов `src/lib/introVideos.ts` | | Кнопка «Скачайте из RuStore» | `public/badges/rustore-dark.svg` | официальная кнопка магазина RuStore, товарный знак правообладателя RuStore; используется без изменений | комментарий в `src/components/KioskAppCard.tsx` | | Логотипы клиентов на сайте | `src/assets/clients/*.webp` | товарные знаки соответствующих организаций; частью программы не являются | реестр `src/content/clientLogos.ts` | | Шрифты для PDF на сервере | в репозиторий не входят: пакеты операционной системы (DejaVu, Loma, WenQuanYi Micro Hei), пути в `server/src/pdfFonts.ts` | свободные лицензии шрифтов (DejaVu: лицензия Bitstream Vera и общественное достояние); ставятся отдельно как часть среды | требование к среде, а не компонент программы | | База «IP: город» | в репозиторий не входит: файл формата MaxMind DB на сервере (`GEO_CITY_DB`), читается собственным кодом `server/src/mmdb.ts` | DB-IP City Lite, лицензия CC BY 4.0 (требует указания авторства) | подпись «IP Geolocation by DB-IP» выводится в панели владельца (`src/screens/OwnerQueueStats.tsx`); необязательные данные |