2023-08-08 18:19:31 +00:00
|
|
|
import { bech32 } from 'bech32'
|
|
|
|
|
2023-02-08 19:38:04 +00:00
|
|
|
export const NOSTR_PUBKEY_HEX = /^[0-9a-fA-F]{64}$/
|
|
|
|
export const NOSTR_PUBKEY_BECH32 = /^npub1[02-9ac-hj-np-z]+$/
|
|
|
|
export const NOSTR_MAX_RELAY_NUM = 20
|
2023-08-08 18:19:31 +00:00
|
|
|
export const NOSTR_ZAPPLE_PAY_NPUB = 'npub1wxl6njlcgygduct7jkgzrvyvd9fylj4pqvll6p32h59wyetm5fxqjchcan'
|
|
|
|
|
|
|
|
export function hexToBech32 (hex, prefix = 'npub') {
|
|
|
|
return bech32.encode(prefix, bech32.toWords(Buffer.from(hex, 'hex')))
|
|
|
|
}
|
|
|
|
|
|
|
|
export function nostrZapDetails (zap) {
|
|
|
|
let { pubkey, content, tags } = zap
|
|
|
|
let npub = hexToBech32(pubkey)
|
|
|
|
if (npub === NOSTR_ZAPPLE_PAY_NPUB) {
|
|
|
|
const znpub = content.match(/^From: nostr:(npub1[02-9ac-hj-np-z]+)$/)?.[1]
|
|
|
|
if (znpub) {
|
|
|
|
npub = znpub
|
|
|
|
// zapple pay does not support user content
|
|
|
|
content = null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const event = tags.filter(t => t?.length >= 2 && t[0] === 'e')?.[0]?.[1]
|
|
|
|
const note = event ? hexToBech32(event, 'note') : null
|
|
|
|
|
|
|
|
return { npub, content, note }
|
|
|
|
}
|