UNPKG

web-push-sdk

Version:

47 lines (46 loc) 2.09 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; function pushNotification(publicVapidKey, api, swfile) { if ("serviceWorker" in navigator) { send().catch(err => console.error(err)); } function send() { return __awaiter(this, void 0, void 0, function* () { const register = yield navigator.serviceWorker.register(`/${swfile}.js`, { scope: "/" }); const subscription = yield register.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(publicVapidKey) }); yield fetch(api, { method: "POST", body: JSON.stringify(subscription), headers: { "content-type": "application/json" } }); console.log("Push Sent...", JSON.stringify(subscription)); }); } function urlBase64ToUint8Array(base64String) { const padding = "=".repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, "+") .replace(/_/g, "/"); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } } ; module.exports = { pushNotification };