Пакеты .pulse
.pulse — переносимая презентация Pulse. Фронтенд-разработчик собирает файл, передаёт его маркетологу, а маркетолог импортирует пакет непосредственно в свою PWA. Центральной библиотеки и серверной публикации презентаций нет.
Сборка
В deck.json укажи стабильный ID и семантическую версию:
{
"id": "product-demo",
"version": "1.0.0",
"title": "Product demo",
"entry": "entry.js",
"styles": "styles.css",
"cover": "assets/cover.webp"
}Собери пакет:
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:
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
- Открой «Мои презентации».
- Нажми «Добавить .pulse» и выбери файл.
- PWA проверит формат, совместимость, пути, размеры и SHA-256.
- Выбери презентацию, введи название клиента и запусти показ.
Файлы сохраняются в Cache Storage, метаданные — в IndexedDB. После импорта Viewer, JavaScript, изображения, видео, PDF и шрифты работают без интернета.
Версии и удаление
- Большая версия обновляет установленный пакет.
- Повтор той же версии требует подтверждения замены.
- Понижение версии требует отдельного подтверждения.
- Неудачный импорт не повреждает текущую версию.
- Удаление стирает пакет с устройства, но не меняет уже записанную аналитику.
Каждый показ содержит название клиента и точные packageId и packageVersion. События сохраняются в локальной outbox-очереди IndexedDB. Отправка в корпоративный backend, вход по ключу и кабинет аналитики — следующий этап; отсутствие сети никогда не блокирует показ.
Ограничения безопасности
Импортёр отклоняет абсолютные пути, .., дубли файлов, ZIP64 и зашифрованные архивы. Стандартные лимиты: архив до 512 МБ, отдельный файл до 512 МБ, до 2000 файлов и до 1 ГБ после распаковки.
Целостность не равна доверию: SHA-256 защищает от повреждения файла, но не подтверждает автора. Так как пакет может выполнять JavaScript, устанавливай только .pulse, полученные из доверенного источника.