blob: 3f229842e11697bdc05d15b534485db1ccb41062 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import config from "$config";
import { db, g } from "$lib/db";
import { l, warn } from "$lib/logging";
import { getUser } from "$lib/utils";
import { Relay } from "nostr-tools/relay";
import webpush from "web-push";
export const listenForDMs = async () => {
try {
const relay = await Relay.connect(config.nostr);
const since = Math.floor(Date.now() / 1000);
relay.subscribe([{ kinds: [1059], since }], {
onevent: async (event) => {
const pTag = event.tags.find((t) => t[0] === "p");
if (!pTag) return;
const recipientPubkey = pTag[1];
try {
const user = await getUser(recipientPubkey);
if (!user?.id) return;
const subscriptions = await db.sMembers(`${user.id}:subscriptions`);
if (!subscriptions?.length) return;
const payload = JSON.stringify({
title: "New message",
body: "You have a new encrypted message",
url: "/messages",
});
for (const s of subscriptions as any) {
webpush
.sendNotification(JSON.parse(s as string), payload)
.catch((e) => {
warn("dm push failed", e.message);
db.sRem(`${user.id}:subscriptions`, s);
});
}
} catch (e) {
// User not found for this pubkey - not a coinos user
}
},
});
l("listening for DM notifications on relay");
} catch (e) {
warn("DM notification listener failed", e.message);
setTimeout(listenForDMs, 5000);
}
};
|