mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
pipeline: let the people post
This commit is contained in:
parent
a4772c27f8
commit
0df4ac7331
1 changed files with 12 additions and 27 deletions
|
|
@ -4,7 +4,6 @@ import { deleteAttachedMedia } from '@/db/unattached-media.ts';
|
||||||
import { Debug, LNURL, type NostrEvent } from '@/deps.ts';
|
import { Debug, LNURL, type NostrEvent } from '@/deps.ts';
|
||||||
import { DittoEvent } from '@/interfaces/DittoEvent.ts';
|
import { DittoEvent } from '@/interfaces/DittoEvent.ts';
|
||||||
import { isEphemeralKind } from '@/kinds.ts';
|
import { isEphemeralKind } from '@/kinds.ts';
|
||||||
import { isLocallyFollowed } from '@/queries.ts';
|
|
||||||
import { updateStats } from '@/stats.ts';
|
import { updateStats } from '@/stats.ts';
|
||||||
import { dehydrateEvent } from '@/storages/hydrate.ts';
|
import { dehydrateEvent } from '@/storages/hydrate.ts';
|
||||||
import { cache, client, eventsDB, reqmeister } from '@/storages.ts';
|
import { cache, client, eventsDB, reqmeister } from '@/storages.ts';
|
||||||
|
|
@ -25,13 +24,12 @@ const debug = Debug('ditto:pipeline');
|
||||||
*/
|
*/
|
||||||
async function handleEvent(event: DittoEvent, signal: AbortSignal): Promise<void> {
|
async function handleEvent(event: DittoEvent, signal: AbortSignal): Promise<void> {
|
||||||
if (!(await verifyEventWorker(event))) return;
|
if (!(await verifyEventWorker(event))) return;
|
||||||
const wanted = reqmeister.isWanted(event);
|
|
||||||
if (await encounterEvent(event, signal)) return;
|
if (await encounterEvent(event, signal)) return;
|
||||||
debug(`NostrEvent<${event.kind}> ${event.id}`);
|
debug(`NostrEvent<${event.kind}> ${event.id}`);
|
||||||
await hydrateEvent(event);
|
await hydrateEvent(event);
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
storeEvent(event, { force: wanted, signal }),
|
storeEvent(event, signal),
|
||||||
processDeletions(event, signal),
|
processDeletions(event, signal),
|
||||||
trackRelays(event),
|
trackRelays(event),
|
||||||
trackHashtags(event),
|
trackHashtags(event),
|
||||||
|
|
@ -58,23 +56,13 @@ async function hydrateEvent(event: DittoEvent): Promise<void> {
|
||||||
event.user = user;
|
event.user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if the pubkey is the `DITTO_NSEC` pubkey. */
|
|
||||||
const isAdminEvent = ({ pubkey }: NostrEvent): boolean => pubkey === Conf.pubkey;
|
|
||||||
|
|
||||||
interface StoreEventOpts {
|
|
||||||
force: boolean;
|
|
||||||
signal: AbortSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Maybe store the event, if eligible. */
|
/** Maybe store the event, if eligible. */
|
||||||
async function storeEvent(event: DittoEvent, opts: StoreEventOpts): Promise<void> {
|
async function storeEvent(event: DittoEvent, signal?: AbortSignal): Promise<void> {
|
||||||
if (isEphemeralKind(event.kind)) return;
|
if (isEphemeralKind(event.kind)) return;
|
||||||
const { force = false, signal } = opts;
|
|
||||||
|
|
||||||
if (force || event.user || event.kind === 5951 || isAdminEvent(event) || await isLocallyFollowed(event.pubkey)) {
|
|
||||||
const isDeleted = (await eventsDB.count(
|
const isDeleted = (await eventsDB.count(
|
||||||
[{ kinds: [5], authors: [Conf.pubkey, event.pubkey], '#e': [event.id], limit: 1 }],
|
[{ kinds: [5], authors: [Conf.pubkey, event.pubkey], '#e': [event.id], limit: 1 }],
|
||||||
opts,
|
{ signal },
|
||||||
)).count > 0;
|
)).count > 0;
|
||||||
|
|
||||||
if (isDeleted) {
|
if (isDeleted) {
|
||||||
|
|
@ -85,9 +73,6 @@ async function storeEvent(event: DittoEvent, opts: StoreEventOpts): Promise<void
|
||||||
updateStats(event).catch(debug),
|
updateStats(event).catch(debug),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return Promise.reject(new RelayError('blocked', 'only registered users can post'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Query to-be-deleted events, ensure their pubkey matches, then delete them from the database. */
|
/** Query to-be-deleted events, ensure their pubkey matches, then delete them from the database. */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue