Browse Source

Merge branch 'master' into feature/docker

feature/dockerfile-arm
Gonzalo Javier Aune 5 years ago
parent
commit
ae7e8252ac
  1. 42
      .drone.yml
  2. 3
      .gitignore
  3. 11
      README.md
  4. 24
      api/controllers/contacts.ts
  5. 2
      api/controllers/invites.ts
  6. 17
      api/controllers/payment.ts
  7. 21
      api/grpc/index.ts
  8. 8
      api/helpers.ts
  9. 2
      api/hub.ts
  10. 75
      api/utils/lightning.ts
  11. 2
      api/utils/logger.ts
  12. 95
      api/utils/nodeinfo.ts
  13. 6
      api/utils/password.ts
  14. 41
      api/utils/setup.ts
  15. 4
      api/utils/socket.ts
  16. 3
      app.ts
  17. 8
      config/app.json
  18. 20
      dist/api/controllers/contacts.js
  19. 2
      dist/api/controllers/contacts.js.map
  20. 2
      dist/api/controllers/invites.js.map
  21. 17
      dist/api/controllers/payment.js
  22. 2
      dist/api/controllers/payment.js.map
  23. 23
      dist/api/grpc/index.js
  24. 2
      dist/api/grpc/index.js.map
  25. 8
      dist/api/helpers.js
  26. 2
      dist/api/helpers.js.map
  27. 2
      dist/api/hub.js
  28. 2
      dist/api/hub.js.map
  29. 87
      dist/api/utils/lightning.js
  30. 2
      dist/api/utils/lightning.js.map
  31. 2
      dist/api/utils/logger.js
  32. 97
      dist/api/utils/nodeinfo.js
  33. 2
      dist/api/utils/nodeinfo.js.map
  34. 6
      dist/api/utils/password.js
  35. 1
      dist/api/utils/password.js.map
  36. 48
      dist/api/utils/setup.js
  37. 2
      dist/api/utils/setup.js.map
  38. 4
      dist/api/utils/socket.js
  39. 2
      dist/api/utils/socket.js.map
  40. 1
      dist/app.js
  41. 2
      dist/app.js.map
  42. 70
      package-lock.json
  43. 3
      package.json
  44. 8275
      yarn.lock

42
.drone.yml

@ -0,0 +1,42 @@
kind: pipeline
type: docker
name: default
steps:
- name: prepare-test-build
image: node
volumes:
# - name: cache
# path: /artifacts
commands:
- npm install
- npm run test
- npm run build
# - name: build-image
# image: node
# volumes:
# - name: cache
# path: /artifacts
# commands:
# - echo "TODO"
#
# - name: push-image
# image: node
# volumes:
# - name: cache
# path: /artifacts
# commands:
# - echo "TODO"
# volumes:
# - name: cache
# temp: {}
trigger:
repo:
- stakwork/sphinx-relay
- daniel-ro/sphinx-relay
branch:
- drone
- master

3
.gitignore

@ -1,4 +1,7 @@
notes.md
todo.md
dist/public/uploads
dist/config/app.json
dist/config/config.json

11
README.md

@ -85,14 +85,25 @@ sqlite3: `apt-get install sqlite3`
### configure
Make sure your LND is running with the `--accept-keysend` flag! If you are using lnd.conf file, add `accept-keysend=1`
Edit the "production" section of config/app.json:
- Change `macaroon_location` to the location of your LND admin macaroon
- Change `tls_location` to the location of your LND cert
Edit the "production" section of config/config.json
- Update "storage" to point to where you want your DB file to live
To connect to your app
- `export NODE_IP=x.x.x.x` (you can use a domain name instead if you have that set up)
- For extra security, `export USE_PASSWORD=true`
### run
`npm run prod`
When Relay starts up, it will print a QR in the terminal. You can scan this in your app (right now Android only) to connect!
# Roadmap
- linking recurring payments to files, to enable use cases such as subscribing to podcasts with BTC!

24
api/controllers/contacts.ts

