Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
43ba2fc
Version updated
ShahanaFarooqui Sep 10, 2025
2375bb6
Do not throw error if fiat rate fetching fails
ShahanaFarooqui Nov 3, 2025
c56dda5
Add `LIGHTNING_WS_HOST` and `LIGHTNING_WS_TOR_HOST`
ShahanaFarooqui Nov 19, 2025
ceaeff6
Update Release process instructions
ShahanaFarooqui Nov 27, 2025
c2464d5
Updated dependencies to latest versions
ShahanaFarooqui Nov 27, 2025
8521d8d
Fix Errors generated due to dependency updates
ShahanaFarooqui Nov 27, 2025
a33c322
Fix test errors generated due to dependency updates
ShahanaFarooqui Nov 27, 2025
88fdec4
Add Fiat tooltip for channels and channel details card
ShahanaFarooqui Dec 18, 2025
2ac5bbb
Remove console warnings regarding empty DOM and Hydration
ShahanaFarooqui Dec 5, 2025
3e3c0f3
Fix scss errors
ShahanaFarooqui Dec 6, 2025
b374cfc
Update Styles after Bootstrap update and fixes
ShahanaFarooqui Dec 9, 2025
5e7ad3b
Fix console error from currency path
ShahanaFarooqui Dec 9, 2025
b430eda
More UI style fixes
ShahanaFarooqui Dec 9, 2025
3369578
Fix Number of Peers animation
ShahanaFarooqui Dec 11, 2025
262103d
Lightning Data Pagination SQLs
ShahanaFarooqui Dec 11, 2025
a5cbaa7
Updated listPeerChannels with SQL query
ShahanaFarooqui Dec 11, 2025
055006a
Removed listNodes Endpoint
ShahanaFarooqui Dec 18, 2025
70bec56
Updated store & services to use sql queries for transactions and offers
ShahanaFarooqui Dec 19, 2025
10f4886
BTC Transactions list infinite scroll
ShahanaFarooqui Dec 23, 2025
b71a3f9
CLN transactions & Offers infinite scroll
ShahanaFarooqui Dec 23, 2025
82f7101
Data cleanup and offer description
ShahanaFarooqui Dec 23, 2025
4453c30
Accordion Fix
ShahanaFarooqui Dec 24, 2025
ae0effd
Remove listPeers and use nodeinfo.num_peers instead
ShahanaFarooqui Dec 24, 2025
cb1f301
Lists Refresh Buttons
ShahanaFarooqui Dec 24, 2025
1f36f46
Disable gRPC connect option
ShahanaFarooqui Dec 24, 2025
934c308
Fix Bookkeeper Night mode Styles
ShahanaFarooqui Jan 13, 2026
a5149df
Separated async store setup on page load
ShahanaFarooqui Jan 13, 2026
ce92b47
Increase Wait Time
ShahanaFarooqui Jan 13, 2026
26f1d16
Fix Linting
ShahanaFarooqui Jan 13, 2026
b4f5243
Fixed Tests
ShahanaFarooqui Jan 13, 2026
e0b0100
Fix build time CSS warnings
ShahanaFarooqui Jan 13, 2026
288e973
Merge branch 'main' into Release-26.01
ShahanaFarooqui Jan 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
- APP_CONFIG_FILE: Path for cln-application's configuration file (default: `./config.json`)
- APP_LOG_FILE: Path for cln-application's log file (default: `./application-cln.log`)
- APP_MODE: Mode for logging and other settings (valid values: production/development/testing, default: `production`)
- APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST/GRPC, default: `COMMANDO`)
- APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST, default: `COMMANDO`)

# Core lightning Values
- LIGHTNING_HOST: IP address of Core lightning node (default: `localhost`)
Expand All @@ -90,9 +90,9 @@
- LIGHTNING_REST_CA_CERT_FILE: CA certificate file path including file name for REST TLS authentication (used by `REST` APP_CONNECT and `https` LIGHTNING_REST_PROTOCOL; default: `./ca.pem`)

