From f2e2072184320fd0bcf3e694f662391d893484bd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 22 Feb 2025 19:46:38 -0600 Subject: [PATCH] Export PolicyWorker as a regular class --- packages/ditto/storages/DittoAPIStore.ts | 6 ++++-- packages/ditto/workers/policy.ts | 26 ++++++++++++------------ scripts/db-policy.ts | 3 ++- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/ditto/storages/DittoAPIStore.ts b/packages/ditto/storages/DittoAPIStore.ts index 7a479899..2df28da5 100644 --- a/packages/ditto/storages/DittoAPIStore.ts +++ b/packages/ditto/storages/DittoAPIStore.ts @@ -33,7 +33,7 @@ import { getAmount } from '@/utils/bolt11.ts'; import { errorJson } from '@/utils/log.ts'; import { purifyEvent } from '@/utils/purify.ts'; import { getTagSet } from '@/utils/tags.ts'; -import { policyWorker } from '@/workers/policy.ts'; +import { PolicyWorker } from '@/workers/policy.ts'; import { verifyEventWorker } from '@/workers/verify.ts'; import { fetchFavicon, insertFavicon, queryFavicon } from '@/utils/favicon.ts'; import { lookupNip05 } from '@/utils/nip05.ts'; @@ -54,6 +54,7 @@ export class DittoAPIStore implements NRelay { private push: DittoPush; private encounters = new LRUCache({ max: 5000 }); private controller = new AbortController(); + private policyWorker: PolicyWorker; private faviconCache: SimpleLRU; private nip05Cache: SimpleLRU; @@ -64,6 +65,7 @@ export class DittoAPIStore implements NRelay { const { conf, db } = this.opts; this.push = new DittoPush(opts); + this.policyWorker = new PolicyWorker(conf); this.listen().catch((e: unknown) => { logi({ level: 'error', ns: this.ns, source: 'listen', error: errorJson(e) }); @@ -211,7 +213,7 @@ export class DittoAPIStore implements NRelay { private async policyFilter(event: NostrEvent, signal?: AbortSignal): Promise { try { - const result = await policyWorker.call(event, signal); + const result = await this.policyWorker.call(event, signal); const [, , ok, reason] = result; logi({ level: 'debug', ns: 'ditto.policy', id: event.id, kind: event.kind, ok, reason }); policyEventsCounter.inc({ ok: String(ok) }); diff --git a/packages/ditto/workers/policy.ts b/packages/ditto/workers/policy.ts index 02de539c..e2617f72 100644 --- a/packages/ditto/workers/policy.ts +++ b/packages/ditto/workers/policy.ts @@ -1,16 +1,16 @@ +import { DittoConf } from '@ditto/conf'; import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/nostrify'; import { logi } from '@soapbox/logi'; import * as Comlink from 'comlink'; -import { Conf } from '@/config.ts'; import type { CustomPolicy } from '@/workers/policy.worker.ts'; -class PolicyWorker implements NPolicy { +export class PolicyWorker implements NPolicy { private worker: Comlink.Remote; private ready: Promise; private enabled = true; - constructor() { + constructor(private conf: DittoConf) { this.worker = Comlink.wrap( new Worker( new URL('./policy.worker.ts', import.meta.url), @@ -19,8 +19,8 @@ class PolicyWorker implements NPolicy { name: 'PolicyWorker', deno: { permissions: { - read: [Conf.denoDir, Conf.policy, Conf.dataDir], - write: [Conf.dataDir], + read: [conf.denoDir, conf.policy, conf.dataDir], + write: [conf.dataDir], net: 'inherit', env: false, import: true, @@ -44,18 +44,20 @@ class PolicyWorker implements NPolicy { } private async init(): Promise { + const conf = this.conf; + try { await this.worker.init({ - path: Conf.policy, - databaseUrl: Conf.databaseUrl, - pubkey: await Conf.signer.getPublicKey(), + path: conf.policy, + databaseUrl: conf.databaseUrl, + pubkey: await conf.signer.getPublicKey(), }); logi({ level: 'info', ns: 'ditto.system.policy', msg: 'Using custom policy', - path: Conf.policy, + path: conf.policy, enabled: true, }); } catch (e) { @@ -76,16 +78,14 @@ class PolicyWorker implements NPolicy { level: 'warn', ns: 'ditto.system.policy', msg: 'Custom policies are not supported with PGlite. The policy is disabled.', - path: Conf.policy, + path: conf.policy, enabled: false, }); this.enabled = false; return; } - throw new Error(`DITTO_POLICY (error importing policy): ${Conf.policy}`); + throw new Error(`DITTO_POLICY (error importing policy): ${conf.policy}`); } } } - -export const policyWorker = new PolicyWorker(); diff --git a/scripts/db-policy.ts b/scripts/db-policy.ts index 80e217c5..b7ceee96 100644 --- a/scripts/db-policy.ts +++ b/scripts/db-policy.ts @@ -2,11 +2,12 @@ import { DittoConf } from '@ditto/conf'; import { DittoPolyPg } from '@ditto/db'; import { DittoPgStore } from '../packages/ditto/storages/DittoPgStore.ts'; -import { policyWorker } from '../packages/ditto/workers/policy.ts'; +import { PolicyWorker } from '../packages/ditto/workers/policy.ts'; const conf = new DittoConf(Deno.env); const db = new DittoPolyPg(conf.databaseUrl); const relay = new DittoPgStore({ db, pubkey: await conf.signer.getPublicKey() }); +const policyWorker = new PolicyWorker(conf); let count = 0;