Простой планировщик Web Push-уведомлений на Nodejs.
Принимает от клиента Push Subscription, datetime (когда отправить) и payload (что отправить). Кладёт всё это дело в хранилище. Извлекает уведомления по расписанию и отправляет в нужный момент.
- Приём и хранение уведомлений
- Планирование уведомлений на указанное время
- Автоматическая отправка уведомлений через Web Push Protocol
Ограничение — версия Nodejs не меньше «22.6».
npm run setup- Сгенерированные ключи положить в
.env, по примеру.env.example - Установить
VAPID_SUBJECTв.envв форматеmailto:<ваша_почта>либоhttps://<ваш_домен> - Установить порт сервера в
.env(опционально) npm run start
GET /api/key — Получение VAPID ключа (публичного). Он нужен для получения PushSubscription в браузере.
POST /api/notifications — Планирование уведомления. В теле запроса должен быть объект NotificationEntity.
curl -X GET 'https://scheduler.push.mvladt.ru/api/key'curl -X POST 'https://scheduler.push.mvladt.ru/api/notifications' \
-H 'Content-Type: application/json' \
-d '{
"id": "123",
"datetime": "2025-11-09T00:23",
"payload": {"text": "Hello"},
"subscription": {
"endpoint": "https://fcm.googleapis.com/fcm/send/...",
"expirationTime": null,
"keys": {
"p256dh": "...",
"auth": "..."
}
}
}'graph LR
A[Браузерный клиент] --> B[Сервер<br>Express];
B --> D[Планировщик<br>Scheduler];
D --> C[Хранилище<br>NotificationStore];
D -- По таймеру --> E[Отправка уведомлений<br>WebPushModule];
E --> F[Push Service<br>Chrome/Firefox/etc];
F --> G[Браузер<br>Service Worker];
Это демонстрационный проект, показывающий полный цикл работы с Web Push Notifications.