snort/packages/system/src/profile-cache.ts

34 lines
1.1 KiB
TypeScript
Raw Normal View History

2023-11-22 13:58:11 +00:00
import { unixNowMs } from "@snort/shared";
import { EventKind, TaggedNostrEvent, RequestBuilder } from ".";
import { MetadataRelays, ProfileCacheExpire } from "./const";
import { mapEventToProfile, CachedMetadata } from "./cache";
2023-11-22 13:58:11 +00:00
import { BackgroundLoader } from "./background-loader";
2023-03-28 14:34:01 +00:00
export class ProfileLoaderService extends BackgroundLoader<CachedMetadata> {
2023-11-22 13:58:11 +00:00
override name(): string {
return "ProfileLoaderService";
2023-03-28 14:34:01 +00:00
}
override onEvent(e: Readonly<TaggedNostrEvent>): CachedMetadata | undefined {
2023-11-22 13:58:11 +00:00
return mapEventToProfile(e);
2023-03-28 14:34:01 +00:00
}
2023-11-22 13:58:11 +00:00
override getExpireCutoff(): number {
return unixNowMs() - ProfileCacheExpire;
2023-04-04 18:44:45 +00:00
}
2023-11-22 13:58:11 +00:00
override buildSub(missing: string[]): RequestBuilder {
const sub = new RequestBuilder(`profiles`);
2024-04-05 13:12:31 +00:00
sub.withFilter().kinds([EventKind.SetMetadata]).authors(missing).relay(MetadataRelays);
2023-11-22 13:58:11 +00:00
return sub;
2023-09-14 11:31:17 +00:00
}
protected override makePlaceholder(key: string): CachedMetadata | undefined {
2023-11-22 13:58:11 +00:00
return {
pubkey: key,
loaded: unixNowMs() - ProfileCacheExpire + 30_000,
created: 0,
} as CachedMetadata;
}
2023-03-28 14:34:01 +00:00
}