npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@getalby/lightning-wallet-connect

v1.0.14

Published

Web components to connect to a lightning wallet and power a website with WebLN

Downloads

37

Readme

Lightning Wallet Connect

This project includes web components for connecting to Lightning Wallets and enabling WebLN. Websites only need to implement a single interface to connect with multiple wallets (WebLN), and users can connect from both desktop and mobile devices. These components work with pure HTML and all Javascript libraries frameworks such as React, Angular, Vue, Solid.js, etc.

🚀 Quick Start

npm install @getalby/lightning-wallet-connect

or

yarn add @getalby/lightning-wallet-connect

or for use without any build tools:

<script src="https://cdn.jsdelivr.net/npm/@getalby/[email protected]/dist/index.browser.js"></script>

📽️ Demo

https://user-images.githubusercontent.com/33993199/234830578-0baf25f9-0179-4244-941c-0c558c613a7a.mov

🤙 Usage

Lightning wallet connect exposes the following web components for allowing user to connect their desired Lightning wallet:

  • <lwc-button/> - launches the LWC Modal on click
    • Optional Arguments:
      • icon-only - display the button as an icon without "Connect wallet"
      • disabled - mark the button as disabled. NOTE: in react disabled={false} will not work - attribute must be omitted
  • <lwc-modal/> - render the modal on its own
  • <lwc-connector-list/> - render the list of connectors on their own
  • more components coming soon

Lightning wallet connect exposes the following events:

  • lwc:connected window event which fires when a wallet is connected and window.webln is ready to use
  • lwc:connecting window event which fires when LWC is connecting to a wallet
  • lwc:disconnected window event which fires when user has disconnected from their wallet
  • lwc:modalopened window event which fires when Lightning Wallet Connect modal is opened
  • lwc:modalclosed window event which fires when Lightning Wallet Connect modal is closed

Current wallets supported:

Styling

  • the following css variables can be configured as hex or rgb:
html {
  --lwc-color-primary: #21ecc7;
  --lwc-color-secondary: #21ecc7;
  --lwc-color-bg-primary: black;
  --lwc-color-bg-secondary: black;
  --lwc-color-text-primary: black;
  --lwc-color-text-secondary: #f4f4f4;
  --lwc-color-text-tertiary: white;
}

Pure HTML

Example codepen: https://codepen.io/rolznz/pen/ZEmXGLd

<html>
  <body>
    <lwc-button></lwc-button>
    <script src="https://cdn.jsdelivr.net/npm/@getalby/[email protected]/dist/index.browser.js"></script>
    <script>
      window.addEventListener('lwc:connected', async () => {
        // TODO: hide the lwc-button
        const invoice = // (...invoice generated by backend)
          await window.webln.sendPayment(invoice);
        confetti();
      });
    </script>
  </body>
</html>

React

Example replit: https://replit.com/@rolznz/make-me-an-image-lwc-version

import '@getalby/lightning-wallet-connect';

// in your component, listen to lightning wallet connected event
const [lwcConnected, setLwcConnected] = React.useState(false);

React.useEffect(() => {
  const onConnected = () => setLwcConnected(true);
  window.addEventListener('lwc:connected', onConnected);

  return () => {
    window.removeEventListener('lwc:connected', onConnected);
  };
}, []);

const invoice = // (...invoice generated by backend)

return lwcConnected ? <>
    <button onClick={() => window.webln.sendPayment(invoice)}/>
  </> : (
    {/* @ts-ignore */}
    <lwc-button/>
  );

Demos

Open demos

🛠️ Development

Install

Run yarn install && (cd dev/vite && yarn install)

Run Vite

Run yarn dev

Other dev options

Open dev

Production Build

yarn build

Build (Watch mode - no pure html support)

yarn dev:build

Build (Watch mode - with pure html support)

yarn dev:build:browser

Testing

yarn test

Need help?

We are happy to help, please contact us or create an issue.

FAQ

  • Does this work on mobile browsers and mobile PWAs, or desktop browsers without a WebLN extension?

Yes! that's the main benefit.

  • Does it work with a desktop extension enabled?

Yes. It will use the desktop extension as the default connector if it exists.

  • Can I connect it to my mobile wallet?

That depends. The connection to your lightning node / wallet needs to be asynchronous so that you can use Bitcoin Connect natively on mobile websites or PWAs.

  • Can a user connect any lightning wallet?

It will only work for the connectors that are shown in the modal. Some of these connectors (e.g. the Alby Browser Extension) allow to connect multiple wallets themselves. Feel free to contribute to add a new connector.

  • Does it "remember" the user if they leave the page or close the browser?

Yes. Your connection is saved to localStorage

  • Is this safe?

You should have a certain level of trust on the website you decide to connect your wallet with, and that they ensure there is no malicious third-party scripts which would intend to read the wallet connection configuration, either from memory or storage. Connectors with budget controls or confirmation dialogs (Alby extension or NWC) are recommend so you have full control over your connection.

  • What are the high level things I need to do to add this to my site?
  1. add the "Connect Wallet" button
  2. wait for a connection event (using window.addEventListener) and then request to pay the invoice with window.webln

🔥 Lit

This project is powered by Lit.

See Get started on the Lit site for more information.

License

MIT