diff --git a/packages/ditto/utils/policies/mod.ts b/packages/ditto/utils/policies/mod.ts index f2e6adcf..9cda4662 100644 --- a/packages/ditto/utils/policies/mod.ts +++ b/packages/ditto/utils/policies/mod.ts @@ -16,9 +16,12 @@ export const policyRegistry = new PolicyRegistry({ store: new MockRelay(), }); +export type PolicyParam = ParamValue | (string | number)[]; +export type PolicyParams = Record; + interface PolicySpecItem { name: keyof typeof policyRegistry.available; - params?: Record; + params?: PolicyParams; } export interface PolicySpec { diff --git a/packages/ditto/utils/policies/registry.ts b/packages/ditto/utils/policies/registry.ts index 9e1638db..baeb638d 100644 --- a/packages/ditto/utils/policies/registry.ts +++ b/packages/ditto/utils/policies/registry.ts @@ -34,10 +34,10 @@ import { WhitelistPolicyOptsSchema, WoTPolicyOptsSchema, } from '@/utils/policies/schemas.ts'; -import { normalizeNpub } from '@/utils/policies/mod.ts'; +import { normalizeNpub, PolicyParams } from '@/utils/policies/mod.ts'; export interface PolicyItem { - instantiate: (params: Record) => NPolicy; + instantiate: (params: PolicyParams) => NPolicy; name: string; parameters: Record; description: string; @@ -49,7 +49,7 @@ export interface PolicyRegistryOpts { } export class PolicyRegistry { - constructor(private opts: PolicyRegistryOpts) {} + constructor(private opts: PolicyRegistryOpts) { } available: Record = { 'AntiDuplicationPolicy': { @@ -88,10 +88,11 @@ export class PolicyRegistry { instantiate: (params) => { if (!params.filters || !Array.isArray(params.filters)) throw new Error('Invalid params to FiltersPolicy'); const filters = params.filters.map((item) => { + if (typeof item === 'number') return; try { return JSON.parse(item); } catch { - return undefined; + return; } }).filter(Boolean); const parsed = FiltersPolicyOptsSchema.parse({ filters });