2023-11-22 13:58:11 +00:00
|
|
|
import { unixNowMs } from "@snort/shared";
|
|
|
|
import { EventKind, TaggedNostrEvent, RequestBuilder } from ".";
|
2024-04-05 13:11:40 +00:00
|
|
|
import { MetadataRelays, ProfileCacheExpire } from "./const";
|
2024-01-08 14:12:05 +00:00
|
|
|
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
|
|
|
|
2024-01-08 14:12:05 +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
|
|
|
}
|
|
|
|
|
2024-01-08 14:12:05 +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 {
|
2024-01-09 16:40:31 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2024-01-08 14:12:05 +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,
|
2024-01-08 14:12:05 +00:00
|
|
|
} as CachedMetadata;
|
2023-10-10 09:37:53 +00:00
|
|
|
}
|
2023-03-28 14:34:01 +00:00
|
|
|
}
|