UNPKG

flexbiz-server

Version:

Flexible Server

12 lines (11 loc) 5.37 kB
require("../global");const Endpoint=global.getModel("endpoint"),Payload=global.getModel("payload"),{Expo}=require("expo-server-sdk"),{workerData}=require("worker_threads"),redis=require("redis");global.clientRedis=redis.createClient();const _=require("lodash"),prototypes=require("../libs/prototypes.js");let connect2Db=!1; const v8=require("v8"),{postToParent,onParentMessage}=require("./worker-utils"),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): Logger.info("[pushNotify worker] 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$$,$data$$.id_app);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(15).sort({date_created:-1}).lean().then(async function($eps$$){if($eps$$&&$eps$$.length>0){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$$){if($e$$)return Logger.error($e$$);webPush.sendNotification($pushSubscription$$,JSON.stringify($data$$),$options$$).then(function(){Logger.info("[pushNotify worker]web push success",$email$$,$event$$)},function($e$$){Logger.error("error web push:",$email$$,$event$$,$e$$);Endpoint.deleteOne({endpoint:$ep$$.endpoint}, $e$$=>{Logger.info("[pushNotify worker]deleted error endpoint",{endpoint:$ep$$.endpoint},$e$$)})})})}else Endpoint.deleteOne({endpoint:$ep$$.endpoint},$e$$=>{Logger.info("[pushNotify worker]deleted error endpoint",{endpoint:$ep$$.endpoint},$e$$)})}catch($e$$){Logger.error($e$$),Endpoint.deleteOne({endpoint:$ep$$.endpoint},$e$$=>{Logger.info("[pushNotify worker]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$$);const $tokensToRemove$$=[];$ticketChunk$$.forEach($ticket$$=>{if($ticket$$.status==="error"){const $invalidToken$$=$message$$.to;!$ticket$$.details||$ticket$$.details?.error!=="DeviceNotRegistered"&&$ticket$$.details?.error!="InvalidCredentials"?Logger.error(`[pushNotify worker]Kh\u00f4ng th\u1ec3 push notification t\u1edbi endpoint: ${$invalidToken$$}. Error:`,$ticket$$.details): (Logger.info(`[pushNotify worker]Ph\u00e1t hi\u1ec7n token kh\u00f4ng h\u1ee3p l\u1ec7 [DeviceNotRegistered]: ${$invalidToken$$}`),$tokensToRemove$$.push($invalidToken$$))}});$tokensToRemove$$.length>0&&(Logger.info("[pushNotify worker]Xo\u00e1 c\u00e1c token kh\u00f4ng h\u1ee3p l\u1ec7 [DeviceNotRegistered]:",$tokensToRemove$$),await Endpoint.deleteMany({endpoint:{$in:$tokensToRemove$$}}));$tickets$$.push(...$ticketChunk$$);Logger.info("[pushNotify worker]mobile push",$email$$,$event$$,$tickets$$)}catch($error$$){Logger.error("[pushNotify worker]", $error$$)}})()})}$callback$$()}).catch($e$$=>{$callback$$($e$$)})},handleMsg=$rawMsg$$=>{let $msg$$=$rawMsg$$;if(Buffer.isBuffer($rawMsg$$)||$rawMsg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($rawMsg$$)}catch($e$$){return Logger.error("[pushNotify worker] L\u1ed7i deserialize task:",$e$$),postToParent({error:"Deserialization failed"})}if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error($e$$);postToParent({error:"msg is not valid"});return}if(!$msg$$.email|| !$msg$$.data||!$msg$$.event)return postToParent({error:"msg is not valid",id_task:$msg$$.id_task});pustNotify($msg$$,function($e$$){postToParent({error:$e$$,id_task:$msg$$.id_task})})}else postToParent({error:"msg is not valid"})};onParentMessage($msg$$=>{handleMsg($msg$$)});workerData&&(()=>{handleMsg(workerData)})();