aboutsummaryrefslogtreecommitdiffstats
path: root/reg.yml
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-12-20 20:26:01 +0000
committerAdam Soltys <[email protected]>2022-12-20 20:26:02 +0000
commitaecec231b6d94b0707b840a7153bd05a057f49c7 (patch)
treea92ae610c5c2094d4e500bca52b812fb17600d84 /reg.yml
parent9ebd4105fa412d16bfe58facc9ebb53847b3316a (diff)
downloadcoinos-server-aecec231b6d94b0707b840a7153bd05a057f49c7.tar.gz
coinos-server-aecec231b6d94b0707b840a7153bd05a057f49c7.zip
nip5
Diffstat (limited to 'reg.yml')
-rw-r--r--reg.yml96
1 files changed, 96 insertions, 0 deletions
diff --git a/reg.yml b/reg.yml
new file mode 100644
index 00000000..e03d9352
--- /dev/null
+++ b/reg.yml
@@ -0,0 +1,96 @@
+version: '3.6'
+services:
+ app:
+ depends_on:
+ - cl
+ - maria
+ - bitcoin
+ - liquid
+ container_name: app
+ image: gcr.io/coinos-326717/github.com/coinos/coinos-server:prod
+ restart: always
+ environment:
+ NODE_ENV: production
+ NODE_OPTIONS: "--es-module-specifier-resolution=node --experimental-modules --loader ./loader.js --openssl-legacy-provider"
+ HOSTNAME: "${HOSTNAME}"
+ volumes:
+ - ./:/app
+ - ./logs:/logs
+ networks:
+ default:
+ ipv4_address: 172.42.0.22
+ maria:
+ container_name: maria
+ image: mariadb
+ restart: always
+ environment:
+ MARIADB_ROOT_PASSWORD: password
+ volumes:
+ - ./mysql:/var/lib/mysql
+ bitcoin:
+ image: ghcr.io/vulpemventures/bitcoin
+ container_name: bitcoin
+ volumes:
+ - ./config/bitcoin:/home/bitcoin/.bitcoin
+ restart: always
+ networks:
+ default:
+ ipv4_address: 172.42.0.23
+ liquid:
+ image: ghcr.io/vulpemventures/elements
+ container_name: liquid
+ volumes:
+ - ./config/liquid:/home/elements/.elements
+ restart: always
+ networks:
+ default:
+ ipv4_address: 172.42.0.24
+ cl:
+ depends_on:
+ - bitcoin
+ image: elementsproject/lightningd:v0.12.0
+ container_name: cl
+ restart: always
+ volumes:
+ - ./config/lightning:/root/.lightning
+ ports:
+ - "9736:9735"
+ networks:
+ default:
+ ipv4_address: 172.42.0.25
+ lnd:
+ depends_on:
+ - bitcoin
+ - tor
+ image: lightninglabs/lnd:v0.15.4-beta
+ container_name: lnd
+ volumes:
+ - ./config/lnd:/root/.lnd
+ - ./config/bitcoin:/root/.bitcoin
+ - ./config/tor:/etc/tor
+ ports:
+ - "9735:9735"
+ restart: always
+ networks:
+ default:
+ ipv4_address: 172.42.0.26
+ tor:
+ container_name: tor
+ image: dperson/torproxy
+ restart: always
+ volumes:
+ - ./config/tor:/etc/tor
+ - ./config/tordata:/var/lib/tor
+ networks:
+ default:
+ ipv4_address: 172.42.0.27
+ redis:
+ restart: always
+ container_name: redis
+ image: redis
+ volumes:
+ - ./config/redis:/data
+networks:
+ default:
+ name: net
+ external: true
al.String.Other */ .highlight .sr { color: #080; background-color: #FFF0FF } /* Literal.String.Regex */ .highlight .s1 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Single */ .highlight .ss { color: #A60; background-color: #FFF0F0 } /* Literal.String.Symbol */ .highlight .bp { color: #038 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #06B; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #369 } /* Name.Variable.Class */ .highlight .vg { color: #D70 } /* Name.Variable.Global */ .highlight .vi { color: #33B } /* Name.Variable.Instance */ .highlight .vm { color: #369 } /* Name.Variable.Magic */ .highlight .il { color: #00D; font-weight: bold } /* Literal.Number.Integer.Long */
import { get } from 'svelte/store';
import { invoices, invoice, request, newPayment, last, rate, txns, user } from '$lib/store';
import { success, sat } from '$lib/utils';
import { PUBLIC_SOCKET } from '$env/static/public';
import { invalidate } from '$app/navigation';

let socket, token;

export const auth = () => token && send('login', token) && send('heartbeat');

export const send = (type, data) => {
	socket?.readyState === 1 && socket.send(JSON.stringify({ type, data }));
	return true;
};

export const messages = (data) => ({
	id() {
		last.set(Date.now());
	},

	invoice() {
		invoice.set(data);
	},

	rate() {
		rate.set(data);
	},

	request() {
		request.set(data);
		invalidate('app:invoice');
	},

	async payment() {
		let { amount, invoice } = data;

		if (invoice) invalidate('app:invoice');
		if (get(user)?.account_id !== data.account_id) return;

		let payments = get(txns);
		let i = payments.findIndex((p) => p.id === data.id);
		if (~i) (payments[i] = data), txns.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();

  console.log("SOCK", PUBLIC_SOCKET)
	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();
}