diff --git a/src/pipeline.ts b/src/pipeline.ts index 5a80b00f..b048e555 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -12,6 +12,7 @@ import { Sub } from '@/subs.ts'; import { getTagSet } from '@/tags.ts'; import { trends } from '@/trends.ts'; import { eventAge, isRelay, nostrDate, Time } from '@/utils.ts'; +import { verifySignatureWorker } from '@/workers/verify.ts'; import type { EventData } from '@/types.ts'; @@ -20,6 +21,7 @@ import type { EventData } from '@/types.ts'; * It is idempotent, so it can be called multiple times for the same event. */ async function handleEvent(event: Event): Promise { + if (!(await verifySignatureWorker(event))) return; if (encounterEvent(event)) return; const data = await getEventData(event); diff --git a/src/pool.ts b/src/pool.ts index 5b5eea7c..6690cd02 100644 --- a/src/pool.ts +++ b/src/pool.ts @@ -2,7 +2,7 @@ import { getActiveRelays } from '@/db/relays.ts'; import { type Event, RelayPool } from '@/deps.ts'; const allRelays = await getActiveRelays(); -const pool = new RelayPool(allRelays); +const pool = new RelayPool(allRelays, { skipVerification: true }); /** Publish an event to the given relays, or the entire pool. */ function publish(event: Event, relays: string[] = allRelays) { diff --git a/src/workers/verify.ts b/src/workers/verify.ts new file mode 100644 index 00000000..39f49e22 --- /dev/null +++ b/src/workers/verify.ts @@ -0,0 +1,13 @@ +import { Comlink, type Event } from '@/deps.ts'; + +import type { VerifyWorker } from './verify.worker.ts'; + +const worker = Comlink.wrap( + new Worker(new URL('./verify.worker.ts', import.meta.url), { type: 'module' }), +); + +function verifySignatureWorker(event: Event): Promise { + return worker.verifySignature(event); +} + +export { verifySignatureWorker }; diff --git a/src/workers/verify.worker.ts b/src/workers/verify.worker.ts new file mode 100644 index 00000000..b9092a4c --- /dev/null +++ b/src/workers/verify.worker.ts @@ -0,0 +1,9 @@ +import { Comlink, type Event, type VerifiedEvent, verifySignature } from '@/deps.ts'; + +export const VerifyWorker = { + verifySignature(event: Event): event is VerifiedEvent { + return verifySignature(event); + }, +}; + +Comlink.expose(VerifyWorker);