mirror of
https://github.com/amark/gun.git
synced 2025-06-07 14:46:44 +00:00
universal notification system
This commit is contained in:
parent
03735dc09c
commit
90b88959d0
31
lib/axe.js
31
lib/axe.js
@ -238,7 +238,36 @@ function start(root){
|
|||||||
});
|
});
|
||||||
|
|
||||||
}());
|
}());
|
||||||
}
|
|
||||||
|
;(function(){ // THIS IS THE UNIVERSAL NOTIFICATION MODULE
|
||||||
|
var to = {}, key = {}, email = require('./email');
|
||||||
|
if(email.err){ return }
|
||||||
|
mesh.hear['tag'] = function(msg, peer, who){
|
||||||
|
if(who = key[msg.key]){ who.rate = Math.max(msg.rate||1000*60*15, 1000*60); return }
|
||||||
|
if(!msg.src || !msg.email){ return }
|
||||||
|
if(+new Date < peer.emailed + 1000*60*2){ mesh.say({dam:'tag',err:'too fast'},peer); return } // peer can only send notifications > 2min
|
||||||
|
var src; try{ src = new URL(msg.src = msg.src.split(/\s/)[0]); } catch(e){ return } // throws if invalid URL.
|
||||||
|
(who = (to[msg.email] = to[msg.email] || {go:{}})).go[''+src] = 1; // we're keeping in-memory for now, maybe will "stay" to disk in future.
|
||||||
|
peer.emailed = +new Date;
|
||||||
|
if(who.batch){ return }
|
||||||
|
key[who.key = Math.random().toString(36).slice(2)] = who;
|
||||||
|
who.batch = setTimeout(function(){
|
||||||
|
email.send({
|
||||||
|
from: process.env.EMAIL,
|
||||||
|
to: msg.email,
|
||||||
|
subject: "Notification:",
|
||||||
|
text: 'Someone or a bot tagged you at: (⚠️ only click link if you recognize & trust it ⚠️)\n'+
|
||||||
|
'[use #'+who.key+' to unsubscribe please mute this thread by tapping the top most "⋮" button and clicking mute]\n\n' +
|
||||||
|
Object.keys(who.go).join('\n'), // TODO: NEEDS TO BE CPU SCHEDULED
|
||||||
|
headers: {'message-id': '<123456789.8765@example.com>'} // hardcode id so all batches also group into the same email thread to reduce clutter.
|
||||||
|
}, function(err, r){
|
||||||
|
who.batch = null; who.go = {};
|
||||||
|
err && console.log("email TAG:", err);
|
||||||
|
});
|
||||||
|
}, who.rate || (1000*60*60*24)); // default to 1 day
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
};
|
||||||
|
|
||||||
;(function(){
|
;(function(){
|
||||||
var from = Array.from;
|
var from = Array.from;
|
||||||
|
@ -67,6 +67,7 @@ Gun.on('opt', function (root) {
|
|||||||
ws.noServer = true;//workaround for ws.path
|
ws.noServer = true;//workaround for ws.path
|
||||||
ws.web = ws.web || new opt.WebSocket.Server(ws);
|
ws.web = ws.web || new opt.WebSocket.Server(ws);
|
||||||
opt.web.on('upgrade', (req, socket, head) => {
|
opt.web.on('upgrade', (req, socket, head) => {
|
||||||
|
opt.web.host = opt.web.host || (req.headers||'').origin || (req.headers||'').host;
|
||||||
if (req.url == ws.path) {
|
if (req.url == ws.path) {
|
||||||
ws.web.handleUpgrade(req, socket, head, function done(ws) {
|
ws.web.handleUpgrade(req, socket, head, function done(ws) {
|
||||||
open(ws, req);
|
open(ws, req);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user