diff --git a/packages/util/Filters.ts b/packages/util/Filters.ts index e468a77..23e2673 100644 --- a/packages/util/Filters.ts +++ b/packages/util/Filters.ts @@ -1,6 +1,6 @@ import {Event} from 'nostr-tools' import {matchFilter as nostrToolsMatchFilter} from 'nostr-tools' -import {prop, mapVals, shuffle, avg, hash, groupBy, randomId, uniq} from '@welshman/lib' +import {uniqBy, prop, mapVals, shuffle, avg, hash, groupBy, randomId, uniq} from '@welshman/lib' import type {HashedEvent, TrustedEvent} from './Events' import {isReplaceableKind} from './Kinds' import {Address, getAddress} from './Address' @@ -79,7 +79,8 @@ export const calculateFilterGroup = ({since, until, limit, search, ...filter}: F export const unionFilters = (filters: Filter[]) => { const result = [] - for (const group of groupBy(calculateFilterGroup, filters).values()) { + // Group, but also get unique filters by ids because duplicates can come through subscribe + for (const group of groupBy(calculateFilterGroup, uniqBy(getFilterId, filters)).values()) { const newFilter: Record = {} for (const k of Object.keys(group[0])) { diff --git a/packages/util/Repository.ts b/packages/util/Repository.ts index 5a2639c..b5bb29d 100644 --- a/packages/util/Repository.ts +++ b/packages/util/Repository.ts @@ -140,6 +140,8 @@ export class Repository extends Emitter { // If our duplicate is newer than the event we're adding, we're done if (duplicate && duplicate.created_at >= event.created_at) { + this.deletes.set(event.id, duplicate.created_at) + return }