UNPKG

push-notification-service

Version:

Push notification package for web applications using service worker

2 lines (1 loc) 1.58 kB
function s(s){return s&&"object"==typeof s&&"default"in s?s:{default:s}}Object.defineProperty(exports,"__esModule",{value:!0});var t=s(require("web-push"));const e="BFtsHOr4nnMmA9zvImAR-XRXZ89IpppbjYaZ93L2YqkombTbXyhYXwMLJ9BnChssfIcoS6P4LYp-W1G7pqdk-RQ",i="7JgjG-jzXykKfbpt7XtZa6Po_e1siUA_65B0jAaMBx8";exports.PushNotificationServer=class{constructor(s){this.publicKey=s.publicKey,this.privateKey=s.privateKey,this.email=s.email,this.subscriptions=new Map,t.default.setVapidDetails(`mailto:${this.email||"jfixcoding@gmail"}`,this.publicKey||e,this.privateKey||i)}setupRoutes(s){s.post("/save-subscription",this.saveSubscription.bind(this)),s.post("/send-notification",this.sendNotification.bind(this)),s.get("/vapid-public-key",((s,t)=>{t.json({publicKey:this.publicKey||e})}))}saveSubscription(s,t){const{user:e,key:i}=s.body,o=i?.keys?.auth;this.subscriptions.has(i.endpoint)||this.subscriptions.set(i.endpoint,{userAuth:o,key:i}),t.status(200).json({status:"success",message:"Subscription saved!"})}async sendNotification(s,e){const i=s.body;if(0===this.subscriptions.size)return e.status(400).json({status:"error",message:"No subscriptions found"});try{const s=await Promise.all(Array.from(this.subscriptions.values()).map((s=>t.default.sendNotification(s.key,JSON.stringify(i)).then((()=>({success:!0}))).catch((s=>({success:!1,error:s.message})))))),o=s.filter((s=>s.success)).length,a=s.length-o;e.status(200).json({status:"success",message:`Notifications sent! Success: ${o}, Failures: ${a}`})}catch(s){e.status(500).json({status:"error",message:"Internal server error"})}}};