@ -4,6 +4,7 @@ import * as socket from '../utils/socket'
import * as helpers from '../helpers'
import * as jsonUtils from '../utils/json'
import {success, failure} from '../utils/res'
import password from '../utils/password'
const constants = require(__dirname + '/../../config/constants.json')
@ -39,6 +40,16 @@ const generateToken = async (req, res) => {
const owner = await models.Contact.findOne({ where: { isOwner: true, authToken: null }})
const pwd = password
if(process.env.USE_PASSWORD==='true'){
if(pwd!==req.query.pwd) {
failure(res, 'Wrong Password')
return
} else {
console.log("PASSWORD ACCEPTED!")
}
}
if (owner) {
const hash = crypto.createHash('sha256').update(req.body['token']).digest('base64');
@ -60,19 +71,14 @@ const updateContact = async (req, res) => {
const contact = await models.Contact.findOne({ where: { id: req.params.id }})
let shouldUpdateContactKey = (contact.isOwner && contact.contactKey == null && attrs["contact_key"] != null)
const owner = await contact.update(jsonUtils.jsonToContact(attrs))
success(res, jsonUtils.contactToJson(owner))
if (!shouldUpdateContactKey) {
return
}
// definitely "owner" now
if (!shouldUpdateContactKey) return
const contactIds = await models.Contact.findAll({where:{deleted:false}}).map(c => c.id)
if (contactIds.length == 0) {
return
}
if (contactIds.length == 0) return
helpers.sendContactKeys({
contactIds: contactIds,
@ -154,7 +160,7 @@ const deleteContact = async (req, res) => {
}
const receiveConfirmContactKey = async (payload) => {
console.log('=> confirm contact key', { payload })
console.log(`=> confirm contact key for ${payload.sender&&payload.sender.pub_key}`)
const dat = payload.content || payload
const sender_pub_key = dat.sender.pub_key

2
api/controllers/invites.ts

@ -60,7 +60,7 @@ const createInvite = async (req, res) => {
const {
nickname,
welcome_message
} = req.body
} = req.body
const owner = await models.Contact.findOne({ where: { isOwner: true }})

17
api/controllers/payment.ts

@ -8,8 +8,6 @@ import * as lightning from '../utils/lightning'
import {tokenFromTerms} from '../utils/ldat'
import * as constants from '../../config/constants.json'
const sendPayment = async (req, res) => {
const {
amount,
@ -107,10 +105,13 @@ const sendPayment = async (req, res) => {
// console.log('payment sent', { data })
success(res, jsonUtils.messageToJson(message, chat))
},
failure: (error) => {
message.update({status: constants.statuses.failed})
failure: async (error) => {
await message.update({status: constants.statuses.failed})
res.status(200);
res.json({ success: false, error });
res.json({
success: false,
response: jsonUtils.messageToJson(message, chat)
});
res.end();
}
})
@ -159,8 +160,7 @@ const listPayments = async (req, res) => {
const payments: any[] = []
const response:any = await lightning.listInvoices()
const invs = response && response.invoices
const invs:any = await lightning.listAllInvoices()
if(invs && invs.length){
invs.forEach(inv=>{
const val = inv.value && parseInt(inv.value)
@ -180,8 +180,7 @@ const listPayments = async (req, res) => {
})
}
const res2:any = await lightning.listPayments()
const pays = res2 && res2.payments
const pays:any = await lightning.listAllPayments()
if(pays && pays.length){
pays.forEach(pay=>{
const val = pay.value && parseInt(pay.value)

21
api/grpc/index.ts

@ -4,6 +4,8 @@ import { sendNotification, sendInvoice } from '../hub'
import * as jsonUtils from '../utils/json'
import * as decodeUtils from '../utils/decode'
import {loadLightning, SPHINX_CUSTOM_RECORD_KEY, verifyAscii} from '../utils/lightning'
import * as controllers from '../controllers'
import * as moment from 'moment'
const constants = require(__dirname + '/../../config/constants.json');
@ -158,8 +160,10 @@ function subscribeInvoices(actions) {
reject(err)
})
call.on('end', function() {
console.log("Closed stream");
const now = moment().format('YYYY-MM-DD HH:mm:ss').trim();
console.log(`Closed stream ${now}`);
// The server has closed the stream.
reconnectToLND()
});
setTimeout(()=>{
resolve(null)
@ -167,6 +171,21 @@ function subscribeInvoices(actions) {
})
}
var i = 0
async function reconnectToLND(){
i++
console.log(`=> [lnd] reconnecting... attempt #${i}`)
try {
await controllers.iniGrpcSubscriptions()
const now = moment().format('YYYY-MM-DD HH:mm:ss').trim();
console.log(`=> [lnd] reconnected! ${now}`)
} catch(e) {
setTimeout(async()=>{ // retry each 2 secs
await reconnectToLND()
},2000)
}
}
export {
subscribeInvoices,
}

8
api/helpers.ts

@ -58,7 +58,7 @@ const sendContactKeys = async (args) => {
}
performKeysendMessage({
destination_key,
amount: 1,
amount: 3,
msg: JSON.stringify(msg),
success: (data) => {
yes = data
@ -100,7 +100,7 @@ const sendMessage = async (params) => {
const opts = {
dest: destkey,
data: JSON.stringify(finalMsg),
amt: amount || 1,
amt: amount || 3,
}
try {
const r = await keysendMessage(opts)
@ -121,11 +121,11 @@ const performKeysendMessage = async ({ destination_key, amount, msg, success, fa
const opts = {
dest: destination_key,
data: msg || JSON.stringify({}),
amt: amount || 1
amt: Math.max(amount, 3)
}
try {
const r = await keysendMessage(opts)
console.log("MESSAGE SENT outside SW!", r)
console.log("=> external keysend")
if (success) success(r)
} catch (e) {
console.log("MESSAGE ERROR", e)

2
api/hub.ts

@ -231,7 +231,7 @@ const sendNotification = async (chat, name, type) => {
}
}
fetch("http://hub.sphinx.chat/api/v1/nodes/notify", {
fetch("https://hub.sphinx.chat/api/v1/nodes/notify", {
method: 'POST' ,
body: JSON.stringify(params),
headers: { 'Content-Type': 'application/json' }

75
api/utils/lightning.ts

@ -108,7 +108,7 @@ const keysend = (opts) => {
const randoStr = crypto.randomBytes(32).toString('hex');
const preimage = ByteBuffer.fromHex(randoStr)
const options = {
amt: opts.amt,
amt: Math.max(opts.amt, 3),
final_cltv_delta: 10,
dest: ByteBuffer.fromHex(opts.dest),
dest_custom_records: {
@ -220,12 +220,75 @@ function listInvoices() {
})
}
function listPayments() {
async function listAllInvoices(){
console.log('=> list all invoices')
const invs = await paginateInvoices(40)
return invs
}
async function paginateInvoices(limit,i=0){
try{
const r:any = await listInvoicesPaginated(limit,i)
const lastOffset = parseInt(r.first_index_offset)
if(lastOffset>0) {
return r.invoices.concat(await paginateInvoices(limit,lastOffset))
}
return r.invoices
}catch(e){
return []
}
}
function listInvoicesPaginated(limit, offset) {
return new Promise(async(resolve, reject)=> {
const lightning = await loadLightning()
lightning.listInvoices({
num_max_invoices: limit,
index_offset: offset,
reversed:true,
}, (err, response) => {
if(!err && response && response.invoices) resolve(response)
else reject(err)
})
})
}
// need to upgrade to .10 for this
async function listAllPaymentsPaginated(){
const invs = await paginatePayments(40) // max num
return invs
}
async function paginatePayments(limit,i=0){
try{
const r:any = await listPaymentsPaginated(limit,i)
const lastOffset = parseInt(r.first_index_offset) // this is "first" cuz its in reverse (lowest index)
if(lastOffset>0) {
return r.invoices.concat(await paginatePayments(limit,lastOffset))
}
return r.invoices
}catch(e){
return []
}
}
function listPaymentsPaginated(limit, offset) {
return new Promise(async(resolve, reject)=> {
const lightning = await loadLightning()
lightning.listPayments({
num_max_payments: limit,
index_offset: offset,
reversed: true,
}, (err, response) => {
if(!err && response && response.payments) resolve(response)
else reject(err)
})
})
}
function listAllPayments() {
console.log('=> list all payments')
return new Promise(async(resolve, reject)=> {
const lightning = await loadLightning()
lightning.listPayments({}, (err, response) => {
if(!err) {
resolve(response)
if(!err && response && response.payments) {
resolve(response.payments)
} else {
reject(err)
}
@ -329,6 +392,8 @@ export {
LND_KEYSEND_KEY,
SPHINX_CUSTOM_RECORD_KEY,
listInvoices,
listPayments,
listAllPayments,
checkConnection,
listAllInvoices,
listAllPaymentsPaginated,
}

2
api/utils/logger.ts

@ -2,7 +2,7 @@ import * as expressWinston from 'express-winston'
import * as winston from 'winston'
import * as moment from 'moment'
const tsFormat = (ts) => moment(ts).format('YYYY-MM-DD hh:mm:ss').trim();
const tsFormat = (ts) => moment(ts).format('YYYY-MM-DD HH:mm:ss').trim();
const logger = expressWinston.logger({
transports: [

95
api/utils/nodeinfo.ts

@ -22,55 +22,60 @@ function nodeinfo(){
const clean = await isClean()
lightning.channelBalance({}, (err, channelBalance) => {
if(err) console.log(err)
// const { balance, pending_open_balance } = channelBalance
lightning.listChannels({}, (err, channelList) => {
try {
lightning.channelBalance({}, (err, channelBalance) => {
if(err) console.log(err)
const { channels } = channelList
// const { balance, pending_open_balance } = channelBalance
lightning.listChannels({}, (err, channelList) => {
if(err) console.log(err)
if(!channelList) return
const { channels } = channelList
const localBalances = channels.map(c => c.local_balance)
const remoteBalances = channels.map(c => c.remote_balance)
const largestLocalBalance = Math.max(...localBalances)
const largestRemoteBalance = Math.max(...remoteBalances)
const totalLocalBalance = localBalances.reduce((a, b) => parseInt(a) + parseInt(b), 0)
const localBalances = channels.map(c => c.local_balance)
const remoteBalances = channels.map(c => c.remote_balance)
const largestLocalBalance = Math.max(...localBalances)
const largestRemoteBalance = Math.max(...remoteBalances)
const totalLocalBalance = localBalances.reduce((a, b) => parseInt(a) + parseInt(b), 0)
lightning.pendingChannels({}, (err, pendingChannels) => {
if(err) console.log(err)
lightning.getInfo({}, (err, info) => {
lightning.pendingChannels({}, (err, pendingChannels) => {
if(err) console.log(err)
if(!err && info){
const node = {
node_alias: process.env.NODE_ALIAS,
ip: process.env.NODE_IP,
relay_commit: commitHash,
public_ip: public_ip,
pubkey: owner.publicKey,
number_channels: channels.length,
number_active_channels: info.num_active_channels,
number_pending_channels: info.num_pending_channels,
number_peers: info.num_peers,
largest_local_balance: largestLocalBalance,
largest_remote_balance: largestRemoteBalance,
total_local_balance: totalLocalBalance,
lnd_version: info.version,
relay_version: tag,
payment_channel: '', // ?
hosting_provider: '', // ?
open_channel_data: channels,
pending_channel_data: pendingChannels,
synced_to_chain: info.synced_to_chain,
synced_to_graph: info.synced_to_graph,
best_header_timestamp: info.best_header_timestamp,
testnet: info.testnet,
clean,
lightning.getInfo({}, (err, info) => {
if(err) console.log(err)
if(!err && info){
const node = {
node_alias: process.env.NODE_ALIAS,
ip: process.env.NODE_IP,
relay_commit: commitHash,
public_ip: public_ip,
pubkey: owner.publicKey,
number_channels: channels.length,
number_active_channels: info.num_active_channels,
number_pending_channels: info.num_pending_channels,
number_peers: info.num_peers,
largest_local_balance: largestLocalBalance,
largest_remote_balance: largestRemoteBalance,
total_local_balance: totalLocalBalance,
lnd_version: info.version,
relay_version: tag,
payment_channel: '', // ?
hosting_provider: '', // ?
open_channel_data: channels,
pending_channel_data: pendingChannels,
synced_to_chain: info.synced_to_chain,
synced_to_graph: info.synced_to_graph,
best_header_timestamp: info.best_header_timestamp,
testnet: info.testnet,
clean,
}
resolve(node)
}
resolve(node)
}
})
})
})
})
});
});
} catch(e){
console.log('=>',e)
}
})
}
@ -79,6 +84,10 @@ export {nodeinfo}
async function isClean(){
// has owner but with no auth token
const cleanOwner = await models.Contact.findOne({ where: { isOwner: true, authToken: null }})
if(cleanOwner) return true
const msgs = await models.Message.findAll()
const allContacts = await models.Contact.findAll()
const noMsgs = msgs.length===0
const onlyOneContact = allContacts.length===1
if(cleanOwner && noMsgs && onlyOneContact) return true
return false
}

6
api/utils/password.ts

@ -0,0 +1,6 @@
import * as crypto from 'crypto'
const password = crypto.randomBytes(16).toString('hex');
export default password

41
api/utils/setup.ts

@ -1,6 +1,10 @@
import { loadLightning } from './lightning'
import {sequelize, models} from '../models'
import { exec } from 'child_process'
import * as QRCode from 'qrcode'
import * as publicIp from 'public-ip'
import password from '../utils/password'
import {checkTag, checkCommitHash} from '../utils/gitinfo'
const USER_VERSION = 1
@ -80,7 +84,42 @@ const runMigrations = async () => {
});
}
export { setupDatabase, setupOwnerContact, runMigrations }
export { setupDatabase, setupOwnerContact, runMigrations, setupDone }
async function setupDone(){
await printGitInfo()
printQR()
}
async function printGitInfo(){
const commitHash = await checkCommitHash()
const tag = await checkTag()
console.log(`=> Relay version: ${tag}, commit: ${commitHash}`)
}
async function printQR(){
const ip = process.env.NODE_IP
let public_ip
if(!ip) {
try {
public_ip = await publicIp.v4()
} catch(e){
console.log(e)
}
} else {
public_ip = ip
}
if(!public_ip) {
console.log('=> no public IP provided')
return
}
let theIP = public_ip
if(!theIP.includes(":")) theIP = public_ip+':3001'
const b64 = Buffer.from(`ip::${theIP}::${password||''}`).toString('base64')
console.log('Scan this QR in Sphinx app:')
console.log(b64)
QRCode.toString(b64,{type:'terminal'}, function (err, url) {
console.log(url)
})
}

4
api/utils/socket.ts

@ -6,10 +6,10 @@ let connectionCounter = 0
const connect = (server) => {
server = new WebSocket.Server({ server })
console.log('[socket] connected to server')
console.log('=> [socket] connected to server')
server.on('connection', socket => {
console.log('[socket] connection received')
console.log('=> [socket] connection received')
var id = connectionCounter++;
connections.set(id, socket)
})

3
app.ts

@ -6,7 +6,7 @@ import * as crypto from 'crypto'
import {models} from './api/models'
import logger from './api/utils/logger'
import {pingHubInterval, checkInvitesHubInterval} from './api/hub'
import {setupDatabase} from './api/utils/setup'
import {setupDatabase, setupDone} from './api/utils/setup'
import * as controllers from './api/controllers'
import * as socket from './api/utils/socket'
@ -42,6 +42,7 @@ async function mainSetup(){
checkInvitesHubInterval(5000)
}
await setupApp()
setupDone()
}
async function setupApp(){

8
config/app.json

@ -19,10 +19,10 @@
"lnd_port": "10009",
"node_http_protocol": "http",
"node_http_port": "3000",
"hub_api_url": "http://hub.sphinx.chat/api/v1",
"hub_url": "http://hub.sphinx.chat/ping",
"hub_invite_url": "http://hub.sphinx.chat/invites",
"hub_check_invite_url": "http://hub.sphinx.chat/check_invite",
"hub_api_url": "https://hub.sphinx.chat/api/v1",
"hub_url": "https://hub.sphinx.chat/ping",
"hub_invite_url": "https://hub.sphinx.chat/invites",
"hub_check_invite_url": "https://hub.sphinx.chat/check_invite",
"media_host": "memes.sphinx.chat"
}
}

20
dist/api/controllers/contacts.js

@ -15,6 +15,7 @@ const socket = require("../utils/socket");
const helpers = require("../helpers");
const jsonUtils = require("../utils/json");
const res_1 = require("../utils/res");
const password_1 = require("../utils/password");
const constants = require(__dirname + '/../../config/constants.json');
const getContacts = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
const contacts = yield models_1.models.Contact.findAll({ where: { deleted: false }, raw: true });
@ -41,6 +42,16 @@ exports.getContacts = getContacts;
const generateToken = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
console.log('=> generateToken called', { body: req.body, params: req.params, query: req.query });
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true, authToken: null } });
const pwd = password_1.default;
if (process.env.USE_PASSWORD === 'true') {
if (pwd !== req.query.pwd) {
res_1.failure(res, 'Wrong Password');
return;
}
else {
console.log("PASSWORD ACCEPTED!");
}
}
if (owner) {
const hash = crypto.createHash('sha256').update(req.body['token']).digest('base64');
console.log("req.params['token']", req.params['token']);
@ -60,14 +71,11 @@ const updateContact = (req, res) => __awaiter(void 0, void 0, void 0, function*
let shouldUpdateContactKey = (contact.isOwner && contact.contactKey == null && attrs["contact_key"] != null);
const owner = yield contact.update(jsonUtils.jsonToContact(attrs));
res_1.success(res, jsonUtils.contactToJson(owner));
if (!shouldUpdateContactKey) {
if (!shouldUpdateContactKey)
return;
}
// definitely "owner" now
const contactIds = yield models_1.models.Contact.findAll({ where: { deleted: false } }).map(c => c.id);
if (contactIds.length == 0) {
if (contactIds.length == 0)
return;
}
helpers.sendContactKeys({
contactIds: contactIds,
sender: owner,
@ -137,7 +145,7 @@ const deleteContact = (req, res) => __awaiter(void 0, void 0, void 0, function*
});
exports.deleteContact = deleteContact;
const receiveConfirmContactKey = (payload) => __awaiter(void 0, void 0, void 0, function* () {
console.log('=> confirm contact key', { payload });
console.log(`=> confirm contact key for ${payload.sender && payload.sender.pub_key}`);
const dat = payload.content || payload;
const sender_pub_key = dat.sender.pub_key;
const sender_contact_key = dat.sender.contact_key;

2
dist/api/controllers/contacts.js.map

File diff suppressed because one or more lines are too long

2
dist/api/controllers/invites.js.map

@ -1 +1 @@
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../../../api/controllers/invites.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../../../api/controllers/invites.ts"],"names":[],"mappings":"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"}

17
dist/api/controllers/payment.js

@ -97,12 +97,15 @@ const sendPayment = (req, res) => __awaiter(void 0, void 0, void 0, function* ()
// console.log('payment sent', { data })
res_1.success(res, jsonUtils.messageToJson(message, chat));
}),
failure: (error) => {
message.update({ status: constants.statuses.failed });
failure: (error) => __awaiter(void 0, void 0, void 0, function* () {
yield message.update({ status: constants.statuses.failed });
res.status(200);
res.json({ success: false, error });
res.json({
success: false,
response: jsonUtils.messageToJson(message, chat)
});
res.end();
}
})
});
});
exports.sendPayment = sendPayment;
@ -143,8 +146,7 @@ const listPayments = (req, res) => __awaiter(void 0, void 0, void 0, function* (
const limit = (req.query.limit && parseInt(req.query.limit)) || 100;
const offset = (req.query.offset && parseInt(req.query.offset)) || 0;
const payments = [];
const response = yield lightning.listInvoices();
const invs = response && response.invoices;
const invs = yield lightning.listAllInvoices();
if (invs && invs.length) {
invs.forEach(inv => {
const val = inv.value && parseInt(inv.value);
@ -163,8 +165,7 @@ const listPayments = (req, res) => __awaiter(void 0, void 0, void 0, function* (
}
});
}
const res2 = yield lightning.listPayments();
const pays = res2 && res2.payments;
const pays = yield lightning.listAllPayments();
if (pays && pays.length) {
pays.forEach(pay => {
const val = pay.value && parseInt(pay.value);

2
dist/api/controllers/payment.js.map

File diff suppressed because one or more lines are too long

23
dist/api/grpc/index.js

@ -15,6 +15,8 @@ const hub_1 = require("../hub");
const jsonUtils = require("../utils/json");
const decodeUtils = require("../utils/decode");
const lightning_1 = require("../utils/lightning");
const controllers = require("../controllers");
const moment = require("moment");
const constants = require(__dirname + '/../../config/constants.json');
// VERIFY PUBKEY OF SENDER
function parseAndVerifyPayload(data) {
@ -168,8 +170,10 @@ function subscribeInvoices(actions) {
reject(err);
});
call.on('end', function () {
console.log("Closed stream");
const now = moment().format('YYYY-MM-DD HH:mm:ss').trim();
console.log(`Closed stream ${now}`);
// The server has closed the stream.
reconnectToLND();
});
setTimeout(() => {
resolve(null);
@ -177,4 +181,21 @@ function subscribeInvoices(actions) {
}));
}
exports.subscribeInvoices = subscribeInvoices;
var i = 0;
function reconnectToLND() {
return __awaiter(this, void 0, void 0, function* () {
i++;
console.log(`=> [lnd] reconnecting... attempt #${i}`);
try {
yield controllers.iniGrpcSubscriptions();
const now = moment().format('YYYY-MM-DD HH:mm:ss').trim();
console.log(`=> [lnd] reconnected! ${now}`);
}
catch (e) {
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
yield reconnectToLND();
}), 2000);
}
});
}
//# sourceMappingURL=index.js.map

2
dist/api/grpc/index.js.map

File diff suppressed because one or more lines are too long

8
dist/api/helpers.js

@ -65,7 +65,7 @@ const sendContactKeys = (args) => __awaiter(void 0, void 0, void 0, function* ()
}
performKeysendMessage({
destination_key,
amount: 1,
amount: 3,
msg: JSON.stringify(msg),
success: (data) => {
yes = data;
@ -101,7 +101,7 @@ const sendMessage = (params) => __awaiter(void 0, void 0, void 0, function* () {
const opts = {
dest: destkey,
data: JSON.stringify(finalMsg),
amt: amount || 1,
amt: amount || 3,
};
try {
const r = yield lightning_1.keysendMessage(opts);
@ -126,11 +126,11 @@ const performKeysendMessage = ({ destination_key, amount, msg, success, failure
const opts = {
dest: destination_key,
data: msg || JSON.stringify({}),
amt: amount || 1
amt: Math.max(amount, 3)
};
try {
const r = yield lightning_1.keysendMessage(opts);
console.log("MESSAGE SENT outside SW!", r);
console.log("=> external keysend");
if (success)
success(r);
}

2
dist/api/helpers.js.map

File diff suppressed because one or more lines are too long

2
dist/api/hub.js

@ -221,7 +221,7 @@ const sendNotification = (chat, name, type) => __awaiter(void 0, void 0, void 0,
badge: unseenMessages.length
}
};
fetch("http://hub.sphinx.chat/api/v1/nodes/notify", {
fetch("https://hub.sphinx.chat/api/v1/nodes/notify", {
method: 'POST',
body: JSON.stringify(params),
headers: { 'Content-Type': 'application/json' }

2
dist/api/hub.js.map

File diff suppressed because one or more lines are too long

87
dist/api/utils/lightning.js

@ -119,7 +119,7 @@ const keysend = (opts) => {
const randoStr = crypto.randomBytes(32).toString('hex');
const preimage = ByteBuffer.fromHex(randoStr);
const options = {
amt: opts.amt,
amt: Math.max(opts.amt, 3),
final_cltv_delta: 10,
dest: ByteBuffer.fromHex(opts.dest),
dest_custom_records: {
@ -244,12 +244,89 @@ function listInvoices() {
}));
}
exports.listInvoices = listInvoices;
function listPayments() {
function listAllInvoices() {
return __awaiter(this, void 0, void 0, function* () {
console.log('=> list all invoices');
const invs = yield paginateInvoices(40);
return invs;
});
}
exports.listAllInvoices = listAllInvoices;
function paginateInvoices(limit, i = 0) {
return __awaiter(this, void 0, void 0, function* () {
try {
const r = yield listInvoicesPaginated(limit, i);
const lastOffset = parseInt(r.first_index_offset);
if (lastOffset > 0) {
return r.invoices.concat(yield paginateInvoices(limit, lastOffset));
}
return r.invoices;
}
catch (e) {
return [];
}
});
}
function listInvoicesPaginated(limit, offset) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const lightning = yield loadLightning();
lightning.listPayments({}, (err, response) => {
if (!err) {
lightning.listInvoices({
num_max_invoices: limit,
index_offset: offset,
reversed: true,
}, (err, response) => {
if (!err && response && response.invoices)
resolve(response);
else
reject(err);
});
}));
}
// need to upgrade to .10 for this
function listAllPaymentsPaginated() {
return __awaiter(this, void 0, void 0, function* () {
const invs = yield paginatePayments(40); // max num
return invs;
});
}
exports.listAllPaymentsPaginated = listAllPaymentsPaginated;
function paginatePayments(limit, i = 0) {
return __awaiter(this, void 0, void 0, function* () {
try {
const r = yield listPaymentsPaginated(limit, i);
const lastOffset = parseInt(r.first_index_offset); // this is "first" cuz its in reverse (lowest index)
if (lastOffset > 0) {
return r.invoices.concat(yield paginatePayments(limit, lastOffset));
}
return r.invoices;
}
catch (e) {
return [];
}
});
}
function listPaymentsPaginated(limit, offset) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const lightning = yield loadLightning();
lightning.listPayments({
num_max_payments: limit,
index_offset: offset,
reversed: true,
}, (err, response) => {
if (!err && response && response.payments)
resolve(response);
else
reject(err);
});
}));
}
function listAllPayments() {
console.log('=> list all payments');
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const lightning = yield loadLightning();
lightning.listPayments({}, (err, response) => {
if (!err && response && response.payments) {
resolve(response.payments);
}
else {
reject(err);
@ -257,7 +334,7 @@ function listPayments() {
});
}));
}
exports.listPayments = listPayments;
exports.listAllPayments = listAllPayments;
const signMessage = (msg) => {
return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
let lightning = yield loadLightning();

2
dist/api/utils/lightning.js.map

File diff suppressed because one or more lines are too long

2
dist/api/utils/logger.js

@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const expressWinston = require("express-winston");
const winston = require("winston");
const moment = require("moment");
const tsFormat = (ts) => moment(ts).format('YYYY-MM-DD hh:mm:ss').trim();
const tsFormat = (ts) => moment(ts).format('YYYY-MM-DD HH:mm:ss').trim();
const logger = expressWinston.logger({
transports: [
new winston.transports.Console()

97
dist/api/utils/nodeinfo.js

@ -27,57 +27,64 @@ function nodeinfo() {
const lightning = lightning_1.loadLightning();
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true } });
const clean = yield isClean();
lightning.channelBalance({}, (err, channelBalance) => {
if (err)
console.log(err);
// const { balance, pending_open_balance } = channelBalance
lightning.listChannels({}, (err, channelList) => {
try {
lightning.channelBalance({}, (err, channelBalance) => {
if (err)
console.log(err);
const { channels } = channelList;
const localBalances = channels.map(c => c.local_balance);
const remoteBalances = channels.map(c => c.remote_balance);
const largestLocalBalance = Math.max(...localBalances);
const largestRemoteBalance = Math.max(...remoteBalances);
const totalLocalBalance = localBalances.reduce((a, b) => parseInt(a) + parseInt(b), 0);
lightning.pendingChannels({}, (err, pendingChannels) => {
// const { balance, pending_open_balance } = channelBalance
lightning.listChannels({}, (err, channelList) => {
if (err)
console.log(err);
lightning.getInfo({}, (err, info) => {
if (!channelList)
return;
const { channels } = channelList;
const localBalances = channels.map(c => c.local_balance);
const remoteBalances = channels.map(c => c.remote_balance);
const largestLocalBalance = Math.max(...localBalances);
const largestRemoteBalance = Math.max(...remoteBalances);
const totalLocalBalance = localBalances.reduce((a, b) => parseInt(a) + parseInt(b), 0);
lightning.pendingChannels({}, (err, pendingChannels) => {
if (err)
console.log(err);
if (!err && info) {
const node = {
node_alias: process.env.NODE_ALIAS,
ip: process.env.NODE_IP,
relay_commit: commitHash,
public_ip: public_ip,
pubkey: owner.publicKey,
number_channels: channels.length,
number_active_channels: info.num_active_channels,
number_pending_channels: info.num_pending_channels,
number_peers: info.num_peers,
largest_local_balance: largestLocalBalance,
largest_remote_balance: largestRemoteBalance,
total_local_balance: totalLocalBalance,
lnd_version: info.version,
relay_version: tag,
payment_channel: '',
hosting_provider: '',
open_channel_data: channels,
pending_channel_data: pendingChannels,
synced_to_chain: info.synced_to_chain,
synced_to_graph: info.synced_to_graph,
best_header_timestamp: info.best_header_timestamp,
testnet: info.testnet,
clean,
};
resolve(node);
}
lightning.getInfo({}, (err, info) => {
if (err)
console.log(err);
if (!err && info) {
const node = {
node_alias: process.env.NODE_ALIAS,
ip: process.env.NODE_IP,
relay_commit: commitHash,
public_ip: public_ip,
pubkey: owner.publicKey,
number_channels: channels.length,
number_active_channels: info.num_active_channels,
number_pending_channels: info.num_pending_channels,
number_peers: info.num_peers,
largest_local_balance: largestLocalBalance,
largest_remote_balance: largestRemoteBalance,
total_local_balance: totalLocalBalance,
lnd_version: info.version,
relay_version: tag,
payment_channel: '',
hosting_provider: '',
open_channel_data: channels,
pending_channel_data: pendingChannels,
synced_to_chain: info.synced_to_chain,
synced_to_graph: info.synced_to_graph,
best_header_timestamp: info.best_header_timestamp,
testnet: info.testnet,
clean,
};
resolve(node);
}
});
});
});
});
});
}
catch (e) {
console.log('=>', e);
}
}));
}
exports.nodeinfo = nodeinfo;
@ -85,7 +92,11 @@ function isClean() {
return __awaiter(this, void 0, void 0, function* () {
// has owner but with no auth token
const cleanOwner = yield models_1.models.Contact.findOne({ where: { isOwner: true, authToken: null } });
if (cleanOwner)
const msgs = yield models_1.models.Message.findAll();
const allContacts = yield models_1.models.Contact.findAll();
const noMsgs = msgs.length === 0;
const onlyOneContact = allContacts.length === 1;
if (cleanOwner && noMsgs && onlyOneContact)
return true;
return false;
});

2
dist/api/utils/nodeinfo.js.map

@ -1 +1 @@
{"version":3,"file":"nodeinfo.js","sourceRoot":"","sources":["../../../api/utils/nodeinfo.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"nodeinfo.js","sourceRoot":"","sources":["../../../api/utils/nodeinfo.ts"],"names":[],"mappings":"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"}

6
dist/api/utils/password.js

@ -0,0 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const crypto = require("crypto");
const password = crypto.randomBytes(16).toString('hex');
exports.default = password;
//# sourceMappingURL=password.js.map

1
dist/api/utils/password.js.map

@ -0,0 +1 @@
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../../api/utils/password.ts"],"names":[],"mappings":";;AACA,iCAAgC;AAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAExD,kBAAe,QAAQ,CAAA"}

48
dist/api/utils/setup.js

@ -12,6 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
const lightning_1 = require("./lightning");
const models_1 = require("../models");
const child_process_1 = require("child_process");
const QRCode = require("qrcode");
const publicIp = require("public-ip");
const password_1 = require("../utils/password");
const gitinfo_1 = require("../utils/gitinfo");
const USER_VERSION = 1;
const setupDatabase = () => __awaiter(void 0, void 0, void 0, function* () {
console.log('=> [db] starting setup...');
@ -93,4 +97,48 @@ const runMigrations = () => __awaiter(void 0, void 0, void 0, function* () {
});
});
exports.runMigrations = runMigrations;
function setupDone() {
return __awaiter(this, void 0, void 0, function* () {
yield printGitInfo();
printQR();
});
}
exports.setupDone = setupDone;
function printGitInfo() {
return __awaiter(this, void 0, void 0, function* () {
const commitHash = yield gitinfo_1.checkCommitHash();
const tag = yield gitinfo_1.checkTag();
console.log(`=> Relay version: ${tag}, commit: ${commitHash}`);
});
}
function printQR() {
return __awaiter(this, void 0, void 0, function* () {
const ip = process.env.NODE_IP;
let public_ip;
if (!ip) {
try {
public_ip = yield publicIp.v4();
}
catch (e) {
console.log(e);
}
}
else {
public_ip = ip;
}
if (!public_ip) {
console.log('=> no public IP provided');
return;
}
let theIP = public_ip;
if (!theIP.includes(":"))
theIP = public_ip + ':3001';
const b64 = Buffer.from(`ip::${theIP}::${password_1.default || ''}`).toString('base64');
console.log('Scan this QR in Sphinx app:');
console.log(b64);
QRCode.toString(b64, { type: 'terminal' }, function (err, url) {
console.log(url);
});
});
}
//# sourceMappingURL=setup.js.map

2
dist/api/utils/setup.js.map

@ -1 +1 @@
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../api/utils/setup.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../api/utils/setup.ts"],"names":[],"mappings":"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"}

4
dist/api/utils/socket.js

@ -5,9 +5,9 @@ let connections = new Map();
let connectionCounter = 0;
const connect = (server) => {
server = new WebSocket.Server({ server });
console.log('[socket] connected to server');
console.log('=> [socket] connected to server');
server.on('connection', socket => {
console.log('[socket] connection received');
console.log('=> [socket] connection received');
var id = connectionCounter++;
connections.set(id, socket);
});

2
dist/api/utils/socket.js.map

@ -1 +1 @@
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../api/utils/socket.ts"],"names":[],"mappings":";;AAAA,gCAA+B;AAE/B,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA;AAC3B,IAAI,iBAAiB,GAAG,CAAC,CAAA;AAEzB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,EAAE;IACzB,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAE3C,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC3C,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAA;AAaC,0BAAO;AAXT,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE;IACpB,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAQC,oBAAI;AANN,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE;IAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC,CAAA;AAKC,4BAAQ"}
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../api/utils/socket.ts"],"names":[],"mappings":";;AAAA,gCAA+B;AAE/B,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA;AAC3B,IAAI,iBAAiB,GAAG,CAAC,CAAA;AAEzB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,EAAE;IACzB,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IAE9C,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;QAC9C,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAA;AAaC,0BAAO;AAXT,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE;IACpB,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAQC,oBAAI;AANN,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE;IAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC,CAAA;AAKC,4BAAQ"}

1
dist/app.js

@ -51,6 +51,7 @@ function mainSetup() {
hub_1.checkInvitesHubInterval(5000);
}
yield setupApp();
setup_1.setupDone();
});
}
function setupApp() {

2
dist/app.js.map

@ -1 +1 @@
{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAAkC;AAClC,0CAAyC;AACzC,iCAAgC;AAChC,8CAA6C;AAC7C,iCAAgC;AAChC,yCAAmC;AACnC,+CAAuC;AACvC,mCAAkE;AAClE,6CAA+C;AAC/C,iDAAgD;AAChD,6CAA4C;AAE5C,IAAI,MAAM,GAAQ,IAAI,CAAA;AACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAClD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC;AAE5D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,YAAY,CAAA;AAEjD,IAAI,CAAC,GAAG,CAAC,CAAA;AAET,eAAe;AACf,YAAY,EAAE,CAAA;AAEd,SAAe,YAAY;;QAC1B,CAAC,EAAE,CAAA;QACH,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAA;QACnD,IAAI;YACH,MAAM,WAAW,CAAC,oBAAoB,EAAE,CAAA;YACxC,SAAS,EAAE,CAAA;SACX;QAAC,OAAM,CAAC,EAAE;YACV,UAAU,CAAC,GAAO,EAAE;gBACnB,MAAM,YAAY,EAAE,CAAA;YACrB,CAAC,CAAA,EAAC,IAAI,CAAC,CAAA;SACP;IACF,CAAC;CAAA;AAED,SAAe,SAAS;;QACvB,MAAM,qBAAa,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,WAAW,EAAE;YACvB,qBAAe,CAAC,IAAI,CAAC,CAAA;YACrB,6BAAuB,CAAC,IAAI,CAAC,CAAA;SAC7B;QACD,MAAM,QAAQ,EAAE,CAAA;IACjB,CAAC;CAAA;AAED,SAAe,QAAQ;;QACtB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE3C,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,gBAAM,CAAC,CAAA;QACf,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC1B,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,uBAAuB,CAAC,CAAC;YACtE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,wCAAwC,CAAC,CAAC;YACxF,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,wCAAwC,CAAC,CAAC;YACxF,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAAC;YAC/E,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpC,IAAI,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QACvB,IAAI,GAAG,IAAI,aAAa,EAAE;YACzB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACpB;QACD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAA;QAE7E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,+BAA+B;YAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;CAAA;AAED,SAAe,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;;QACvC,IACC,GAAG,CAAC,IAAI,IAAI,MAAM;YAClB,GAAG,CAAC,IAAI,IAAI,GAAG;YACf,GAAG,CAAC,IAAI,IAAI,OAAO;YACnB,GAAG,CAAC,IAAI,IAAI,kBAAkB;YAC9B,GAAG,CAAC,IAAI,IAAI,QAAQ;YACpB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,GAAG,CAAC,IAAI,IAAI,mBAAmB,EAC9B;YACD,IAAI,EAAE,CAAA;YACN,OAAM;SACN;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAG,MAAM,EAAC;YACzC,2CAA2C;YAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA;YAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAA;YACnC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;YACnC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC7B,IAAI,EAAE,CAAA;gBACN,OAAM;aACN;SACD;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAExE,IAAI,KAAK,IAAI,IAAI,EAAE;YAClB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,yBAAyB,EAAE,EAAC,cAAc,EAAG,YAAY,EAAC,CAAC,CAAC;YAC5E,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;SAClC;aAAM;YACN,MAAM,IAAI,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAC,CAAC,CAAA;YACtE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC5D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,yBAAyB,EAAE,EAAC,cAAc,EAAG,YAAY,EAAC,CAAC,CAAC;gBAC/E,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;aAC/B;iBAAM;gBACN,IAAI,EAAE,CAAC;aACP;SACD;IACF,CAAC;CAAA;AAED,kBAAe,MAAM,CAAA"}
{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"}

70
package-lock.json

@ -1662,8 +1662,7 @@
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"batch": {
"version": "0.6.1",
@ -1954,6 +1953,25 @@
"isarray": "^1.0.0"
}
},
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"requires": {
"buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0"
}
},
"buffer-alloc-unsafe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
},
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@ -3164,6 +3182,11 @@
"randombytes": "^2.0.0"
}
},
"dijkstrajs": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
"integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs="
},
"dns-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
@ -5560,8 +5583,7 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
"dev": true
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"ienoopen": {
"version": "1.1.0",
@ -7928,6 +7950,11 @@
"find-up": "^3.0.0"
}
},
"pngjs": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
},
"popper.js": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
@ -8308,6 +8335,41 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qrcode": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz",
"integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==",
"requires": {
"buffer": "^5.4.3",
"buffer-alloc": "^1.2.0",
"buffer-from": "^1.1.1",
"dijkstrajs": "^1.0.1",
"isarray": "^2.0.1",
"pngjs": "^3.3.0",
"yargs": "^13.2.4"
},
"dependencies": {
"buffer": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
}
},
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
}
}
},
"qrcode-terminal": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",

3
package.json

@ -4,11 +4,13 @@
"description": "",
"main": "index-unauth.js",
"scripts": {
"test": "echo 'no tests yet!' && exit 0",
"docker-dev": "nodemon ./app.js",
"build": "webpack --config webpack.config.js",
"frontend": "webpack-dev-server --entry ./frontend.jsx",
"start-ts": "ts-node ./app.ts",
"start": "ts-node ./app.ts",
"start-password": "USE_PASSWORD=true ts-node ./app.ts",
"start-hosting": "HOSTING_PROVIDER=true ts-node ./app.ts",
"prod": "cp config/app.json dist/config/app.json && cp config/config.json dist/config/config.json && env NODE_ENV=production node dist/app.js",
"tsc": "rm -rf dist/ && tsc && cp -r public dist/public",
@ -48,6 +50,7 @@
"pg": "^7.9.0",
"pg-hstore": "^2.3.2",
"public-ip": "^4.0.0",
"qrcode": "^1.4.4",
"react": "^16.3.1",
"react-dom": "^16.3.3",
"react-dropzone": "^10.2.0",

8275
yarn.lock

File diff suppressed because it is too large
Loading…
Cancel
Save