Создание и публикация плагина
Один понятный путь: установить SDK, проверить код локально, загрузить приватный кандидат, дать доступ тестировщикам и только после этого отправить версию на модерацию маркетплейса.
Установка SDK
SDK работает отдельно от Pulse и устанавливается как обычный Python-пакет.
python -m venv .venv. .venv/bin/activate.\\.venv\\Scripts\\Activate.ps1python -m pip install "https://funpaypulse.com/releases/sdk/0.1.0/funpay_pulse_sdk-0.1.0-py3-none-any.whl"pulse-plugin --helpSHA-256 wheel: 011a7b72dffa60f1a4549f38a813e3ce07199ee79f4a7c94f01562421127f191
Создание первого плагина
Начните с шаблона и получите готовую структуру манифеста, fixtures и приложения.
pulse-plugin init seller_auto_replycd seller_auto_replybroker-pollerПо умолчаниюПолучает события через Broker API. Самый простой вариант для запуска и отладки.
order-assistantЗаказы и лотыОснова для чтения безопасных данных заказов и лотов.
basic-webhookBetaWebhook-доставка с обязательной проверкой подписи и polling fallback.
trusted-actionsРучная проверкаДействия, меняющие данные FunPay. Требует отдельных прав и расширенной модерации.
Другой шаблон выбирается через --template order-assistant. Идентификатор плагина используйте в нижнем регистре: латинские буквы, цифры и подчёркивания.
Локальные проверки
Сначала докажите работу на fixtures. Реальный аккаунт, токены и публикация для этого не нужны.
pulse-plugin emit fixtures/new_message.json --forcepulse-plugin check . --require-fixturespulse-plugin test .pulse-plugin doctor . --require-fixturestest импортирует и запускает локальный app.py. Используйте её только для кода, которому доверяете.Сборка .fppkg
Пакет — это фиксированный артефакт версии, который увидят тестировщики и модератор.
pulse-plugin pack .Результат появится в dist/<plugin_id>-<version>.fppkg. Архив содержит манифест, инвентарь файлов и SHA-256 каждого файла.
- Сборка детерминирована: одинаковые исходники дают одинаковый пакет.
- Секреты, приватные ключи, базы, бинарные файлы, кэши и symlink блокируются.
- Успешный pack ещё не означает одобрение или публикацию в маркетплейсе.
Токен разработчика и загрузка
Токен создаётся в кабинете, показывается один раз и нужен только для загрузки кандидата.
- Откройте кабинет разработчика и перейдите в «Аккаунт разработчика».
- В разделе «SDK-токены» создайте токен и сразу сохраните его безопасно.
- Передайте токен CLI через временный файл, а не аргумент командной строки.
umask 077
token_file="$(mktemp "${TMPDIR:-/tmp}/pulse-developer-token.XXXXXX")"
trap 'rm -f "$token_file"' EXIT
read -r -s developer_token
printf '%s\n' "$developer_token" > "$token_file"
unset developer_tokenpulse-plugin publish . --upload --token-file "$token_file" --api https://funpaypulse.com- Без --product-id CLI создаёт приватный продукт и загружает первую версию.
- Загрузка не публикует карточку, не выдаёт доступ покупателям и не запускает код.
- После завершения удалите временный token file или дождитесь выполнения trap.
Личный и приватный тест
Проверяйте кандидат до маркетплейса — сначала сами, затем с выбранными тестировщиками.
Личный тест
В разделе «Тест» установите текущий кандидат на свой активный VPS, проверьте запуск, события, настройки и логи.
Приватный доступ
В разделе «Тестировщики» создайте одноразовое приглашение. Оно даёт доступ только указанному пользователю и не публикует продукт.
- Проверьте обязательные настройки и пустые состояния.
- Смоделируйте повторное событие: обработчик не должен выполнять действие дважды.
- Не отправляйте тестировщику свои токены — он устанавливает плагин через Pulse.
Проверка и публикация в маркетплейсе
Публичная карточка появляется только после решения модератора.
Шаблон уже создаёт два файла карточки. До упаковки замените в них тестовые значения своими — модератор проверяет именно содержимое зафиксированного пакета.
funpay-pulse.plugin.json
Название, полное описание, версия, runtime, события, права и схема настроек плагина.
funpay-pulse.marketplace.json
Категория, краткое описание, публичный автор, HTTPS-ссылки поддержки и конфиденциальности, а также условия возврата.
После приватного теста откройте раздел «Маркетплейс» в кабинете, выберите модель продажи, цену и срок доступа, затем нажмите «Отправить на модерацию».
На модерации
Кандидат зафиксирован. Цену, пакет и права нельзя тихо подменить в открытой заявке.
Нужны изменения
В кабинете появится причина. Исправьте код или карточку, увеличьте версию и загрузите новый кандидат.
Опубликован
Одобренная версия доступна пользователям. Следующее обновление проходит отдельную проверку.
- Модератор проверяет пакет, права, настройки, секреты и изменения файлов.
- Для платного продукта обязательны понятные условия поддержки и возврата.
- Trusted-права проверяются отдельно и могут оставаться недоступными даже после обычного approval.
Исправления и новые версии
Не редактируйте уже отправленный артефакт: создавайте новую версию и сохраняйте историю.
- Прочитайте причину в блоке модерации.
- Исправьте код или карточку и увеличьте version в манифесте.
- Повторите check, test, doctor и pack.
- Загрузите кандидат в существующий продукт и отправьте повторно.
pulse-plugin publish . --upload --product-id plp_... --token-file "$token_file" --api https://funpaypulse.comПока обновление находится на модерации, ранее опубликованная версия продолжает работать у пользователей.
Установка и запуск
Pulse управляет доступом и Broker-связью, но сторонний код остаётся отдельным процессом.
- Покупатель получает доступ через покупку, бесплатный claim, trial или приватное приглашение.
- При установке он выбирает свой VPS и подтверждает права текущей версии.
- Для broker-poller Desktop может запустить managed runner; ручной запуск остаётся fallback.
- Обновление устанавливается только после публикации новой одобренной версии.
export FPP_BASE_URL=https://funpaypulse.com
export FPP_BROKER_TOKEN_FILE=/secure/path/broker-token
python app.pyPulse не импортирует сторонний app.py внутрь Backend или Worker. Плагин общается с платформой только через разрешённый Broker API.
Безопасность и помощь
Два типа токенов решают разные задачи и никогда не должны попадать в пакет или поддержку.
fppd_… — загрузка
Токен разработчика загружает кандидаты. Он не устанавливает плагин, не публикует его и не выдаёт доступ покупателям.
fppb_… — runtime
Broker-токен привязан к установке, лицензии, VPS и версии. Он показывается один раз и хранится как production secret.
- Не добавляйте токены, golden_key, private key или реальные cookies в код, fixtures и .fppkg.
- Не передавайте токены через --token: используйте --token-file и файл с правами 0600.
- Для обращения укажите plugin id, product id, version, время ошибки и очищенный фрагмент лога.