From cd7ffb891170c84e44870766fe52e8161ba56c1e Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Tue, 14 Dec 2021 21:56:07 -0300 Subject: [PATCH] add local event filter functions. --- filter.js | 26 ++++++++++++++++++++++++++ index.js | 5 ++++- package.json | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 filter.js diff --git a/filter.js b/filter.js new file mode 100644 index 0000000..c06c709 --- /dev/null +++ b/filter.js @@ -0,0 +1,26 @@ +export function matchFilter(filter, event) { + if (filter.id && event.id !== filter.id) return false + if (filter.kind && event.kind !== filter.kind) return false + if (filter.author && event.pubkey !== filter.author) return false + if (filter.authors && filter.author.indexOf(event.pubkey) === -1) return false + if ( + filter['#e'] && + event.tags.find(([t, v]) => t === 'e' && v === filter['#e']) === null + ) + return false + if ( + filter['#p'] && + event.tags.find(([t, v]) => t === 'p' && v === filter['#p']) === null + ) + return false + if (filter.since && event.created_at <= filter.since) return false + + return true +} + +export function matchFilters(filters, event) { + for (let i = 0; i < filters.length; i++) { + if (matchFilter(filters[i], event)) return true + } + return false +} diff --git a/index.js b/index.js index 5bfe865..cdeb0da 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ import { serializeEvent, getEventHash } from './event' +import {matchFilter, matchFilters} from './filter' import {makeRandom32, sha256, getPublicKey} from './utils' export { @@ -19,5 +20,7 @@ export { makeRandom32, sha256, getPublicKey, - getBlankEvent + getBlankEvent, + matchFilter, + matchFilters } diff --git a/package.json b/package.json index 47a4a1b..aabba53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nostr-tools", - "version": "0.9.1", + "version": "0.10.0", "description": "Tools for making a Nostr client.", "repository": { "type": "git",