From 72685f227bef4af5654a6262cffaf8789c9bf1cf Mon Sep 17 00:00:00 2001 From: Siddharth Singh Date: Sun, 30 Mar 2025 14:02:57 +0530 Subject: [PATCH] PolicyRegistry need not be in app.ts at all --- packages/ditto/app.ts | 5 +---- packages/ditto/controllers/api/policies.ts | 6 +++--- packages/ditto/utils/policies.ts | 24 +++++++++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/packages/ditto/app.ts b/packages/ditto/app.ts index eb77053d..4cc8cdbf 100644 --- a/packages/ditto/app.ts +++ b/packages/ditto/app.ts @@ -151,7 +151,6 @@ import dittoNamesRoute from '@/routes/dittoNamesRoute.ts'; import pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts'; import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts'; import { DittoRelayStore } from '@/storages/DittoRelayStore.ts'; -import { PolicyRegistry } from '@nostrify/policies'; import { adminListPoliciesController, adminCurrentPolicyController } from '@/controllers/api/policies.ts'; import { createPolicyEvent, DEFAULT_POLICIES } from '@/utils/policies.ts'; @@ -200,11 +199,10 @@ const pgstore = new DittoPgStore({ const pool = new DittoPool({ conf, relay: pgstore }); const relay = new DittoRelayStore({ db, conf, pool, relay: pgstore }); -const policyRegistry = new PolicyRegistry({ antiDuplicationPolicyStore: await Deno.openKv(), store: relay }); const havePolicy = await relay.count([{ kinds: [11984], authors: [await conf.signer.getPublicKey()] }]); if (!havePolicy) { - relay.event(await createPolicyEvent(conf, DEFAULT_POLICIES)); + relay.event(await createPolicyEvent(conf, { policies: DEFAULT_POLICIES })); } await seedZapSplits({ conf, relay }); @@ -570,5 +568,4 @@ app.get('*', publicFiles, staticFiles, ratelimit, frontendController); app.onError(errorHandler); export default app; -export { policyRegistry }; export type { AppContext, AppController, AppMiddleware }; diff --git a/packages/ditto/controllers/api/policies.ts b/packages/ditto/controllers/api/policies.ts index 6c527b91..9e26d6b0 100644 --- a/packages/ditto/controllers/api/policies.ts +++ b/packages/ditto/controllers/api/policies.ts @@ -1,8 +1,8 @@ -import { policyRegistry, type AppController } from '@/app.ts'; -import { DEFAULT_POLICIES } from "@/utils/policies.ts"; +import { type AppController } from '@/app.ts'; +import { DEFAULT_POLICIES, policyRegistry } from "@/utils/policies.ts"; export const adminListPoliciesController: AppController = (c) => { - return c.json(Object.entries(policyRegistry.policies) + return c.json(Object.entries(policyRegistry.available) .map(([internalName, item]) => { return { internalName, diff --git a/packages/ditto/utils/policies.ts b/packages/ditto/utils/policies.ts index cc7c3270..af4c1223 100644 --- a/packages/ditto/utils/policies.ts +++ b/packages/ditto/utils/policies.ts @@ -1,15 +1,29 @@ -import { policyRegistry } from '@/app.ts'; import { nostrNow } from '@/utils.ts'; import type { DittoConf } from "@ditto/conf"; +import { PolicyRegistry } from '@nostrify/policies'; +import { MockRelay } from '@nostrify/nostrify/test'; type ParamValue = string | number | boolean; -interface PolicySpec { - name: keyof typeof policyRegistry.policies; +export const policyRegistry = new PolicyRegistry({ + antiDuplicationPolicyStore: { + get: (key: Deno.KvKey) => Promise.resolve({ key, value: null, versionstamp: null }), + set: () => Promise.resolve({ ok: true, versionstamp: "00000000000000000000" }) + }, + store: new MockRelay() +}); + + +interface PolicySpecItem { + name: keyof typeof policyRegistry.available; params?: Record; } -export const DEFAULT_POLICIES: PolicySpec[] = [ +export interface PolicySpec { + policies: PolicySpecItem[] +} + +export const DEFAULT_POLICIES: PolicySpecItem[] = [ { "name": "AntiDuplicationPolicy" }, { "name": "AuthorPolicy" }, { "name": "DomainPolicy" }, @@ -19,7 +33,7 @@ export const DEFAULT_POLICIES: PolicySpec[] = [ { "name": "HashtagPolicy", "params": { "hashtags": ["NSFW", "explicit", "violence", "cp", "porn"] } }, ]; -export const createPolicyEvent = async (conf: DittoConf, policies: PolicySpec[]) => { +export const createPolicyEvent = async (conf: DittoConf, policies: PolicySpec) => { return await conf.signer.signEvent({ kind: 11984, content: JSON.stringify({ policies }),