Skip to content

Commit 71b6134

Browse files
Release 26.01
2 parents 5badff1 + 288e973 commit 71b6134

File tree

104 files changed

+15554
-16409
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+15554
-16409
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
- APP_CONFIG_FILE: Path for cln-application's configuration file (default: `./config.json`)
6565
- APP_LOG_FILE: Path for cln-application's log file (default: `./application-cln.log`)
6666
- APP_MODE: Mode for logging and other settings (valid values: production/development/testing, default: `production`)
67-
- APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST/GRPC, default: `COMMANDO`)
67+
- APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST, default: `COMMANDO`)
6868
6969
# Core lightning Values
7070
- LIGHTNING_HOST: IP address of Core lightning node (default: `localhost`)
@@ -90,9 +90,9 @@
9090
- 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`)
9191
9292
# CLN gRPC Values
93-
- LIGHTNING_GRPC_HOST: IP address/hostname of Core Lightning GRPC interface (used if APP_CONNECT is `GRPC`, default: `localhost`)
93+
- LIGHTNING_GRPC_HOST: IP address/hostname of Core Lightning GRPC interface (default: `localhost`)
9494
- LIGHTNING_GRPC_TOR_HOST: Tor hidden service URL for Core Lightning GRPC interface (default: ``)
95-
- LIGHTNING_GRPC_PORT: Core lightning's GRPC port (used if APP_CONNECT is `GRPC`; default: `9736`)
95+
- LIGHTNING_GRPC_PORT: Core lightning's GRPC port (default: `9736`)
9696
- LIGHTNING_GRPC_PROTO_PATH: URL to directory containing CLN gRPC protocol definitions (default: `https://github.com/ElementsProject/lightning/tree/master/cln-grpc/proto`)
9797
- 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`)
9898
- LIGHTNING_GRPC_CLIENT_CERT_FILE: Client certificate file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./client.pem`)

