Files
bakery/src/modules/profile-book.ts
2025-03-28 08:58:16 +00:00

32 lines
1.1 KiB
TypeScript

import { kinds } from "nostr-tools";
import { getObservableValue, simpleTimeout } from "applesauce-core/observable";
import { ProfileQuery } from "applesauce-core/queries";
import { LOOKUP_RELAYS } from "../env.js";
import { logger } from "../logger.js";
import { replaceableLoader } from "../services/loaders.js";
import { eventStore, queryStore } from "../services/stores.js";
import { arrayFallback } from "../helpers/array.js";
const DEFAULT_REQUEST_TIMEOUT = 10_000;
/** loads kind 0 metadata for pubkeys */
export default class ProfileBook {
log = logger.extend("ProfileBook");
getProfile(pubkey: string) {
return eventStore.getReplaceable(kinds.Metadata, pubkey);
}
async loadProfile(pubkey: string, relays?: string[], force?: boolean) {
relays = arrayFallback(relays, LOOKUP_RELAYS);
replaceableLoader.next({ kind: kinds.Metadata, pubkey, relays, force });
return getObservableValue(
queryStore
.createQuery(ProfileQuery, pubkey)
.pipe(simpleTimeout(DEFAULT_REQUEST_TIMEOUT, `Failed to load profile for ${pubkey}`)),
);
}
}