An open API service indexing awesome lists of open source software.

https://github.com/shocknet/clink-demo

CLINK Playground
https://github.com/shocknet/clink-demo

bitcoin lightning lightning-network nostr p2p payments

Last synced: 11 months ago
JSON representation

CLINK Playground

Awesome Lists containing this project

README

          

# CLINK Demo Client

A minimal web demo built with the [@shocknet/clink-sdk](https://www.npmjs.com/package/@shocknet/clink-sdk).

It showcases the three core interactions defined by **CLINK** (Common Lightning Interface for Nostr Keys):

1. **Lightning-address discovery** – map an user@domain NIP-05 identifier to a clink_offer string.
2. **Offers (`noffer`)** – ask a remote node for a fresh BOLT-11 invoice over Nostr.
3. **Debits (`ndebit`)** – authorise a remote node to pay a BOLT-11 invoice from your wallet.

Everything flows through Nostr – no HTTP callbacks, WebSockets or Tor-like onion-messages are required.

---

## Running locally

```bash
# in the clink-demo directory
npm install # first time only
npm start # opens http://localhost:8787
```

Build a static bundle:

```bash
npm run build # output in dist/
```

---

## How to use

### 1. Address checker

• Open the page (it defaults to index.html).
• Enter a Lightning Address like bob@example.com.
• Click **Check Address**.

The demo fetches https://example.com/.well-known/nostr.json?name=bob and reports whether it contains a `clink_offer` entry.

### 2. Generate an invoice from an **Offer**

• Still on index.html, paste a `noffer` string (or use the default).
• Click **Decode Offer** → **Get Invoice**.

The SDK signs and sends a `noffer_request` event with an ephemeral key cached in `localStorage`. Once the provider replies the BOLT-11 is displayed and rendered as a QR code.

### 3. Pay an invoice with a **Debit**

• Navigate to debit.html.
• Paste an `ndebit` string (generated by a CLINK-capable wallet like **ShockWallet**).
• Paste a BOLT-11 to be paid.
• Click **Pay Invoice**.

The SDK builds an `ndebit_payment_request` event, signs it, and waits for the provider's reply.

---

## Project layout

```
clink-demo

├── src/ # TypeScript, HTML & CSS sources
│ ├── index.ts # Address checker + Offer flow
│ ├── debit.ts # Debit flow
│ ├── utils.ts # localStorage-backed client key helper
│ └── styles.css
├── dist/ # Compiled output (to verify demo)
├── webpack.config.js # Build pipeline
└── tsconfig.json
```

---

## Contributing

PRs and issues welcome. Protocol discussions live in the main [CLINK repository](https://github.com/shocknet/clink).

---

## License

MIT

## Links

- [CLINK Specification](https://github.com/shocknet/clink)
- [CLINK Enabled Node](https://github.com/shocknet/Lightning.Pub)
- [CLINK Enabled Wallet](https://shockwallet.app)