const crypto = require('crypto'); const db = require("../config/db"); const webpush = require('web-push'); const VAPID_PUBLIC_KEY = process.env.VAPID_PUBLIC_KEY; const VAPID_PRIVATE_KEY = process.env.VAPID_PRIVATE_KEY; webpush.setVapidDetails( 'mailto:rozenrod320@gmail.com', VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY ); class PushService { getKey() { return new Promise((res, rej) => { return res({ "publicKey": VAPID_PUBLIC_KEY }); }); } createSubscribe(sheep_id, data) { return new Promise((res, rej) => { let sql = 'INSERT INTO subscription(sheep_id, endpoint, keys, device_name, device_model, created_at) VALUES (?, ?, ?, ?, ?, ?)'; db.run(sql, [ Number(sheep_id), data.subscription.endpoint, JSON.stringify(data.subscription.keys), data.device?.name || "unknown", data.device?.model || "unknown", Math.floor(Date.now()) ], function (err) { if (err) { console.error(err.message); return res(false); } else { const payload = JSON.stringify( { "title": "Тестове повідомлення", "body": "Ви успішно підписалися на отримання push повідомлень!", "url": `https://${process.env.DOMAIN}` }); webpush.sendNotification(data.subscription, payload).catch(err => { console.error('Ошибка отправки:', err); }) return res({ "status": "ok" }); } }); }); } deleteSubscribe(data) { return new Promise((res, rej) => { db.run('DELETE FROM subscription WHERE endpoint = ?', [data.endpoint], function (err) { if (err) { console.error(err.message); return res(false); } else if (this.changes === 0) { return res(false); } else { res({ "status": "ok" }); } }); }); } } module.exports = new PushService();