Files
welshman/packages/util/src/Handler.ts
T

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]
}