Pass signal into policy

This commit is contained in:
Alex Gleason 2024-09-23 18:04:12 -05:00
parent 70e27b04f4
commit 6d0611dafe
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
3 changed files with 9 additions and 5 deletions

View file

@ -49,7 +49,7 @@ async function handleEvent(event: DittoEvent, signal: AbortSignal): Promise<void
} }
if (event.kind !== 24133 && event.pubkey !== Conf.pubkey) { if (event.kind !== 24133 && event.pubkey !== Conf.pubkey) {
await policyFilter(event); await policyFilter(event, signal);
} }
await hydrateEvent(event, signal); await hydrateEvent(event, signal);
@ -75,11 +75,11 @@ async function handleEvent(event: DittoEvent, signal: AbortSignal): Promise<void
} }
} }
async function policyFilter(event: NostrEvent): Promise<void> { async function policyFilter(event: NostrEvent, signal: AbortSignal): Promise<void> {
const debug = Debug('ditto:policy'); const debug = Debug('ditto:policy');
try { try {
const result = await policyWorker.call(event); const result = await policyWorker.call(event, signal);
policyEventsCounter.inc({ ok: String(result[2]) }); policyEventsCounter.inc({ ok: String(result[2]) });
debug(JSON.stringify(result)); debug(JSON.stringify(result));
RelayError.assert(result); RelayError.assert(result);

View file

@ -4,6 +4,8 @@ import * as Comlink from 'comlink';
import { Conf } from '@/config.ts'; import { Conf } from '@/config.ts';
import type { CustomPolicy } from '@/workers/policy.worker.ts'; import type { CustomPolicy } from '@/workers/policy.worker.ts';
import '@/workers/handlers/abortsignal.ts';
const console = new Stickynotes('ditto:policy'); const console = new Stickynotes('ditto:policy');
export const policyWorker = Comlink.wrap<CustomPolicy>( export const policyWorker = Comlink.wrap<CustomPolicy>(

View file

@ -6,6 +6,8 @@ import * as Comlink from 'comlink';
import { DittoDB } from '@/db/DittoDB.ts'; import { DittoDB } from '@/db/DittoDB.ts';
import { EventsDB } from '@/storages/EventsDB.ts'; import { EventsDB } from '@/storages/EventsDB.ts';
import '@/workers/handlers/abortsignal.ts';
// @ts-ignore Don't try to access the env from this worker. // @ts-ignore Don't try to access the env from this worker.
Deno.env = new Map<string, string>(); Deno.env = new Map<string, string>();
@ -25,8 +27,8 @@ export class CustomPolicy implements NPolicy {
private policy: NPolicy = new ReadOnlyPolicy(); private policy: NPolicy = new ReadOnlyPolicy();
// deno-lint-ignore require-await // deno-lint-ignore require-await
async call(event: NostrEvent): Promise<NostrRelayOK> { async call(event: NostrEvent, signal?: AbortSignal): Promise<NostrRelayOK> {
return this.policy.call(event); return this.policy.call(event, signal);
} }
async init({ path, cwd, databaseUrl, adminPubkey }: PolicyInit): Promise<void> { async init({ path, cwd, databaseUrl, adminPubkey }: PolicyInit): Promise<void> {