Lightning payment api for Dazaar stream services
const lightningOpts = {
cert: ..., // base64 encoded string of tls.cert
macaroon: ..., // base64 encoded string of macaroon
network: ..., // mainnet / testnet / regtest
host: ..., // <host>:<port>
oninvoice: function (invoice) {
// handle incoming invoice, e.g. display as QR
}
}
const paymentCard = {
method: 'Lightning',
currency: 'BTC', // may also be LightningSats
amount: '0.002',
unit: 'hours',
interval: 1,
minSeconds: 1, // minimum amount of streamtime
}
const Payment = require('@dazaar/payment-lightning')
const market = require('dazaar')
const hypercore = require('hypercore')
const m = market('./tmp')
const feed = hypercore('./tmp/data')
let payment
// instantiate a seller for a feed and equip it
// with a validate function
const seller = m.sell(feed, {
validate (remoteKey, cb) {
payee.validate(remoteKey, cb)
}
})
seller.ready(function (err) {
payment = new Payment(seller, paymentCard, lightningOpts)
// payment now set up. dazaar logic follows ...
})
On a separate machine with the
// instantiate a buyer for a specific feed
const buyer = m.buy(seller.key)
// set up pay payment linked to the buyer
const payment = new Payment(buyer, null, lightningOpts)
// buy an amount of feed
payment.buy(800) // oninvoice handles response
Create a new lightning payment instance associated to a seller. seller
should be a dazaar seller instance, payment
may either be a dazaar payment card, or a string specifying the per second rate in either BTC
or Sats
, such as 200 Sats/s
. Options include:
{
cert: ..., // base64 encoded string of tls.cert
macaroon: ..., // base64 encoded string of macaroon
network: ..., // mainnet / testnet / regtest
implementation: ..., // 'c-lightning' or 'lnd'
oninvoice: function (invoice) {
// handle incoming invoice, e.g. display as QR
}
}
A seller can validate the time left for a given buyer. Returns error
if there is no time left on the subscription. The method shall check whether the given buyer has a subscription set-up and instantiate one not already present.
Request a specified amount for the stream that this buyer is registered to. amount
is specified in satoshis (1 x 10-8 BTC). The invoice is passed to the user so there is no need for a lightning node to be connected in order to call this API. oninvoice
handles the returned invoice, which is passed to the constructor.
Serve an invoice for a given request
. For this to be called it is required that a lightning node is connected with at least invoice.macaroon
provided.
seller
and auth
should be passed as null
. Request an invoice and pay it upon receipt. For this to be called it is required that a lightning node is connected with admin.macaroon
provided.
Destroy the payment provider
Refer to the setup guide for instructions on how to install a lightning node implementation and set up a test environment.
MIT