@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
74 lines (73 loc) • 3.2 kB
JavaScript
;
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);
}
}