mirror of
https://github.com/Ride-The-Lightning/RTL.git
synced 2024-11-19 01:40:29 +01:00
Merge pull request #1165 from Ride-The-Lightning/Release-0.13.4
Release 0.13.4
This commit is contained in:
commit
b603181ba2
21
angular.json
21
angular.json
@ -22,7 +22,8 @@
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
"polyfills": [
|
||||
"zone.js"
|
||||
"zone.js",
|
||||
"src/polyfills.ts"
|
||||
],
|
||||
"tsConfig": "src/tsconfig.app.json",
|
||||
"inlineStyleLanguage": "scss",
|
||||
@ -34,6 +35,7 @@
|
||||
"node_modules/material-icons/iconfont/material-icons.css",
|
||||
"node_modules/roboto-fontface/css/roboto/roboto-fontface.css"
|
||||
],
|
||||
"scripts": [],
|
||||
"allowedCommonJsDependencies": [
|
||||
"buffer",
|
||||
"rfdc",
|
||||
@ -41,10 +43,8 @@
|
||||
"qrcode",
|
||||
"otplib",
|
||||
"pdfmake/build/pdfmake",
|
||||
"pdfmake/build/vfs_fonts",
|
||||
"clone-deep"
|
||||
],
|
||||
"scripts": []
|
||||
"pdfmake/build/vfs_fonts"
|
||||
]
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
@ -96,7 +96,8 @@
|
||||
"options": {
|
||||
"polyfills": [
|
||||
"zone.js",
|
||||
"zone.js/testing"
|
||||
"zone.js/testing",
|
||||
"src/polyfills.ts"
|
||||
],
|
||||
"tsConfig": "src/tsconfig.spec.json",
|
||||
"inlineStyleLanguage": "scss",
|
||||
@ -119,14 +120,8 @@
|
||||
"src/**/*.html"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cli": {
|
||||
"schematicCollections": [
|
||||
"@angular-eslint/schematics"
|
||||
],
|
||||
"analytics": false
|
||||
}
|
||||
}
|
||||
|
@ -110,10 +110,12 @@ export class ECLWebSocketClient {
|
||||
};
|
||||
this.heartbeat = (eclWsClt) => {
|
||||
this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'DEBUG', fileName: 'ECLWebSocket', msg: 'Websocket Server Heartbeat..' });
|
||||
if (!eclWsClt.webSocketClient)
|
||||
if (!eclWsClt.webSocketClient) {
|
||||
return;
|
||||
if (eclWsClt.webSocketClient.readyState !== 1)
|
||||
}
|
||||
if (eclWsClt.webSocketClient.readyState !== 1) {
|
||||
return;
|
||||
}
|
||||
eclWsClt.webSocketClient.ping();
|
||||
setTimeout(() => {
|
||||
this.heartbeat(eclWsClt);
|
||||
|
@ -72,7 +72,7 @@ export class ConfigService {
|
||||
}
|
||||
]
|
||||
};
|
||||
if (+process.env.RTL_SSO === 0 || configData.SSO.rtlSSO === 0) {
|
||||
if ((process?.env?.RTL_SSO && +process?.env?.RTL_SSO === 0) || configData.SSO.rtlSSO === 0) {
|
||||
configData['multiPass'] = 'password';
|
||||
}
|
||||
return configData;
|
||||
@ -89,7 +89,7 @@ export class ConfigService {
|
||||
};
|
||||
this.updateLogByLevel = () => {
|
||||
let updateLogFlag = false;
|
||||
this.common.rtl_conf_file_path = process.env.RTL_CONFIG_PATH ? process.env.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
this.common.rtl_conf_file_path = process?.env?.RTL_CONFIG_PATH ? process?.env?.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
try {
|
||||
const RTLConfFile = this.common.rtl_conf_file_path + sep + 'RTL-Config.json';
|
||||
const config = JSON.parse(fs.readFileSync(RTLConfFile, 'utf-8'));
|
||||
@ -109,9 +109,9 @@ export class ConfigService {
|
||||
}
|
||||
};
|
||||
this.validateNodeConfig = (config) => {
|
||||
if ((+process.env.RTL_SSO === 0) || (typeof process.env.RTL_SSO === 'undefined' && +config.SSO.rtlSSO === 0)) {
|
||||
if (process.env.APP_PASSWORD && process.env.APP_PASSWORD.trim() !== '') {
|
||||
this.common.rtl_pass = this.hash.update(process.env.APP_PASSWORD).digest('hex');
|
||||
if ((process?.env?.RTL_SSO && +process?.env?.RTL_SSO === 0) || (typeof process?.env?.RTL_SSO === 'undefined' && +config.SSO.rtlSSO === 0)) {
|
||||
if (process?.env?.APP_PASSWORD && process?.env?.APP_PASSWORD.trim() !== '') {
|
||||
this.common.rtl_pass = this.hash.update(process?.env?.APP_PASSWORD).digest('hex');
|
||||
this.common.flg_allow_password_update = false;
|
||||
}
|
||||
else if (config.multiPassHashed && config.multiPassHashed !== '') {
|
||||
@ -126,23 +126,23 @@ export class ConfigService {
|
||||
this.common.rtl_secret2fa = config.secret2fa;
|
||||
}
|
||||
else {
|
||||
if (process.env.APP_PASSWORD && process.env.APP_PASSWORD.trim() !== '') {
|
||||
if (process?.env?.APP_PASSWORD && process?.env?.APP_PASSWORD.trim() !== '') {
|
||||
this.errMsg = this.errMsg + '\nRTL Password cannot be set with SSO. Please set SSO as 0 or remove password.';
|
||||
}
|
||||
}
|
||||
this.common.port = (process.env.PORT) ? this.normalizePort(process.env.PORT) : (config.port) ? this.normalizePort(config.port) : 3000;
|
||||
this.common.host = (process.env.HOST) ? process.env.HOST : (config.host) ? config.host : null;
|
||||
this.common.port = (process?.env?.PORT) ? this.normalizePort(process?.env?.PORT) : (config.port) ? this.normalizePort(config.port) : 3000;
|
||||
this.common.host = (process?.env?.HOST) ? process?.env?.HOST : (config.host) ? config.host : null;
|
||||
if (config.nodes && config.nodes.length > 0) {
|
||||
config.nodes.forEach((node, idx) => {
|
||||
this.common.nodes[idx] = {};
|
||||
this.common.nodes[idx].index = node.index;
|
||||
this.common.nodes[idx].ln_node = node.lnNode;
|
||||
this.common.nodes[idx].ln_implementation = (process.env.LN_IMPLEMENTATION) ? process.env.LN_IMPLEMENTATION : node.lnImplementation ? node.lnImplementation : 'LND';
|
||||
this.common.nodes[idx].ln_implementation = (process?.env?.LN_IMPLEMENTATION) ? process?.env?.LN_IMPLEMENTATION : node.lnImplementation ? node.lnImplementation : 'LND';
|
||||
if (this.common.nodes[idx].ln_implementation === 'CLT') {
|
||||
this.common.nodes[idx].ln_implementation = 'CLN';
|
||||
}
|
||||
if (this.common.nodes[idx].ln_implementation !== 'ECL' && process.env.MACAROON_PATH && process.env.MACAROON_PATH.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = process.env.MACAROON_PATH;
|
||||
if (this.common.nodes[idx].ln_implementation !== 'ECL' && process?.env?.MACAROON_PATH && process?.env?.MACAROON_PATH.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = process?.env?.MACAROON_PATH;
|
||||
}
|
||||
else if (this.common.nodes[idx].ln_implementation !== 'ECL' && node.Authentication && node.Authentication.macaroonPath && node.Authentication.macaroonPath.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = node.Authentication.macaroonPath;
|
||||
@ -151,8 +151,8 @@ export class ConfigService {
|
||||
this.errMsg = 'Please set macaroon path for node index ' + node.index + ' in RTL-Config.json!';
|
||||
}
|
||||
if (this.common.nodes[idx].ln_implementation === 'ECL') {
|
||||
if (process.env.LN_API_PASSWORD) {
|
||||
this.common.nodes[idx].ln_api_password = process.env.LN_API_PASSWORD;
|
||||
if (process?.env?.LN_API_PASSWORD) {
|
||||
this.common.nodes[idx].ln_api_password = process?.env?.LN_API_PASSWORD;
|
||||
}
|
||||
else if (node.Authentication && node.Authentication.lnApiPassword) {
|
||||
this.common.nodes[idx].ln_api_password = node.Authentication.lnApiPassword;
|
||||
@ -161,8 +161,8 @@ export class ConfigService {
|
||||
this.common.nodes[idx].ln_api_password = '';
|
||||
}
|
||||
}
|
||||
if (process.env.CONFIG_PATH) {
|
||||
this.common.nodes[idx].config_path = process.env.CONFIG_PATH;
|
||||
if (process?.env?.CONFIG_PATH) {
|
||||
this.common.nodes[idx].config_path = process?.env?.CONFIG_PATH;
|
||||
}
|
||||
else if (node.Authentication && node.Authentication.configPath) {
|
||||
this.common.nodes[idx].config_path = node.Authentication.configPath;
|
||||
@ -172,10 +172,10 @@ export class ConfigService {
|
||||
}
|
||||
if (this.common.nodes[idx].ln_implementation === 'ECL' && this.common.nodes[idx].ln_api_password === '' && this.common.nodes[idx].config_path !== '') {
|
||||
try {
|
||||
const exists = fs.existsSync(this.common.nodes[idx].config_path);
|
||||
const exists = fs.existsSync(this.common.nodes[idx].config_path || '');
|
||||
if (exists) {
|
||||
try {
|
||||
const configFile = fs.readFileSync(this.common.nodes[idx].config_path, 'utf-8');
|
||||
const configFile = fs.readFileSync((this.common.nodes[idx].config_path || ''), 'utf-8');
|
||||
const iniParsed = ini.parse(configFile);
|
||||
this.common.nodes[idx].ln_api_password = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password;
|
||||
}
|
||||
@ -194,11 +194,11 @@ export class ConfigService {
|
||||
if (this.common.nodes[idx].ln_implementation === 'ECL' && this.common.nodes[idx].ln_api_password === '') {
|
||||
this.errMsg = this.errMsg + '\nPlease set config path Or api password for node index ' + node.index + ' in RTL-Config.json! It is mandatory for Eclair authentication!';
|
||||
}
|
||||
if (process.env.LN_SERVER_URL && process.env.LN_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process.env.LN_SERVER_URL.endsWith('/v1') ? process.env.LN_SERVER_URL.slice(0, -3) : process.env.LN_SERVER_URL;
|
||||
if (process?.env?.LN_SERVER_URL && process?.env?.LN_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL;
|
||||
}
|
||||
else if (process.env.LND_SERVER_URL && process.env.LND_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process.env.LND_SERVER_URL.endsWith('/v1') ? process.env.LND_SERVER_URL.slice(0, -3) : process.env.LND_SERVER_URL;
|
||||
else if (process?.env?.LND_SERVER_URL && process?.env?.LND_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL;
|
||||
}
|
||||
else if (node.Settings.lnServerUrl && node.Settings.lnServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl;
|
||||
@ -218,9 +218,9 @@ export class ConfigService {
|
||||
if (this.common.nodes[idx].fiat_conversion) {
|
||||
this.common.nodes[idx].currency_unit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD';
|
||||
}
|
||||
if (process.env.SWAP_SERVER_URL && process.env.SWAP_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = process.env.SWAP_SERVER_URL.endsWith('/v1') ? process.env.SWAP_SERVER_URL.slice(0, -3) : process.env.SWAP_SERVER_URL;
|
||||
this.common.nodes[idx].swap_macaroon_path = process.env.SWAP_MACAROON_PATH;
|
||||
if (process?.env?.SWAP_SERVER_URL && process?.env?.SWAP_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL;
|
||||
this.common.nodes[idx].swap_macaroon_path = process?.env?.SWAP_MACAROON_PATH;
|
||||
}
|
||||
else if (node.Settings.swapServerUrl && node.Settings.swapServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl;
|
||||
@ -230,9 +230,9 @@ export class ConfigService {
|
||||
this.common.nodes[idx].swap_server_url = '';
|
||||
this.common.nodes[idx].swap_macaroon_path = '';
|
||||
}
|
||||
if (process.env.BOLTZ_SERVER_URL && process.env.BOLTZ_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = process.env.BOLTZ_SERVER_URL.endsWith('/v1') ? process.env.BOLTZ_SERVER_URL.slice(0, -3) : process.env.BOLTZ_SERVER_URL;
|
||||
this.common.nodes[idx].boltz_macaroon_path = process.env.BOLTZ_MACAROON_PATH;
|
||||
if (process?.env?.BOLTZ_SERVER_URL && process?.env?.BOLTZ_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL;
|
||||
this.common.nodes[idx].boltz_macaroon_path = process?.env?.BOLTZ_MACAROON_PATH;
|
||||
}
|
||||
else if (node.Settings.boltzServerUrl && node.Settings.boltzServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl;
|
||||
@ -242,10 +242,10 @@ export class ConfigService {
|
||||
this.common.nodes[idx].boltz_server_url = '';
|
||||
this.common.nodes[idx].boltz_macaroon_path = '';
|
||||
}
|
||||
this.common.nodes[idx].enable_offers = process.env.ENABLE_OFFERS ? process.env.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false;
|
||||
this.common.nodes[idx].enable_peerswap = process.env.ENABLE_PEERSWAP ? process.env.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false;
|
||||
this.common.nodes[idx].bitcoind_config_path = process.env.BITCOIND_CONFIG_PATH ? process.env.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : '';
|
||||
this.common.nodes[idx].channel_backup_path = process.env.CHANNEL_BACKUP_PATH ? process.env.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.rtl_conf_file_path + sep + 'channels-backup' + sep + 'node-' + node.index;
|
||||
this.common.nodes[idx].enable_offers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false;
|
||||
this.common.nodes[idx].enable_peerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false;
|
||||
this.common.nodes[idx].bitcoind_config_path = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : '';
|
||||
this.common.nodes[idx].channel_backup_path = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.rtl_conf_file_path + sep + 'channels-backup' + sep + 'node-' + node.index;
|
||||
try {
|
||||
this.common.createDirectory(this.common.nodes[idx].channel_backup_path);
|
||||
const exists = fs.existsSync(this.common.nodes[idx].channel_backup_path + sep + 'channel-all.bak');
|
||||
@ -270,14 +270,14 @@ export class ConfigService {
|
||||
this.common.nodes[idx].log_file = this.common.rtl_conf_file_path + '/logs/RTL-Node-' + node.index + '.log';
|
||||
this.logger.log({ selectedNode: this.common.initSelectedNode, level: 'INFO', fileName: 'Config', msg: 'Node Config: ' + JSON.stringify(this.common.nodes[idx]) });
|
||||
const log_file = this.common.nodes[idx].log_file;
|
||||
if (fs.existsSync(log_file)) {
|
||||
fs.writeFile(log_file, '', () => { });
|
||||
if (fs.existsSync(log_file || '')) {
|
||||
fs.writeFile((log_file || ''), '', () => { });
|
||||
}
|
||||
else {
|
||||
try {
|
||||
const directoryName = dirname(log_file);
|
||||
const directoryName = dirname(log_file || '');
|
||||
this.common.createDirectory(directoryName);
|
||||
const createStream = fs.createWriteStream(log_file);
|
||||
const createStream = fs.createWriteStream(log_file || '');
|
||||
createStream.end();
|
||||
}
|
||||
catch (err) {
|
||||
@ -292,14 +292,14 @@ export class ConfigService {
|
||||
}
|
||||
};
|
||||
this.setSSOParams = (config) => {
|
||||
if (process.env.RTL_SSO) {
|
||||
this.common.rtl_sso = +process.env.RTL_SSO;
|
||||
if (process?.env?.RTL_SSO) {
|
||||
this.common.rtl_sso = +process?.env?.RTL_SSO;
|
||||
}
|
||||
else if (config.SSO && config.SSO.rtlSSO) {
|
||||
this.common.rtl_sso = config.SSO.rtlSSO;
|
||||
}
|
||||
if (process.env.RTL_COOKIE_PATH) {
|
||||
this.common.rtl_cookie_path = process.env.RTL_COOKIE_PATH;
|
||||
if (process?.env?.RTL_COOKIE_PATH) {
|
||||
this.common.rtl_cookie_path = process?.env?.RTL_COOKIE_PATH;
|
||||
}
|
||||
else if (config.SSO && config.SSO.rtlCookiePath) {
|
||||
this.common.rtl_cookie_path = config.SSO.rtlCookiePath;
|
||||
@ -307,8 +307,8 @@ export class ConfigService {
|
||||
else {
|
||||
this.common.rtl_cookie_path = '';
|
||||
}
|
||||
if (process.env.LOGOUT_REDIRECT_LINK) {
|
||||
this.common.logout_redirect_link = process.env.LOGOUT_REDIRECT_LINK;
|
||||
if (process?.env?.LOGOUT_REDIRECT_LINK) {
|
||||
this.common.logout_redirect_link = process?.env?.LOGOUT_REDIRECT_LINK;
|
||||
}
|
||||
else if (config.SSO && config.SSO.logoutRedirectLink) {
|
||||
this.common.logout_redirect_link = config.SSO.logoutRedirectLink;
|
||||
@ -324,15 +324,15 @@ export class ConfigService {
|
||||
};
|
||||
this.setSelectedNode = (config) => {
|
||||
if (config.defaultNodeIndex) {
|
||||
this.common.initSelectedNode = this.common.findNode(config.defaultNodeIndex);
|
||||
this.common.initSelectedNode = this.common.findNode(config.defaultNodeIndex) || {};
|
||||
}
|
||||
else {
|
||||
this.common.initSelectedNode = this.common.findNode(this.common.nodes[0].index);
|
||||
this.common.initSelectedNode = this.common.findNode(this.common.nodes[0].index) || {};
|
||||
}
|
||||
};
|
||||
this.setServerConfiguration = () => {
|
||||
try {
|
||||
this.common.rtl_conf_file_path = (process.env.RTL_CONFIG_PATH) ? process.env.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
this.common.rtl_conf_file_path = (process?.env?.RTL_CONFIG_PATH) ? process?.env?.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
const confFileFullPath = this.common.rtl_conf_file_path + sep + 'RTL-Config.json';
|
||||
if (!fs.existsSync(confFileFullPath)) {
|
||||
fs.writeFileSync(confFileFullPath, JSON.stringify(this.setDefaultConfig()));
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,19 +1,18 @@
|
||||
<!DOCTYPE html><html lang="en"><head>
|
||||
<meta charset="utf-8">
|
||||
<title>RTL</title>
|
||||
<base href="/rtl/">
|
||||
<meta i18n-content="" name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link i18n-sizes="" i18n-rel="" rel="apple-touch-icon" sizes="180x180" href="assets/images/favicon-light/apple-touch-icon.png">
|
||||
<link i18n-sizes="" i18n-rel="" rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-light/favicon-32x32.png">
|
||||
<link i18n-sizes="" i18n-rel="" rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-light/favicon-16x16.png">
|
||||
<link i18n-rel="" rel="manifest" href="assets/images/favicon-light/site.webmanifest">
|
||||
<link i18n-rel="" rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta i18n-content="" name="msapplication-TileColor" content="#da532c">
|
||||
<meta i18n-content="" name="theme-color" content="#ffffff">
|
||||
<style>html{width:100%;height:99%;line-height:1.5;overflow-x:hidden;font-family:Roboto,sans-serif!important;font-size:100%}@media only screen and (max-width: 56.25em){html{font-size:90%}}@media only screen and (max-width: 37.5em){html{font-size:80%}}body{box-sizing:border-box;height:100%;margin:0;overflow:hidden}*{margin:0;padding:0}@font-face{font-family:Roboto;src:url(Roboto-Thin.f7a95c9c5999532c.woff2) format("woff2"),url(Roboto-Thin.c13c157cb81e8ebb.woff) format("woff");font-weight:100;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-ThinItalic.b0e084abf689f393.woff2) format("woff2"),url(Roboto-ThinItalic.1111028df6cea564.woff) format("woff");font-weight:100;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Light.0e01b6cd13b3857f.woff2) format("woff2"),url(Roboto-Light.603ca9a537b88428.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-LightItalic.232ef4b20215f720.woff2) format("woff2"),url(Roboto-LightItalic.1b5e142f787151c8.woff) format("woff");font-weight:300;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Regular.475ba9e4e2d63456.woff2) format("woff2"),url(Roboto-Regular.bcefbfee882bc1cb.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-RegularItalic.e3a9ebdaac06bbc4.woff2) format("woff2"),url(Roboto-RegularItalic.0668fae6af0cf8c2.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Medium.457532032ceb0168.woff2) format("woff2"),url(Roboto-Medium.6e1ae5f0b324a0aa.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-MediumItalic.872f7060602d55d2.woff2) format("woff2"),url(Roboto-MediumItalic.e06fb533801cbb08.woff) format("woff");font-weight:500;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Bold.447291a88c067396.woff2) format("woff2"),url(Roboto-Bold.fc482e6133cf5e26.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BoldItalic.1b15168ef6fa4e16.woff2) format("woff2"),url(Roboto-BoldItalic.e26ba339b06f09f7.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Black.2eaa390d458c877d.woff2) format("woff2"),url(Roboto-Black.b25f67ad8583da68.woff) format("woff");font-weight:900;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BlackItalic.7dc03ee444552bc5.woff2) format("woff2"),url(Roboto-BlackItalic.c8dc642467cb3099.woff) format("woff");font-weight:900;font-style:italic}</style><link rel="stylesheet" href="styles.3f91aa9da8de48ca.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.3f91aa9da8de48ca.css"></noscript></head>
|
||||
<body>
|
||||
<rtl-app></rtl-app>
|
||||
<script src="runtime.5ce8adc19f44fff4.js" type="module"></script><script src="polyfills.08e0233279c8a187.js" type="module"></script><script src="main.5a72aaa7ca7fb8a9.js" type="module"></script>
|
||||
<script>window.global = window;</script>
|
||||
<meta charset="utf-8">
|
||||
<title>RTL</title>
|
||||
<base href="/rtl/">
|
||||
<meta i18n-content="" name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link i18n-sizes="" i18n-rel="" rel="apple-touch-icon" sizes="180x180" href="assets/images/favicon-light/apple-touch-icon.png">
|
||||
<link i18n-sizes="" i18n-rel="" rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-light/favicon-32x32.png">
|
||||
<link i18n-sizes="" i18n-rel="" rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-light/favicon-16x16.png">
|
||||
<link i18n-rel="" rel="manifest" href="assets/images/favicon-light/site.webmanifest">
|
||||
<link i18n-rel="" rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta i18n-content="" name="msapplication-TileColor" content="#da532c">
|
||||
<meta i18n-content="" name="theme-color" content="#ffffff">
|
||||
<style>html{width:100%;height:99%;line-height:1.5;overflow-x:hidden;font-family:Roboto,sans-serif!important;font-size:100%}@media only screen and (max-width: 56.25em){html{font-size:90%}}@media only screen and (max-width: 37.5em){html{font-size:80%}}body{box-sizing:border-box;height:100%;margin:0;overflow:hidden}*{margin:0;padding:0}@font-face{font-family:Roboto;src:url(Roboto-Thin.f7a95c9c5999532c.woff2) format("woff2"),url(Roboto-Thin.c13c157cb81e8ebb.woff) format("woff");font-weight:100;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-ThinItalic.b0e084abf689f393.woff2) format("woff2"),url(Roboto-ThinItalic.1111028df6cea564.woff) format("woff");font-weight:100;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Light.0e01b6cd13b3857f.woff2) format("woff2"),url(Roboto-Light.603ca9a537b88428.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-LightItalic.232ef4b20215f720.woff2) format("woff2"),url(Roboto-LightItalic.1b5e142f787151c8.woff) format("woff");font-weight:300;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Regular.475ba9e4e2d63456.woff2) format("woff2"),url(Roboto-Regular.bcefbfee882bc1cb.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-RegularItalic.e3a9ebdaac06bbc4.woff2) format("woff2"),url(Roboto-RegularItalic.0668fae6af0cf8c2.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Medium.457532032ceb0168.woff2) format("woff2"),url(Roboto-Medium.6e1ae5f0b324a0aa.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-MediumItalic.872f7060602d55d2.woff2) format("woff2"),url(Roboto-MediumItalic.e06fb533801cbb08.woff) format("woff");font-weight:500;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Bold.447291a88c067396.woff2) format("woff2"),url(Roboto-Bold.fc482e6133cf5e26.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BoldItalic.1b15168ef6fa4e16.woff2) format("woff2"),url(Roboto-BoldItalic.e26ba339b06f09f7.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Black.2eaa390d458c877d.woff2) format("woff2"),url(Roboto-Black.b25f67ad8583da68.woff) format("woff");font-weight:900;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BlackItalic.7dc03ee444552bc5.woff2) format("woff2"),url(Roboto-BlackItalic.c8dc642467cb3099.woff) format("woff");font-weight:900;font-style:italic}</style><link rel="stylesheet" href="styles.3f91aa9da8de48ca.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.3f91aa9da8de48ca.css"></noscript></head>
|
||||
<body>
|
||||
<rtl-app></rtl-app>
|
||||
<script src="runtime.f39f73f89e0ce8a0.js" type="module"></script><script src="polyfills.3b53c3445d79dc67.js" type="module"></script><script src="main.cb1bb8801aa97544.js" type="module"></script>
|
||||
|
||||
</body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend/polyfills.3b53c3445d79dc67.js
Normal file
1
frontend/polyfills.3b53c3445d79dc67.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
(()=>{"use strict";var e,v={},m={};function r(e){var f=m[e];if(void 0!==f)return f.exports;var t=m[e]={id:e,loaded:!1,exports:{}};return v[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=v,e=[],r.O=(f,t,i,o)=>{if(!t){var a=1/0;for(n=0;n<e.length;n++){for(var[t,i,o]=e[n],s=!0,d=0;d<t.length;d++)(!1&o||a>=o)&&Object.keys(r.O).every(b=>r.O[b](t[d]))?t.splice(d--,1):(s=!1,o<a&&(a=o));if(s){e.splice(n--,1);var u=i();void 0!==u&&(f=u)}}return f}o=o||0;for(var n=e.length;n>0&&e[n-1][2]>o;n--)e[n]=e[n-1];e[n]=[t,i,o]},r.d=(e,f)=>{for(var t in f)r.o(f,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:f[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((f,t)=>(r.f[t](e,f),f),[])),r.u=e=>e+"."+{258:"f20f2eadd74bc704",267:"6c439858ec5d06c8",564:"dd8d5bd71c0f2cf9",636:"cb7b120de491d4ef"}[e]+".js",r.miniCssF=e=>{},r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),(()=>{var e={},f="RTLApp:";r.l=(t,i,o,n)=>{if(e[t])e[t].push(i);else{var a,s;if(void 0!==o)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==t||l.getAttribute("data-webpack")==f+o){a=l;break}}a||(s=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",f+o),a.src=r.tu(t)),e[t]=[i];var c=(g,b)=>{a.onerror=a.onload=null,clearTimeout(p);var h=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),h&&h.forEach(y=>y(b)),g)return g(b)},p=setTimeout(c.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=c.bind(null,a.onerror),a.onload=c.bind(null,a.onload),s&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:f=>f},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(i,o)=>{var n=r.o(e,i)?e[i]:void 0;if(0!==n)if(n)o.push(n[2]);else if(666!=i){var a=new Promise((l,c)=>n=e[i]=[l,c]);o.push(n[2]=a);var s=r.p+r.u(i),d=new Error;r.l(s,l=>{if(r.o(e,i)&&(0!==(n=e[i])&&(e[i]=void 0),n)){var c=l&&("load"===l.type?"missing":l.type),p=l&&l.target&&l.target.src;d.message="Loading chunk "+i+" failed.\n("+c+": "+p+")",d.name="ChunkLoadError",d.type=c,d.request=p,n[1](d)}},"chunk-"+i,i)}else e[i]=0},r.O.j=i=>0===e[i];var f=(i,o)=>{var d,u,[n,a,s]=o,l=0;if(n.some(p=>0!==e[p])){for(d in a)r.o(a,d)&&(r.m[d]=a[d]);if(s)var c=s(r)}for(i&&i(o);l<n.length;l++)r.o(e,u=n[l])&&e[u]&&e[u][0](),e[u]=0;return r.O(c)},t=self.webpackChunkRTLApp=self.webpackChunkRTLApp||[];t.forEach(f.bind(null,0)),t.push=f.bind(null,t.push.bind(t))})()})();
|
||||
(()=>{"use strict";var e,v={},m={};function r(e){var f=m[e];if(void 0!==f)return f.exports;var t=m[e]={id:e,loaded:!1,exports:{}};return v[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=v,e=[],r.O=(f,t,i,o)=>{if(!t){var a=1/0;for(n=0;n<e.length;n++){for(var[t,i,o]=e[n],s=!0,l=0;l<t.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every(b=>r.O[b](t[l]))?t.splice(l--,1):(s=!1,o<a&&(a=o));if(s){e.splice(n--,1);var d=i();void 0!==d&&(f=d)}}return f}o=o||0;for(var n=e.length;n>0&&e[n-1][2]>o;n--)e[n]=e[n-1];e[n]=[t,i,o]},r.d=(e,f)=>{for(var t in f)r.o(f,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:f[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((f,t)=>(r.f[t](e,f),f),[])),r.u=e=>e+"."+{258:"f20f2eadd74bc704",267:"6c439858ec5d06c8",564:"644b1395a42d3aad",636:"cb7b120de491d4ef"}[e]+".js",r.miniCssF=e=>{},r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),(()=>{var e={},f="RTLApp:";r.l=(t,i,o,n)=>{if(e[t])e[t].push(i);else{var a,s;if(void 0!==o)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var u=l[d];if(u.getAttribute("src")==t||u.getAttribute("data-webpack")==f+o){a=u;break}}a||(s=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",f+o),a.src=r.tu(t)),e[t]=[i];var c=(g,b)=>{a.onerror=a.onload=null,clearTimeout(p);var h=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),h&&h.forEach(y=>y(b)),g)return g(b)},p=setTimeout(c.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=c.bind(null,a.onerror),a.onload=c.bind(null,a.onload),s&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:f=>f},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(i,o)=>{var n=r.o(e,i)?e[i]:void 0;if(0!==n)if(n)o.push(n[2]);else if(666!=i){var a=new Promise((u,c)=>n=e[i]=[u,c]);o.push(n[2]=a);var s=r.p+r.u(i),l=new Error;r.l(s,u=>{if(r.o(e,i)&&(0!==(n=e[i])&&(e[i]=void 0),n)){var c=u&&("load"===u.type?"missing":u.type),p=u&&u.target&&u.target.src;l.message="Loading chunk "+i+" failed.\n("+c+": "+p+")",l.name="ChunkLoadError",l.type=c,l.request=p,n[1](l)}},"chunk-"+i,i)}else e[i]=0},r.O.j=i=>0===e[i];var f=(i,o)=>{var l,d,[n,a,s]=o,u=0;if(n.some(p=>0!==e[p])){for(l in a)r.o(a,l)&&(r.m[l]=a[l]);if(s)var c=s(r)}for(i&&i(o);u<n.length;u++)r.o(e,d=n[u])&&e[d]&&e[d][0](),e[d]=0;return r.O(c)},t=self.webpackChunkRTLApp=self.webpackChunkRTLApp||[];t.forEach(f.bind(null,0)),t.push=f.bind(null,t.push.bind(t))})()})();
|
1398
package-lock.json
generated
1398
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
22
package.json
22
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rtl",
|
||||
"version": "0.13.3-beta",
|
||||
"version": "0.13.4-beta",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
@ -15,20 +15,12 @@
|
||||
"server": "set NODE_ENV=development&&nodemon --watch backend --watch server ./rtl.js",
|
||||
"serverUbuntu": "NODE_ENV=development nodemon --watch backend --watch server ./rtl.js",
|
||||
"testdev": "ng test --watch=true --code-coverage",
|
||||
"test": "ng test --watch=false",
|
||||
"test": "ng test --watch=false --browsers=ChromeHeadless",
|
||||
"lint": "ng lint",
|
||||
"lintServer": "eslint ./server/**/* --ext .ts"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^15.0.0",
|
||||
"@angular/common": "^15.0.0",
|
||||
"@angular/compiler": "^15.0.0",
|
||||
"@angular/core": "^15.0.0",
|
||||
"@angular/forms": "^15.0.0",
|
||||
"@angular/platform-browser": "^15.0.0",
|
||||
"@angular/platform-browser-dynamic": "^15.0.0",
|
||||
"@angular/router": "^15.0.0",
|
||||
"@ngrx/effects": "^15.0.0",
|
||||
"@ngrx/store": "^15.0.0",
|
||||
"@swimlane/ngx-charts": "^20.1.2",
|
||||
@ -41,7 +33,7 @@
|
||||
"express-session": "^1.17.3",
|
||||
"hocon-parser": "^1.0.1",
|
||||
"ini": "^3.0.1",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"ng-qrcode": "^8.0.1",
|
||||
"ngx-perfect-scrollbar-next": "^10.1.1",
|
||||
"otplib": "^12.0.1",
|
||||
@ -62,11 +54,19 @@
|
||||
"@angular-eslint/eslint-plugin-template": "^15.1.0",
|
||||
"@angular-eslint/schematics": "^15.1.0",
|
||||
"@angular-eslint/template-parser": "^15.1.0",
|
||||
"@angular/animations": "^15.0.0",
|
||||
"@angular/cdk": "^15.0.1",
|
||||
"@angular/cli": "~15.0.1",
|
||||
"@angular/common": "^15.0.0",
|
||||
"@angular/compiler": "^15.0.0",
|
||||
"@angular/compiler-cli": "^15.0.0",
|
||||
"@angular/core": "^15.0.0",
|
||||
"@angular/flex-layout": "^14.0.0-beta.41",
|
||||
"@angular/forms": "^15.0.0",
|
||||
"@angular/material": "^15.0.1",
|
||||
"@angular/platform-browser": "^15.0.0",
|
||||
"@angular/platform-browser-dynamic": "^15.0.0",
|
||||
"@angular/router": "^15.0.0",
|
||||
"@fortawesome/angular-fontawesome": "^0.12.0",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.2.1",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.2.1",
|
||||
|
@ -52,7 +52,7 @@ export class CLWebSocketClient {
|
||||
this.connectWithClient(clientExists);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (err: any) {
|
||||
throw new Error(err);
|
||||
}
|
||||
};
|
||||
|
@ -51,7 +51,7 @@ export class ECLWebSocketClient {
|
||||
this.connectWithClient(clientExists);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (err: any) {
|
||||
throw new Error(err);
|
||||
}
|
||||
};
|
||||
@ -97,7 +97,6 @@ export class ECLWebSocketClient {
|
||||
eclWsClt.reConnect = false;
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
public disconnect = (selectedNode: CommonSelectedNode) => {
|
||||
@ -121,13 +120,14 @@ export class ECLWebSocketClient {
|
||||
|
||||
public heartbeat = (eclWsClt) => {
|
||||
this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'DEBUG', fileName: 'ECLWebSocket', msg: 'Websocket Server Heartbeat..' });
|
||||
if (!eclWsClt.webSocketClient) return;
|
||||
if (eclWsClt.webSocketClient.readyState !== 1) return;
|
||||
if (!eclWsClt.webSocketClient) { return; }
|
||||
if (eclWsClt.webSocketClient.readyState !== 1) { return; }
|
||||
eclWsClt.webSocketClient.ping();
|
||||
setTimeout(() => {
|
||||
this.heartbeat(eclWsClt);
|
||||
}, 59 * 1000);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
export const ECLWSClient = new ECLWebSocketClient();
|
||||
|
@ -196,7 +196,7 @@ export const closeChannel = (req, res, next) => {
|
||||
request.delete(options);
|
||||
logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Channel Close Requested' });
|
||||
res.status(202).json({ message: 'Close channel request has been submitted.' });
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
logger.log({ selectedNode: req.session.selectedNode, level: 'ERROR', fileName: 'Channels', msg: 'Close Channel Error', error: error.message });
|
||||
return res.status(500).json({ message: 'Close Channel Error', error: error.message });
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ export class LNDWebSocketClient {
|
||||
const newWebSocketClient = { selectedNode: selectedNode };
|
||||
this.webSocketClients.push(newWebSocketClient);
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (err: any) {
|
||||
throw new Error(err);
|
||||
}
|
||||
};
|
||||
|
@ -9,7 +9,7 @@ const databaseService: DatabaseService = Database;
|
||||
|
||||
export const getPageSettings = (req, res, next) => {
|
||||
logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Getting Page Settings..' });
|
||||
databaseService.find(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS).then((settings: PageSettings) => {
|
||||
databaseService.find(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS).then((settings: any) => {
|
||||
logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Page Settings Received', data: settings });
|
||||
res.status(200).json(settings);
|
||||
}).catch((errRes) => {
|
||||
|
@ -1,12 +1,11 @@
|
||||
export enum ECLWSEventsEnum {
|
||||
PAY_RECEIVED = 'payment-received',
|
||||
PAY_RELAYED = 'payment-relayed',
|
||||
PAY_SENT = 'payment-sent',
|
||||
PAY_SETTLING_ONCHAIN = 'payment-settling-onchain',
|
||||
PAY_FAILED = 'payment-failed',
|
||||
CHANNEL_OPENED = 'channel-opened',
|
||||
CHANNEL_STATE_CHANGED = 'channel-state-changed',
|
||||
CHANNEL_CLOSED = 'channel-closed',
|
||||
ONION_MESSAGE_RECEIVED = 'onion-message-received'
|
||||
}
|
||||
|
||||
PAY_RECEIVED = 'payment-received',
|
||||
PAY_RELAYED = 'payment-relayed',
|
||||
PAY_SENT = 'payment-sent',
|
||||
PAY_SETTLING_ONCHAIN = 'payment-settling-onchain',
|
||||
PAY_FAILED = 'payment-failed',
|
||||
CHANNEL_OPENED = 'channel-opened',
|
||||
CHANNEL_STATE_CHANGED = 'channel-state-changed',
|
||||
CHANNEL_CLOSED = 'channel-closed',
|
||||
ONION_MESSAGE_RECEIVED = 'onion-message-received'
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ export class ConfigService {
|
||||
}
|
||||
]
|
||||
};
|
||||
if (+process.env.RTL_SSO === 0 || configData.SSO.rtlSSO === 0) {
|
||||
if ((process?.env?.RTL_SSO && +process?.env?.RTL_SSO === 0) || configData.SSO.rtlSSO === 0) {
|
||||
configData['multiPass'] = 'password';
|
||||
}
|
||||
return configData;
|
||||
@ -95,7 +95,7 @@ export class ConfigService {
|
||||
|
||||
private updateLogByLevel = () => {
|
||||
let updateLogFlag = false;
|
||||
this.common.rtl_conf_file_path = process.env.RTL_CONFIG_PATH ? process.env.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
this.common.rtl_conf_file_path = process?.env?.RTL_CONFIG_PATH ? process?.env?.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
try {
|
||||
const RTLConfFile = this.common.rtl_conf_file_path + sep + 'RTL-Config.json';
|
||||
const config = JSON.parse(fs.readFileSync(RTLConfFile, 'utf-8'));
|
||||
@ -115,9 +115,9 @@ export class ConfigService {
|
||||
};
|
||||
|
||||
private validateNodeConfig = (config) => {
|
||||
if ((+process.env.RTL_SSO === 0) || (typeof process.env.RTL_SSO === 'undefined' && +config.SSO.rtlSSO === 0)) {
|
||||
if (process.env.APP_PASSWORD && process.env.APP_PASSWORD.trim() !== '') {
|
||||
this.common.rtl_pass = this.hash.update(process.env.APP_PASSWORD).digest('hex');
|
||||
if ((process?.env?.RTL_SSO && +process?.env?.RTL_SSO === 0) || (typeof process?.env?.RTL_SSO === 'undefined' && +config.SSO.rtlSSO === 0)) {
|
||||
if (process?.env?.APP_PASSWORD && process?.env?.APP_PASSWORD.trim() !== '') {
|
||||
this.common.rtl_pass = this.hash.update(process?.env?.APP_PASSWORD).digest('hex');
|
||||
this.common.flg_allow_password_update = false;
|
||||
} else if (config.multiPassHashed && config.multiPassHashed !== '') {
|
||||
this.common.rtl_pass = config.multiPassHashed;
|
||||
@ -128,21 +128,21 @@ export class ConfigService {
|
||||
}
|
||||
this.common.rtl_secret2fa = config.secret2fa;
|
||||
} else {
|
||||
if (process.env.APP_PASSWORD && process.env.APP_PASSWORD.trim() !== '') {
|
||||
if (process?.env?.APP_PASSWORD && process?.env?.APP_PASSWORD.trim() !== '') {
|
||||
this.errMsg = this.errMsg + '\nRTL Password cannot be set with SSO. Please set SSO as 0 or remove password.';
|
||||
}
|
||||
}
|
||||
this.common.port = (process.env.PORT) ? this.normalizePort(process.env.PORT) : (config.port) ? this.normalizePort(config.port) : 3000;
|
||||
this.common.host = (process.env.HOST) ? process.env.HOST : (config.host) ? config.host : null;
|
||||
this.common.port = (process?.env?.PORT) ? this.normalizePort(process?.env?.PORT) : (config.port) ? this.normalizePort(config.port) : 3000;
|
||||
this.common.host = (process?.env?.HOST) ? process?.env?.HOST : (config.host) ? config.host : null;
|
||||
if (config.nodes && config.nodes.length > 0) {
|
||||
config.nodes.forEach((node, idx) => {
|
||||
this.common.nodes[idx] = {};
|
||||
this.common.nodes[idx].index = node.index;
|
||||
this.common.nodes[idx].ln_node = node.lnNode;
|
||||
this.common.nodes[idx].ln_implementation = (process.env.LN_IMPLEMENTATION) ? process.env.LN_IMPLEMENTATION : node.lnImplementation ? node.lnImplementation : 'LND';
|
||||
this.common.nodes[idx].ln_implementation = (process?.env?.LN_IMPLEMENTATION) ? process?.env?.LN_IMPLEMENTATION : node.lnImplementation ? node.lnImplementation : 'LND';
|
||||
if (this.common.nodes[idx].ln_implementation === 'CLT') { this.common.nodes[idx].ln_implementation = 'CLN'; }
|
||||
if (this.common.nodes[idx].ln_implementation !== 'ECL' && process.env.MACAROON_PATH && process.env.MACAROON_PATH.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = process.env.MACAROON_PATH;
|
||||
if (this.common.nodes[idx].ln_implementation !== 'ECL' && process?.env?.MACAROON_PATH && process?.env?.MACAROON_PATH.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = process?.env?.MACAROON_PATH;
|
||||
} else if (this.common.nodes[idx].ln_implementation !== 'ECL' && node.Authentication && node.Authentication.macaroonPath && node.Authentication.macaroonPath.trim() !== '') {
|
||||
this.common.nodes[idx].macaroon_path = node.Authentication.macaroonPath;
|
||||
} else if (this.common.nodes[idx].ln_implementation !== 'ECL') {
|
||||
@ -150,16 +150,16 @@ export class ConfigService {
|
||||
}
|
||||
|
||||
if (this.common.nodes[idx].ln_implementation === 'ECL') {
|
||||
if (process.env.LN_API_PASSWORD) {
|
||||
this.common.nodes[idx].ln_api_password = process.env.LN_API_PASSWORD;
|
||||
if (process?.env?.LN_API_PASSWORD) {
|
||||
this.common.nodes[idx].ln_api_password = process?.env?.LN_API_PASSWORD;
|
||||
} else if (node.Authentication && node.Authentication.lnApiPassword) {
|
||||
this.common.nodes[idx].ln_api_password = node.Authentication.lnApiPassword;
|
||||
} else {
|
||||
this.common.nodes[idx].ln_api_password = '';
|
||||
}
|
||||
}
|
||||
if (process.env.CONFIG_PATH) {
|
||||
this.common.nodes[idx].config_path = process.env.CONFIG_PATH;
|
||||
if (process?.env?.CONFIG_PATH) {
|
||||
this.common.nodes[idx].config_path = process?.env?.CONFIG_PATH;
|
||||
} else if (node.Authentication && node.Authentication.configPath) {
|
||||
this.common.nodes[idx].config_path = node.Authentication.configPath;
|
||||
} else {
|
||||
@ -167,10 +167,10 @@ export class ConfigService {
|
||||
}
|
||||
if (this.common.nodes[idx].ln_implementation === 'ECL' && this.common.nodes[idx].ln_api_password === '' && this.common.nodes[idx].config_path !== '') {
|
||||
try {
|
||||
const exists = fs.existsSync(this.common.nodes[idx].config_path);
|
||||
const exists = fs.existsSync(this.common.nodes[idx].config_path || '');
|
||||
if (exists) {
|
||||
try {
|
||||
const configFile = fs.readFileSync(this.common.nodes[idx].config_path, 'utf-8');
|
||||
const configFile = fs.readFileSync((this.common.nodes[idx].config_path || ''), 'utf-8');
|
||||
const iniParsed = ini.parse(configFile);
|
||||
this.common.nodes[idx].ln_api_password = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password;
|
||||
} catch (err) {
|
||||
@ -187,10 +187,10 @@ export class ConfigService {
|
||||
this.errMsg = this.errMsg + '\nPlease set config path Or api password for node index ' + node.index + ' in RTL-Config.json! It is mandatory for Eclair authentication!';
|
||||
}
|
||||
|
||||
if (process.env.LN_SERVER_URL && process.env.LN_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process.env.LN_SERVER_URL.endsWith('/v1') ? process.env.LN_SERVER_URL.slice(0, -3) : process.env.LN_SERVER_URL;
|
||||
} else if (process.env.LND_SERVER_URL && process.env.LND_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process.env.LND_SERVER_URL.endsWith('/v1') ? process.env.LND_SERVER_URL.slice(0, -3) : process.env.LND_SERVER_URL;
|
||||
if (process?.env?.LN_SERVER_URL && process?.env?.LN_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL;
|
||||
} else if (process?.env?.LND_SERVER_URL && process?.env?.LND_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL;
|
||||
} else if (node.Settings.lnServerUrl && node.Settings.lnServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].ln_server_url = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl;
|
||||
} else if (node.Settings.lndServerUrl && node.Settings.lndServerUrl.trim() !== '') {
|
||||
@ -207,9 +207,9 @@ export class ConfigService {
|
||||
if (this.common.nodes[idx].fiat_conversion) {
|
||||
this.common.nodes[idx].currency_unit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD';
|
||||
}
|
||||
if (process.env.SWAP_SERVER_URL && process.env.SWAP_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = process.env.SWAP_SERVER_URL.endsWith('/v1') ? process.env.SWAP_SERVER_URL.slice(0, -3) : process.env.SWAP_SERVER_URL;
|
||||
this.common.nodes[idx].swap_macaroon_path = process.env.SWAP_MACAROON_PATH;
|
||||
if (process?.env?.SWAP_SERVER_URL && process?.env?.SWAP_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL;
|
||||
this.common.nodes[idx].swap_macaroon_path = process?.env?.SWAP_MACAROON_PATH;
|
||||
} else if (node.Settings.swapServerUrl && node.Settings.swapServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].swap_server_url = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl;
|
||||
this.common.nodes[idx].swap_macaroon_path = node.Authentication.swapMacaroonPath ? node.Authentication.swapMacaroonPath : '';
|
||||
@ -217,9 +217,9 @@ export class ConfigService {
|
||||
this.common.nodes[idx].swap_server_url = '';
|
||||
this.common.nodes[idx].swap_macaroon_path = '';
|
||||
}
|
||||
if (process.env.BOLTZ_SERVER_URL && process.env.BOLTZ_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = process.env.BOLTZ_SERVER_URL.endsWith('/v1') ? process.env.BOLTZ_SERVER_URL.slice(0, -3) : process.env.BOLTZ_SERVER_URL;
|
||||
this.common.nodes[idx].boltz_macaroon_path = process.env.BOLTZ_MACAROON_PATH;
|
||||
if (process?.env?.BOLTZ_SERVER_URL && process?.env?.BOLTZ_SERVER_URL.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL;
|
||||
this.common.nodes[idx].boltz_macaroon_path = process?.env?.BOLTZ_MACAROON_PATH;
|
||||
} else if (node.Settings.boltzServerUrl && node.Settings.boltzServerUrl.trim() !== '') {
|
||||
this.common.nodes[idx].boltz_server_url = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl;
|
||||
this.common.nodes[idx].boltz_macaroon_path = node.Authentication.boltzMacaroonPath ? node.Authentication.boltzMacaroonPath : '';
|
||||
@ -227,10 +227,10 @@ export class ConfigService {
|
||||
this.common.nodes[idx].boltz_server_url = '';
|
||||
this.common.nodes[idx].boltz_macaroon_path = '';
|
||||
}
|
||||
this.common.nodes[idx].enable_offers = process.env.ENABLE_OFFERS ? process.env.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false;
|
||||
this.common.nodes[idx].enable_peerswap = process.env.ENABLE_PEERSWAP ? process.env.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false;
|
||||
this.common.nodes[idx].bitcoind_config_path = process.env.BITCOIND_CONFIG_PATH ? process.env.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : '';
|
||||
this.common.nodes[idx].channel_backup_path = process.env.CHANNEL_BACKUP_PATH ? process.env.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.rtl_conf_file_path + sep + 'channels-backup' + sep + 'node-' + node.index;
|
||||
this.common.nodes[idx].enable_offers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false;
|
||||
this.common.nodes[idx].enable_peerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false;
|
||||
this.common.nodes[idx].bitcoind_config_path = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : '';
|
||||
this.common.nodes[idx].channel_backup_path = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.rtl_conf_file_path + sep + 'channels-backup' + sep + 'node-' + node.index;
|
||||
try {
|
||||
this.common.createDirectory(this.common.nodes[idx].channel_backup_path);
|
||||
const exists = fs.existsSync(this.common.nodes[idx].channel_backup_path + sep + 'channel-all.bak');
|
||||
@ -252,13 +252,13 @@ export class ConfigService {
|
||||
this.common.nodes[idx].log_file = this.common.rtl_conf_file_path + '/logs/RTL-Node-' + node.index + '.log';
|
||||
this.logger.log({ selectedNode: this.common.initSelectedNode, level: 'INFO', fileName: 'Config', msg: 'Node Config: ' + JSON.stringify(this.common.nodes[idx]) });
|
||||
const log_file = this.common.nodes[idx].log_file;
|
||||
if (fs.existsSync(log_file)) {
|
||||
fs.writeFile(log_file, '', () => { });
|
||||
if (fs.existsSync(log_file || '')) {
|
||||
fs.writeFile((log_file || ''), '', () => { });
|
||||
} else {
|
||||
try {
|
||||
const directoryName = dirname(log_file);
|
||||
const directoryName = dirname(log_file || '');
|
||||
this.common.createDirectory(directoryName);
|
||||
const createStream = fs.createWriteStream(log_file);
|
||||
const createStream = fs.createWriteStream(log_file || '');
|
||||
createStream.end();
|
||||
} catch (err) {
|
||||
this.logger.log({ selectedNode: this.common.initSelectedNode, level: 'ERROR', fileName: 'Config', msg: 'Something went wrong while creating log file ' + log_file + ': \n' + err });
|
||||
@ -271,22 +271,22 @@ export class ConfigService {
|
||||
};
|
||||
|
||||
private setSSOParams = (config) => {
|
||||
if (process.env.RTL_SSO) {
|
||||
this.common.rtl_sso = +process.env.RTL_SSO;
|
||||
if (process?.env?.RTL_SSO) {
|
||||
this.common.rtl_sso = +process?.env?.RTL_SSO;
|
||||
} else if (config.SSO && config.SSO.rtlSSO) {
|
||||
this.common.rtl_sso = config.SSO.rtlSSO;
|
||||
}
|
||||
|
||||
if (process.env.RTL_COOKIE_PATH) {
|
||||
this.common.rtl_cookie_path = process.env.RTL_COOKIE_PATH;
|
||||
if (process?.env?.RTL_COOKIE_PATH) {
|
||||
this.common.rtl_cookie_path = process?.env?.RTL_COOKIE_PATH;
|
||||
} else if (config.SSO && config.SSO.rtlCookiePath) {
|
||||
this.common.rtl_cookie_path = config.SSO.rtlCookiePath;
|
||||
} else {
|
||||
this.common.rtl_cookie_path = '';
|
||||
}
|
||||
|
||||
if (process.env.LOGOUT_REDIRECT_LINK) {
|
||||
this.common.logout_redirect_link = process.env.LOGOUT_REDIRECT_LINK;
|
||||
if (process?.env?.LOGOUT_REDIRECT_LINK) {
|
||||
this.common.logout_redirect_link = process?.env?.LOGOUT_REDIRECT_LINK;
|
||||
} else if (config.SSO && config.SSO.logoutRedirectLink) {
|
||||
this.common.logout_redirect_link = config.SSO.logoutRedirectLink;
|
||||
}
|
||||
@ -302,15 +302,15 @@ export class ConfigService {
|
||||
|
||||
private setSelectedNode = (config) => {
|
||||
if (config.defaultNodeIndex) {
|
||||
this.common.initSelectedNode = this.common.findNode(config.defaultNodeIndex);
|
||||
this.common.initSelectedNode = this.common.findNode(config.defaultNodeIndex) || {};
|
||||
} else {
|
||||
this.common.initSelectedNode = this.common.findNode(this.common.nodes[0].index);
|
||||
this.common.initSelectedNode = this.common.findNode(this.common.nodes[0].index) || {};
|
||||
}
|
||||
};
|
||||
|
||||
public setServerConfiguration = () => {
|
||||
try {
|
||||
this.common.rtl_conf_file_path = (process.env.RTL_CONFIG_PATH) ? process.env.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
this.common.rtl_conf_file_path = (process?.env?.RTL_CONFIG_PATH) ? process?.env?.RTL_CONFIG_PATH : join(this.directoryName, '../..');
|
||||
const confFileFullPath = this.common.rtl_conf_file_path + sep + 'RTL-Config.json';
|
||||
if (!fs.existsSync(confFileFullPath)) {
|
||||
fs.writeFileSync(confFileFullPath, JSON.stringify(this.setDefaultConfig()));
|
||||
@ -319,7 +319,7 @@ export class ConfigService {
|
||||
this.updateLogByLevel();
|
||||
this.validateNodeConfig(config);
|
||||
this.setSelectedNode(config);
|
||||
} catch (err) {
|
||||
} catch (err: any) {
|
||||
this.logger.log({ selectedNode: this.common.initSelectedNode, level: 'ERROR', fileName: 'Config', msg: 'Something went wrong while configuring the node server: \n' + err });
|
||||
throw new Error(err);
|
||||
}
|
||||
|
@ -1,9 +1,8 @@
|
||||
import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators, ValidatorFn, ValidationErrors } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators, ValidationErrors, AbstractControlOptions } from '@angular/forms';
|
||||
import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
|
||||
import { MatStepper } from '@angular/material/stepper';
|
||||
|
||||
@ -50,7 +49,7 @@ export class InitializeWalletComponent implements OnInit, OnDestroy {
|
||||
this.passwordFormGroup = this.formBuilder.group({
|
||||
initWalletPassword: ['', [Validators.required, Validators.minLength(8)]],
|
||||
initWalletConfirmPassword: ['', [Validators.required, Validators.minLength(8)]]
|
||||
}, { validators: matchedPasswords });
|
||||
}, { validators: matchedPasswords } as AbstractControlOptions);
|
||||
this.cipherFormGroup = this.formBuilder.group({
|
||||
existingCipher: [false],
|
||||
cipherSeed: [{ value: '', disabled: true }, [cipherSeedLength]]
|
||||
|
@ -8,7 +8,7 @@ export function getPaginatorLabel(field: string) {
|
||||
return appPaginator;
|
||||
}
|
||||
|
||||
export const VERSION = '0.13.3-beta';
|
||||
export const VERSION = '0.13.4-beta';
|
||||
|
||||
export const API_URL = isDevMode() ? 'http://localhost:3000/rtl/api' : './api';
|
||||
|
||||
|
@ -1,20 +1,19 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>RTL</title>
|
||||
<base href="/">
|
||||
<meta i18n-content name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link i18n-sizes i18n-rel rel="apple-touch-icon" sizes="180x180" href="assets/images/favicon-light/apple-touch-icon.png">
|
||||
<link i18n-sizes i18n-rel rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-light/favicon-32x32.png">
|
||||
<link i18n-sizes i18n-rel rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-light/favicon-16x16.png">
|
||||
<link i18n-rel rel="manifest" href="assets/images/favicon-light/site.webmanifest">
|
||||
<link i18n-rel rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta i18n-content name="msapplication-TileColor" content="#da532c">
|
||||
<meta i18n-content name="theme-color" content="#ffffff">
|
||||
</head>
|
||||
<body>
|
||||
<rtl-app></rtl-app>
|
||||
</body>
|
||||
<script>window.global = window;</script>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>RTL</title>
|
||||
<base href="/">
|
||||
<meta i18n-content name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link i18n-sizes i18n-rel rel="apple-touch-icon" sizes="180x180" href="assets/images/favicon-light/apple-touch-icon.png">
|
||||
<link i18n-sizes i18n-rel rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-light/favicon-32x32.png">
|
||||
<link i18n-sizes i18n-rel rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-light/favicon-16x16.png">
|
||||
<link i18n-rel rel="manifest" href="assets/images/favicon-light/site.webmanifest">
|
||||
<link i18n-rel rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta i18n-content name="msapplication-TileColor" content="#da532c">
|
||||
<meta i18n-content name="theme-color" content="#ffffff">
|
||||
</head>
|
||||
<body>
|
||||
<rtl-app></rtl-app>
|
||||
</body>
|
||||
</html>
|
||||
|
2
src/polyfills.ts
Normal file
2
src/polyfills.ts
Normal file
@ -0,0 +1,2 @@
|
||||
window.global = <any>window;
|
||||
window.global.Buffer = window.global.Buffer || require('buffer').Buffer;
|
@ -1,13 +1,14 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../frontend",
|
||||
"types": ["node"]
|
||||
"outDir": "../frontend"
|
||||
},
|
||||
"files": [
|
||||
"./main.ts"
|
||||
"./main.ts",
|
||||
"./polyfills.ts"
|
||||
],
|
||||
"include": [
|
||||
"./polyfills.ts",
|
||||
"./**/*.d.ts"
|
||||
]
|
||||
}
|
||||
|
@ -2,9 +2,12 @@
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/spec",
|
||||
"types": ["jasmine", "node"],
|
||||
"module": "CommonJS"
|
||||
"module": "CommonJS",
|
||||
"types": [
|
||||
"node", "jasmine"
|
||||
]
|
||||
},
|
||||
"files": ["./polyfills.ts"],
|
||||
"include": [
|
||||
"./**/*.spec.ts",
|
||||
"./**/*.d.ts"
|
||||
|
@ -4,17 +4,19 @@
|
||||
"baseUrl": "./",
|
||||
"outDir": "./backend",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"strict": false,
|
||||
"esModuleInterop": true,
|
||||
"allowJs": false,
|
||||
"noImplicitAny": false,
|
||||
"noImplicitOverride": false,
|
||||
"noPropertyAccessFromIndexSignature": false,
|
||||
"strictPropertyInitialization":false,
|
||||
"strictNullChecks": false,
|
||||
"noImplicitAny": false,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"downlevelIteration": true,
|
||||
"suppressImplicitAnyIndexErrors": true,
|
||||
"sourceMap": false,
|
||||
"declaration": false,
|
||||
"downlevelIteration": true,
|
||||
"experimentalDecorators": true,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
@ -32,7 +34,7 @@
|
||||
},
|
||||
"include": [
|
||||
"./server/**/*"
|
||||
],
|
||||
],
|
||||
"angularCompilerOptions": {
|
||||
"enableI18nLegacyMessageIdFormat": false,
|
||||
"strictInjectionParameters": true,
|
||||
|
Loading…
Reference in New Issue
Block a user