mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-13 10:28:51 +00:00
74 lines
1.4 KiB
TypeScript
74 lines
1.4 KiB
TypeScript
import {bech32} from '@scure/base'
|
|
|
|
import {Event, EventTemplate} from './event'
|
|
import {utf8Decoder} from './utils'
|
|
|
|
var _fetch: any
|
|
|
|
try {
|
|
_fetch = fetch
|
|
} catch {}
|
|
|
|
export function useFetchImplementation(fetchImplementation: any) {
|
|
_fetch = fetchImplementation
|
|
}
|
|
|
|
export async function getZapEndpoint(metadata: Event): Promise<null | string> {
|
|
try {
|
|
let lnurl: string = ''
|
|
let {lud06, lud16} = JSON.parse(metadata.content)
|
|
if (lud06) {
|
|
let {words} = bech32.decode(lud06, 1000)
|
|
let data = bech32.fromWords(words)
|
|
lnurl = utf8Decoder.decode(data)
|
|
} else if (lud16) {
|
|
let [name, domain] = lud16.split('@')
|
|
lnurl = `https://${domain}/.well-known/lnurlp/${name}`
|
|
} else {
|
|
return null
|
|
}
|
|
|
|
let res = await _fetch(lnurl)
|
|
let body = await res.json()
|
|
|
|
if (body.allowsNostr && body.nostrPubkey) {
|
|
return body.callback
|
|
}
|
|
} catch (err) {
|
|
/*-*/
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
export function makeZapRequest({
|
|
profile,
|
|
event,
|
|
amount,
|
|
relays,
|
|
comment = ''
|
|
}: {
|
|
profile: string
|
|
event: string | null
|
|
amount: string
|
|
comment: string
|
|
relays: string[]
|
|
}): EventTemplate {
|
|
let zr = {
|
|
kind: 9734,
|
|
created_at: Math.round(Date.now() / 1000),
|
|
content: comment,
|
|
tags: [
|
|
['p', profile],
|
|
['amount', amount],
|
|
['relays', ...relays]
|
|
]
|
|
}
|
|
|
|
if (event) {
|
|
zr.tags.push(['e', event])
|
|
}
|
|
|
|
return zr
|
|
}
|