import { bech32 } from 'bech32' 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 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 } }