UNPKG

@openinc/parse-server-opendash

Version:
74 lines (73 loc) 3.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; const web_push_1 = __importDefault(require("web-push")); const __1 = require(".."); const config_1 = require("../features/config"); const types_1 = require("../types"); async function init() { (0, __1.beforeSaveHook)(types_1.Notification, async (request) => { const { object, original, user } = request; await (0, __1.defaultHandler)(request); await (0, __1.defaultAclHandler)(request); }); (0, __1.afterSaveHook)(types_1.Notification, async ({ object, original, user }) => { if (!object.get("isSent")) { const icon = object.get("iconPath") || (await (0, __1.getConfig)("WEB_PUSH_ICON")); const title = object.get("title"); const description = object.get("description"); const user = object.get("user"); await user.fetch({ useMasterKey: true }); // Handle Email if (config_1.ConfigInstance.getInstance().getBoolean("APP_NOTIFICATIONS_PER_EMAIL")) { const email = user?.getEmail(); if (email) { let body = description || ""; if (object.get("data")?.url) { body += "\n\n"; body += config_1.ConfigInstance.getInstance().get("APP_URL"); body += object.get("data")?.url; } await (0, __1.sendSimpleEmail)(email, title, body); } } // Handle Push const subscriptions = await new Parse.Query(types_1.Push) .equalTo("user", object.get("user")) .limit(1000000) .find({ useMasterKey: true, }); for (const subscription of subscriptions) { if (subscription.get("type") === "web") { if (config_1.ConfigInstance.getInstance().getBoolean("WEB_PUSH_ENABLED")) { await sendWebPush(subscription.get("data"), object.id, title, description, icon, object.get("data")); } } } await object.save({ isSent: true }, { useMasterKey: true }); } }); } async function sendWebPush(subscription, id, title, description, icon, data) { try { console.log("[@openinc/parse-server-opendash][Notification]", `notification="${id}"`, `type="web"`, `subscription="${subscription?.id}"`); await web_push_1.default.sendNotification(subscription, JSON.stringify({ type: "notification", title: title, options: { body: description, data: data, icon: icon, }, }), { TTL: 0, }); } catch (error) { console.error("[@openinc/parse-server-opendash][Notification]", `notification="${id}"`, `type="web"`, `subscription="${subscription?.id}"`, "error=\n", error); } }