This is a simple lnd poller and web front-end to see and read boosts and boostagrams.

Related tags

Command-line helipad
Overview

Helipad

This package will poll a Lightning LND node for invoices related to Podcasting 2.0 and display them in a web interface. It's intended for use as a way to see incoming Boost-a-grams and other data from podcast listeners in a browser.

Helipad is intended to run as a dockerized Umbrel app, but can also be run standalone.

Helipad runs as a single process web server with the LND poller running as a separate thread. Invoices are checked for every 9 seconds, parsed and stored locally in a Sqlite database. The main webserver thread then serves them to clients over HTTP(S).

After compiling, you start the binary like this:

./helipad 8080

You may pass the port number you want it to listen on, on the command line as the only argument. If you don't pass a port number it will listen by default on port 2112. (RIP Neil)

The FQDN of your LND node must be present in an environment variable called $LND_URL in order to connect to it, like this:

export LND_URL="mynode.example.com:10009"

If you don't export that variable, it will attempt to connect to "localhost:10009".

Helipad also needs your admin.macaroon and tls.cert files. It will first look for them in the standard LND locations. If it cannot find them there, it will fall back to looking for them both in the local working directory that Helipad is running from.

Information about the Umbrel app environment is in the umbrel folder for those interested.

Comments
  • CORS permissions on JSON feeds - relax?

    CORS permissions on JSON feeds - relax?

    The JSON feed of /boosts (and /streams when that one comes) currently has standard (if restrictive) CORS settings.

    My use-case is that I'd quite like to be able to have a method of pulling my boost messages off my Umbrel and publishing them on the web. My initial thought was to just have a JavaScript page that works internally in my network, that would read the boosts JSON and post them to an API on my public server; but I'm foiled by the CORS policy.

    It would be good - and I think without any security issue, given that this page is only viewable on a local network (but that's up to you) - if the CORS policy was open for these JSON feeds.

    It's a case of adding the following header, below.

    Access-Control-Allow-Origin: *
    
    opened by jamescridland 6
  • Using helipad on btcpayserver docker?

    Using helipad on btcpayserver docker?

    I'm wondering if anyone has been able to configure helipad for use on a btcpayserver docker, which runs an internal LND node.

    Helipad works great on Umbrel, but I'd love to also be able to use it for other projects and podcasts that receive sats on a cloud node, specifically for those who have Voltage, Lunanode, or other LND or BTCPay Server instances.

    At present, it seems there isn't a good way to read boostagrams compiled from all sources (fountain, breez, castamatic, podverse, etc.), unless you're using an Umbrel node. I know Fountain has discussed compiling all boostagrams in the next update, but it'd be excellent to make use of the Helipad UI for use on docker instances.

    opened by yaeloss 4
  • Send boostagrams

    Send boostagrams

    Used a second database for the boostagrams sent to keep things separate. Could be one database but how do you do the update live nodes in that case? Should it be one or two databases? Does the page with sent boostagrams make sense?

    To do:

    • [x] UI for composing a boostagram
    • [ ] Add a link to received boostagrams to reply
    • [ ] lnd-rs function to send boostagram
    • [ ] Respect value blocks
    • [ ] Meaningful images for the new links.

    Help appriciated.

    opened by adevoss 3
  • Use configure_me to configure the service?

    Use configure_me to configure the service?

    It'd be great to use configure_me to handle the configuration. It was designed mainly for long-running services like this one. It can:

    • Read configuration from files, env vars and CLI args
    • Parse the configuration into more appropriate types, reporting nice error messages to the user
    • Generate help and man pages
    • Support all GNU styles of arguments I know of
    • Read from directories to allow composable configuration
    • Avoid boilerplate thanks to declarative syntax

    I can help with integration if needed.

    opened by Kixunil 3
  • Basic Github Actions Setup

    Basic Github Actions Setup

    Basic GitHub Actions Setup that ensures the project build and passes the tests.

    Build runs and passes on my fork: https://github.com/valcanobacon/helipad/actions/runs/1734998590

    opened by valcanobacon 2
  • Allow explicit config of paths

    Allow explicit config of paths

    You currently require that LND's macaroon and cert are in a specific path(s). In BTCPay, we have them elsewhere which makes it impossible to integrate helipad (https://github.com/btcpayserver/btcpayserver-docker/pull/567). I opened a PR with the required changes but I don't have a rust IDE and don't know its syntax to finish the PR. https://github.com/Podcastindex-org/helipad/pull/8

    Ideally, LND_ADMINMACAROON and LND_TLSCERT environment variables would take precedence if set, and helipad would attempt them first.

    opened by Kukks 2
  • Add IPFS Podcasting icon

    Add IPFS Podcasting icon

    Added IPFS Podcasting icon for incoming sats from 'ipfspodcasting' app name.

    Working on sub-splits / dynamic splits for nodes hosting IPFS episodes. When a split is sent to IPFS Podcasting, it will be divided and sent to nodes hosting the episode. This is to display an IPFS app icon when sats arrive due to IPFS hosting/participation.

    No ETA on this functionality, but wanted to get the icon into the next helipad release. - Thanks

    opened by Cameron-IPFSPodcasting 1
  • Use tokio::time::sleep to sleep the LND poller and not the HTTP server

    Use tokio::time::sleep to sleep the LND poller and not the HTTP server

    The current std::thread::sleep call seems to also put the HTTP server to sleep after each iteration of the LND poller. I've updated the call to use tokio::time::sleep instead, which lets the HTTP server continue running while the LND poller is sleeping.

    Resolves #47

    opened by ericpp 1
  • Use `tokio::time::sleep` instead of `std::thread::sleep`?

    Use `tokio::time::sleep` instead of `std::thread::sleep`?

    The std::thread::sleep call in the LND poller seems to cause the HTTP server to sleep as well (at least in my copy of Helipad). This causes the web interface to feel sluggish as the browser is waiting for the HTTP server to stop sleeping.

    Changing the following line:

    https://github.com/Podcastindex-org/helipad/blob/973b847074e281fbebe3640f93ae5f590a891a94/src/main.rs#L601

    to use tokio::time::sleep seems to fix the issue:

    tokio::time::sleep(tokio::time::Duration::from_millis(9000)).await;
    
    opened by ericpp 1
  • improve boost app name display

    improve boost app name display

    boostApp appears to already be properly cased, so we shouldn't make it lower-case to use on the img tag's title attribute. In addition, include the alt attribute as it is still accessibility best practice to always include that attribute on media elements.

    opened by coldacid 1
  • Terminal App Icon and App name tooltips

    Terminal App Icon and App name tooltips

    I got the icon from https://www.flaticon.com/free-icon/coding_346841?term=terminal&page=1&position=8&page=1&position=8&related_id=346841 and edited to be 400x400. was having issues uploading this screenshot to github https://files.catbox.moe/fbr2qd.png

    opened by valcanobacon 1
  • Webhook feature request

    Webhook feature request

    I was thinking of a function to have templates for webhooks for different platforms matrix/discord etc and then whenever you receive boosts helipad would send the username, amount , message via webhook to choosen service. Example env . Webhook_service=matrix Webhook_URL= .

    Im really interested in your opinion on this

    opened by takov751 0
  • Updated webroot assets to use file paths instead of query strings

    Updated webroot assets to use file paths instead of query strings

    This is an update to the asset handler to allow the assets to be loaded with their actual filenames (e.g. script/home.js) rather than through a query string (e.g. /script?name=home)

    My goal with this change is to make it easier for people to work on the HTML/CSS/JS frontend assets by simply opening the files on their computer. It removes a hurdle for some who might not know how to compile and run Rust code.

    opened by ericpp 0
  • Show actual sats received?

    Show actual sats received?

    Since splits will change every recipient's amount. Show each person the actual sats they received (while still showing the total boost amount).

    I barely know what I'm doing, but managed to modify home.js to split off msat & msat_total...

    let boostSats = Math.trunc(element.value_msat / 1000);
    let boostTotal = Math.trunc(element.value_msat_total / 1000);
    
    

    ...then did some math on the display to show sats, percent split, & boost total...

    <h5 class="sats">' + boostSats + ' sats <small>(' + Math.trunc(boostSats/boostTotal*100) + '% of ' + boostTotal + ' sats) ' + boostSender + '</small></h5> Helipad

    I'm sure this isn't the best display (or code). Feel free to come up with a better solution. The main purpose is to show what someone actually received (based on their perspective/split).

    I suppose if msat == msat_total, you could display the old/current way since it's 100% (no splits).

    Cameron

    opened by Cameron-IPFSPodcasting 2
  • Umbrel: respect the $BITCOIN_NETWORK env var

    Umbrel: respect the $BITCOIN_NETWORK env var

    Respect the $BITCOIN_NETWORK environment variable to test which network is being asked for and use the proper macaroon. Referenced by issue: #1278 on the Umbrel repo.

    opened by daveajones 2
  • Parse doubly-encoded records

    Parse doubly-encoded records

    See https://github.com/satoshisstream/satoshis.stream/issues/22 and https://github.com/valcanobacon/BoostCLI/issues/4 for background.

    If the podcast custom record is still encoded after decoding, give it a second round of decoding so that apps which mistakenly double-encode the record will still work with Helipad.

    opened by coldacid 3
Releases(v0.1.10)
  • v0.1.10(Apr 13, 2022)

    This is a tiny bug fix and logo release. The CSV should finally export properly and a couple of new app names/logos.

    What's Changed

    • Added Development docs to README by @valcanobacon in https://github.com/Podcastindex-org/helipad/pull/36
    • custom boostcli logo by @valcanobacon in https://github.com/Podcastindex-org/helipad/pull/42
    • Adding V4Vapp the Hive LND Bridge by @brianoflondon in https://github.com/Podcastindex-org/helipad/pull/43

    Full Changelog: https://github.com/Podcastindex-org/helipad/compare/v0.1.9...v0.1.10

    Source code(tar.gz)
    Source code(zip)
  • v0.1.9(Feb 21, 2022)

    This has bug fixes and some new features:

    • much better csv exporting (directional, ranges and proper escaping)
    • html escape fix for json encoded strings
    • icon/app list updates
    • show node wallet balance in UI
    • flash wallet balance when it changes (to see streaming payments)
    • css adjustments
    • confetti!!

    New Contributors

    • @coldacid made their first contribution in https://github.com/Podcastindex-org/helipad/pull/31

    Full Changelog: https://github.com/Podcastindex-org/helipad/compare/v0.1.8...v0.1.9

    Source code(tar.gz)
    Source code(zip)
  • v0.1.8(Jan 31, 2022)

    This release adds CSV export, better db initialization ui, a /streams endpoint, CORS support for boosts and some important bug fixes in the JSON payload deserializer.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(Jan 1, 2022)

    This release contains bug fixes for two different issues. One where there's a dead zone in the boost list and another where the UI dies when it hits an unsettled invoice.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(Dec 23, 2021)

    This release focuses on making all web assets local resources and adding much more configuration options. There is now a configuration file that can be used. But, in each case, the environment variables for each option will take precedence.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.4(Dec 3, 2021)

  • v0.1.3(Dec 1, 2021)

Owner
Podcastindex.org
The Podcast Index exists to preserve, protect and extend the open, independent podcasting ecosystem.
Podcastindex.org
A TUI front-end for the Debug Adapter Protocol.

Pesticide A TUI front-end for the Debug Adapter Protocol. Motivation I am an avid kakoune user. Kak is a very niche text editor with few users. As suc

raiguard 6 Jun 17, 2022
A run-codes cli front end with some extra features

run-cli Run-cli A run-codes cli front end with some extra features Report Bug · Request Feature Table of Contents About The Project Built With Getting

Matheus Vieira 13 Nov 16, 2022
HTTP client/libcurl TUI front end in Rust, with request + key storage

Rust TUI HTTP Client with API Key Management This project is still in active development and although it is useable, there may still be bugs and signi

Preston Thorpe 23 Nov 9, 2023
RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

Amir Alesheikh 4 Mar 5, 2023
Scriptable tool to read and write UEFI variables from EFI shell. View, save, edit and restore hidden UEFI (BIOS) Setup settings faster than with the OEM menu forms.

UEFI Variable Tool (UVT) UEFI Variable Tool (UVT) is a command-line application that runs from the UEFI shell. It can be launched in seconds from any

null 4 Dec 11, 2023
A ln scraper to read light novels and watch anime in your terminal (Written in rust)

Readme Table of content Why use kami Dependencies Install Linux/mac Windows Honorable mentions Why use kami Well its a fast and easy way to watch anim

mrfluffy 26 Dec 23, 2022
MetagenOmic read Re-Assigner and abundance quantifier

Mora Mora is an read re-assigner that re-assigns query reads to a unique reference. Main steps of Mora: Calculate the expected abundance levels of the

Andrew Zheng 8 Nov 18, 2022
ask.sh: AI terminal assistant that can read and write your terminal directly!

ask.sh: AI terminal assistant that read from & write to your terminal ask.sh is an AI terminal assistant based on OpenAI APIs such as GPT-3.5/4! What'

hmirin 5 Jun 20, 2023
Check the reproducibility status of your Arch Linux packages (read-only mirror)

arch-repro-status A CLI tool for querying the reproducibility status of the Arch Linux packages using data from a rebuilderd instance such as reproduc

Arch Linux 12 Nov 16, 2022
A Rust synchronisation primitive for "Multiplexed Concurrent Single-Threaded Read" access

exit-left verb; 1. To exit or disappear in a quiet, non-dramatic fashion, making way for more interesting events. 2. (imperative) Leave the scene, and

Jonathan de Jong 0 Dec 5, 2021
A PoC for the CVE-2022-44268 - ImageMagick arbitrary file read

CVE-2022-44268 Arbitrary File Read PoC - PNG generator This is a proof of concept of the ImageMagick bug discovered by https://www.metabaseq.com/image

Cristian 'void' Giustini 100 Feb 19, 2023
Tight Model format is a lossy 3D model format focused on reducing file size as much as posible without decreasing visual quality of the viewed model or read speeds.

What is Tight Model Format The main goal of the tmf project is to provide a way to save 3D game assets compressed in such a way, that there are no not

null 59 Mar 6, 2023
Simple template to use csr and ssr leptos with tauri for ios/android/windows/macos/linux and web dev

Tailwind-Leptos-Tauri Template Simple template to use csr and ssr leptos with tauri for ios/android/windows/macos/linux and web dev Just clone the rep

Victor Batarse 11 Mar 10, 2024
A simple to use and efficient Web Automation Tool.

teemo A simple to use and efficient Web Automation Tool. teemo allows you to do some web automation action(such as click and so on) and crawl some inf

null 3 Nov 22, 2023
Simple low-level web server to serve file uploads with some shell scripting-friendly features

http_file_uploader Simple low-level web server to serve file uploads with some shell scripting-friendly features. A bridge between Web's multipart/for

Vitaly Shukela 2 Oct 27, 2022
a simple program that you can scrap, is shit and really simple but is cool.

if you want to run it you need to have installed curl by default scrap youtube, but you can change it, also change the number of threads and run: carg

pai 7 Oct 15, 2021
Web-based tool that allows browsing and comparing symbol and type information of Microsoft Windows binaries across different versions of the OS.

WinDiff About WinDiff is an open-source web-based tool that allows browsing and comparing symbol and type information of Microsoft Windows binaries ac

Erwan Grelet 208 Jun 15, 2023
Upkeep your websites and web applications with ease from the comfort of the command line.

Upkeep Upkeep your websites and web applications with ease from the comfort of the command line. Explore the docs » View Demo · Report Bug · Request F

Kevin B 0 Dec 24, 2021