29 lines
823 B
JavaScript
29 lines
823 B
JavaScript
import { randomBytes, createHash } from 'crypto'
|
|
import { bech32 } from 'bech32'
|
|
|
|
export function lnurlAuth (params) {
|
|
// generate secret (32 random bytes)
|
|
const secret = Buffer.from(randomBytes(32), 'hex')
|
|
// create url
|
|
const url = new URL(process.env.LNAUTH_URL)
|
|
url.searchParams = new URLSearchParams({
|
|
...params,
|
|
k1: secret
|
|
})
|
|
// bech32 encode url
|
|
const words = bech32.toWords(Buffer.from(url.toString(), 'utf8'))
|
|
const encodedUrl = bech32.encode('lnurl', words, 1023)
|
|
return { secret, encodedUrl }
|
|
}
|
|
|
|
export function lnurlPayMetadataString (username) {
|
|
return JSON.stringify([[
|
|
'text/plain',
|
|
`Funding @${username} on stacker.news`
|
|
]])
|
|
}
|
|
|
|
export function lnurlPayDescriptionHash (username) {
|
|
return createHash('sha256').update(lnurlPayMetadataString(username)).digest('hex')
|
|
}
|