Skip to content

Пакеты .pulse

.pulse — переносимая презентация Pulse. Фронтенд-разработчик собирает файл, передаёт его маркетологу, а маркетолог импортирует пакет непосредственно в свою PWA. Центральной библиотеки и серверной публикации презентаций нет.

Сборка

В deck.json укажи стабильный ID и семантическую версию:

json
{
  "id": "product-demo",
  "version": "1.0.0",
  "title": "Product demo",
  "entry": "entry.js",
  "styles": "styles.css",
  "cover": "assets/cover.webp"
}

Собери пакет:

bash
npm run pack -- product-demo
# dist-packages/product-demo-1.0.0.pulse

Архив содержит manifest.json, собранный presentation.js, стили, слайды и папку assets/. Для каждого файла записывается SHA-256. Расширение .pulse не меняет устройство формата: внутри находится обычный ZIP.

Собственный JavaScript

entry.js может регистрировать Web Components и экспортировать setup:

js
class ProductCard extends HTMLElement {
  connectedCallback() {
    this.textContent = 'Custom component';
  }
}

export function setup(api) {
  customElements.define('product-demo-card', ProductCard);
  api.track({ id: 'package_ready' });
}

api.assetUrl(path) возвращает локальный URL ассета, api.track(event) добавляет событие в офлайн-аналитику. Код пакета выполняется напрямую в отдельной странице Viewer без iframe. Импортируй только доверенные пакеты.

Импорт в PWA

  1. Открой «Мои презентации».
  2. Нажми «Добавить .pulse» и выбери файл.
  3. PWA проверит формат, совместимость, пути, размеры и SHA-256.
  4. Выбери презентацию, введи название клиента и запусти показ.

Файлы сохраняются в Cache Storage, метаданные — в IndexedDB. После импорта Viewer, JavaScript, изображения, видео, PDF и шрифты работают без интернета.

Версии и удаление

  • Большая версия обновляет установленный пакет.
  • Повтор той же версии требует подтверждения замены.
  • Понижение версии требует отдельного подтверждения.
  • Неудачный импорт не повреждает текущую версию.
  • Удаление стирает пакет с устройства, но не меняет уже записанную аналитику.

Каждый показ содержит название клиента и точные packageId и packageVersion. События сохраняются в локальной outbox-очереди IndexedDB. Отправка в корпоративный backend, вход по ключу и кабинет аналитики — следующий этап; отсутствие сети никогда не блокирует показ.

Ограничения безопасности

Импортёр отклоняет абсолютные пути, .., дубли файлов, ZIP64 и зашифрованные архивы. Стандартные лимиты: архив до 512 МБ, отдельный файл до 512 МБ, до 2000 файлов и до 1 ГБ после распаковки.

Целостность не равна доверию: SHA-256 защищает от повреждения файла, но не подтверждает автора. Так как пакет может выполнять JavaScript, устанавливай только .pulse, полученные из доверенного источника.

Демо-контент («Кардиолекс®») вымышлен.