apps/backend/package.json

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cln-application-backend",
3-
"version": "25.12",
3+
"version": "26.01",
44
"description": "Core lightning application backend",
55
"private": true,
66
"license": "MIT",
@@ -13,38 +13,38 @@
1313
"lint": "eslint source --ext .js,.ts"
1414
},
1515
"dependencies": {
16-
"axios": "1.7.7",
17-
"cookie-parser": "1.4.6",
16+
"axios": "1.13.2",
17+
"cookie-parser": "1.4.7",
1818
"cors": "2.8.5",
1919
"csurf": "1.11.0",
20-
"express": "4.18.2",
20+
"express": "5.1.0",
2121
"express-winston": "4.2.0",
2222
"jsonwebtoken": "9.0.2",
23-
"lnmessage": "0.2.6",
24-
"protobufjs": "7.4.0",
25-
"ts-node": "10.9.1",
26-
"winston": "3.11.0",
23+
"lnmessage": "0.2.7",
24+
"protobufjs": "7.5.4",
25+
"ts-node": "10.9.2",
26+
"winston": "3.18.3",
2727
"ws": "8.18.3"
2828
},
2929
"devDependencies": {
30-
"@eslint/js": "9.22.0",
31-
"@types/cookie-parser": "1.4.6",
32-
"@types/cors": "2.8.17",
30+
"@eslint/js": "9.39.1",
31+
"@types/cookie-parser": "1.4.10",
32+
"@types/cors": "2.8.19",
3333
"@types/csurf": "1.11.5",
34-
"@types/express": "4.17.21",
35-
"@types/jsonwebtoken": "9.0.5",
36-
"@types/morgan": "1.9.9",
37-
"@types/node": "20.9.4",
38-
"@typescript-eslint/eslint-plugin": "8.33.0",
39-
"@typescript-eslint/parser": "8.33.0",
40-
"eslint": "9.27.0",
41-
"eslint-plugin-node-dependencies": "0.12.0",
42-
"eslint-plugin-react": "7.35.2",
43-
"globals": "16.0.0",
44-
"nodemon": "3.0.1",
45-
"prettier": "3.1.0",
46-
"typescript": "5.8.3",
47-
"typescript-eslint": "8.26.0"
34+
"@types/express": "5.0.5",
35+
"@types/jsonwebtoken": "9.0.10",
36+
"@types/morgan": "1.9.10",
37+
"@types/node": "24.10.1",
38+
"@typescript-eslint/eslint-plugin": "8.48.0",
39+
"@typescript-eslint/parser": "8.48.0",
40+
"eslint": "9.39.1",
41+
"eslint-plugin-node-dependencies": "1.3.0",
42+
"eslint-plugin-react": "7.37.5",
43+
"globals": "16.5.0",
44+
"nodemon": "3.1.11",
45+
"prettier": "3.6.2",
46+
"typescript": "5.9.3",
47+
"typescript-eslint": "8.48.0"
4848
},
4949
"overrides": {
5050
"chalk": "4.1.2",

apps/backend/source/controllers/auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class AuthController {
8181
isUserAuthenticated = async (req: Request, res: Response, next: NextFunction) => {
8282
try {
8383
const uaRes = isAuthenticated(req.cookies.token);
84-
if (req.body.returnResponse) {
84+
if (req.body?.returnResponse || false) {
8585
// Frontend is asking if user is authenticated or not
8686
if (APP_CONSTANTS.APP_SINGLE_SIGN_ON === 'true') {
8787
return res.status(201).json({ isAuthenticated: true, isValidPassword: true });

apps/backend/source/controllers/shared.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ export class SharedController {
8282
const FIAT_VENUE = FIAT_VENUES.hasOwnProperty(req.params.fiatCurrency)
8383
? FIAT_VENUES[req.params.fiatCurrency]
8484
: 'COINGECKO';
85-
logger.info('Fiat URL: ' + FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency);
85+
logger.info(
86+
'Fiat URL: ' + FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency,
87+
);
8688
return axios
8789
.get(FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency)
8890
.then((response: any) => {
@@ -100,11 +102,11 @@ export class SharedController {
100102
})
101103
.catch(err => {
102104
logger.error('Fiat Error Response: ' + JSON.stringify(err));
103-
res.status(200).json({ venue: "NONE", rate: "0" });
105+
res.status(200).json({ venue: 'NONE', rate: '0' });
104106
});
105107
} catch (error: any) {
106108
logger.error('Error from Fiat Rate: ' + JSON.stringify(error));
107-
res.status(200).json({ venue: "NONE", rate: "0" });
109+
res.status(200).json({ venue: 'NONE', rate: '0' });
108110
}
109111
};
110112

apps/backend/source/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ async function startServer() {
130130
server.listen({ port: APP_PORT, host: APP_HOST });
131131
} catch (err: any) {
132132
if (err.code) {
133-
logger.error('Server Startup Error: ', err);
133+
logger.error('Server Startup Error:', err);
134134
} else {
135-
logger.error('Server Startup Error: ', throwApiError(err));
135+
logger.error('Server Startup Error:', throwApiError(err));
136136
}
137137
process.exit(1);
138138
}

apps/backend/source/service/lightning.service.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ import https from 'https';
33
import axios, { AxiosHeaders } from 'axios';
44
import Lnmessage from 'lnmessage';
55
import { GRPCError, LightningError, ValidationError } from '../models/errors.js';
6-
import { GRPCService } from './grpc.service.js';
76
import {
87
HttpStatusCode,
98
APP_CONSTANTS,
109
AppConnect,
1110
LN_MESSAGE_CONFIG,
1211
REST_CONFIG,
13-
GRPC_CONFIG,
1412
} from '../shared/consts.js';
1513
import { logger } from '../shared/logger.js';
1614
import { setEnvVariables, validateEnvVariables } from '../shared/utils.js';
@@ -46,8 +44,13 @@ export class LightningService {
4644
}
4745
break;
4846
case AppConnect.GRPC:
49-
logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG));
50-
this.clnService = new GRPCService(GRPC_CONFIG);
47+
this.clnService = null;
48+
throw new ValidationError(
49+
HttpStatusCode.INVALID_DATA,
50+
'gRPC connection to the Lightning node is not supported. Please use the COMMANDO or REST options for APP_CONNECT.',
51+
);
52+
// logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG));
53+
// this.clnService = new GRPCService(GRPC_CONFIG);
5154
break;
5255
default:
5356
logger.info('lnMessage connecting with config: ' + JSON.stringify(LN_MESSAGE_CONFIG));
@@ -71,8 +74,13 @@ export class LightningService {
7174
return axios
7275
.post(method, methodParams, this.axiosConfig)
7376
.then((commandRes: any) => {
74-
logger.info('REST response for ' + method + ': ' + JSON.stringify(commandRes.data));
75-
return Promise.resolve(commandRes.data);
77+
logger.info(
78+
'REST response for ' +
79+
method +
80+
': ' +
81+
JSON.stringify(commandRes.data || commandRes.rows),
82+
);
83+
return Promise.resolve(commandRes.data || commandRes.rows);
7684
})
7785
.catch((err: any) => {
7886
logger.error('REST lightning error from ' + method + ' command');

apps/backend/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@
1515
"lib": ["ES2022"]
1616
},
1717
"files": ["./source/server.ts"],
18-
"include": ["./source/**/*.d.ts"]
18+
"include": ["./source/**/*.ts"]
1919
}

apps/frontend/package.json

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,59 @@
11
{
22
"name": "cln-application-frontend",
3-
"version": "25.12",
3+
"version": "26.01",
44
"description": "Core lightning application frontend",
55
"private": true,
66
"license": "MIT",
77
"scripts": {
88
"start": "PORT=4300 react-scripts start",
99
"build": "react-scripts build",
10-
"test": "react-scripts test",
10+
"test": "react-scripts test --testTimeout=30000",
1111
"lint": "eslint src --ext .js,.jsx,.ts,.tsx"
1212
},
1313
"dependencies": {
14-
"@fortawesome/fontawesome-svg-core": "6.4.2",
15-
"@fortawesome/free-solid-svg-icons": "6.4.2",
16-
"@fortawesome/react-fontawesome": "0.2.0",
17-
"@reduxjs/toolkit": "2.7.0",
18-
"axios": "1.6.7",
19-
"bootstrap": "5.3.2",
14+
"@fortawesome/fontawesome-svg-core": "7.1.0",
15+
"@fortawesome/free-solid-svg-icons": "7.1.0",
16+
"@fortawesome/react-fontawesome": "3.1.0",
17+
"@reduxjs/toolkit": "2.11.0",
18+
"axios": "1.13.2",
19+
"bootstrap": "5.3.8",
2020
"copy-to-clipboard": "3.3.3",
2121
"crypto-js": "4.2.0",
22-
"framer-motion": "10.16.5",
22+
"framer-motion": "12.23.24",
2323
"moment": "2.30.1",
24-
"node-sass": "9.0.0",
25-
"qrcode.react": "3.1.0",
26-
"react": "18.2.0",
27-
"react-bootstrap": "2.10.1",
28-
"react-datepicker": "8.1.0",
29-
"react-dom": "18.2.0",
24+
"qrcode.react": "4.2.0",
25+
"react": "19.2.0",
26+
"react-bootstrap": "2.10.10",
27+
"react-datepicker": "8.10.0",
28+
"react-dom": "19.2.0",
3029
"react-perfect-scrollbar": "1.5.8",
3130
"react-redux": "9.2.0",
32-
"react-router-dom": "6.30.0",
33-
"recharts": "2.15.1",
34-
"redux-thunk": "3.1.0"
31+
"react-router-dom": "7.9.6",
32+
"recharts": "3.5.0",
33+
"redux-thunk": "3.1.0",
34+
"sass": "1.94.2"
3535
},
3636
"devDependencies": {
37-
"@testing-library/jest-dom": "6.4.2",
38-
"@testing-library/react": "14.2.1",
39-
"@testing-library/user-event": "14.5.1",
40-
"@types/jest": "29.5.12",
41-
"@types/node": "20.9.4",
42-
"@types/react": "18.2.61",
43-
"@types/react-dom": "18.2.19",
37+
"@testing-library/jest-dom": "6.9.1",
38+
"@testing-library/react": "16.3.0",
39+
"@testing-library/user-event": "14.6.1",
40+
"@types/jest": "30.0.0",
41+
"@types/node": "24.10.1",
42+
"@types/react": "19.2.7",
43+
"@types/react-dom": "19.2.3",
4444
"@types/redux-mock-store": "1.5.0",
45-
"axios-mock-adapter": "1.22.0",
46-
"canvas": "2.11.2",
45+
"axios-mock-adapter": "2.1.0",
46+
"canvas": "3.2.0",
4747
"react-scripts": "5.0.1",
4848
"redux-mock-store": "1.5.5",
49-
"@typescript-eslint/eslint-plugin": "8.33.0",
50-
"@typescript-eslint/parser": "8.33.0",
51-
"eslint": "9.27.0",
49+
"@typescript-eslint/eslint-plugin": "8.48.0",
50+
"@typescript-eslint/parser": "8.48.0",
51+
"eslint": "9.39.1",
5252
"eslint-plugin-jsx-a11y": "6.10.2",
5353
"eslint-plugin-react": "7.37.5",
54-
"eslint-plugin-react-hooks": "5.2.0",
55-
"ts-jest": "29.1.2",
56-
"typescript": "5.8.2"
54+
"eslint-plugin-react-hooks": "7.0.1",
55+
"ts-jest": "29.4.5",
56+
"typescript": "5.9.3"
5757
},
5858
"overrides": {
5959
"chalk": "4.1.2",
@@ -76,11 +76,15 @@
7676
]
7777
},
7878
"jest": {
79+
"moduleNameMapper": {
80+
"^react-router-dom": "<rootDir>/../../node_modules/react-router-dom/dist/index.js",
81+
"^react-router": "<rootDir>/../../node_modules/react-router/dist/production/index.js"
82+
},
7983
"transform": {
8084
"^.+\\.[t|j]sx?$": "ts-jest"
8185
},
8286
"transformIgnorePatterns": [
83-
"<rootDir>/node_modules/(?!axios|react-router-dom)/"
87+
"node_modules/(?!axios|react-router-dom|react-router)/"
8488
]
8589
}
8690
}

apps/frontend/src/components/App/App.scss

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
@import '../../styles/bootstrap-custom';
2-
@import '../../styles/constants';
31
@import '../../styles/shared';
42

53
.list-scroll-container {

apps/frontend/src/components/App/App.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
import './App.scss';
2+
import '../shared/FiatBox/FiatBox.scss';
3+
import '../shared/CurrencyBox/CurrencyBox.scss';
4+
import '../shared/ToastMessage/ToastMessage.scss';
5+
import '../shared/InvalidInputMessage/InvalidInputMessage.scss';
6+
import '../shared/StatusAlert/StatusAlert.scss';
7+
import '../cln/Overview/Overview.scss';
8+
29
import { Container } from 'react-bootstrap';
310

411
import useBreakpoint from '../../hooks/use-breakpoint';

0 commit comments

Comments
 (0)