From 556ea69dddb027c6f799fb7ba7a6d951cef60fce Mon Sep 17 00:00:00 2001 From: Sandwich <299465+dskvr@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:20:07 +0100 Subject: [PATCH] add NIP-119 compat --- packages/worker-relay/src/types.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/worker-relay/src/types.ts b/packages/worker-relay/src/types.ts index b5a0a64e..1ed2c9e0 100644 --- a/packages/worker-relay/src/types.ts +++ b/packages/worker-relay/src/types.ts @@ -101,8 +101,8 @@ export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) { if (!(filter.kinds?.includes(ev.kind) ?? true)) { return false; } - const tags = Object.entries(filter).filter(([k]) => k.startsWith("#")); - for (const [k, v] of tags) { + const orTags = Object.entries(filter).filter(([k]) => k.startsWith("#")); + for (const [k, v] of orTags) { const vargs = v as Array; for (const x of vargs) { if (!ev.tags.find(a => a[0] === k.slice(1) && a[1] === x)) { @@ -110,6 +110,13 @@ export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) { } } } + const andTags = Object.entries(filter).filter(([k]) => k.startsWith("&")); + for (const [k, v] of andTags) { + const allMatch = (v as string[]).every(x => ev.tags.some(tag => tag[0] === k.slice(1) && tag[1] === x)); + if (!allMatch) { + return false; + } + } return true; }