From 67a52c3b7d75e49d8c62632825e84e0f3cec2d9b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 23 Jan 2024 12:15:48 -0600 Subject: [PATCH] Clean event before publishing --- src/events.ts | 16 ++++++++++++++++ src/storages/events-db.ts | 16 ++-------------- src/storages/pool-store.ts | 2 ++ 3 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 src/events.ts diff --git a/src/events.ts b/src/events.ts new file mode 100644 index 0000000..6bdb404 --- /dev/null +++ b/src/events.ts @@ -0,0 +1,16 @@ +import { type NostrEvent } from '@/deps.ts'; + +/** Return a normalized event without any non-standard keys. */ +function cleanEvent(event: NostrEvent): NostrEvent { + return { + id: event.id, + pubkey: event.pubkey, + kind: event.kind, + content: event.content, + tags: event.tags, + sig: event.sig, + created_at: event.created_at, + }; +} + +export { cleanEvent }; diff --git a/src/storages/events-db.ts b/src/storages/events-db.ts index 4467e37..2413af9 100644 --- a/src/storages/events-db.ts +++ b/src/storages/events-db.ts @@ -1,6 +1,7 @@ import { Conf } from '@/config.ts'; import { type DittoDB } from '@/db.ts'; import { Debug, Kysely, type NostrEvent, type SelectQueryBuilder } from '@/deps.ts'; +import { cleanEvent } from '@/events.ts'; import { normalizeFilters } from '@/filter.ts'; import { DittoEvent } from '@/interfaces/DittoEvent.ts'; import { type DittoFilter } from '@/interfaces/DittoFilter.ts'; @@ -68,7 +69,7 @@ class EventsDB implements EventStore { /** Insert an event (and its tags) into the database. */ async add(event: NostrEvent): Promise { - event = cloneEvent(event); + event = cleanEvent(event); this.#debug('EVENT', JSON.stringify(event)); if (isDittoInternalKind(event.kind) && event.pubkey !== Conf.pubkey) { @@ -409,19 +410,6 @@ function buildSearchContent(event: NostrEvent): string { } } -/** Return a normalized event without any non-standard keys. */ -function cloneEvent(event: NostrEvent): NostrEvent { - return { - id: event.id, - pubkey: event.pubkey, - kind: event.kind, - content: event.content, - tags: event.tags, - sig: event.sig, - created_at: event.created_at, - }; -} - /** Build search content for a user. */ function buildUserSearchContent(event: NostrEvent): string { const { name, nip05, about } = jsonMetaContentSchema.parse(event.content); diff --git a/src/storages/pool-store.ts b/src/storages/pool-store.ts index d6d9e12..001778c 100644 --- a/src/storages/pool-store.ts +++ b/src/storages/pool-store.ts @@ -1,4 +1,5 @@ import { Debug, matchFilters, type NostrEvent, type NostrFilter, NSet, type RelayPoolWorker } from '@/deps.ts'; +import { cleanEvent } from '@/events.ts'; import { normalizeFilters } from '@/filter.ts'; import { type EventStore, type GetEventsOpts, type StoreEventOpts } from '@/storages/types.ts'; @@ -28,6 +29,7 @@ class PoolStore implements EventStore { add(event: NostrEvent, opts: StoreEventOpts = {}): Promise { const { relays = this.#relays } = opts; + event = cleanEvent(event); this.#debug('EVENT', event); this.#pool.publish(event, relays); return Promise.resolve();