53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import {fromPairs, last, first, parseJson} from "@welshman/lib"
|
|
import {getAddress} from "./Address.js"
|
|
import {getAddressTags, getKindTagValues} from "./Tags.js"
|
|
import type {TrustedEvent} from "./Events.js"
|
|
|
|
export type Handler = {
|
|
kind: number
|
|
name: string
|
|
about: string
|
|
image: string
|
|
identifier: string
|
|
event: TrustedEvent
|
|
website?: string
|
|
lud16?: string
|
|
nip05?: string
|
|
}
|
|
|
|
export const readHandlers = (event: TrustedEvent) => {
|
|
const {d: identifier} = fromPairs(event.tags)
|
|
const meta = parseJson(event.content)
|
|
const normalizedMeta = {
|
|
name: meta?.name || meta?.display_name || "",
|
|
image: meta?.image || meta?.picture || "",
|
|
about: meta?.about || "",
|
|
website: meta?.website || "",
|
|
lud16: meta?.lud16 || "",
|
|
nip05: meta?.nip05 || "",
|
|
}
|
|
|
|
// If our meta is missing important stuff, don't bother showing it
|
|
if (!normalizedMeta.name || !normalizedMeta.image) {
|
|
return []
|
|
}
|
|
|
|
return getKindTagValues(event.tags).map(kind => ({
|
|
...normalizedMeta,
|
|
kind,
|
|
identifier,
|
|
event,
|
|
})) as Handler[]
|
|
}
|
|
|
|
export const getHandlerKey = (handler: Handler) => `${handler.kind}:${getAddress(handler.event)}`
|
|
|
|
export const displayHandler = (handler?: Handler, fallback = "") => handler?.name || fallback
|
|
|
|
export const getHandlerAddress = (event: TrustedEvent) => {
|
|
const tags = getAddressTags(event.tags)
|
|
const tag = tags.find(t => last(t) === "web") || first(tags)
|
|
|
|
return tag?.[1]
|
|
}
|