aboutsummaryrefslogtreecommitdiffstats
path: root/package.json
blob: 11021e9f516086d9c8f8a88b25dfc7c3f5728d8d (plain) (blame)
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
{
  "name": "coinos",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "nodemon index.js | pino-pretty",
    "generate": "sequelize-automate -c config/index.js"
  },
  "dependencies": {
    "@grpc/proto-loader": "^0.5.3",
    "axios": "^0.19.0",
    "bcrypt": "^3.0.6",
    "bitcoin-core": "https://github.com/asoltys/bitcoin-core",
    "bitcoinjs-lib": "^5.1.7",
    "body-parser": "^1.19.0",
    "bolt11": "^1.2.5",
    "buffer-reverse": "^1.0.1",
    "clightning-client": "^0.1.2",
    "compression": "^1.7.4",
    "connect-redis": "3.4.1",
    "cookie-parser": "^1.4.4",
    "cors": "^2.8.5",
    "elementsjs-lib": "https://github.com/asoltys/elementsjs-lib",
    "express": "4.17.1",
    "express-session": "^1.16.2",
    "grpc": "^1.24.2",
    "http-proxy-middleware": "^0.20.0",
    "jsonwebtoken": "^8.5.1",
    "long": "^4.0.0",
    "mailgun-js": "^0.22.0",
    "mysql2": "^2.1.0",
    "otplib": "^12.0.1",
    "passport": "0.4.0",
    "passport-jwt": "^4.0.0",
    "passport-local": "1.0.0",
    "pino": "^5.17.0",
    "request": "~2.88.0",
    "sequelize": "^5.21.3",
    "uuid": "^3.3.2",
    "ws": "^7.1.2",
    "zeromq": "^5.1.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.2",
    "pino-pretty": "^3.6.1",
    "pm2": "^4.4.0",
    "prettier": "^1.18.2"
  },
  "resolutions": {
    "coinos": "portal:/home/adam/coinos-server"
  }
}
class="p">) => { socket?.readyState === 1 && socket.send(JSON.stringify({ type, data })); return true; }; export const messages = (data) => ({ id() { last.set(Date.now()); }, invoice() { invoice.set(data); }, event() { data.seen = Math.round(Date.now() / 1000); events[data.id] = data; q.push(data.id); $events.set(events); while (q.length > 10000) delete events[q.shift()]; localStorage.setItem( 'events', JSON.stringify(q.slice(-100).reduce((a, b) => (a = { ...a, [b]: events[b] }), {})) ); }, rate() { rate.set(data); }, request() { request.set(data); invalidate('app:invoice'); }, async payment() { let { amount, invoice } = data; invalidate('app:invoice'); let payments = get(payments); let i = payments.findIndex((p) => p.id === data.id); if (~i) (payments[i] = data), payments.set(payments); else newPayment.set(true); invalidate((url) => url.pathname === '/payments'); if (amount > 0) { success(`${data.confirmed ? 'Received' : 'Detected'} ${sat(amount)}!`); } else { success(`Sent ${sat(amount)}!`); } }, connected: auth }); const initialReconnectDelay = 1000; const maxReconnectDelay = 16000; let currentReconnectDelay = initialReconnectDelay; export function connect(t) { token = t; if (socket) return auth(); socket = new WebSocket(PUBLIC_SOCKET); socket.addEventListener('open', onWebsocketOpen); socket.addEventListener('close', onWebsocketClose); socket.addEventListener('message', onWebsocketMessage); } export function close() { if (socket) socket.close(); } function onWebsocketMessage(msg) { let { type, data } = JSON.parse(msg.data); messages(data)[type] && messages(data)[type](); } function onWebsocketOpen() { currentReconnectDelay = initialReconnectDelay; } function onWebsocketClose() { socket = null; setTimeout(() => { reconnectToWebsocket(); }, currentReconnectDelay + Math.floor(Math.random() * 3000)); } function reconnectToWebsocket() { if (currentReconnectDelay < maxReconnectDelay) { currentReconnectDelay *= 2; } connect(token); }