-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.js
87 lines (77 loc) · 3.77 KB
/
api.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const config = require('./config')
const ln = require('./lightning')
const db = require('knex')(config.knex)
const debug = require('debug')('app:api')
const nanoid = require('nanoid')
const express = require('express')
var router = express.Router()
router.post('/invoice',(req,res) => {
if(req.body != null) {
if(req.body.amount != null) {//amount is in satoshi
let amount = parseInt(req.body.amount)
if(amount > 0){
amount = amount * 1000 //to msat
} else {
return res.send(500).json(config.errors['INVOICE_AMOUNT'])
}
let label = req.body.label || nanoid()
let description = req.body.description || ("Lightning Payment order "+label)
ln.client.call("invoice",[amount,label,description])
.then(rx => {
res.status(200).json(Object.assign({},config.errors['OK'],{id:label,description:description},rx))
db('requests')
.insert({result:JSON.stringify(rx),id:label,'url':req.url,payment_hash:rx.payment_hash,expires_at:rx.expires_at,bolt11:rx.bolt11,type:config.types.INVOICE})
.then(x => debug("response %s saved %o",label,x))
.catch(ee => debug("error on insert %o",ee))
})
.catch(e => {
debug("error calling 'invoice' %o",e)
res.status(500).json(Object.assign( {errorCode:e.error.code,errorMessage:e.error.message},e))}
)
} else {
res.status(500).json(config.errors['INVOICE_AMOUNT'])
}
} else {
res.status(500).json(config.errors['ERROR'])
}
})
router.post('/pay', (req,res) => {
if(req.body != null) {
if(req.body.bolt11 != null && req.body.bolt11.length > 0) {
ln.client.call("decodepay",[req.body.bolt11])
.then(rx => {
let id = nanoid()
debug("decodepay %o",rx)
db('requests')
.insert({result:JSON.stringify(rx),id:id,'url':req.url,payment_hash:rx.payment_hash,expires_at:(rx.created_at+rx.expiry),bolt11:req.body.bolt11,type:config.types.PAYMENT})
.then(x => debug("response %s saved %o",id,x))
.catch(ee => debug("error on insert %o",ee))
ln.client.call("pay",[req.body.bolt11, req.body.msatoshi,
req.body.description, req.body.riskfactor || 1.0, req.body.maxfeepercent || 1.0,config.defaultTimeout])
.then( prx => {
let rsp = Object.assign({id:id},config.errors['OK'],rx,prx)
res.status(200).json(rsp)
})
.catch(e => res.status(500).json(Object.assign({id:id,errorCode:e.error.code,errorMessage:e.error.message},rx,e)))
})
.catch(e => res.status(500).json(Object.assign({errorCode:e.error.code,errorMessage:e.error.message},e)))
} else {
res.status(500).json(config.errors['BOLT_MISSING'])
}
} else {
res.status(500).json(config.errors['ERROR'])
}
})
router.get("/invoice/:id", (req,res) => {
debug("getting invoice %s",req.params.id)
ln.client.call('listinvoices',[req.params.id])
.then(rx => res.status(200).json(Object.assign({},config.errors['OK'],rx.invoices)))
.catch(e => res.status(500).json(Object.assign({errorCode:e.error.code,errorMessage:e.error.message},e)))
})
router.get("/payment/:id", (req,res) => {
debug("getting payment %s",req.params.id)
ln.client.call('listpayments',[req.params.id])
.then(rx => res.status(200).json(Object.assign({},config.errors['OK'],rx.payments)))
.catch(e => res.status(500).json(Object.assign({errorCode:e.error.code,errorMessage:e.error.message},e)))
})
module.exports = router