# CLN gRPC Values
- LIGHTNING_GRPC_HOST: IP address/hostname of Core Lightning GRPC interface (used if APP_CONNECT is `GRPC`, default: `localhost`)
- LIGHTNING_GRPC_HOST: IP address/hostname of Core Lightning GRPC interface (default: `localhost`)
- LIGHTNING_GRPC_TOR_HOST: Tor hidden service URL for Core Lightning GRPC interface (default: ``)
- LIGHTNING_GRPC_PORT: Core lightning's GRPC port (used if APP_CONNECT is `GRPC`; default: `9736`)
- LIGHTNING_GRPC_PORT: Core lightning's GRPC port (default: `9736`)
- LIGHTNING_GRPC_PROTO_PATH: URL to directory containing CLN gRPC protocol definitions (default: `https://github.com/ElementsProject/lightning/tree/master/cln-grpc/proto`)
- LIGHTNING_GRPC_CLIENT_KEY_FILE: Client key file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./client-key.pem`)
- LIGHTNING_GRPC_CLIENT_CERT_FILE: Client certificate file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./client.pem`)
Expand Down
50 changes: 25 additions & 25 deletions apps/backend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cln-application-backend",
"version": "25.12",
"version": "26.01",
"description": "Core lightning application backend",
"private": true,
"license": "MIT",
Expand All @@ -13,38 +13,38 @@
"lint": "eslint source --ext .js,.ts"
},
"dependencies": {
"axios": "1.7.7",
"cookie-parser": "1.4.6",
"axios": "1.13.2",
"cookie-parser": "1.4.7",
"cors": "2.8.5",
"csurf": "1.11.0",
"express": "4.18.2",
"express": "5.1.0",
"express-winston": "4.2.0",
"jsonwebtoken": "9.0.2",
"lnmessage": "0.2.6",
"protobufjs": "7.4.0",
"ts-node": "10.9.1",
"winston": "3.11.0",
"lnmessage": "0.2.7",
"protobufjs": "7.5.4",
"ts-node": "10.9.2",
"winston": "3.18.3",
"ws": "8.18.3"
},
"devDependencies": {
"@eslint/js": "9.22.0",
"@types/cookie-parser": "1.4.6",
"@types/cors": "2.8.17",
"@eslint/js": "9.39.1",
"@types/cookie-parser": "1.4.10",
"@types/cors": "2.8.19",
"@types/csurf": "1.11.5",
"@types/express": "4.17.21",
"@types/jsonwebtoken": "9.0.5",
"@types/morgan": "1.9.9",
"@types/node": "20.9.4",
"@typescript-eslint/eslint-plugin": "8.33.0",
"@typescript-eslint/parser": "8.33.0",
"eslint": "9.27.0",
"eslint-plugin-node-dependencies": "0.12.0",
"eslint-plugin-react": "7.35.2",
"globals": "16.0.0",
"nodemon": "3.0.1",
"prettier": "3.1.0",
"typescript": "5.8.3",
"typescript-eslint": "8.26.0"
"@types/express": "5.0.5",
"@types/jsonwebtoken": "9.0.10",
"@types/morgan": "1.9.10",
"@types/node": "24.10.1",
"@typescript-eslint/eslint-plugin": "8.48.0",
"@typescript-eslint/parser": "8.48.0",
"eslint": "9.39.1",
"eslint-plugin-node-dependencies": "1.3.0",
"eslint-plugin-react": "7.37.5",
"globals": "16.5.0",
"nodemon": "3.1.11",
"prettier": "3.6.2",
"typescript": "5.9.3",
"typescript-eslint": "8.48.0"
},
"overrides": {
"chalk": "4.1.2",
Expand Down
2 changes: 1 addition & 1 deletion apps/backend/source/controllers/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export class AuthController {
isUserAuthenticated = async (req: Request, res: Response, next: NextFunction) => {
try {
const uaRes = isAuthenticated(req.cookies.token);
if (req.body.returnResponse) {
if (req.body?.returnResponse || false) {
// Frontend is asking if user is authenticated or not
if (APP_CONSTANTS.APP_SINGLE_SIGN_ON === 'true') {
return res.status(201).json({ isAuthenticated: true, isValidPassword: true });
Expand Down
8 changes: 5 additions & 3 deletions apps/backend/source/controllers/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,9 @@ export class SharedController {
const FIAT_VENUE = FIAT_VENUES.hasOwnProperty(req.params.fiatCurrency)
? FIAT_VENUES[req.params.fiatCurrency]
: 'COINGECKO';
logger.info('Fiat URL: ' + FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency);
logger.info(
'Fiat URL: ' + FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency,
);
return axios
.get(FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency)
.then((response: any) => {
Expand All @@ -100,11 +102,11 @@ export class SharedController {
})
.catch(err => {
logger.error('Fiat Error Response: ' + JSON.stringify(err));
res.status(200).json({ venue: "NONE", rate: "0" });
res.status(200).json({ venue: 'NONE', rate: '0' });
});
} catch (error: any) {
logger.error('Error from Fiat Rate: ' + JSON.stringify(error));
res.status(200).json({ venue: "NONE", rate: "0" });
res.status(200).json({ venue: 'NONE', rate: '0' });
}
};

Expand Down
4 changes: 2 additions & 2 deletions apps/backend/source/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@ async function startServer() {
server.listen({ port: APP_PORT, host: APP_HOST });
} catch (err: any) {
if (err.code) {
logger.error('Server Startup Error: ', err);
logger.error('Server Startup Error:', err);
} else {
logger.error('Server Startup Error: ', throwApiError(err));
logger.error('Server Startup Error:', throwApiError(err));
}
process.exit(1);
}
Expand Down
20 changes: 14 additions & 6 deletions apps/backend/source/service/lightning.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ import https from 'https';
import axios, { AxiosHeaders } from 'axios';
import Lnmessage from 'lnmessage';
import { GRPCError, LightningError, ValidationError } from '../models/errors.js';
import { GRPCService } from './grpc.service.js';
import {
HttpStatusCode,
APP_CONSTANTS,
AppConnect,
LN_MESSAGE_CONFIG,
REST_CONFIG,
GRPC_CONFIG,
} from '../shared/consts.js';
import { logger } from '../shared/logger.js';
import { setEnvVariables, validateEnvVariables } from '../shared/utils.js';
Expand Down Expand Up @@ -46,8 +44,13 @@ export class LightningService {
}
break;
case AppConnect.GRPC:
logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG));
this.clnService = new GRPCService(GRPC_CONFIG);
this.clnService = null;
throw new ValidationError(
HttpStatusCode.INVALID_DATA,
'gRPC connection to the Lightning node is not supported. Please use the COMMANDO or REST options for APP_CONNECT.',
);
// logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG));
// this.clnService = new GRPCService(GRPC_CONFIG);
break;
default:
logger.info('lnMessage connecting with config: ' + JSON.stringify(LN_MESSAGE_CONFIG));
Expand All @@ -71,8 +74,13 @@ export class LightningService {
return axios
.post(method, methodParams, this.axiosConfig)
.then((commandRes: any) => {
logger.info('REST response for ' + method + ': ' + JSON.stringify(commandRes.data));
return Promise.resolve(commandRes.data);
logger.info(
'REST response for ' +
method +
': ' +
JSON.stringify(commandRes.data || commandRes.rows),
);
return Promise.resolve(commandRes.data || commandRes.rows);
})
.catch((err: any) => {
logger.error('REST lightning error from ' + method + ' command');
Expand Down
2 changes: 1 addition & 1 deletion apps/backend/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
"lib": ["ES2022"]
},
"files": ["./source/server.ts"],
"include": ["./source/**/*.d.ts"]
"include": ["./source/**/*.ts"]
}
72 changes: 38 additions & 34 deletions apps/frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,59 +1,59 @@
{
"name": "cln-application-frontend",
"version": "25.12",
"version": "26.01",
"description": "Core lightning application frontend",
"private": true,
"license": "MIT",
"scripts": {
"start": "PORT=4300 react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"test": "react-scripts test --testTimeout=30000",
"lint": "eslint src --ext .js,.jsx,.ts,.tsx"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "6.4.2",
"@fortawesome/free-solid-svg-icons": "6.4.2",
"@fortawesome/react-fontawesome": "0.2.0",
"@reduxjs/toolkit": "2.7.0",
"axios": "1.6.7",
"bootstrap": "5.3.2",
"@fortawesome/fontawesome-svg-core": "7.1.0",
"@fortawesome/free-solid-svg-icons": "7.1.0",
"@fortawesome/react-fontawesome": "3.1.0",
"@reduxjs/toolkit": "2.11.0",
"axios": "1.13.2",
"bootstrap": "5.3.8",
"copy-to-clipboard": "3.3.3",
"crypto-js": "4.2.0",
"framer-motion": "10.16.5",
"framer-motion": "12.23.24",
"moment": "2.30.1",
"node-sass": "9.0.0",
"qrcode.react": "3.1.0",
"react": "18.2.0",
"react-bootstrap": "2.10.1",
"react-datepicker": "8.1.0",
"react-dom": "18.2.0",
"qrcode.react": "4.2.0",
"react": "19.2.0",
"react-bootstrap": "2.10.10",
"react-datepicker": "8.10.0",
"react-dom": "19.2.0",
"react-perfect-scrollbar": "1.5.8",
"react-redux": "9.2.0",
"react-router-dom": "6.30.0",
"recharts": "2.15.1",
"redux-thunk": "3.1.0"
"react-router-dom": "7.9.6",
"recharts": "3.5.0",
"redux-thunk": "3.1.0",
"sass": "1.94.2"
},
"devDependencies": {
"@testing-library/jest-dom": "6.4.2",
"@testing-library/react": "14.2.1",
"@testing-library/user-event": "14.5.1",
"@types/jest": "29.5.12",
"@types/node": "20.9.4",
"@types/react": "18.2.61",
"@types/react-dom": "18.2.19",
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1",
"@types/jest": "30.0.0",
"@types/node": "24.10.1",
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
"@types/redux-mock-store": "1.5.0",
"axios-mock-adapter": "1.22.0",
"canvas": "2.11.2",
"axios-mock-adapter": "2.1.0",
"canvas": "3.2.0",
"react-scripts": "5.0.1",
"redux-mock-store": "1.5.5",
"@typescript-eslint/eslint-plugin": "8.33.0",
"@typescript-eslint/parser": "8.33.0",
"eslint": "9.27.0",
"@typescript-eslint/eslint-plugin": "8.48.0",
"@typescript-eslint/parser": "8.48.0",
"eslint": "9.39.1",
"eslint-plugin-jsx-a11y": "6.10.2",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-react-hooks": "5.2.0",
"ts-jest": "29.1.2",
"typescript": "5.8.2"
"eslint-plugin-react-hooks": "7.0.1",
"ts-jest": "29.4.5",
"typescript": "5.9.3"
},
"overrides": {
"chalk": "4.1.2",
Expand All @@ -76,11 +76,15 @@
]
},
"jest": {
"moduleNameMapper": {
"^react-router-dom": "<rootDir>/../../node_modules/react-router-dom/dist/index.js",
"^react-router": "<rootDir>/../../node_modules/react-router/dist/production/index.js"
},
"transform": {
"^.+\\.[t|j]sx?$": "ts-jest"
},
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!axios|react-router-dom)/"
"node_modules/(?!axios|react-router-dom|react-router)/"
]
}
}
2 changes: 0 additions & 2 deletions apps/frontend/src/components/App/App.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
@import '../../styles/bootstrap-custom';
@import '../../styles/constants';
@import '../../styles/shared';

.list-scroll-container {
Expand Down
7 changes: 7 additions & 0 deletions apps/frontend/src/components/App/App.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import './App.scss';
import '../shared/FiatBox/FiatBox.scss';
import '../shared/CurrencyBox/CurrencyBox.scss';
import '../shared/ToastMessage/ToastMessage.scss';
import '../shared/InvalidInputMessage/InvalidInputMessage.scss';
import '../shared/StatusAlert/StatusAlert.scss';
import '../cln/Overview/Overview.scss';

import { Container } from 'react-bootstrap';

import useBreakpoint from '../../hooks/use-breakpoint';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import '../../../../styles/constants.scss';
@use '../../../../styles/constants' as *;

.bkpr-tooltip {
border: 1px solid $light-dark;
Expand Down
Loading