Get rid of domain module, allow app to override default event type

This commit is contained in:
Jon Staab
2024-08-13 15:45:20 -07:00
parent 5a63273b9d
commit 149c29472c
33 changed files with 201 additions and 285 deletions
+48
View File
@@ -0,0 +1,48 @@
import {fromPairs, last, first, parseJson} from "@welshman/lib"
import {getAddress} from "./Address"
import {getAddressTags, getKindTagValues} from "./Tags"
import type {CustomEvent} from "./Events"
export type Handler = {
kind: number
name: string
about: string
image: string
identifier: string
event: CustomEvent
website?: string
lud16?: string
nip05?: string
}
export const readHandlers = (event: CustomEvent) => {
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: parseInt(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: CustomEvent) => {
const tags = getAddressTags(event.tags)
const tag = tags.find(t => last(t) === "web") || first(tags)
return tag?.[1]
}