async function make_request(method, rune, params) { const LNSocket = await lnsocket_init() const ln = LNSocket() ln.genkey() await ln.connect_and_init("03f3c108ccd536b8526841f0a5c58212bb9e6584a1eb493080e7c1cc34f82dad71", "wss://cln.jb55.com:443") const {result} = await ln.rpc({ rune, method, params }) ln.disconnect() return result } function fetch_tipjar_summary() { const rune = "5sgpXcVRMy19h2Ai9LiklJ7jI_J3qNnnG36wvyViqR49OTQmbWV0aG9kPW9mZmVyLXN1bW1hcnkmcG5hbWVkZXNjcmlwdGlvbj1AZGFtdXMtYW5kcm9pZCZwbmFtZWxpbWl0PTU=" return make_request("offer-summary", rune, { offerid: "2043536dfec68d559102f73510927622812a230cfdda079e96fccbfe35a96d11", description: "@damus-android", limit: 5 }) } function make_invoice(description) { const rune = "LZwGZJO7wZgmoScFQb5reZ0Ii8qPKCeUfTb-UcbDxWw9MTImbWV0aG9kPWludm9pY2U=" description = (description && `${description} @damus-android`) || "@damus-android donation" return make_request("invoice", rune, { amount_msat: "any", label: `damus-android-${new Date().getTime()}`, description: description }) } function make_qrcode(dat) { const link = dat.toUpperCase() document.querySelector("#qrcode").innerHTML = "" const qr = new QRCode("qrcode", { text: link, width: 256, height: 256, colorDark : "#000000", colorLight : "#ffffff", correctLevel : QRCode.CorrectLevel.L }) } async function click_make_invoice(el) { const offerdata = document.querySelector("#offerdata") const tipjar_img = document.querySelector("#tipjar-offer-qr") const note = prompt("Leave a note!", "") const invoice = await make_invoice(note) make_qrcode("LIGHTNING:" + invoice.bolt11) document.querySelector("#bolt12").href = "lightning:" + invoice.bolt11 el.style.display = "none"; } async function copy_tip() { const offer = document.querySelector("#offerdata").value.trim(); try { await navigator.clipboard.writeText(offer) alert("Invoice copied to clipboard!") } catch(err) { console.log("clipboard copy error", err) document.querySelector("#offerdata").style.display = "block" } } async function go() { const summary = await fetch_tipjar_summary() const el = document.querySelector("#tipjar-summary") const bolt12 = document.querySelector("#bolt12") make_qrcode(bolt12.href) el.innerHTML = render_tips(summary) } function render_tips(res) { const total_sats = res.total_msatoshi / 1000 const goal = 3000000 const perc = `${((total_sats / goal) * 100).toPrecision(2)}%` const total_fmt = `${format_amount(total_sats)} / ${format_amount(goal)} sats goal (${perc})` return `
Total: ${total_fmt}
Note | Amount |
---|