flexbiz-server
Version:
Flexible Server
10 lines (9 loc) • 4.43 kB
JavaScript
'use strict';const _global=require("../global"),Endpoint=global.getModel("endpoint"),Payload=global.getModel("payload"),{Expo}=require("expo-server-sdk"),{parentPort,workerData}=require("worker_threads"),redis=require("redis");global.clientRedis=redis.createClient();const _=require("lodash"),prototypes=require("../libs/prototypes.js");let connect2Db=!1;
const pustNotify=async($configs_msg_number_notifi_vapidKeys$$,$callback$$)=>{const {email:$email$$,data:$data$$,event:$event$$}=$configs_msg_number_notifi_vapidKeys$$;if($configs_msg_number_notifi_vapidKeys$$.configs&&_.isString($configs_msg_number_notifi_vapidKeys$$.configs))try{$configs_msg_number_notifi_vapidKeys$$.configs=JSON.parse($configs_msg_number_notifi_vapidKeys$$.configs)}catch($e$$){delete $configs_msg_number_notifi_vapidKeys$$.configs,console.info($e$$)}$configs_msg_number_notifi_vapidKeys$$=
$configs_msg_number_notifi_vapidKeys$$.configs||global.configs||require("../configs");connect2Db||(mongoose.connect($configs_msg_number_notifi_vapidKeys$$.database.url,{useNewUrlParser:!0}),{vapidKeys:$configs_msg_number_notifi_vapidKeys$$}=$configs_msg_number_notifi_vapidKeys$$,$configs_msg_number_notifi_vapidKeys$$?webPush.setVapidDetails("mailto:invncur@gmail.com",$configs_msg_number_notifi_vapidKeys$$.publicKey,$configs_msg_number_notifi_vapidKeys$$.privateKey):console.log("use webPush tool to create a vapidKeys and add to configs file. ex: web-push generate-vapid-key --json"),
connect2Db=!0);$data$$.title&&($data$$.title=$data$$.title.replace(/<[^>]*>?/gm,""));$data$$.body&&($data$$.body=$data$$.body.replace(/<[^>]*>?/gm,""));$configs_msg_number_notifi_vapidKeys$$=await global.asyncCountNotifications($email$$);let $number_message$$=await global.asyncCountUnRead($email$$),$badge$$=$configs_msg_number_notifi_vapidKeys$$+$number_message$$;Endpoint.find({user:$email$$,id_app:$data$$.id_app}).limit(5).sort({date_create:-1}).lean().exec(async function($e$jscomp$2$$,$eps$$){if($eps$$&&
0<$eps$$.length){let $expo$$=new Expo,$messages$$=[];$eps$$.forEach(function($ep$$){if(Expo.isExpoPushToken($ep$$.endpoint))$messages$$.push({to:$ep$$.endpoint,sound:"default",badge:$badge$$,title:$data$$.title,body:$data$$.body!==$data$$.title?$data$$.body:"",data:$data$$,channelId:$data$$.channel||"default"});else try{const $pushSubscription$$=JSON.parse($ep$$.endpoint);if($pushSubscription$$.endpoint){let $options$$={},$ep_id$$=Buffer.from($ep$$.endpoint).toString("base64");(new Payload({ep_id:$ep_id$$,
endpoint:$ep$$.endpoint,user:$email$$,payload:JSON.stringify($data$$)})).save(function($e$jscomp$1$$){if($e$jscomp$1$$)return console.error($e$jscomp$1$$);webPush.sendNotification($pushSubscription$$,JSON.stringify($data$$),$options$$).then(function(){console.log("web push success",$email$$,$event$$)},function($e$jscomp$0$$){console.error("error web push:",$email$$,$event$$,$e$jscomp$0$$);Endpoint.deleteOne({endpoint:$ep$$.endpoint},$e$$=>{console.log("deleted error endpoint",{endpoint:$ep$$.endpoint},
$e$$)})})})}else Endpoint.deleteOne({endpoint:$ep$$.endpoint},$e$$=>{console.log("deleted error endpoint",{endpoint:$ep$$.endpoint},$e$$)})}catch($e$jscomp$0$$){console.error($e$jscomp$0$$),Endpoint.deleteOne({endpoint:$ep$$.endpoint},$e$$=>{console.log("deleted error endpoint",{endpoint:$ep$$.endpoint},$e$$)})}});$messages$$.forEach($message$$=>{let $chunks$$=$expo$$.chunkPushNotifications([$message$$]),$tickets$$=[];(async()=>{for(let $chunk$$ of $chunks$$)try{let $ticketChunk$$=await $expo$$.sendPushNotificationsAsync($chunk$$);
0<$ticketChunk$$.length&&"error"===$ticketChunk$$[0].status&&console.error("can't push notification to",$email$$,`(ep: ${$message$$.to})`,$ticketChunk$$);$tickets$$.push(...$ticketChunk$$);console.log("mobile push",$email$$,$event$$)}catch($error$$){console.error($error$$)}})()})}$callback$$()})},handleMsg=$msg$$=>{if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}if(!$msg$$.email||!$msg$$.data||
!$msg$$.event)return parentPort.postMessage({error:"msg is not valid",id_task:$msg$$.id_task});pustNotify($msg$$,function($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})})}else parentPort.postMessage({error:"msg is not valid"})};parentPort.on("message",async $msg$$=>{handleMsg($msg$$)});workerData&&(()=>{handleMsg(workerData)})();setInterval(()=>{parentPort.postMessage("pong")},5E3);