aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/nwc.ts14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/nwc.ts b/lib/nwc.ts
index a2458ac3..f04c2dde 100644
--- a/lib/nwc.ts
+++ b/lib/nwc.ts
@@ -38,6 +38,9 @@ const methods = [
];
const week = 7 * 24 * 60 * 60;
+const nwcEventMaxAgeSeconds = 5 * 60;
+const handledKey = "handled:nwc";
+const handledMaxSize = 200000;
export default () => {
const r = new Relay("ws://sf:7777");
@@ -76,9 +79,16 @@ export default () => {
r.on("event", async (sub, ev) => {
try {
if (sub !== "nwc") return;
- if (await db.sIsMember("handled", ev.id)) return;
+ const now = Math.floor(Date.now() / 1000);
+ if (ev.created_at && now - ev.created_at > nwcEventMaxAgeSeconds) return;
+ if (await db.zScore(handledKey, ev.id)) return;
- db.sAdd("handled", ev.id);
+ db.zAdd(handledKey, { score: now, value: ev.id });
+ db.zRemRangeByScore(handledKey, 0, now - nwcEventMaxAgeSeconds);
+ const size = await db.zCard(handledKey);
+ if (size > handledMaxSize) {
+ await db.zRemRangeByRank(handledKey, 0, size - handledMaxSize - 1);
+ }
let { content, pubkey } = ev;
const pk = ev.tags.find((t) => t[0] === "p")[1];
const sk = serverKeys[pk];