Расширения¶
Магазин расширений (Администрирование → Расширения) устанавливает подписанные поставщиком расширения, которые добавляют возможности для конкретного заказчика — дополнительное содержимое метамодели, интеграции, фоновые задачи и даже новые страницы — без изменения ядра Turbo EA (принцип «clean core»).
Расширения устанавливаются двумя способами: в один щелчок из встроенного Магазина (если у экземпляра есть доступ в Интернет) или путём прямой загрузки файлов — расширение представляет собой подписанный пакет .teax, а лицензия — подписанный текстовый файл; оба обычно отправляются по электронной почте. Файловый способ не требует ни учётной записи магазина, ни исходящих соединений, поэтому он одинаково работает и в изолированных (air-gapped) средах.
Страница содержит две вкладки: Магазин — просмотр каталога расширений поставщика с установкой в один щелчок, Установленные — управление лицензиями и установка из файлов.
Расширения создаются и подписываются Turbo EA — их нельзя создать самостоятельно, и они не открыты для сторонних разработчиков. Если вам нужна возможность, адаптированная под вашу организацию, мы можем создать и лицензировать её для вас. См. консалтинг Turbo EA.
Как устроено доверие¶
Экземпляр защищают две независимые проверки:
- Происхождение (подпись). Каждый пакет несёт подпись Ed25519 ключом поставщика. Turbo EA проверяет её при загрузке и заново при каждом запуске бэкенда. Неподписанные, изменённые или сторонние пакеты отклоняются — установленное расширение гарантированно совпадает с тем, что собрал поставщик.
- Активация (лицензия). Подписанный файл лицензии перечисляет ваши права — по одному на расширение, каждое со своим сроком действия. Установленное расширение работает только при наличии действующего права. Лицензии привязаны к идентификатору вашего экземпляра — лицензия, выданная для другого экземпляра, отклоняется.
Бесплатные расширения¶
Некоторые расширения бесплатны и вообще не требуют лицензии. Они устанавливаются и работают сразу — нет шага покупки и нет файла лицензии, который нужно вставлять. Бесплатные расширения помечены значком Бесплатно на вкладках «Магазин» и «Установленные», а действия Купить и Продлить для них скрыты. Проверка подписи по-прежнему применяется точно так же, как для платных расширений (бесплатное расширение тоже подписано поставщиком), поэтому происхождение гарантировано в любом случае. Поскольку им не нужно право доступа, бесплатные расширения никогда не истекают и не входят в льготный период.
Идентификатор вашего экземпляра¶
Каждая установка один раз генерирует уникальный идентификатор экземпляра (TEA-XXXX-XXXX-XXXX), отображаемый вверху страницы Администрирование → Расширения с кнопкой копирования. Это ваша лицензионная идентичность: указывайте его при покупке (встроенный Магазин отправляет его автоматически; оформление заказа в онлайн-магазине запрашивает его), чтобы каждое расширение, купленное для этого экземпляра — любым администратором, с любого адреса почты — попадало в одну общую лицензию. Он лишь идентифицирует ваш экземпляр; это никогда не учётные данные, поэтому его можно спокойно сообщать поставщику.
Идентификатор переносится вместе с переносом рабочего пространства, поэтому переезд на новый сервер сохраняет лицензию действующей. После полной переустановки экземпляр получает новый идентификатор — попросите поставщика перевыпустить лицензию для него (быстрый «re-key» с его стороны).
Вкладка «Магазин»¶
Вкладка Магазин работает без какой-либо настройки и показывает опубликованные поставщиком расширения с описанием и ценой:
- Купить открывает страницу оплаты в новой вкладке браузера. Как только платёж подтверждён, лицензия применяется автоматически (копия также приходит по почте).
- Установить (или Обновить, когда опубликована более новая версия) сначала проверяет лицензию — если расширение ещё не лицензировано, диалог предложит купить или вставить лицензию, после чего продолжит автоматически — и скачивает пакет через ту же проверку подписи и тот же предварительный просмотр, что и ручная загрузка. Расширения с демо показывают ссылку Посмотреть в действии, а опубликованная более новая версия превращает кнопку в Обновить.
Если каталог содержит категории, у каждого элемента отображаются небольшие метки (free или commercial, а также темы вроде integration), а над списком появляется панель фильтров — нажимайте на метки, чтобы сузить список (несколько меток комбинируются), а All сбрасывает представление.
Вкладка «Магазин» доступна только для чтения и анонимна: без учётной записи, без токена, и никакие сведения о вашем экземпляре никуда не передаются — читается только публичный каталог поставщика. Изолированным экземплярам не нужна настройка — вкладка просто показывает дружелюбную подсказку — и используют файловый процесс ниже; сайт магазина поставщика предлагает те же покупки и загрузки из любого браузера с доступом в Интернет. Если что-то между вашим экземпляром и магазином блокирует запрос — прокси, брандмауэр или защита от ботов перед магазином, — вкладка сообщит об этом и укажет полученный HTTP-статус, так что заблокированный экземпляр никогда не будет принят за изолированный.
Экземпляр также проверяет каталог раз в день и сообщает об изменениях, чтобы новое расширение — или исправление безопасности для уже используемого — не ждало, пока кто-нибудь случайно откроет эту страницу. Администраторы (все, чья роль предоставляет admin.manage_extensions) получают уведомление в колокольчике, когда в магазине публикуется новое расширение, и ещё одно — когда у установленного расширения появляется более новая версия. О каждом изменении сообщается один раз, а насыщенный день релизов приходит как одно уведомление на тип, а не по одному на расширение. Ничего не скачивается и не устанавливается — уведомление просто приводит вас сюда. Ежедневную проверку можно полностью отключить в разделе Администрирование → Настройки → Уведомления об обновлениях.
Пробные периоды¶
Некоторые платные расширения предлагают бесплатный 30-дневный пробный период — ищите кнопку Начать 30-дневный пробный период на вкладке «Магазин» (или соответствующую опцию на сайте магазина). Запуск пробного периода работает как покупка без оплаты: банковская карта не нужна, лицензия обновляется автоматически (для изолированных установок копия также приходит по электронной почте), и расширение работает с полной функциональностью в течение 30 дней.
- Каждый экземпляр Turbo EA может опробовать конкретное расширение только один раз.
- Пробный период заканчивается точно в дату окончания — льготного периода нет. После этого расширение перестаёт работать, пока вы не оформите подписку; ваши данные никогда не удаляются, и всё возвращается, как только применяется лицензия по подписке.
- Вкладка «Установленные» отображает пробные права как Пробный период до ….
- Пробные периоды завершаются сами — отменять нечего, и оплата никогда не списывается.
Установка расширения¶
- Если ещё не сделали, сначала примените лицензию (см. ниже).
- Откройте Админ → Расширения, на вкладке «Магазин» выберите Установить из файла… и загрузите полученный файл
.teax. - Turbo EA проверит подпись и покажет предпросмотр: для расширений с содержимым это пробный прогон всех типов карточек, групп тегов, карточек и связей, которые расширение создаст или обновит — пока ничего не записывается.
- Просмотрите предпросмотр и нажмите Установить расширение.
- Если расширение содержит код бэкенда, баннер попросит перезапустить контейнер бэкенда (
docker compose restart backend). Расширения с содержимым и интерфейсом активируются сразу — пользователи увидят новый интерфейс при следующей загрузке страницы.
Повторная загрузка того же пакета безопасна — предпросмотр покажет всё как «пропущено», и применение ничего не изменит.
Обновление расширения¶
Когда магазин публикует более новую версию установленного расширения, на вкладке «Установленные» рядом с версией появляется значок Обновить до X (а кнопка на вкладке «Магазин» превращается в Обновить). Один клик запускает ту же проверку подписи, предпросмотр и применение, что и при новой установке. Действуют две меры защиты:
- Обновление расширения, которое вы сознательно отключили, оставляет его отключённым — новая версия попадает на диск, но её содержимое остаётся скрытым и ничего не выполняется, пока вы не включите расширение снова.
- Установка пакета старее установленной версии сначала требует явного подтверждения: более старая версия может не понимать данные, записанные более новой. В любом случае ничего не удаляется.
Лицензии и продление¶
Примените лицензию через Ввести лицензию… на вкладке «Установленные» (вставьте текст или загрузите файл) — кнопка также появляется в каждой строке расширения, которому нужна лицензия. Затем страница показывает владельца лицензии и метку для каждого права с датой окончания.
Ваш экземпляр хранит только одну лицензию — применение новой заменяет предыдущую. Лицензии, выпущенные через Store, всегда содержат все покупки для вашего экземпляра, поэтому замена безопасна. Если у вас есть и вручную выпущенные лицензии, попросите поставщика одну объединённую лицензию вместо применения отдельных файлов для каждого расширения; если применяемая лицензия удалит права, которые текущая ещё покрывает, Turbo EA перечислит их и сначала запросит подтверждение (данные в любом случае не удаляются).
Когда срок права истекает, начинается льготный период (по умолчанию 30 дней): всё продолжает работать, а администраторы видят предупреждение. После льготного периода расширение мягко отключается — его страницы исчезают, API отклоняет запросы, фоновые задачи приостанавливаются. Данные никогда не удаляются. Применение обновлённого файла лицензии мгновенно восстанавливает всё без перезапуска.
Лицензии, купленные через Магазин, продлеваются сами на подключённых экземплярах: после каждой успешной оплаты экземпляр автоматически получает продлённую лицензию — ничего вставлять не нужно. В изолированной среде продление сводится к следующему: вставить обновлённый файл лицензии из письма о продлении (или запросить его у поставщика) — и всё.
Статус автопродления и отмена подписки¶
Каждый чип права указывает, что произойдёт в его дату: Продлевается {дата} для активной подписки или Истекает {дата} — не будет продлена после отмены. Эти сведения берутся из самой подписанной лицензии, поэтому они точны и на изолированных экземплярах — файл лицензии, отправляемый по почте после любого изменения подписки, несёт актуальный статус; вставьте его, и чип обновится.
Чтобы увидеть дату продления, отменить или восстановить автопродление, сменить способ оплаты или скачать счета, используйте кнопку Управление подпиской рядом с именем лицензиата (отображается для лицензий, купленных в Магазине). Она открывает ваш биллинг-портал в новой вкладке — учётная запись не нужна. На изолированном экземпляре кнопка не может связаться с магазином; используйте вместо неё ссылку Управление подпиской из любого письма с лицензией (интернет нужен только вашему браузеру, а не экземпляру Turbo EA).
Отмена никогда не отключает ничего сразу: расширение продолжает работать до конца оплаченного периода, затем действует обычный порядок льготного периода + мягкого отключения. Ваши данные никогда не удаляются, а повторная подписка всё восстанавливает.
Включение, отключение и удаление¶
- Переключатель Включено мягко отключает расширение сразу (без перезапуска) и может быть возвращён в любой момент. Для пакетов содержимого при этом их типы карточек скрываются из метамодели — карточки остаются на месте.
- Удалить убирает файлы расширения и скрывает его типы карточек из метамодели. Карточки и собственные таблицы расширения намеренно сохраняются, и при переустановке всё — включая типы — появляется снова.
Права доступа¶
Вся страница и её API-маршруты защищены отдельным правом admin.manage_extensions (выдано встроенной роли администратора). Расширения могут определять собственные ключи прав (ext.<имя>.…), которые появляются в Администрирование → Пользователи и роли после загрузки расширения.
Расширенные возможности полей¶
Некоторые расширения открывают продвинутые способы описания данных, которых нет в базовой версии:
- Текст справки поля — сворачиваемая подсказка под полем, отображаемая при вводе данных, чтобы форма поясняла себя сама.
- Пользовательские типы полей — новые типы помимо встроенного набора (например, настраиваемая оценка от 1 до 5 или от 0 до 10).
Эти параметры появляются в редакторе полей метамодели только пока установлено и лицензировано расширение, которое их предоставляет. Если такое расширение позже отключить или срок его лицензии истечёт, уже введённые значения продолжат отображаться как обычный текст только для чтения — ничего не очищается и не удаляется — а параметры редактирования просто исчезают, пока расширение снова не станет активным.
Гранты доступа к данным¶
Большинство расширений работают только со своими данными. Расширение, интегрирующееся с данными ядра — например, коннектор, синхронизирующий задачи (todo) с внешним трекером задач, таким как Jira или MS Planner (#921) — должно объявить гранты в своём подписанном манифесте:
core.todos.read/core.todos.write— чтение или изменение задач через SDK расширений. Право записи включает чтение. У системных задач (например, запросов на подпись) расширение синхронизации может лишь установить внешнюю ссылку, отображаемую как чип — оно никогда не может завершать, редактировать, переназначать или удалять их, а задачи другого расширения остаются недоступными.core.events.todo— получение событий изменения задач, чтобы коннектор реагировал сразу, а не в следующем цикле опроса.core.users.read— просмотр пользователей (только имя, e-mail и признак активности), чтобы коннектор мог сопоставить исполнителей с учётными записями во внешнем инструменте. Данные о ролях, входе и настройках не раскрываются, и расширения никогда не могут изменять пользователей.core.cards.read— чтение карточек, связей и метамодели, например чтобы коннектор мог сопоставить ваши приложения с записями во внешней системе. Архивированные карточки остаются скрытыми.core.cards.write— создание, изменение и архивирование карточек и добавление связей — ровно с той же валидацией, что и в редакторе приложения. Обновления объединяют значения полей, а не заменяют их целиком, поэтому расширение никогда не может стереть данные, которыми не управляет; безвозвратного удаления нет — архивирование с окном восстановления остаётся единственным доступным расширению способом удаления.core.events.card— получение событий изменения карточек и связей, чтобы коннектор реагировал на изменения инвентаря сразу, а не на следующем цикле опроса.
Гранты входят в подписанный поставщиком пакет: они фиксируются при сборке и видны до установки. Они действуют только пока расширение установлено, включено и лицензировано — отключение или истечение лицензии немедленно отзывает доступ, без перезапуска. Каждое изменение, сделанное расширением, записывается в Админ → Журнал аудита с источником Расширение, а задача, зеркалируемая из внешнего трекера, показывает чип со ссылкой на внешний элемент.
Каждое изменение, сделанное расширением, отображается в Админ → Журнал аудита как пакет ext:<key> с пополевыми различиями и может быть откатано там, как любой другой пакет. Последнее слово остаётся за операторами: переменная окружения EXTENSION_WRITES_ENABLED=false мгновенно приостанавливает все записи расширений (чтение продолжает работать, перезапуск не нужен), а EXTENSION_MAX_WRITES_PER_BATCH / EXTENSION_MAX_BATCHES_PER_MINUTE ограничивают, сколько одно расширение может изменить за пакет и за минуту.
Где появляются страницы расширений¶
Страницы расширений появляются в навигации после того, как расширение установлено и лицензировано — обычно как отдельный пункт меню верхнего уровня, хотя некоторые отчёты размещаются в меню Отчёты рядом со встроенными.