mirror of
https://github.com/Ride-The-Lightning/RTL.git
synced 2026-08-13 12:33:07 +02:00
Update project code according to dependencies update
This commit is contained in:
parent
2f6cdb8fe0
commit
4e08fd7cba
387 changed files with 1180 additions and 703 deletions
|
|
@ -24,7 +24,7 @@
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"@angular-eslint/component-selector": ["error", { "prefix": "rtl", "style": "kebab-case", "type": "element" }],
|
"@angular-eslint/component-selector": ["error", { "prefix": "rtl", "style": "kebab-case", "type": "element" }],
|
||||||
"@angular-eslint/directive-selector": ["error", { "style": "camelCase", "type": "attribute" }],
|
"@angular-eslint/directive-selector": ["error", { "style": "camelCase", "type": "attribute", "prefix": [] }],
|
||||||
"@angular-eslint/consistent-component-styles": "off",
|
"@angular-eslint/consistent-component-styles": "off",
|
||||||
"@angular-eslint/prefer-on-push-component-change-detection": "off",
|
"@angular-eslint/prefer-on-push-component-change-detection": "off",
|
||||||
"@angular-eslint/prefer-standalone": "off",
|
"@angular-eslint/prefer-standalone": "off",
|
||||||
|
|
@ -32,6 +32,11 @@
|
||||||
"@angular-eslint/sort-ngmodule-metadata-arrays": "off",
|
"@angular-eslint/sort-ngmodule-metadata-arrays": "off",
|
||||||
"@angular-eslint/use-component-view-encapsulation": "off",
|
"@angular-eslint/use-component-view-encapsulation": "off",
|
||||||
"@angular-eslint/use-injectable-provided-in": "off",
|
"@angular-eslint/use-injectable-provided-in": "off",
|
||||||
|
"@angular-eslint/prefer-inject": "off",
|
||||||
|
"@angular-eslint/sort-keys-in-type-decorator": "off",
|
||||||
|
"@angular-eslint/prefer-signals": "off",
|
||||||
|
"@angular-eslint/prefer-host-metadata-property": "off",
|
||||||
|
"@angular-eslint/prefer-output-emitter-ref": "off",
|
||||||
"@typescript-eslint/member-delimiter-style": "off",
|
"@typescript-eslint/member-delimiter-style": "off",
|
||||||
"@typescript-eslint/no-non-null-assertion": "off",
|
"@typescript-eslint/no-non-null-assertion": "off",
|
||||||
"@typescript-eslint/type-annotation-spacing": 0,
|
"@typescript-eslint/type-annotation-spacing": 0,
|
||||||
|
|
@ -207,7 +212,8 @@
|
||||||
"@angular-eslint/template/prefer-ngsrc": "off",
|
"@angular-eslint/template/prefer-ngsrc": "off",
|
||||||
"@angular-eslint/template/prefer-control-flow": "off",
|
"@angular-eslint/template/prefer-control-flow": "off",
|
||||||
"@angular-eslint/template/prefer-self-closing-tags": "off",
|
"@angular-eslint/template/prefer-self-closing-tags": "off",
|
||||||
"@angular-eslint/template/use-track-by-function": "off"
|
"@angular-eslint/template/use-track-by-function": "off",
|
||||||
|
"@angular-eslint/template/prefer-template-literal": "off"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ const common = Common;
|
||||||
function getFilesList(channelBackupPath, callback) {
|
function getFilesList(channelBackupPath, callback) {
|
||||||
const files_list = [];
|
const files_list = [];
|
||||||
let all_restore_exists = false;
|
let all_restore_exists = false;
|
||||||
let response = { all_restore_exists: false, files: [] } || { message: '', error: {}, statusCode: 500 };
|
let response = { all_restore_exists: false, files: [] };
|
||||||
fs.readdir(channelBackupPath + sep + 'restore', (err, files) => {
|
fs.readdir(channelBackupPath + sep + 'restore', (err, files) => {
|
||||||
if (err && err.code !== 'ENOENT' && err.errno !== -4058) {
|
if (err && err.code !== 'ENOENT' && err.errno !== -4058) {
|
||||||
response = { message: 'Channels Restore List Failed!', error: err, statusCode: 500 };
|
response = Object.assign({ message: 'Channels Restore List Failed!', error: err, statusCode: 500 });
|
||||||
}
|
}
|
||||||
if (files && files.length > 0) {
|
if (files && files.length > 0) {
|
||||||
files.forEach((file) => {
|
files.forEach((file) => {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ const { Router } = exprs;
|
||||||
import { isAuthenticated } from '../../utils/authCheck.js';
|
import { isAuthenticated } from '../../utils/authCheck.js';
|
||||||
import { genSeed, updateSelNodeOptions, getUTXOs, operateWallet, bumpFee, labelTransaction, leaseUTXO, releaseUTXO } from '../../controllers/lnd/wallet.js';
|
import { genSeed, updateSelNodeOptions, getUTXOs, operateWallet, bumpFee, labelTransaction, leaseUTXO, releaseUTXO } from '../../controllers/lnd/wallet.js';
|
||||||
const router = Router();
|
const router = Router();
|
||||||
router.get('/genseed/:passphrase?', isAuthenticated, genSeed);
|
router.get('/genseed', isAuthenticated, genSeed);
|
||||||
|
router.get('/genseed/:passphrase', isAuthenticated, genSeed);
|
||||||
router.get('/updateSelNodeOptions', isAuthenticated, updateSelNodeOptions);
|
router.get('/updateSelNodeOptions', isAuthenticated, updateSelNodeOptions);
|
||||||
router.get('/getUTXOs', isAuthenticated, getUTXOs);
|
router.get('/getUTXOs', isAuthenticated, getUTXOs);
|
||||||
router.post('/wallet/:operation', isAuthenticated, operateWallet);
|
router.post('/wallet/:operation', isAuthenticated, operateWallet);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
1
frontend/17.b882df9dedeedc74.js
Normal file
1
frontend/17.b882df9dedeedc74.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend/190.558182128d53aa6a.js
Normal file
1
frontend/190.558182128d53aa6a.js
Normal file
File diff suppressed because one or more lines are too long
1
frontend/193.0936738599c66c4e.js
Normal file
1
frontend/193.0936738599c66c4e.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,11 +1,33 @@
|
||||||
@angular/animations
|
@angular/animations
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@angular/cdk
|
@angular/cdk
|
||||||
MIT
|
MIT
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2023 Google LLC.
|
Copyright (c) 2025 Google LLC.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
@ -28,21 +50,87 @@ THE SOFTWARE.
|
||||||
|
|
||||||
@angular/common
|
@angular/common
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@angular/core
|
@angular/core
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@angular/flex-layout
|
@angular/flex-layout
|
||||||
MIT
|
MIT
|
||||||
|
|
||||||
@angular/forms
|
@angular/forms
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@angular/material
|
@angular/material
|
||||||
MIT
|
MIT
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2023 Google LLC.
|
Copyright (c) 2025 Google LLC.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
@ -65,9 +153,53 @@ THE SOFTWARE.
|
||||||
|
|
||||||
@angular/platform-browser
|
@angular/platform-browser
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@angular/router
|
@angular/router
|
||||||
MIT
|
MIT
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@babel/runtime
|
@babel/runtime
|
||||||
MIT
|
MIT
|
||||||
|
|
@ -147,7 +279,7 @@ as SVG and JS file types.
|
||||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
packaged as web and desktop font files.
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
Copyright (c) 2025 Fonticons, Inc. (https://fontawesome.com)
|
||||||
with Reserved Font Name: "Font Awesome".
|
with Reserved Font Name: "Font Awesome".
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
|
@ -247,7 +379,7 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
non-icon files.
|
non-icon files.
|
||||||
|
|
||||||
Copyright 2024 Fonticons, Inc.
|
Copyright 2025 Fonticons, Inc.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in the
|
this software and associated documentation files (the "Software"), to deal in the
|
||||||
|
|
@ -316,7 +448,7 @@ as SVG and JS file types.
|
||||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
packaged as web and desktop font files.
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
Copyright (c) 2025 Fonticons, Inc. (https://fontawesome.com)
|
||||||
with Reserved Font Name: "Font Awesome".
|
with Reserved Font Name: "Font Awesome".
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
|
@ -416,7 +548,7 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
non-icon files.
|
non-icon files.
|
||||||
|
|
||||||
Copyright 2024 Fonticons, Inc.
|
Copyright 2025 Fonticons, Inc.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in the
|
this software and associated documentation files (the "Software"), to deal in the
|
||||||
|
|
@ -485,7 +617,7 @@ as SVG and JS file types.
|
||||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
packaged as web and desktop font files.
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
Copyright (c) 2025 Fonticons, Inc. (https://fontawesome.com)
|
||||||
with Reserved Font Name: "Font Awesome".
|
with Reserved Font Name: "Font Awesome".
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
|
@ -585,7 +717,7 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
non-icon files.
|
non-icon files.
|
||||||
|
|
||||||
Copyright 2024 Fonticons, Inc.
|
Copyright 2025 Fonticons, Inc.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in the
|
this software and associated documentation files (the "Software"), to deal in the
|
||||||
|
|
@ -656,35 +788,6 @@ https://github.com/cartant/rxjs-etc by Nicholas Jamieson, MIT licensed. See the
|
||||||
file header for details.
|
file header for details.
|
||||||
|
|
||||||
|
|
||||||
@ngrx/operators
|
|
||||||
MIT
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2017-2023 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
This repository includes a file "debounceSync.ts" originially copied from
|
|
||||||
https://github.com/cartant/rxjs-etc by Nicholas Jamieson, MIT licensed. See the
|
|
||||||
file header for details.
|
|
||||||
|
|
||||||
|
|
||||||
@ngrx/store
|
@ngrx/store
|
||||||
MIT
|
MIT
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
@ -845,28 +948,6 @@ SOFTWARE.
|
||||||
|
|
||||||
@swimlane/ngx-charts
|
@swimlane/ngx-charts
|
||||||
MIT
|
MIT
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2017 Swimlane
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
angular-user-idle
|
angular-user-idle
|
||||||
MIT
|
MIT
|
||||||
|
|
@ -1465,7 +1546,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
d3-format
|
d3-format
|
||||||
ISC
|
ISC
|
||||||
Copyright 2010-2021 Mike Bostock
|
Copyright 2010-2026 Mike Bostock
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
with or without fee is hereby granted, provided that the above copyright notice
|
with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
|
@ -1549,34 +1630,20 @@ THIS SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
d3-time-format
|
d3-time-format
|
||||||
BSD-3-Clause
|
ISC
|
||||||
Copyright 2010-2017 Mike Bostock
|
Copyright 2010-2021 Mike Bostock
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
are permitted provided that the following conditions are met:
|
with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
and this permission notice appear in all copies.
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
list of conditions and the following disclaimer.
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
this list of conditions and the following disclaimer in the documentation
|
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
and/or other materials provided with the distribution.
|
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||||
|
THIS SOFTWARE.
|
||||||
* Neither the name of the author nor the names of contributors may be used to
|
|
||||||
endorse or promote products derived from this software without specific prior
|
|
||||||
written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
d3-timer
|
d3-timer
|
||||||
|
|
@ -2582,7 +2649,7 @@ MIT
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2014-2015 bpampuch
|
Copyright (c) 2014-2015 bpampuch
|
||||||
2016-2024 liborm85
|
2016-2026 liborm85
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
|
@ -2864,25 +2931,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
rfdc
|
|
||||||
MIT
|
|
||||||
Copyright 2019 "David Mark Clements <david.mark.clements@gmail.com>"
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
||||||
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
|
||||||
to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
|
||||||
of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
||||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
||||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
IN THE SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
ripemd160
|
ripemd160
|
||||||
MIT
|
MIT
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
@ -3666,7 +3714,7 @@ zone.js
|
||||||
MIT
|
MIT
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2010-2024 Google LLC. https://angular.io/license
|
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
||||||
1
frontend/853.a5bf31a92e24292f.js
Normal file
1
frontend/853.a5bf31a92e24292f.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend/main.45925badc0c36690.js
Normal file
1
frontend/main.45925badc0c36690.js
Normal file
File diff suppressed because one or more lines are too long
1
frontend/polyfills.31e6e7ecf45bc58d.js
Normal file
1
frontend/polyfills.31e6e7ecf45bc58d.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
||||||
(()=>{"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+"."+{17:"6fa7154eb6e447e2",190:"03f035c34a56c8be",193:"398f8f87a3703825",853:"c952c78c4b4f76e6"}[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={121: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(121!=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))})()})();
|
|
||||||
1
frontend/runtime.d2bfc83f6ab86639.js
Normal file
1
frontend/runtime.d2bfc83f6ab86639.js
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
(()=>{"use strict";var e,v={},m={};function r(e){var o=m[e];if(void 0!==o)return o.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=(o,t,i,f)=>{if(!t){var a=1/0;for(n=0;n<e.length;n++){for(var[t,i,f]=e[n],c=!0,l=0;l<t.length;l++)(!1&f||a>=f)&&Object.keys(r.O).every(b=>r.O[b](t[l]))?t.splice(l--,1):(c=!1,f<a&&(a=f));if(c){e.splice(n--,1);var d=i();void 0!==d&&(o=d)}}return o}f=f||0;for(var n=e.length;n>0&&e[n-1][2]>f;n--)e[n]=e[n-1];e[n]=[t,i,f]},r.d=(e,o)=>{for(var t in o)r.o(o,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((o,t)=>(r.f[t](e,o),o),[])),r.u=e=>e+"."+{17:"b882df9dedeedc74",190:"558182128d53aa6a",193:"0936738599c66c4e",853:"a5bf31a92e24292f"}[e]+".js",r.miniCssF=e=>{},r.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),(()=>{var e={},o="RTLApp:";r.l=(t,i,f,n)=>{if(e[t])e[t].push(i);else{var a,c;if(void 0!==f)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")==o+f){a=u;break}}a||(c=!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",o+f),a.src=r.tu(t)),e[t]=[i];var s=(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(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),c&&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:o=>o},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={121:0};r.f.j=(i,f)=>{var n=r.o(e,i)?e[i]:void 0;if(0!==n)if(n)f.push(n[2]);else if(121!=i){var a=new Promise((u,s)=>n=e[i]=[u,s]);f.push(n[2]=a);var c=r.p+r.u(i),l=new Error;r.l(c,u=>{if(r.o(e,i)&&(0!==(n=e[i])&&(e[i]=void 0),n)){var s=u&&("load"===u.type?"missing":u.type),p=u&&u.target&&u.target.src;l.message="Loading chunk "+i+" failed.\n("+s+": "+p+")",l.name="ChunkLoadError",l.type=s,l.request=p,n[1](l)}},"chunk-"+i,i)}else e[i]=0},r.O.j=i=>0===e[i];var o=(i,f)=>{var l,d,[n,a,c]=f,u=0;if(n.some(p=>0!==e[p])){for(l in a)r.o(a,l)&&(r.m[l]=a[l]);if(c)var s=c(r)}for(i&&i(f);u<n.length;u++)r.o(e,d=n[u])&&e[d]&&e[d][0](),e[d]=0;return r.O(s)},t=self.webpackChunkRTLApp=self.webpackChunkRTLApp||[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))})()})();
|
||||||
File diff suppressed because one or more lines are too long
1
frontend/styles.fd10c5bd3cf185ab.css
Normal file
1
frontend/styles.fd10c5bd3cf185ab.css
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
||||||
import request from 'request-promise';
|
import request from 'request-promise';
|
||||||
import { Logger, LoggerService } from '../../utils/logger.js';
|
import { Logger, LoggerService } from '../../utils/logger.js';
|
||||||
import { Common, CommonService } from '../../utils/common.js';
|
import { Common, CommonService } from '../../utils/common.js';
|
||||||
import { SelectedNode } from 'server/models/config.model.js';
|
import { SelectedNode } from '../../models/config.model.js';
|
||||||
let options = null;
|
let options = null;
|
||||||
const logger: LoggerService = Logger;
|
const logger: LoggerService = Logger;
|
||||||
const common: CommonService = Common;
|
const common: CommonService = Common;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import request from 'request-promise';
|
import request from 'request-promise';
|
||||||
import { Logger, LoggerService } from '../../utils/logger.js';
|
import { Logger, LoggerService } from '../../utils/logger.js';
|
||||||
import { Common, CommonService } from '../../utils/common.js';
|
import { Common, CommonService } from '../../utils/common.js';
|
||||||
import { SelectedNode } from 'server/models/config.model.js';
|
import { SelectedNode } from '../../models/config.model.js';
|
||||||
let options = null;
|
let options = null;
|
||||||
const logger: LoggerService = Logger;
|
const logger: LoggerService = Logger;
|
||||||
const common: CommonService = Common;
|
const common: CommonService = Common;
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ const handleMultipleFailedAttemptsError = (failed, currentTime, errMsg) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const verifyToken = (twoFAToken) => !!(common.appConfig.secret2FA && common.appConfig.secret2FA !== '' && otplib.authenticator.check(twoFAToken, common.appConfig.secret2FA));
|
export const verifyToken = (twoFAToken) => !!(common.appConfig.secret2FA && common.appConfig.secret2FA !== '' && (otplib as any).authenticator.check(twoFAToken, common.appConfig.secret2FA));
|
||||||
|
|
||||||
export const authenticateUser = (req, res, next) => {
|
export const authenticateUser = (req, res, next) => {
|
||||||
const { authenticateWith, authenticationValue, twoFAToken } = req.body;
|
const { authenticateWith, authenticationValue, twoFAToken } = req.body;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ import { genSeed, updateSelNodeOptions, getUTXOs, operateWallet, bumpFee, labelT
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.get('/genseed/:passphrase?', isAuthenticated, genSeed);
|
router.get('/genseed', isAuthenticated, genSeed);
|
||||||
|
router.get('/genseed/:passphrase', isAuthenticated, genSeed);
|
||||||
router.get('/updateSelNodeOptions', isAuthenticated, updateSelNodeOptions);
|
router.get('/updateSelNodeOptions', isAuthenticated, updateSelNodeOptions);
|
||||||
router.get('/getUTXOs', isAuthenticated, getUTXOs);
|
router.get('/getUTXOs', isAuthenticated, getUTXOs);
|
||||||
router.post('/wallet/:operation', isAuthenticated, operateWallet);
|
router.post('/wallet/:operation', isAuthenticated, operateWallet);
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,14 @@
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"baseUrl": "../",
|
"baseUrl": "../",
|
||||||
"outDir": "../backend",
|
"outDir": "../backend",
|
||||||
|
"module": "Node16",
|
||||||
|
"moduleResolution": "Node16",
|
||||||
|
"target": "ES2022",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"noEmit": false,
|
||||||
|
"allowImportingTsExtensions": false,
|
||||||
|
"types": ["node"]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": ["./**/*"]
|
||||||
"./**/*"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21,6 +21,7 @@ import { routeAnimation } from './shared/animation/route-animation';
|
||||||
import { RTLState } from './store/rtl.state';
|
import { RTLState } from './store/rtl.state';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-app',
|
selector: 'rtl-app',
|
||||||
templateUrl: './app.component.html',
|
templateUrl: './app.component.html',
|
||||||
styleUrls: ['./app.component.scss'],
|
styleUrls: ['./app.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { HammerModule } from '@angular/platform-browser';
|
import { HammerModule } from '@angular/platform-browser';
|
||||||
import { NgModule, isDevMode } from '@angular/core';
|
import { NgModule, isDevMode } from '@angular/core';
|
||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
||||||
import { LayoutModule } from '@angular/cdk/layout';
|
import { LayoutModule } from '@angular/cdk/layout';
|
||||||
|
import { HTTP_INTERCEPTORS, provideHttpClient, withFetch, withInterceptorsFromDi } from '@angular/common/http';
|
||||||
|
|
||||||
import { StoreModule } from '@ngrx/store';
|
import { StoreModule } from '@ngrx/store';
|
||||||
import { EffectsModule } from '@ngrx/effects';
|
import { EffectsModule } from '@ngrx/effects';
|
||||||
|
|
@ -54,10 +54,16 @@ if (isDevMode()) { isDevEnvironemt = true; }
|
||||||
],
|
],
|
||||||
declarations: [AppComponent],
|
declarations: [AppComponent],
|
||||||
providers: [
|
providers: [
|
||||||
|
provideHttpClient(withFetch(), withInterceptorsFromDi()),
|
||||||
provideUserIdleConfig({ idle: (HOUR_SECONDS - 10), timeout: 10, ping: 12000 }),
|
provideUserIdleConfig({ idle: (HOUR_SECONDS - 10), timeout: 10, ping: 12000 }),
|
||||||
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
|
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
|
||||||
SessionService, DataService, WebSocketClientService, LoopService, CommonService, BoltzService
|
SessionService,
|
||||||
|
DataService,
|
||||||
|
WebSocketClientService,
|
||||||
|
LoopService,
|
||||||
|
CommonService,
|
||||||
|
BoltzService
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
})
|
})
|
||||||
export class AppModule { }
|
export class AppModule {}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { Event, NavigationCancel, NavigationEnd, NavigationError, NavigationStar
|
||||||
import { routeAnimation } from '../shared/animation/route-animation';
|
import { routeAnimation } from '../shared/animation/route-animation';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-root',
|
selector: 'rtl-cln-root',
|
||||||
templateUrl: './cln-root.component.html',
|
templateUrl: './cln-root.component.html',
|
||||||
styleUrls: ['./cln-root.component.scss'],
|
styleUrls: ['./cln-root.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<mat-card>
|
<mat-card>
|
||||||
<mat-card-content fxLayout="column">
|
<mat-card-content fxLayout="column">
|
||||||
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" [tabPanel]="tabPanel">
|
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" [tabPanel]="tabPanel">
|
||||||
<div *ngFor="let link of links" tabindex="1" role="tab" mat-tab-link class="mat-tab-label" [active]="activeLink === link.link" routerLink="{{link.link}}" (click)="activeLink = link.link">{{link.name}}</div>
|
<div *ngFor="let link of links" routerLink="{{link.link}}" tabindex="1" role="tab" mat-tab-link class="mat-tab-label" [active]="activeLink === link.link" (click)="activeLink = link.link">{{link.name}}</div>
|
||||||
</nav>
|
</nav>
|
||||||
<mat-tab-nav-panel #tabPanel />
|
<mat-tab-nav-panel #tabPanel />
|
||||||
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch" class="mat-tab-body-wrapper">
|
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch" class="mat-tab-body-wrapper">
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import { takeUntil, filter } from 'rxjs/operators';
|
||||||
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-graph',
|
selector: 'rtl-cln-graph',
|
||||||
templateUrl: './graph.component.html',
|
templateUrl: './graph.component.html',
|
||||||
styleUrls: ['./graph.component.scss']
|
styleUrls: ['./graph.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { RTLState } from '../../../../store/rtl.state';
|
||||||
import { clnNodeInformation } from '../../../store/cln.selector';
|
import { clnNodeInformation } from '../../../store/cln.selector';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-lookup',
|
selector: 'rtl-cln-channel-lookup',
|
||||||
templateUrl: './channel-lookup.component.html',
|
templateUrl: './channel-lookup.component.html',
|
||||||
styleUrls: ['./channel-lookup.component.scss']
|
styleUrls: ['./channel-lookup.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import { RTLState } from '../../../store/rtl.state';
|
||||||
import { channelLookup, peerLookup } from '../../store/cln.actions';
|
import { channelLookup, peerLookup } from '../../store/cln.actions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-lookups',
|
selector: 'rtl-cln-lookups',
|
||||||
templateUrl: './lookups.component.html',
|
templateUrl: './lookups.component.html',
|
||||||
styleUrls: ['./lookups.component.scss']
|
styleUrls: ['./lookups.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { CLNConnectPeerComponent } from '../../../peers-channels/connect-peer/co
|
||||||
import { nodeInfoAndBalance } from '../../../store/cln.selector';
|
import { nodeInfoAndBalance } from '../../../store/cln.selector';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-node-lookup',
|
selector: 'rtl-cln-node-lookup',
|
||||||
templateUrl: './node-lookup.component.html',
|
templateUrl: './node-lookup.component.html',
|
||||||
styleUrls: ['./node-lookup.component.scss']
|
styleUrls: ['./node-lookup.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-query-routes',
|
selector: 'rtl-cln-query-routes',
|
||||||
templateUrl: './query-routes.component.html',
|
templateUrl: './query-routes.component.html',
|
||||||
styleUrls: ['./query-routes.component.scss']
|
styleUrls: ['./query-routes.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
<div>
|
<div>
|
||||||
<h4 fxLayoutAlign="start" class="dashboard-info-title">Lightning</h4>
|
<h4 fxLayoutAlign="start" class="dashboard-info-title">Lightning</h4>
|
||||||
<div class="overflow-wrap dashboard-info-value">{{balances.lightning | number:'1.0-0'}} Sats</div>
|
<div class="overflow-wrap dashboard-info-value">{{balances.lightning | number:'1.0-0'}} Sats</div>
|
||||||
<mat-progress-bar class="dashboard-progress-bar" mode="determinate" value="{{balances.lightning/balances.total*100}}" />
|
<mat-progress-bar value="{{balances.lightning/balances.total*100}}" class="dashboard-progress-bar" mode="determinate" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 fxLayoutAlign="start" class="dashboard-info-title">On-chain</h4>
|
<h4 fxLayoutAlign="start" class="dashboard-info-title">On-chain</h4>
|
||||||
<div class="overflow-wrap dashboard-info-value">{{balances.onchain | number:'1.0-0'}} Sats</div>
|
<div class="overflow-wrap dashboard-info-value">{{balances.onchain | number:'1.0-0'}} Sats</div>
|
||||||
<mat-progress-bar class="dashboard-progress-bar" mode="determinate" value="{{balances.onchain/balances.total*100}}" />
|
<mat-progress-bar value="{{balances.onchain/balances.total*100}}" class="dashboard-progress-bar" mode="determinate" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 fxLayoutAlign="start" class="dashboard-info-title">Total</h4>
|
<h4 fxLayoutAlign="start" class="dashboard-info-title">Total</h4>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component, Input } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-balances-info',
|
selector: 'rtl-cln-balances-info',
|
||||||
templateUrl: './balances-info.component.html',
|
templateUrl: './balances-info.component.html',
|
||||||
styleUrls: ['./balances-info.component.scss']
|
styleUrls: ['./balances-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channelBalances?.remoteBalance || 0 | number:'1.0-0'}} Sats</mat-hint>
|
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channelBalances?.remoteBalance || 0 | number:'1.0-0'}} Sats</mat-hint>
|
||||||
</div>
|
</div>
|
||||||
<mat-progress-bar class="dashboard-progress-bar this-channel-bar" mode="determinate" color="accent" value="{{channelBalances?.localBalance && channelBalances?.localBalance > 0 ? ((+channelBalances?.localBalance/((+channelBalances?.localBalance)+(+channelBalances?.remoteBalance)))*100) : 0}}" />
|
<mat-progress-bar value="{{channelBalances?.localBalance && channelBalances?.localBalance > 0 ? ((+channelBalances?.localBalance/((+channelBalances?.localBalance)+(+channelBalances?.remoteBalance)))*100) : 0}}" class="dashboard-progress-bar this-channel-bar" mode="determinate" color="accent" />
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxFlex="3" fxLayoutAlign="end stretch"><mat-divider class="dashboard-divider" /></div>
|
<div fxLayout="column" fxFlex="3" fxLayoutAlign="end stretch"><mat-divider class="dashboard-divider" /></div>
|
||||||
<div class="channels-capacity-scroll" [perfectScrollbar]>
|
<div class="channels-capacity-scroll" [perfectScrollbar]>
|
||||||
<div *ngIf="activeChannels && activeChannels.length > 0; else noChannelBlock" fxLayout="column"fxFlex="100">
|
<div *ngIf="activeChannels && activeChannels.length > 0; else noChannelBlock" fxLayout="column"fxFlex="100">
|
||||||
<div *ngFor="let channel of activeChannels" class="mt-2">
|
<div *ngFor="let channel of activeChannels" class="mt-2">
|
||||||
<a class="dashboard-capacity-header" [routerLink]="['../connections/channels/open']" [state]="{filterColumn: channel.alias ? 'alias' : 'peer_id', filterValue: channel.alias || channel.peer_id}" matTooltip="{{channel.alias || channel.peer_id}}" matTooltipDisabled="{{(channel.alias || channel.peer_id).length < 26}}">
|
<a matTooltip="{{channel.alias || channel.peer_id}}" matTooltipDisabled="{{(channel.alias || channel.peer_id).length < 26}}" class="dashboard-capacity-header" [routerLink]="['../connections/channels/open']" [state]="{filterColumn: channel.alias ? 'alias' : 'peer_id', filterValue: channel.alias || channel.peer_id}">
|
||||||
{{(channel.alias || channel.peer_id) | slice:0:24}}{{(channel.alias || channel.peer_id).length > 25 ? '...' : ''}}
|
{{(channel.alias || channel.peer_id) | slice:0:24}}{{(channel.alias || channel.peer_id).length > 25 ? '...' : ''}}
|
||||||
</a>
|
</a>
|
||||||
<div fxLayout="row" fxLayoutAlign="space-between start" class="w-100">
|
<div fxLayout="row" fxLayoutAlign="space-between start" class="w-100">
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channel.to_them_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channel.to_them_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
||||||
</div>
|
</div>
|
||||||
<mat-progress-bar class="dashboard-progress-bar" mode="determinate" value="{{channel.to_us_msat && channel.to_us_msat > 0 ? ((channel.to_us_msat/((channel.to_us_msat)+(channel.to_them_msat)))*100) : 0}}" />
|
<mat-progress-bar value="{{channel.to_us_msat && channel.to_us_msat > 0 ? ((channel.to_us_msat/((channel.to_us_msat)+(channel.to_them_msat)))*100) : 0}}" class="dashboard-progress-bar" mode="determinate" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import { faBalanceScale, faDumbbell } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { Channel } from '../../../shared/models/clnModels';
|
import { Channel } from '../../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-capacity-info',
|
selector: 'rtl-cln-channel-capacity-info',
|
||||||
templateUrl: './channel-capacity-info.component.html',
|
templateUrl: './channel-capacity-info.component.html',
|
||||||
styleUrls: ['./channel-capacity-info.component.scss']
|
styleUrls: ['./channel-capacity-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,15 @@
|
||||||
<div fxLayout="column" fxFlex.gt-sm="88" fxFlex="84" fxLayoutAlign="start start" [perfectScrollbar]>
|
<div fxLayout="column" fxFlex.gt-sm="88" fxFlex="84" fxLayoutAlign="start start" [perfectScrollbar]>
|
||||||
<div *ngIf="activeChannels && activeChannels.length > 0; else noChannelBlock" fxLayout="column" fxFlex="100"class="w-100">
|
<div *ngIf="activeChannels && activeChannels.length > 0; else noChannelBlock" fxLayout="column" fxFlex="100"class="w-100">
|
||||||
<div *ngFor="let channel of activeChannels" class="mt-2">
|
<div *ngFor="let channel of activeChannels" class="mt-2">
|
||||||
<a class="dashboard-capacity-header" [routerLink]="['../connections/channels/open']" [state]="{filterColumn: channel.alias ? 'alias' : 'peer_id', filterValue: channel.alias || channel.peer_id}" matTooltip="{{channel.alias || channel.peer_id}}" matTooltipDisabled="{{(channel.alias || channel.peer_id).length < 26}}">
|
<a matTooltip="{{channel.alias || channel.peer_id}}" matTooltipDisabled="{{(channel.alias || channel.peer_id).length < 26}}" class="dashboard-capacity-header" [routerLink]="['../connections/channels/open']" [state]="{filterColumn: channel.alias ? 'alias' : 'peer_id', filterValue: channel.alias || channel.peer_id}">
|
||||||
{{(channel.alias || channel.peer_id) | slice:0:24}}{{(channel.alias || channel.peer_id).length > 25 ? '...' : ''}}
|
{{(channel.alias || channel.peer_id) | slice:0:24}}{{(channel.alias || channel.peer_id).length > 25 ? '...' : ''}}
|
||||||
</a>
|
</a>
|
||||||
<div fxLayout="row" fxLayoutAlign="space-between start" class="w-100">
|
<div fxLayout="row" fxLayoutAlign="space-between start" class="w-100">
|
||||||
<mat-hint *ngIf="direction === 'In'" fxFlex="100" fxLayoutAlign="start center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Capacity: </strong>{{channel.to_them_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
<mat-hint *ngIf="direction === 'In'" fxFlex="100" fxLayoutAlign="start center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Capacity: </strong>{{channel.to_them_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
||||||
<mat-hint *ngIf="direction === 'Out'" fxFlex="100" fxLayoutAlign="start center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Capacity: </strong>{{channel.to_us_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
<mat-hint *ngIf="direction === 'Out'" fxFlex="100" fxLayoutAlign="start center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Capacity: </strong>{{channel.to_us_msat/1000 || 0 | number:'1.0-0'}} Sats</mat-hint>
|
||||||
</div>
|
</div>
|
||||||
<mat-progress-bar *ngIf="direction === 'In'" class="dashboard-progress-bar" mode="determinate" value="{{(totalLiquidity > 0) ? ((channel.to_them_msat/1000 || 0)/(totalLiquidity) * 100) : 0}}" />
|
<mat-progress-bar *ngIf="direction === 'In'" value="{{(totalLiquidity > 0) ? ((channel.to_them_msat/1000 || 0)/(totalLiquidity) * 100) : 0}}" class="dashboard-progress-bar" mode="determinate" />
|
||||||
<mat-progress-bar *ngIf="direction === 'Out'" class="dashboard-progress-bar" mode="determinate" value="{{(totalLiquidity > 0) ? ((channel.to_us_msat/1000 || 0)/(totalLiquidity) * 100) : 0}}" />
|
<mat-progress-bar *ngIf="direction === 'Out'" value="{{(totalLiquidity > 0) ? ((channel.to_us_msat/1000 || 0)/(totalLiquidity) * 100) : 0}}" class="dashboard-progress-bar" mode="determinate" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ import { mockDataService } from '../../../shared/test-helpers/mock-services';
|
||||||
|
|
||||||
import { CLNChannelLiquidityInfoComponent } from './channel-liquidity-info.component';
|
import { CLNChannelLiquidityInfoComponent } from './channel-liquidity-info.component';
|
||||||
import { DataService } from '../../../shared/services/data.service';
|
import { DataService } from '../../../shared/services/data.service';
|
||||||
|
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||||
|
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
||||||
|
|
||||||
describe('CLNChannelLiquidityInfoComponent', () => {
|
describe('CLNChannelLiquidityInfoComponent', () => {
|
||||||
let component: CLNChannelLiquidityInfoComponent;
|
let component: CLNChannelLiquidityInfoComponent;
|
||||||
|
|
@ -17,6 +19,8 @@ describe('CLNChannelLiquidityInfoComponent', () => {
|
||||||
declarations: [CLNChannelLiquidityInfoComponent],
|
declarations: [CLNChannelLiquidityInfoComponent],
|
||||||
imports: [SharedModule, RouterTestingModule],
|
imports: [SharedModule, RouterTestingModule],
|
||||||
providers: [
|
providers: [
|
||||||
|
provideHttpClient(withInterceptorsFromDi()),
|
||||||
|
provideHttpClientTesting(),
|
||||||
CommonService,
|
CommonService,
|
||||||
{ provide: DataService, useClass: mockDataService }
|
{ provide: DataService, useClass: mockDataService }
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import { ScreenSizeEnum } from '../../../shared/services/consts-enums-functions'
|
||||||
import { CommonService } from '../../../shared/services/common.service';
|
import { CommonService } from '../../../shared/services/common.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-liquidity-info',
|
selector: 'rtl-cln-channel-liquidity-info',
|
||||||
templateUrl: './channel-liquidity-info.component.html',
|
templateUrl: './channel-liquidity-info.component.html',
|
||||||
styleUrls: ['./channel-liquidity-info.component.scss']
|
styleUrls: ['./channel-liquidity-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import { Component, Input } from '@angular/core';
|
||||||
import { ChannelsStatus } from '../../../shared/models/clnModels';
|
import { ChannelsStatus } from '../../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-status-info',
|
selector: 'rtl-cln-channel-status-info',
|
||||||
templateUrl: './channel-status-info.component.html',
|
templateUrl: './channel-status-info.component.html',
|
||||||
styleUrls: ['./channel-status-info.component.scss']
|
styleUrls: ['./channel-status-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import { Component, Input } from '@angular/core';
|
||||||
import { Fees } from '../../../shared/models/clnModels';
|
import { Fees } from '../../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-fee-info',
|
selector: 'rtl-cln-fee-info',
|
||||||
templateUrl: './fee-info.component.html',
|
templateUrl: './fee-info.component.html',
|
||||||
styleUrls: ['./fee-info.component.scss']
|
styleUrls: ['./fee-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
</div>
|
</div>
|
||||||
</mat-card-title>
|
</mat-card-title>
|
||||||
</mat-card-header>
|
</mat-card-header>
|
||||||
<mat-card-content fxLayout="column" fxFlex="{{card.id === 'capacity' ? 90 : 70}}"
|
<mat-card-content fxFlex="{{card.id === 'capacity' ? 90 : 70}}" fxLayout="column"
|
||||||
[ngClass]="{'dashboard-card-content': true,
|
[ngClass]="{'dashboard-card-content': true,
|
||||||
'error-border': (card.id === 'node' && apiCallStatusNodeInfo.status === apiCallStatusEnum.ERROR) ||
|
'error-border': (card.id === 'node' && apiCallStatusNodeInfo.status === apiCallStatusEnum.ERROR) ||
|
||||||
(card.id === 'balance' && apiCallStatusBalances.status === apiCallStatusEnum.ERROR) ||
|
(card.id === 'balance' && apiCallStatusBalances.status === apiCallStatusEnum.ERROR) ||
|
||||||
|
|
@ -74,7 +74,7 @@
|
||||||
</div>
|
</div>
|
||||||
</mat-card-title>
|
</mat-card-title>
|
||||||
</mat-card-header>
|
</mat-card-header>
|
||||||
<mat-card-content fxLayout="column" fxLayoutAlign="start stretch" fxFlex="{{card.id === 'transactions' ? 100 : card.id === 'balance' ? 70: 90}}"
|
<mat-card-content fxFlex="{{card.id === 'transactions' ? 100 : card.id === 'balance' ? 70: 90}}" fxLayout="column" fxLayoutAlign="start stretch"
|
||||||
[ngClass]="{'dashboard-card-content': true,
|
[ngClass]="{'dashboard-card-content': true,
|
||||||
'error-border': (card.id === 'node' && apiCallStatusNodeInfo.status === apiCallStatusEnum.ERROR) ||
|
'error-border': (card.id === 'node' && apiCallStatusNodeInfo.status === apiCallStatusEnum.ERROR) ||
|
||||||
(card.id === 'balance' && apiCallStatusBalances.status === apiCallStatusEnum.ERROR) ||
|
(card.id === 'balance' && apiCallStatusBalances.status === apiCallStatusEnum.ERROR) ||
|
||||||
|
|
@ -87,12 +87,12 @@
|
||||||
<div fxLayout="column" fxFlex="100" [ngSwitch]="card.id">
|
<div fxLayout="column" fxFlex="100" [ngSwitch]="card.id">
|
||||||
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" />
|
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" />
|
||||||
<rtl-cln-balances-info *ngSwitchCase="'balance'" fxFlex="100" [balances]="balances" [errorMessage]="errorMessages[1]" />
|
<rtl-cln-balances-info *ngSwitchCase="'balance'" fxFlex="100" [balances]="balances" [errorMessage]="errorMessages[1]" />
|
||||||
<rtl-cln-channel-liquidity-info *ngSwitchCase="'inboundLiq'" fxFlex="100" [direction]="'In'" [totalLiquidity]="totalInboundLiquidity" [activeChannels]="allInboundChannels" [errorMessage]="errorMessages[2]" />
|
<rtl-cln-channel-liquidity-info *ngSwitchCase="'inboundLiq'" fxFlex="100" direction="In" [totalLiquidity]="totalInboundLiquidity" [activeChannels]="allInboundChannels" [errorMessage]="errorMessages[2]" />
|
||||||
<rtl-cln-channel-liquidity-info *ngSwitchCase="'outboundLiq'" fxFlex="100" [direction]="'Out'" [totalLiquidity]="totalOutboundLiquidity" [activeChannels]="allOutboundChannels" [errorMessage]="errorMessages[2]" />
|
<rtl-cln-channel-liquidity-info *ngSwitchCase="'outboundLiq'" fxFlex="100" direction="Out" [totalLiquidity]="totalOutboundLiquidity" [activeChannels]="allOutboundChannels" [errorMessage]="errorMessages[2]" />
|
||||||
<span *ngSwitchCase="'transactions'" fxLayout="row" fxFlex="100" fxLayoutAlign="space-between start">
|
<span *ngSwitchCase="'transactions'" fxLayout="row" fxFlex="100" fxLayoutAlign="space-between start">
|
||||||
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" fxLayout="column" class="dashboard-tabs-group">
|
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" fxLayout="column" class="dashboard-tabs-group">
|
||||||
<mat-tab label="Receive"><rtl-cln-lightning-invoices-table class="h-100" [calledFrom]="'home'" /></mat-tab>
|
<mat-tab label="Receive"><rtl-cln-lightning-invoices-table class="h-100" calledFrom="home" /></mat-tab>
|
||||||
<mat-tab label="Pay"><rtl-cln-lightning-payments [calledFrom]="'home'" /></mat-tab>
|
<mat-tab label="Pay"><rtl-cln-lightning-payments calledFrom="home" /></mat-tab>
|
||||||
</mat-tab-group>
|
</mat-tab-group>
|
||||||
<div class="underline">
|
<div class="underline">
|
||||||
<button mat-icon-button class="more-button" aria-label="Toggle menu" [matMenuTriggerFor]="menuTransactions">
|
<button mat-icon-button class="more-button" aria-label="Toggle menu" [matMenuTriggerFor]="menuTransactions">
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ export interface Tile {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-home',
|
selector: 'rtl-cln-home',
|
||||||
templateUrl: './home.component.html',
|
templateUrl: './home.component.html',
|
||||||
styleUrls: ['./home.component.scss']
|
styleUrls: ['./home.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { GetInfo } from '../../../shared/models/clnModels';
|
||||||
import { CommonService } from '../../../shared/services/common.service';
|
import { CommonService } from '../../../shared/services/common.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-node-info',
|
selector: 'rtl-cln-node-info',
|
||||||
templateUrl: './node-info.component.html',
|
templateUrl: './node-info.component.html',
|
||||||
styleUrls: ['./node-info.component.scss']
|
styleUrls: ['./node-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-liquidity-ads-list',
|
selector: 'rtl-cln-liquidity-ads-list',
|
||||||
templateUrl: './liquidity-ads-list.component.html',
|
templateUrl: './liquidity-ads-list.component.html',
|
||||||
styleUrls: ['./liquidity-ads-list.component.scss'],
|
styleUrls: ['./liquidity-ads-list.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import { RTLState } from '../../../store/rtl.state';
|
||||||
import { saveNewChannel } from '../../store/cln.actions';
|
import { saveNewChannel } from '../../store/cln.actions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-open-liquidity-channel',
|
selector: 'rtl-cln-open-liquidity-channel',
|
||||||
templateUrl: './open-liquidity-channel-modal.component.html',
|
templateUrl: './open-liquidity-channel-modal.component.html',
|
||||||
styleUrls: ['./open-liquidity-channel-modal.component.scss']
|
styleUrls: ['./open-liquidity-channel-modal.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { Component, AfterContentChecked, Input } from '@angular/core';
|
||||||
import { FeeRates, FeeRatePerObj, feeRateStyle } from '../../../shared/models/clnModels';
|
import { FeeRates, FeeRatePerObj, feeRateStyle } from '../../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-fee-rates',
|
selector: 'rtl-cln-fee-rates',
|
||||||
templateUrl: './fee-rates.component.html',
|
templateUrl: './fee-rates.component.html',
|
||||||
styleUrls: ['./fee-rates.component.scss']
|
styleUrls: ['./fee-rates.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" [showColorFieldSeparately]="false" />
|
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" [showColorFieldSeparately]="false" />
|
||||||
<rtl-cln-channel-status-info *ngSwitchCase="'status'" fxFlex="100" [channelsStatus]="channelsStatus" [errorMessage]="errorMessages[0] + ' ' + errorMessages[1]" />
|
<rtl-cln-channel-status-info *ngSwitchCase="'status'" fxFlex="100" [channelsStatus]="channelsStatus" [errorMessage]="errorMessages[0] + ' ' + errorMessages[1]" />
|
||||||
<rtl-cln-fee-info *ngSwitchCase="'fee'" fxFlex="100" [fees]="fees" [errorMessage]="errorMessages[0] + ' ' + errorMessages[2] + ' ' + errorMessages[3]" />
|
<rtl-cln-fee-info *ngSwitchCase="'fee'" fxFlex="100" [fees]="fees" [errorMessage]="errorMessages[0] + ' ' + errorMessages[2] + ' ' + errorMessages[3]" />
|
||||||
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKB'" class="h-100" [feeRates]="feeRatesPerKB" [feeRateStyle]="'KB'" [errorMessage]="errorMessages[4]" />
|
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKB'" class="h-100" feeRateStyle="KB" [feeRates]="feeRatesPerKB" [errorMessage]="errorMessages[4]" />
|
||||||
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKW'" class="h-100" [feeRates]="feeRatesPerKW" [feeRateStyle]="'KW'" [errorMessage]="errorMessages[5]" />
|
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKW'" class="h-100" feeRateStyle="KW" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[5]" />
|
||||||
<rtl-cln-onchain-fee-estimates *ngSwitchCase="'onChainFeeEstimates'" class="h-100" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[4]" />
|
<rtl-cln-onchain-fee-estimates *ngSwitchCase="'onChainFeeEstimates'" class="h-100" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[4]" />
|
||||||
</div>
|
</div>
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
|
|
@ -71,8 +71,8 @@
|
||||||
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" [showColorFieldSeparately]="false" />
|
<rtl-cln-node-info *ngSwitchCase="'node'" fxFlex="100" [information]="information" [showColorFieldSeparately]="false" />
|
||||||
<rtl-cln-channel-status-info *ngSwitchCase="'status'" fxFlex="100" [channelsStatus]="channelsStatus" [errorMessage]="errorMessages[0] + ' ' + errorMessages[1]" />
|
<rtl-cln-channel-status-info *ngSwitchCase="'status'" fxFlex="100" [channelsStatus]="channelsStatus" [errorMessage]="errorMessages[0] + ' ' + errorMessages[1]" />
|
||||||
<rtl-cln-fee-info *ngSwitchCase="'fee'" fxFlex="100" [fees]="fees" [errorMessage]="errorMessages[0] + ' ' + errorMessages[2] + ' ' + errorMessages[3]" />
|
<rtl-cln-fee-info *ngSwitchCase="'fee'" fxFlex="100" [fees]="fees" [errorMessage]="errorMessages[0] + ' ' + errorMessages[2] + ' ' + errorMessages[3]" />
|
||||||
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKB'" class="h-100" [feeRates]="feeRatesPerKB" [feeRateStyle]="'KB'" [errorMessage]="errorMessages[4]" />
|
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKB'" class="h-100" feeRateStyle="KB" [feeRates]="feeRatesPerKB" [errorMessage]="errorMessages[4]" />
|
||||||
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKW'" class="h-100" [feeRates]="feeRatesPerKW" [feeRateStyle]="'KW'" [errorMessage]="errorMessages[4]" />
|
<rtl-cln-fee-rates *ngSwitchCase="'feeRatesKW'" class="h-100" feeRateStyle="KW" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[4]" />
|
||||||
<rtl-cln-onchain-fee-estimates *ngSwitchCase="'onChainFeeEstimates'" class="h-100" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[4]" />
|
<rtl-cln-onchain-fee-estimates *ngSwitchCase="'onChainFeeEstimates'" class="h-100" [feeRates]="feeRatesPerKW" [errorMessage]="errorMessages[4]" />
|
||||||
</div>
|
</div>
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import { rootSelectedNode } from '../../store/rtl.selector';
|
||||||
import { channels, feeRatesPerKB, feeRatesPerKW, forwardingHistory, utxoBalances, nodeInfoAndAPIsStatus } from '../store/cln.selector';
|
import { channels, feeRatesPerKB, feeRatesPerKW, forwardingHistory, utxoBalances, nodeInfoAndAPIsStatus } from '../store/cln.selector';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-network-info',
|
selector: 'rtl-cln-network-info',
|
||||||
templateUrl: './network-info.component.html',
|
templateUrl: './network-info.component.html',
|
||||||
styleUrls: ['./network-info.component.scss']
|
styleUrls: ['./network-info.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { Component, Input } from '@angular/core';
|
||||||
import { FeeRates } from '../../../shared/models/clnModels';
|
import { FeeRates } from '../../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-onchain-fee-estimates',
|
selector: 'rtl-cln-onchain-fee-estimates',
|
||||||
templateUrl: './on-chain-fee-estimates.component.html',
|
templateUrl: './on-chain-fee-estimates.component.html',
|
||||||
styleUrls: ['./on-chain-fee-estimates.component.scss']
|
styleUrls: ['./on-chain-fee-estimates.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import { openAlert } from '../../../store/rtl.actions';
|
||||||
import { getNewAddress } from '../../store/cln.actions';
|
import { getNewAddress } from '../../store/cln.actions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-on-chain-receive',
|
selector: 'rtl-cln-on-chain-receive',
|
||||||
templateUrl: './on-chain-receive.component.html',
|
templateUrl: './on-chain-receive.component.html',
|
||||||
styleUrls: ['./on-chain-receive.component.scss']
|
styleUrls: ['./on-chain-receive.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
|
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
|
||||||
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayoutAlign.gt-sm="space-between center" fxLayout.gt-sm="row wrap">
|
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayoutAlign.gt-sm="space-between center" fxLayout.gt-sm="row wrap">
|
||||||
<div fxFlex="48" fxLayoutAlign="space-between start">
|
<div fxFlex="48" fxLayoutAlign="space-between start">
|
||||||
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [fxFlex]="selFeeRate === 'customperkb' && !flgMinConf ? '48' : '100'">
|
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [ngClass]="selFeeRate === 'customperkb' && !flgMinConf ? 'flex-48' : 'flex-100'">
|
||||||
<mat-label>Fee Rate</mat-label>
|
<mat-label>Fee Rate</mat-label>
|
||||||
<mat-select tabindex="4" [disabled]="flgMinConf" [(value)]="selFeeRate" (selectionChange)="customFeeRate=null">
|
<mat-select tabindex="4" [disabled]="flgMinConf" [(value)]="selFeeRate" (selectionChange)="customFeeRate=null">
|
||||||
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
||||||
|
|
@ -132,7 +132,7 @@
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign.gt-sm="space-between center">
|
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign.gt-sm="space-between center">
|
||||||
<div fxFlex="48" fxLayoutAlign="space-between start">
|
<div fxFlex="48" fxLayoutAlign="space-between start">
|
||||||
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [fxFlex]="sendFundFormGroup.controls.selFeeRate.value === 'customperkb' && !sendFundFormGroup.controls.flgMinConf.value ? '48' : '100'">
|
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [ngClass]="sendFundFormGroup.controls.selFeeRate.value === 'customperkb' && !sendFundFormGroup.controls.flgMinConf.value ? 'flex-48' : 'flex-100'">
|
||||||
<mat-label>Fee Rate</mat-label>
|
<mat-label>Fee Rate</mat-label>
|
||||||
<mat-select tabindex="4" formControlName="selFeeRate">
|
<mat-select tabindex="4" formControlName="selFeeRate">
|
||||||
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,11 @@ import { setChannelTransaction } from '../../store/cln.actions';
|
||||||
import { rootAppConfig, rootSelectedNode } from '../../../store/rtl.selector';
|
import { rootAppConfig, rootSelectedNode } from '../../../store/rtl.selector';
|
||||||
import { clnNodeInformation, utxoBalances } from '../../store/cln.selector';
|
import { clnNodeInformation, utxoBalances } from '../../store/cln.selector';
|
||||||
import { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';
|
import { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';
|
||||||
import { DataService } from 'src/app/shared/services/data.service';
|
import { DataService } from '../../../shared/services/data.service';
|
||||||
import { RecommendedFeeRates } from 'src/app/shared/models/rtlModels';
|
import { RecommendedFeeRates } from '../../../shared/models/rtlModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-on-chain-send-modal',
|
selector: 'rtl-cln-on-chain-send-modal',
|
||||||
templateUrl: './on-chain-send-modal.component.html',
|
templateUrl: './on-chain-send-modal.component.html',
|
||||||
styleUrls: ['./on-chain-send-modal.component.scss']
|
styleUrls: ['./on-chain-send-modal.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import { RTLState } from '../../../store/rtl.state';
|
||||||
import { openAlert } from '../../../store/rtl.actions';
|
import { openAlert } from '../../../store/rtl.actions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-on-chain-send',
|
selector: 'rtl-cln-on-chain-send',
|
||||||
templateUrl: './on-chain-send.component.html',
|
templateUrl: './on-chain-send.component.html',
|
||||||
styleUrls: ['./on-chain-send.component.scss']
|
styleUrls: ['./on-chain-send.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { Balance, LocalRemoteBalance, UTXO } from '../../shared/models/clnModels
|
||||||
import { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';
|
import { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-on-chain',
|
selector: 'rtl-cln-on-chain',
|
||||||
templateUrl: './on-chain.component.html',
|
templateUrl: './on-chain.component.html',
|
||||||
styleUrls: ['./on-chain.component.scss']
|
styleUrls: ['./on-chain.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [selectedIndex]="selectedTableIndex" (selectedIndexChange)="onSelectedIndexChanged($event)">
|
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [selectedIndex]="selectedTableIndex" (selectedIndexChange)="onSelectedIndexChanged($event)">
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadgeColor="primary" matBadge="{{numUtxos}}">UTXOs</span>
|
<span matBadge="{{numUtxos}}" matBadgeOverlap="false" class="tab-badge" matBadgeColor="primary">UTXOs</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<rtl-cln-on-chain-utxos fxLayout="row" fxFlex="100" [numDustUTXOs]="numDustUtxos" [isDustUTXO]="false" [dustAmount]="DUST_AMOUNT" />
|
<rtl-cln-on-chain-utxos fxLayout="row" fxFlex="100" [numDustUTXOs]="numDustUtxos" [isDustUTXO]="false" [dustAmount]="DUST_AMOUNT" />
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{numDustUtxos}}">Dust UTXOs</span>
|
<span matBadge="{{numDustUtxos}}" matBadgeOverlap="false" class="tab-badge">Dust UTXOs</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<rtl-cln-on-chain-utxos fxLayout="row" fxFlex="100" [numDustUTXOs]="numDustUtxos" [isDustUTXO]="true" [dustAmount]="DUST_AMOUNT" />
|
<rtl-cln-on-chain-utxos fxLayout="row" fxFlex="100" [numDustUTXOs]="numDustUtxos" [isDustUTXO]="true" [dustAmount]="DUST_AMOUNT" />
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import { utxoBalances } from '../../store/cln.selector';
|
||||||
import { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';
|
import { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-utxo-tables',
|
selector: 'rtl-cln-utxo-tables',
|
||||||
templateUrl: './utxo-tables.component.html',
|
templateUrl: './utxo-tables.component.html',
|
||||||
styleUrls: ['./utxo-tables.component.scss']
|
styleUrls: ['./utxo-tables.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
<th *matHeaderCellDef mat-header-cell mat-sort-header arrowPosition="before" matTooltip="Status"></th>
|
<th *matHeaderCellDef mat-header-cell mat-sort-header arrowPosition="before" matTooltip="Status"></th>
|
||||||
<td *matCellDef="let utxo" mat-cell>
|
<td *matCellDef="let utxo" mat-cell>
|
||||||
<span *ngIf="utxo.status === 'confirmed'" class="dot green" matTooltip="Confirmed" matTooltipPosition="right"></span>
|
<span *ngIf="utxo.status === 'confirmed'" class="dot green" matTooltip="Confirmed" matTooltipPosition="right"></span>
|
||||||
<span *ngIf="utxo.status !== 'confirmed'" class="dot yellow" matTooltipPosition="right" matTooltip="{{utxo.status | titlecase}}"></span>
|
<span *ngIf="utxo.status !== 'confirmed'" matTooltip="{{utxo.status | titlecase}}" class="dot yellow" matTooltipPosition="right"></span>
|
||||||
</td>
|
</td>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container matColumnDef="txid">
|
<ng-container matColumnDef="txid">
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import { CamelCaseWithReplacePipe } from '../../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../../shared/models/alertData';
|
import { MessageDataField } from '../../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-on-chain-utxos',
|
selector: 'rtl-cln-on-chain-utxos',
|
||||||
templateUrl: './utxos.component.html',
|
templateUrl: './utxos.component.html',
|
||||||
styleUrls: ['./utxos.component.scss'],
|
styleUrls: ['./utxos.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<form fxLayout="column">
|
<form fxLayout="column">
|
||||||
<div fxLayout="column" class="bordered-box mb-1 p-2">
|
<div fxLayout="column" class="bordered-box mb-1 p-2">
|
||||||
<p fxLayoutAlign="start center" class="pb-1 word-break">Bump fee for transaction id: {{bumpFeeChannel?.funding_txid}}
|
<p fxLayoutAlign="start center" class="pb-1 word-break">Bump fee for transaction id: {{bumpFeeChannel?.funding_txid}}
|
||||||
<fa-icon class="ml-1 fa-icon-primary" matTooltip="{{'Link to ' + selNode.settings.blockExplorerUrl}}" [icon]="faUpRightFromSquare" (click)="onExplorerClicked(bumpFeeChannel?.funding_txid)"/>
|
<fa-icon matTooltip="{{'Link to ' + selNode.settings.blockExplorerUrl}}" class="ml-1 fa-icon-primary" [icon]="faUpRightFromSquare" (click)="onExplorerClicked(bumpFeeChannel?.funding_txid)"/>
|
||||||
</p>
|
</p>
|
||||||
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
|
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
|
||||||
<div fxFlex="100" class="alert alert-info">
|
<div fxFlex="100" class="alert alert-info">
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import { openSnackBar } from '../../../../store/rtl.actions';
|
||||||
import { getNewAddress, setChannelTransaction } from '../../../store/cln.actions';
|
import { getNewAddress, setChannelTransaction } from '../../../store/cln.actions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-bump-fee',
|
selector: 'rtl-cln-bump-fee',
|
||||||
templateUrl: './bump-fee.component.html',
|
templateUrl: './bump-fee.component.html',
|
||||||
styleUrls: ['./bump-fee.component.scss']
|
styleUrls: ['./bump-fee.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
<h4 fxLayoutAlign="start" class="font-bold-500">Funding Transaction ID</h4>
|
<h4 fxLayoutAlign="start" class="font-bold-500">Funding Transaction ID</h4>
|
||||||
<span class="foreground-secondary-text">
|
<span class="foreground-secondary-text">
|
||||||
{{channel.funding_txid}}
|
{{channel.funding_txid}}
|
||||||
<fa-icon class="ml-1 fa-icon-primary" matTooltip="{{'Link to ' + selNode.settings.blockExplorerUrl}}" [icon]="faUpRightFromSquare" (click)="onExplorerClicked()"/>
|
<fa-icon matTooltip="{{'Link to ' + selNode.settings.blockExplorerUrl}}" class="ml-1 fa-icon-primary" [icon]="faUpRightFromSquare" (click)="onExplorerClicked()"/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import { Channel } from '../../../../shared/models/clnModels';
|
||||||
import { ScreenSizeEnum } from '../../../../shared/services/consts-enums-functions';
|
import { ScreenSizeEnum } from '../../../../shared/services/consts-enums-functions';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-information',
|
selector: 'rtl-cln-channel-information',
|
||||||
templateUrl: './channel-information.component.html',
|
templateUrl: './channel-information.component.html',
|
||||||
styleUrls: ['./channel-information.component.scss']
|
styleUrls: ['./channel-information.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -142,5 +142,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
@import "../../../../../shared/theme/styles/constants.scss";
|
@use '../../../../../shared/theme/styles/constants.scss' as *;
|
||||||
|
|
||||||
.mat-column-amount_msat {
|
.mat-column-amount_msat {
|
||||||
.htlc-row-span:not(:first-of-type) {
|
.htlc-row-span:not(:first-of-type) {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import { CamelCaseWithReplacePipe } from '../../../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../../../shared/models/alertData';
|
import { MessageDataField } from '../../../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-active-htlcs-table',
|
selector: 'rtl-cln-channel-active-htlcs-table',
|
||||||
templateUrl: './channel-active-htlcs-table.component.html',
|
templateUrl: './channel-active-htlcs-table.component.html',
|
||||||
styleUrls: ['./channel-active-htlcs-table.component.scss'],
|
styleUrls: ['./channel-active-htlcs-table.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
<div fxLayout="row">
|
<div fxLayout="row">
|
||||||
<mat-hint fxFlex="100" fxLayoutAlign="center center" class="font-size-80">{{channel.balancedness || 0 | number}}</mat-hint>
|
<mat-hint fxFlex="100" fxLayoutAlign="center center" class="font-size-80">{{channel.balancedness || 0 | number}}</mat-hint>
|
||||||
</div>
|
</div>
|
||||||
<mat-progress-bar mode="determinate" value="{{channel.to_us_msat && channel.to_us_msat > 0 ? ((channel.to_us_msat/((channel.to_us_msat)+(channel.to_them_msat)))*100) : 0}}" />
|
<mat-progress-bar value="{{channel.to_us_msat && channel.to_us_msat > 0 ? ((channel.to_us_msat/((channel.to_us_msat)+(channel.to_them_msat)))*100) : 0}}" mode="determinate" />
|
||||||
</td>
|
</td>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container matColumnDef="actions">
|
<ng-container matColumnDef="actions">
|
||||||
|
|
@ -142,5 +142,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ import { ECLReducer } from '../../../../../eclair/store/ecl.reducers';
|
||||||
import { CLNEffects } from '../../../../store/cln.effects';
|
import { CLNEffects } from '../../../../store/cln.effects';
|
||||||
import { CLNChannelOpenTableComponent } from './channel-open-table.component';
|
import { CLNChannelOpenTableComponent } from './channel-open-table.component';
|
||||||
import { ExtraOptions, Route, Router } from '@angular/router';
|
import { ExtraOptions, Route, Router } from '@angular/router';
|
||||||
|
import { HttpClientTestingModule, provideHttpClientTesting } from '@angular/common/http/testing';
|
||||||
|
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
||||||
|
|
||||||
describe('CLNChannelOpenTableComponent', () => {
|
describe('CLNChannelOpenTableComponent', () => {
|
||||||
let component: CLNChannelOpenTableComponent;
|
let component: CLNChannelOpenTableComponent;
|
||||||
|
|
@ -33,6 +35,8 @@ describe('CLNChannelOpenTableComponent', () => {
|
||||||
EffectsModule.forRoot([mockRTLEffects, mockLNDEffects, mockCLEffects, mockECLEffects])
|
EffectsModule.forRoot([mockRTLEffects, mockLNDEffects, mockCLEffects, mockECLEffects])
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
|
provideHttpClient(withInterceptorsFromDi()),
|
||||||
|
provideHttpClientTesting(),
|
||||||
CommonService,
|
CommonService,
|
||||||
{ provide: Router, useClass: mockRouter },
|
{ provide: Router, useClass: mockRouter },
|
||||||
{ provide: LoggerService, useClass: mockLoggerService },
|
{ provide: LoggerService, useClass: mockLoggerService },
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import { MessageDataField } from '../../../../../shared/models/alertData';
|
||||||
import { rootSelectedNode } from '../../../../../store/rtl.selector';
|
import { rootSelectedNode } from '../../../../../store/rtl.selector';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-open-table',
|
selector: 'rtl-cln-channel-open-table',
|
||||||
templateUrl: './channel-open-table.component.html',
|
templateUrl: './channel-open-table.component.html',
|
||||||
styleUrls: ['./channel-open-table.component.scss'],
|
styleUrls: ['./channel-open-table.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -127,5 +127,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import { CamelCaseWithReplacePipe } from '../../../../../shared/pipes/app.pipe';
|
||||||
import { MAT_SELECT_CONFIG } from '@angular/material/select';
|
import { MAT_SELECT_CONFIG } from '@angular/material/select';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channel-pending-table',
|
selector: 'rtl-cln-channel-pending-table',
|
||||||
templateUrl: './channel-pending-table.component.html',
|
templateUrl: './channel-pending-table.component.html',
|
||||||
styleUrls: ['./channel-pending-table.component.scss'],
|
styleUrls: ['./channel-pending-table.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,17 @@
|
||||||
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [(selectedIndex)]="activeLink" (selectedTabChange)="onSelectedTabChange($event)">
|
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [(selectedIndex)]="activeLink" (selectedTabChange)="onSelectedTabChange($event)">
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{openChannels}}">Open</span>
|
<span matBadge="{{openChannels}}" matBadgeOverlap="false" class="tab-badge">Open</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{pendingChannels}}">Pending/Inactive</span>
|
<span matBadge="{{pendingChannels}}" matBadgeOverlap="false" class="tab-badge">Pending/Inactive</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{activeHTLCs}}">Active HTLCs</span>
|
<span matBadge="{{activeHTLCs}}" matBadgeOverlap="false" class="tab-badge">Active HTLCs</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
</mat-tab-group>
|
</mat-tab-group>
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import { channels, nodeInfoAndBalance, peers, utxoBalances } from '../../../stor
|
||||||
import { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';
|
import { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-channels-tables',
|
selector: 'rtl-cln-channels-tables',
|
||||||
templateUrl: './channels-tables.component.html',
|
templateUrl: './channels-tables.component.html',
|
||||||
styleUrls: ['./channels-tables.component.scss']
|
styleUrls: ['./channels-tables.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayoutAlign.gt-sm="space-between center" fxLayout.gt-sm="row wrap">
|
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayoutAlign.gt-sm="space-between center" fxLayout.gt-sm="row wrap">
|
||||||
<div fxFlex="64" fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex="64" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [fxFlex]="selFeeRate === 'customperkb' && !flgMinConf ? '40' : '100'">
|
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [ngClass]="selFeeRate === 'customperkb' && !flgMinConf ? 'flex-40' : 'flex-100'">
|
||||||
<mat-label>Fee Rate</mat-label>
|
<mat-label>Fee Rate</mat-label>
|
||||||
<mat-select tabindex="4" [disabled]="flgMinConf" [(value)]="selFeeRate">
|
<mat-select tabindex="4" [disabled]="flgMinConf" [(value)]="selFeeRate">
|
||||||
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
@import "../../../../shared/theme/styles/constants.scss";
|
@use '../../../../shared/theme/styles/constants.scss' as *;
|
||||||
|
|
||||||
.open-inputs-box {
|
.open-inputs-box {
|
||||||
padding: 1.2rem 2.4rem 0.8rem 2.4rem !important;
|
padding: 1.2rem 2.4rem 0.8rem 2.4rem !important;
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import { rootSelectedNode } from '../../../../store/rtl.selector';
|
||||||
import { Node } from '../../../../shared/models/RTLconfig';
|
import { Node } from '../../../../shared/models/RTLconfig';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-open-channel',
|
selector: 'rtl-cln-open-channel',
|
||||||
templateUrl: './open-channel.component.html',
|
templateUrl: './open-channel.component.html',
|
||||||
styleUrls: ['./open-channel.component.scss']
|
styleUrls: ['./open-channel.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign.gt-sm="space-between center">
|
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign.gt-sm="space-between center">
|
||||||
<div fxFlex="53" fxLayoutAlign="space-between end">
|
<div fxFlex="53" fxLayoutAlign="space-between end">
|
||||||
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [fxFlex]="channelFormGroup.controls.selFeeRate.value === 'customperkb' && !channelFormGroup.controls.flgMinConf.value ? '25' : '100'">
|
<mat-form-field fxLayout="column" fxLayoutAlign="start center" [ngClass]="channelFormGroup.controls.selFeeRate.value === 'customperkb' && !channelFormGroup.controls.flgMinConf.value ? 'flex-25' : 'flex-100'">
|
||||||
<mat-label>Fee Rate</mat-label>
|
<mat-label>Fee Rate</mat-label>
|
||||||
<mat-select tabindex="4" formControlName="selFeeRate">
|
<mat-select tabindex="4" formControlName="selFeeRate">
|
||||||
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
<mat-option *ngFor="let feeRateType of feeRateTypes" [value]="feeRateType.feeRateId">
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import { rootSelectedNode } from '../../../store/rtl.selector';
|
||||||
import { Node } from '../../../shared/models/RTLconfig';
|
import { Node } from '../../../shared/models/RTLconfig';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-connect-peer',
|
selector: 'rtl-cln-connect-peer',
|
||||||
templateUrl: './connect-peer.component.html',
|
templateUrl: './connect-peer.component.html',
|
||||||
styleUrls: ['./connect-peer.component.scss']
|
styleUrls: ['./connect-peer.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,12 @@
|
||||||
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [(selectedIndex)]="activeLink" (selectedTabChange)="onSelectedTabChange($event)">
|
<mat-tab-group mat-stretch-tabs="false" mat-align-tabs="start" [(selectedIndex)]="activeLink" (selectedTabChange)="onSelectedTabChange($event)">
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{activeChannels}}">Channels</span>
|
<span matBadge="{{activeChannels}}" matBadgeOverlap="false" class="tab-badge">Channels</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<mat-tab>
|
<mat-tab>
|
||||||
<ng-template mat-tab-label>
|
<ng-template mat-tab-label>
|
||||||
<span matBadgeOverlap="false" class="tab-badge" matBadge="{{activePeers}}">Peers</span>
|
<span matBadge="{{activePeers}}" matBadgeOverlap="false" class="tab-badge">Peers</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
</mat-tab-group>
|
</mat-tab-group>
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import { utxoBalances, channels, peers } from '../store/cln.selector';
|
||||||
import { Balance, Channel, LocalRemoteBalance, Peer, UTXO } from '../../shared/models/clnModels';
|
import { Balance, Channel, LocalRemoteBalance, Peer, UTXO } from '../../shared/models/clnModels';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-connections',
|
selector: 'rtl-cln-connections',
|
||||||
templateUrl: './connections.component.html',
|
templateUrl: './connections.component.html',
|
||||||
styleUrls: ['./connections.component.scss']
|
styleUrls: ['./connections.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,6 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -28,6 +28,7 @@ import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-peers',
|
selector: 'rtl-cln-peers',
|
||||||
templateUrl: './peers.component.html',
|
templateUrl: './peers.component.html',
|
||||||
styleUrls: ['./peers.component.scss'],
|
styleUrls: ['./peers.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<mat-card>
|
<mat-card>
|
||||||
<mat-card-content fxLayout="column">
|
<mat-card-content fxLayout="column">
|
||||||
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" [tabPanel]="tabPanel">
|
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" [tabPanel]="tabPanel">
|
||||||
<div *ngFor="let link of links" tabindex="1" role="tab" mat-tab-link class="mat-tab-label" [active]="activeLink === link.link" routerLink="{{link.link}}" (click)="activeLink = link.link">{{link.name}}</div>
|
<div *ngFor="let link of links" routerLink="{{link.link}}" tabindex="1" role="tab" mat-tab-link class="mat-tab-label" [active]="activeLink === link.link" (click)="activeLink = link.link">{{link.name}}</div>
|
||||||
</nav>
|
</nav>
|
||||||
<mat-tab-nav-panel #tabPanel />
|
<mat-tab-nav-panel #tabPanel />
|
||||||
<router-outlet />
|
<router-outlet />
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import { takeUntil, filter } from 'rxjs/operators';
|
||||||
import { faChartBar } from '@fortawesome/free-solid-svg-icons';
|
import { faChartBar } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-reports',
|
selector: 'rtl-cln-reports',
|
||||||
templateUrl: './reports.component.html',
|
templateUrl: './reports.component.html',
|
||||||
styleUrls: ['./reports.component.scss']
|
styleUrls: ['./reports.component.scss']
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
<div fxLayout="column" fxLayoutAlign="center center" class="padding-gap-x">
|
<div fxLayout="column" fxLayoutAlign="center center" class="padding-gap-x">
|
||||||
<mat-radio-group class="my-1" color="primary" name="selReportBy" fxFlex="100" fxLayoutAlign="start center" [(ngModel)]="selReportBy" (change)="onSelReportByChange()">
|
<mat-radio-group class="my-1" color="primary" name="selReportBy" fxFlex="100" fxLayoutAlign="start center" [(ngModel)]="selReportBy" (change)="onSelReportByChange()">
|
||||||
<span class="mr-2">Report By: </span>
|
<span class="mr-2">Report By: </span>
|
||||||
<mat-radio-button class="mr-2" tabindex="1" value="{{reportBy.FEES}}">Fees</mat-radio-button>
|
<mat-radio-button value="{{reportBy.FEES}}" class="mr-2" tabindex="1">Fees</mat-radio-button>
|
||||||
<mat-radio-button tabindex="2" value="{{reportBy.EVENTS}}">Events</mat-radio-button>
|
<mat-radio-button value="{{reportBy.EVENTS}}" tabindex="2">Events</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxLayoutAlign="start stretch" fxFlex="100" class="padding-gap-x">
|
<div fxLayout="column" fxLayoutAlign="start stretch" fxFlex="100" class="padding-gap-x">
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
</ngx-charts-bar-vertical>
|
</ngx-charts-bar-vertical>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-1">
|
<div class="mt-1">
|
||||||
<rtl-cln-forwarding-history *ngIf="filteredEventsBySelectedPeriod && filteredEventsBySelectedPeriod.length > 0" [pageId]="'reports'" [tableId]="'routing'" [eventsData]="filteredEventsBySelectedPeriod" [selFilter]="eventFilterValue" />
|
<rtl-cln-forwarding-history *ngIf="filteredEventsBySelectedPeriod && filteredEventsBySelectedPeriod.length > 0" pageId="reports" tableId="routing" [eventsData]="filteredEventsBySelectedPeriod" [selFilter]="eventFilterValue" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import { getForwardingHistory } from '../../store/cln.actions';
|
||||||
import { DataService } from '../../../shared/services/data.service';
|
import { DataService } from '../../../shared/services/data.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-routing-report',
|
selector: 'rtl-cln-routing-report',
|
||||||
templateUrl: './routing-report.component.html',
|
templateUrl: './routing-report.component.html',
|
||||||
styleUrls: ['./routing-report.component.scss'],
|
styleUrls: ['./routing-report.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { LoggerService } from '../../../shared/services/logger.service';
|
||||||
import { PageSettings, TableSetting } from '../../../shared/models/pageSettings';
|
import { PageSettings, TableSetting } from '../../../shared/models/pageSettings';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-transactions-report',
|
selector: 'rtl-cln-transactions-report',
|
||||||
templateUrl: './transactions-report.component.html',
|
templateUrl: './transactions-report.component.html',
|
||||||
styleUrls: ['./transactions-report.component.scss'],
|
styleUrls: ['./transactions-report.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -108,5 +108,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-failed-history',
|
selector: 'rtl-cln-failed-history',
|
||||||
templateUrl: './failed-transactions.component.html',
|
templateUrl: './failed-transactions.component.html',
|
||||||
styleUrls: ['./failed-transactions.component.scss'],
|
styleUrls: ['./failed-transactions.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -110,5 +110,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-forwarding-history',
|
selector: 'rtl-cln-forwarding-history',
|
||||||
templateUrl: './forwarding-history.component.html',
|
templateUrl: './forwarding-history.component.html',
|
||||||
styleUrls: ['./forwarding-history.component.scss'],
|
styleUrls: ['./forwarding-history.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -93,5 +93,5 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator *ngIf="errorMessage === ''" class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
import { MessageDataField } from '../../../shared/models/alertData';
|
import { MessageDataField } from '../../../shared/models/alertData';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-local-failed-history',
|
selector: 'rtl-cln-local-failed-history',
|
||||||
templateUrl: './local-failed-transactions.component.html',
|
templateUrl: './local-failed-transactions.component.html',
|
||||||
styleUrls: ['./local-failed-transactions.component.scss'],
|
styleUrls: ['./local-failed-transactions.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<mat-paginator #paginatorIn class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator #paginatorIn class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxFlex="49" fxLayoutAlign="end stretch">
|
<div fxLayout="column" fxFlex="49" fxLayoutAlign="end stretch">
|
||||||
<div fxLayout="column" fxLayout.gt-sm="row" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" class="page-sub-title-container w-100" [ngClass]="{'mt-2': screenSize !== screenSizeEnum.LG}">
|
<div fxLayout="column" fxLayout.gt-sm="row" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" class="page-sub-title-container w-100" [ngClass]="{'mt-2': screenSize !== screenSizeEnum.LG}">
|
||||||
|
|
@ -112,7 +112,7 @@
|
||||||
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
||||||
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
<tr *matRowDef="let row; columns: displayedColumns;" mat-row></tr>
|
||||||
</table>
|
</table>
|
||||||
<mat-paginator #paginatorOut class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [showFirstLastButtons]="screenSize === screenSizeEnum.XS ? false : true" />
|
<mat-paginator #paginatorOut class="mb-1" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" [hidePageSize]="screenSize === screenSizeEnum.XS ? false : true" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import { getForwardingHistory } from '../../store/cln.actions';
|
||||||
import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
import { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
standalone: false,
|
||||||
selector: 'rtl-cln-routing-peers',
|
selector: 'rtl-cln-routing-peers',
|
||||||
templateUrl: './routing-peers.component.html',
|
templateUrl: './routing-peers.component.html',
|
||||||
styleUrls: ['./routing-peers.component.scss'],
|
styleUrls: ['./routing-peers.component.scss'],
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<mat-card-content fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
|
<mat-card-content fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
|
||||||
<div fxLayout="row" fxFlex="100">
|
<div fxLayout="row" fxFlex="100">
|
||||||
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" fxFlex="100" [tabPanel]="tabPanel">
|
<nav mat-tab-nav-bar mat-stretch-tabs="false" mat-align-tabs="start" fxFlex="100" [tabPanel]="tabPanel">
|
||||||
<div *ngFor="let link of links" tabindex="1" mat-tab-link role="tab" class="mat-tab-label" [active]="activeLink === link.link" routerLink="{{link.link}}" (click)="activeLink = link.link">{{link.name}}</div>
|
<div *ngFor="let link of links" routerLink="{{link.link}}" tabindex="1" mat-tab-link role="tab" class="mat-tab-label" [active]="activeLink === link.link" (click)="activeLink = link.link">{{link.name}}</div>
|
||||||
</nav>
|
</nav>
|
||||||
<mat-tab-nav-panel #tabPanel />
|
<mat-tab-nav-panel #tabPanel />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue