From 96af3bb8bf3a86b13da9d22866f35d5a8267ccc7 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 17 Jun 2024 16:04:58 -0500 Subject: [PATCH 1/3] Update stats in a transaction --- src/pipeline.ts | 16 ++++++++++++++-- src/storages/EventsDB.ts | 13 +------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/pipeline.ts b/src/pipeline.ts index 9f99520b..de507ecd 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -116,8 +116,20 @@ async function storeEvent(event: DittoEvent, signal?: AbortSignal): Promise { + await updateStats({ event, store, kysely: trx }); + await store.event(event, { signal }); + }); + } catch (e) { + if (e.message === 'Cannot add a deleted event') { + throw new RelayError('blocked', 'event deleted by user'); + } else if (e.message === 'Cannot replace an event with an older event') { + return; + } else { + debug('ERROR', e.message); + } + } } /** Parse kind 0 metadata and track indexes in the database. */ diff --git a/src/storages/EventsDB.ts b/src/storages/EventsDB.ts index 8955d6d6..7ce9bde4 100644 --- a/src/storages/EventsDB.ts +++ b/src/storages/EventsDB.ts @@ -60,18 +60,7 @@ class EventsDB implements NStore { } await this.deleteEventsAdmin(event); - - try { - await this.store.event(event); - } catch (e) { - if (e.message === 'Cannot add a deleted event') { - throw new RelayError('blocked', 'event deleted by user'); - } else if (e.message === 'Cannot replace an event with an older event') { - return; - } else { - this.console.debug('ERROR', e.message); - } - } + await this.store.event(event); } /** Check if an event has been deleted by the admin. */ From 8c3e16fd41c3779cd965a478e2998182084bc143 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 17 Jun 2024 16:29:52 -0500 Subject: [PATCH 2/3] Ignore repetitive error message --- src/pipeline.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pipeline.ts b/src/pipeline.ts index de507ecd..afbad7b5 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -126,6 +126,8 @@ async function storeEvent(event: DittoEvent, signal?: AbortSignal): Promise Date: Mon, 17 Jun 2024 16:35:58 -0500 Subject: [PATCH 3/3] EventsDB: remove no longer relevant tests --- src/storages/EventsDB.test.ts | 46 +++++------------------------------ 1 file changed, 6 insertions(+), 40 deletions(-) diff --git a/src/storages/EventsDB.test.ts b/src/storages/EventsDB.test.ts index 16b429d4..74068e94 100644 --- a/src/storages/EventsDB.test.ts +++ b/src/storages/EventsDB.test.ts @@ -2,14 +2,12 @@ import { Database as Sqlite } from '@db/sqlite'; import { DenoSqlite3Dialect } from '@soapbox/kysely-deno-sqlite'; import { assertEquals, assertRejects } from '@std/assert'; import { Kysely } from 'kysely'; -import { generateSecretKey } from 'nostr-tools'; import { Conf } from '@/config.ts'; import { DittoDB } from '@/db/DittoDB.ts'; import { DittoTables } from '@/db/DittoTables.ts'; -import { RelayError } from '@/RelayError.ts'; import { EventsDB } from '@/storages/EventsDB.ts'; -import { eventFixture, genEvent } from '@/test.ts'; +import { eventFixture } from '@/test.ts'; /** Create in-memory database for testing. */ const createDB = async () => { @@ -143,49 +141,17 @@ Deno.test('admin can delete any event', async () => { assertEquals(await eventsDB.query([{ kinds: [1] }]), [two]); }); -Deno.test('throws a RelayError when inserting an event deleted by the admin', async () => { - const { eventsDB } = await createDB(); - - const event = genEvent(); - await eventsDB.event(event); - - const deletion = genEvent({ kind: 5, tags: [['e', event.id]] }, Conf.seckey); - await eventsDB.event(deletion); - - await assertRejects( - () => eventsDB.event(event), - RelayError, - 'event deleted by admin', - ); -}); - -Deno.test('throws a RelayError when inserting an event deleted by a user', async () => { - const { eventsDB } = await createDB(); - - const sk = generateSecretKey(); - - const event = genEvent({}, sk); - await eventsDB.event(event); - - const deletion = genEvent({ kind: 5, tags: [['e', event.id]] }, sk); - await eventsDB.event(deletion); - - await assertRejects( - () => eventsDB.event(event), - RelayError, - 'event deleted by user', - ); -}); - Deno.test('inserting replaceable events', async () => { const { eventsDB } = await createDB(); const event = await eventFixture('event-0'); await eventsDB.event(event); - const olderEvent = { ...event, id: '123', created_at: event.created_at - 1 }; - await eventsDB.event(olderEvent); - assertEquals(await eventsDB.query([{ kinds: [0], authors: [event.pubkey] }]), [event]); + await assertRejects(async () => { + const olderEvent = { ...event, id: '123', created_at: event.created_at - 1 }; + await eventsDB.event(olderEvent); + assertEquals(await eventsDB.query([{ kinds: [0], authors: [event.pubkey] }]), [event]); + }); const newerEvent = { ...event, id: '123', created_at: event.created_at + 1 }; await eventsDB.event(newerEvent);