diff --git a/src/pipeline.ts b/src/pipeline.ts index 26dbd82b..9aa16fda 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -1,4 +1,4 @@ -import { NKinds, NostrEvent, NPolicy, NSchema as n } from '@nostrify/nostrify'; +import { NKinds, NostrEvent, NSchema as n } from '@nostrify/nostrify'; import { PipePolicy } from '@nostrify/nostrify/policies'; import Debug from '@soapbox/stickynotes/debug'; import { sql } from 'kysely'; @@ -58,24 +58,10 @@ async function handleEvent(event: DittoEvent, signal: AbortSignal): Promise { const debug = Debug('ditto:policy'); - const policies: NPolicy[] = [ + const policy = new PipePolicy([ new MuteListPolicy(Conf.pubkey, await Storages.admin()), - ]; - - try { - await policyWorker.import(Conf.policy); - policies.push(policyWorker); - debug(`Using custom policy: ${Conf.policy}`); - } catch (e) { - if (e.message.includes('Module not found')) { - debug('Custom policy not found '); - } else { - console.error(`DITTO_POLICY (error importing policy): ${Conf.policy}`, e); - throw new RelayError('blocked', 'policy could not be loaded'); - } - } - - const policy = new PipePolicy(policies.reverse()); + policyWorker, + ]); try { const result = await policy.call(event); diff --git a/src/workers/policy.ts b/src/workers/policy.ts index e3926675..ef9aa2cd 100644 --- a/src/workers/policy.ts +++ b/src/workers/policy.ts @@ -1,8 +1,11 @@ +import { Stickynotes } from '@soapbox/stickynotes'; import * as Comlink from 'comlink'; import { Conf } from '@/config.ts'; import type { CustomPolicy } from '@/workers/policy.worker.ts'; +const console = new Stickynotes('ditto:policy'); + export const policyWorker = Comlink.wrap( new Worker( new URL('./policy.worker.ts', import.meta.url), @@ -19,3 +22,14 @@ export const policyWorker = Comlink.wrap( }, ), ); + +try { + await policyWorker.import(Conf.policy); + console.debug(`Using custom policy: ${Conf.policy}`); +} catch (e) { + if (e.message.includes('Module not found')) { + console.debug('Custom policy not found '); + } else { + throw new Error(`DITTO_POLICY (error importing policy): ${Conf.policy}`, e); + } +} diff --git a/src/workers/policy.worker.ts b/src/workers/policy.worker.ts index d1368bce..9f94a008 100644 --- a/src/workers/policy.worker.ts +++ b/src/workers/policy.worker.ts @@ -1,6 +1,6 @@ import 'deno-safe-fetch/load'; import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/nostrify'; -import { ReadOnlyPolicy } from '@nostrify/nostrify/policies'; +import { NoOpPolicy, ReadOnlyPolicy } from '@nostrify/nostrify/policies'; import * as Comlink from 'comlink'; export class CustomPolicy implements NPolicy { @@ -12,8 +12,15 @@ export class CustomPolicy implements NPolicy { } async import(path: string): Promise { - const Policy = (await import(path)).default; - this.policy = new Policy(); + try { + const Policy = (await import(path)).default; + this.policy = new Policy(); + } catch (e) { + if (e.message.includes('Module not found')) { + this.policy = new NoOpPolicy(); + } + throw e; + } } }