Модули
Вкладка 🧪 Модули — marketplace-интерфейс для JS-модулей источников. Ставим, включаем/выключаем, редактируем код прямо в браузере, смотрим live-логи.
Интерфейс
Вкладка состоит из трёх блоков:
- Верхняя панель — кнопки
↻ Обновитьи➕ Установить - Поиск + фильтр — быстрая фильтрация по названию/тегу и по состоянию (Включённые / Выключенные / С ошибкой / Украинские / Аниме)
- Сетка карточек — все установленные модули
Карточка модуля
Каждая карточка показывает:
- Название + бейдж качества (
FHD,4Kи т.п.) - Автор / версия
- Route —
/lite/<id>— это адрес по которому Lampa будет дёргать модуль - Описание
- Теги (
ukrainian,anime, custom…) - Статистика (после первых запросов):
✓ 142(успешных),✗ 3(ошибок), среднее время ответа - Кнопки:
[toggle]·✎ Редактировать·↻(перезагрузить) ·🗑(удалить)
Если модуль выключен — карточка полупрозрачная.
Если у модуля ошибка парсинга — рамка красная, внутри — текст ошибки с номером строки.
Установка модуля
Нажмите ➕ Установить в верхней панели — откроется drawer с двумя вариантами.
Из URL (zip-архив)
Введите URL https://...zip в поле, нажмите Установить с URL. Сервер скачает архив, распакует, валидирует манифест и загрузит модуль. Имя модуля берётся из manifest.json → id.
.zip с папкой модуля внутри (содержащей manifest.json и index.js). Архив читается прямо в память — ограничение 32 МБ.Пример с GitHub-репозиторием:
https://github.com/user/my-lampac-modules/archive/refs/heads/main.zipЕсли в корне архива несколько папок — возьмётся первая с manifest.json.
Загрузить файл
Нажмите Выбрать файл → выберите локальный .zip. Работает так же, но без сети.
Откат
Если модуль с таким id уже установлен, он архивируется как modules/<id>.backup-<timestamp> перед перезаписью. Вручную откатить — удалить новый и переименовать бекап.
Drawer редактирования
Нажмите ✎ Редактировать на карточке — откроется боковая панель с четырьмя табами:
Обзор
Читабельная сводка: ID, версия, автор, типы контента, ссылка на репозиторий, описание, статистика. Ошибка парсинга (если есть) — здесь же.
Настройки
Поля из manifest.json → config_schema. Каждое поле — с названием, описанием, типом:
- string / textarea — обычное текстовое поле
- int / number — числовое (валидируется клиентом)
- bool — toggle-свитч
- secret — пароль, маскируется, не показывается в общем списке
Кнопка Сохранить пишет modules/<id>/config.json и тут же подхватывается модулем при следующем запросе (кэш Goja не сохраняет значения между invoke).
Код
Textarea с подсветкой на моноширинном шрифте — ваш index.js. При нажатии Сохранить и перезагрузить файл перезаписывается на диске, Goja пересобирает программу. Если синтаксис битый — карточка пометится как «С ошибкой», а модуль выключится до исправления.
Логи
Live-консоль Server-Sent Events. Показывает все console.log/warn/error/info из вашего JS-кода плюс ошибки runtime (timeout, panic из Go).
Формат строки:
HH:MM:SS [info] module_id: your log message hereЦвета:
- info — синий
- warn — жёлтый
- error — красный
Буфер — 500 строк на модуль. Кнопка Очистить сбрасывает отображение (не трогает ring-buffer на сервере).
API admin-endpoints
Всё, что делает вкладка, доступно и через HTTP — можно автоматизировать.
Базовый путь: /{admin_path}/api/modules (авторизация как в остальной админке).
| Метод | Путь | Что делает |
|---|---|---|
GET |
/api/modules |
Список всех модулей |
GET |
/api/modules/{id} |
Детали одного |
POST |
/api/modules/install |
{"url":"..."} или raw application/zip body |
DELETE |
/api/modules/{id} |
Удалить |
POST |
/api/modules/{id}/toggle |
{"enabled":true/false} |
POST |
/api/modules/{id}/reload |
Перечитать с диска |
GET |
/api/modules/{id}/source |
Исходный код |
PUT |
/api/modules/{id}/source |
{"source":"..."} — обновить и перекомпилировать |
PUT |
/api/modules/{id}/config |
Любой JSON — сохранить как config.json |
GET |
/api/modules/logs?module={id}&n=200 |
Прочитать последние N строк |
GET |
/api/modules/logs/stream?module={id} |
SSE-поток логов |
Пример: установить пачку модулей скриптом
ADMIN=http://lampac:888/cp_XXXXX
TOKEN=... # lampac_token cookie
for mod in starlight bamboo unimay mikai; do
curl -s -X POST \
-H "Cookie: lampac_token=$TOKEN" \
-H "Content-Type: application/json" \
-d "{\"url\":\"https://github.com/user/lampac-modules/raw/main/$mod.zip\"}" \
"$ADMIN/api/modules/install"
doneТипичные сценарии
Ставлю плагин с GitHub
- Найдите URL .zip-архива модуля (релиз или просто
archive/main.zip) - Админка → Модули → Установить → вставить URL → готово
- Убедитесь что карточка появилась и включена
- Откройте какой-нибудь фильм/сериал — модуль появится в выдаче Lampa
Отлаживаю свой модуль
- Положите папку
modules/mymodule/на сервере (через git, scp или админку) - Админка → Модули → Обновить список
- Откройте карточку → Логи — оставьте во вкладке
- Параллельно делайте запросы через curl или прямо через Lampa
- Правьте код в «Код» → Сохранить и перезагрузить
- Повторяйте
Отключаю модуль — хочу использовать Go-балансер
Просто выключите toggle на карточке. Go-балансер с тем же именем (starlight, bamboo…) автоматически перехватит маршрут. Включите обратно — JS снова активен.
Переношу модуль на другой сервер
Скопируйте папку modules/<id>/ целиком (с config.json если есть) на другой сервер в modules/. Перезапустите lampac-go или нажмите Обновить в админке.
Безопасность
- Модули исполняются в Goja-песочнице — нет доступа к файловой системе, процессам, другим модулям
- Сетевые запросы идут через
http.DefaultClient— лимит 30 сек / 8 МБ на запрос - Таймаут модуля — 30 сек на один invoke, после чего runtime прерывает выполнение (
Interrupt: timeout) - Секретные поля (
secret:true) маскируются в списке, но доступны модулю вinv.config
Устанавливайте модули только из источников, которым доверяете. Несмотря на песочницу, модуль может:
- делать произвольные HTTP-запросы наружу (утечка данных, DoS внешних сервисов)
- перенаправлять пользователя на фишинг через
method: 'link' - возвращать вредоносные стримы (подмена CDN)
Сравнение с другими вкладками
| Вкладка | Назначение |
|---|---|
| Балансеры | Встроенные Go-источники — включить, задать хост, токен |
| Модули (эта) | JS-модули: ставить, редактировать, удалять |
| Плагины | Серверные фичи: DLNA, tmdb-proxy, transcoding… |
Разница коротко: Балансеры — хардкод, только настройки. Модули — код + настройки, динамически. Плагины — не про источники вообще.