aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-01-27 11:44:10 -0800
committerAdam Soltys <[email protected]>2026-01-28 22:44:01 -0800
commit1169a7e31efdbd98a91b582474da5d23ded9c126 (patch)
treef4c50c1a83c29d556fd3a96b39801c1797d41a27
parentd3ada1af0023374b43f0cd8a5863e6f992d9bb92 (diff)
downloadcoinos-server-1169a7e31efdbd98a91b582474da5d23ded9c126.tar.gz
coinos-server-1169a7e31efdbd98a91b582474da5d23ded9c126.zip
purge old nwc events
-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];