mirror of
https://github.com/aljazceru/bakery.git
synced 2025-12-17 04:35:13 +01:00
32 lines
1.1 KiB
TypeScript
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}`)),
|
|
);
|
|
}
|
|
}
|