feat: automated outbox model

This commit is contained in:
2023-11-22 13:58:11 +00:00
parent a80c330e5b
commit a67263e5e1
11 changed files with 219 additions and 208 deletions

View File

@ -3,6 +3,7 @@ import { dedupe, sanitizeRelayUrl, unixNowMs, unwrap } from "@snort/shared";
import debug from "debug";
import { FlatReqFilter } from "./query-optimizer";
import { RelayListCacheExpire } from "./const";
import { BackgroundLoader } from "./background-loader";
const PickNRelays = 2;
@ -224,9 +225,44 @@ export async function updateRelayLists(authors: Array<string>, system: SystemInt
relayLists.map(a => ({
relays: parseRelayTags(a.tags),
pubkey: a.pubkey,
created_at: a.created_at,
created: a.created_at,
loaded: unixNowMs(),
})),
);
}
}
export class RelayMetadataLoader extends BackgroundLoader<UsersRelays> {
override name(): string {
return "RelayMetadataLoader";
}
override onEvent(e: Readonly<TaggedNostrEvent>): UsersRelays | undefined {
return {
relays: parseRelayTags(e.tags),
pubkey: e.pubkey,
created: e.created_at,
loaded: unixNowMs(),
};
}
override getExpireCutoff(): number {
return unixNowMs() - RelayListCacheExpire;
}
protected override buildSub(missing: string[]): RequestBuilder {
const rb = new RequestBuilder("relay-loader");
rb.withOptions({ skipDiff: true });
rb.withFilter().authors(missing).kinds([EventKind.Relays]);
return rb;
}
protected override makePlaceholder(key: string): UsersRelays | undefined {
return {
relays: [],
pubkey: key,
created: 0,
loaded: this.getExpireCutoff() + 300_000,
};
}
}