Skip to content

Commit 72c0666

Browse files
Add LIGHTNING_WS_HOST and LIGHTNING_WS_TOR_HOST
Closes #134
1 parent 0334d4e commit 72c0666

File tree

11 files changed

+43
-16
lines changed

11 files changed

+43
-16
lines changed

.github/docs/Docker-Setup.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ docker run -d \
6666
-e LIGHTNING_HOST="cln-node" \
6767
-e LIGHTNING_VARS_FILE="/app/.commando" \
6868
-e LIGHTNING_WS_PROTOCOL="ws" \
69+
-e LIGHTNING_WS_HOST="cln-node" \
70+
-e LIGHTNING_WS_TOR_HOST="tor.onion" \
6971
-e LIGHTNING_WS_PORT=5018 \
7072
ghcr.io/elementsproject/cln-application:25.07.2 npm run start
7173
```

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,14 @@
6767
- APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST/GRPC, default: `COMMANDO`)
6868
6969
# Core lightning Values
70-
- LIGHTNING_HOST: IP address of Core lightning node container (used for `COMMANDO` APP_CONNECT, default: `localhost`)
71-
- LIGHTNING_TOR_HOST: REST hidden service url (default: ``)
70+
- LIGHTNING_HOST: IP address of Core lightning node (default: `localhost`)
71+
- LIGHTNING_TOR_HOST: Tor Hidden Service url (default: ``)
7272
- LIGHTNING_VARS_FILE: Full Path including the file name for connection auth with LIGHTNING_PUBKEY & LIGHTNING_RUNE (defult: `./.commando-env`)
7373
7474
# CLN Commando (WS) Values
7575
- LIGHTNING_WS_PROTOCOL: Core lightning's web socket is serving on ws or serving via WSSProxy (valid values: ws/wss, default: `ws`)
76+
- LIGHTNING_WS_HOST: Core lightning's IP address where commando can connect (default: `localhost`)
77+
- LIGHTNING_WS_TOR_HOST: Core lightning's Tor address where commando can connect (default: ``)
7678
- LIGHTNING_WS_PORT: Core lightning's websocket port (used by `COMMANDO` APP_CONNECT; with `bind-addr=ws:`/`wss-bind-addr` in CLN config; default: `5001`)
7779
- LIGHTNING_WS_CLIENT_KEY_FILE: Client key file path including file name for websocket TLS authentication (used by `COMMANDO` APP_CONNECT and `wss` LIGHTNING_WS_PROTOCOL; default: `./client-key.pem`)
7880
- LIGHTNING_WS_CLIENT_CERT_FILE: Client certificate file path including file name for websocket TLS authentication (used by `COMMANDO` APP_CONNECT and `wss` LIGHTNING_WS_PROTOCOL; default: `./client.pem`)

apps/backend/source/shared/consts.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ export const DEFAULT_ENV_VALUES = {
4848
LIGHTNING_TOR_HOST: '',
4949
LIGHTNING_VARS_FILE: './.commando-env',
5050
LIGHTNING_WS_PROTOCOL: 'ws',
51+
LIGHTNING_WS_HOST: 'localhost',
52+
LIGHTNING_WS_TOR_HOST: 'tor.onion',
5153
LIGHTNING_WS_PORT: 5001,
5254
LIGHTNING_WS_CLIENT_KEY_FILE: './client-key.pem',
5355
LIGHTNING_WS_CLIENT_CERT_FILE: './client.pem',
@@ -85,6 +87,9 @@ export const APP_CONSTANTS = {
8587
LIGHTNING_VARS_FILE: process.env.LIGHTNING_VARS_FILE || DEFAULT_ENV_VALUES.LIGHTNING_VARS_FILE,
8688
LIGHTNING_WS_PROTOCOL:
8789
process.env.LIGHTNING_WS_PROTOCOL || DEFAULT_ENV_VALUES.LIGHTNING_WS_PROTOCOL,
90+
LIGHTNING_WS_HOST: process.env.LIGHTNING_WS_HOST || DEFAULT_ENV_VALUES.LIGHTNING_WS_HOST,
91+
LIGHTNING_WS_TOR_HOST:
92+
process.env.LIGHTNING_WS_TOR_HOST || DEFAULT_ENV_VALUES.LIGHTNING_WS_TOR_HOST,
8893
LIGHTNING_WS_PORT: +(process.env.LIGHTNING_WS_PORT || DEFAULT_ENV_VALUES.LIGHTNING_WS_PORT),
8994
LIGHTNING_WS_CLIENT_KEY_FILE:
9095
process.env.LIGHTNING_WS_CLIENT_KEY_FILE || DEFAULT_ENV_VALUES.LIGHTNING_WS_CLIENT_KEY_FILE,
@@ -162,10 +167,10 @@ export const LN_MESSAGE_CONFIG = {
162167
wsProxy:
163168
APP_CONSTANTS.LIGHTNING_WS_PROTOCOL +
164169
'://' +
165-
APP_CONSTANTS.LIGHTNING_HOST +
170+
APP_CONSTANTS.LIGHTNING_WS_HOST +
166171
':' +
167172
APP_CONSTANTS.LIGHTNING_WS_PORT,
168-
ip: APP_CONSTANTS.LIGHTNING_HOST,
173+
ip: APP_CONSTANTS.LIGHTNING_WS_HOST,
169174
port: APP_CONSTANTS.LIGHTNING_WS_PORT,
170175
privateKey: crypto.randomBytes(32).toString('hex'),
171176
socket: (url: string) =>

apps/frontend/src/components/modals/ConnectWallet/CommandoForm/CommandoForm.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ describe('CommandoForm Component', () => {
5151
it('displays correct values for Commando network', async () => {
5252
await renderWithProviders(<ConnectWallet />, { preloadedState: customMockStore });
5353
expect(screen.getByTestId('ws-protocol')).toHaveValue(mockConnectWallet.LIGHTNING_WS_PROTOCOL);
54-
expect(screen.getByTestId('ws-host')).toHaveValue(mockConnectWallet.LIGHTNING_HOST);
54+
expect(screen.getByTestId('ws-host')).toHaveValue(mockConnectWallet.LIGHTNING_WS_HOST);
5555
expect(screen.getByTestId('ws-port')).toHaveValue(mockConnectWallet.LIGHTNING_WS_PORT.toString());
5656
expect(screen.getByTestId('node-pubkey')).toHaveValue(mockConnectWallet.NODE_PUBKEY);
5757
expect(screen.getByTestId('rune')).toHaveValue(mockConnectWallet.ADMIN_RUNE);
@@ -68,15 +68,15 @@ describe('CommandoForm Component', () => {
6868
await act(async () => {
6969
fireEvent.click(commandoTorSelect);
7070
});
71-
expect(screen.getByTestId('ws-host')).toHaveValue(mockConnectWallet.LIGHTNING_TOR_HOST);
71+
expect(screen.getByTestId('ws-host')).toHaveValue(mockConnectWallet.LIGHTNING_WS_TOR_HOST);
7272
});
7373

7474
it('copies field values to clipboard when clicked', async () => {
7575
const copyTextToClipboard = jest.spyOn(dataFormatUtils, 'copyTextToClipboard');
7676
await renderWithProviders(<ConnectWallet />, { preloadedState: customMockStore });
7777
const fieldsToTest = [
7878
{ id: 'WS Protocol', testId: 'ws-protocol', expected: mockConnectWallet.LIGHTNING_WS_PROTOCOL },
79-
{ id: 'WS Host', testId: 'ws-host', expected: mockConnectWallet.LIGHTNING_HOST },
79+
{ id: 'WS Host', testId: 'ws-host', expected: mockConnectWallet.LIGHTNING_WS_HOST },
8080
{ id: 'WS Port', testId: 'ws-port', expected: mockConnectWallet.LIGHTNING_WS_PORT.toString() },
8181
{ id: 'Node Public Key', testId: 'node-pubkey', expected: mockConnectWallet.NODE_PUBKEY },
8282
{ id: 'Rune', testId: 'rune', expected: mockConnectWallet.ADMIN_RUNE },

apps/frontend/src/components/modals/ConnectWallet/CommandoForm/CommandoForm.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const CommandoForm = ({ selNetwork }) => {
2626
textToCopy = connectWallet.LIGHTNING_WS_PROTOCOL || '';
2727
break;
2828
case 'WS Host':
29-
textToCopy = (selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_TOR_HOST : connectWallet.LIGHTNING_HOST) || '';
29+
textToCopy = (selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_WS_TOR_HOST : connectWallet.LIGHTNING_WS_HOST) || '';
3030
break;
3131
case 'WS Port':
3232
textToCopy = connectWallet.LIGHTNING_WS_PORT?.toString() || '';
@@ -108,8 +108,8 @@ const CommandoForm = ({ selNetwork }) => {
108108
<Form.Control
109109
onClick={copyHandler}
110110
id='WS Host'
111-
value={selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_TOR_HOST : connectWallet.LIGHTNING_HOST}
112-
aria-label={selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_TOR_HOST : connectWallet.LIGHTNING_HOST}
111+
value={selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_WS_TOR_HOST : connectWallet.LIGHTNING_WS_HOST}
112+
aria-label={selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_WS_TOR_HOST : connectWallet.LIGHTNING_WS_HOST}
113113
aria-describedby='copy-addon-host'
114114
className='form-control-left'
115115
data-testid='ws-host'

apps/frontend/src/components/modals/ConnectWallet/ConnectWallet.test.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,15 @@ describe('ConnectWallet component', () => {
5757
it('updates the connection URL when network is changed', async () => {
5858
await renderWithProviders(<ConnectWallet />, { preloadedState: customMockStore });
5959
const initialUrl = screen.getByTestId('connect-url');
60-
expect(initialUrl).toHaveValue('commando+wss://'+ mockConnectWallet.LIGHTNING_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
60+
expect(initialUrl).toHaveValue('commando+wss://'+ mockConnectWallet.LIGHTNING_WS_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
61+
await act(async () => {
62+
fireEvent.click(screen.getByTestId('network-toggle'));
63+
});
64+
const commandoTorSelect = screen.getAllByTestId('network-item')[1];
65+
await act(async () => {
66+
fireEvent.click(commandoTorSelect);
67+
});
68+
expect(initialUrl).toHaveValue('commando+wss://'+ mockConnectWallet.LIGHTNING_WS_TOR_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
6169
await act(async () => {
6270
fireEvent.click(screen.getByTestId('network-toggle'));
6371
});
@@ -76,7 +84,7 @@ describe('ConnectWallet component', () => {
7684
await act(async () => {
7785
fireEvent.click(copyClick);
7886
});
79-
expect(copyTextToClipboard).toHaveBeenCalledWith('commando+wss://'+ mockConnectWallet.LIGHTNING_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
87+
expect(copyTextToClipboard).toHaveBeenCalledWith('commando+wss://'+ mockConnectWallet.LIGHTNING_WS_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
8088
});
8189

8290
it('displays the correct form based on selected network', async () => {
@@ -116,7 +124,7 @@ describe('ConnectWallet component', () => {
116124
await renderWithProviders(<ConnectWallet />, { preloadedState: customMockStore });
117125

118126
const connectUrl = screen.getByTestId('connect-url');
119-
expect(connectUrl).toHaveValue('commando+wss://'+ mockConnectWallet.LIGHTNING_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
127+
expect(connectUrl).toHaveValue('commando+wss://'+ mockConnectWallet.LIGHTNING_WS_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS);
120128
});
121129

122130
it('does not include invoice rune in URL when not available', async () => {

apps/frontend/src/components/modals/ConnectWallet/ConnectWallet.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const ConnectWallet = () => {
2626

2727
useEffect(() => {
2828
let newNetworkTypes: string[] = ['Commando'];
29-
if (connectWallet.LIGHTNING_WS_PORT && connectWallet.LIGHTNING_TOR_HOST && connectWallet.LIGHTNING_TOR_HOST !== '') {
29+
if (connectWallet.LIGHTNING_WS_PORT && connectWallet.LIGHTNING_WS_TOR_HOST && connectWallet.LIGHTNING_WS_TOR_HOST !== '') {
3030
newNetworkTypes.push('Commando (Tor)');
3131
}
3232
if (connectWallet.LIGHTNING_REST_PORT) {
@@ -56,7 +56,7 @@ const ConnectWallet = () => {
5656
const setConnectUrlOnChange = () => {
5757
let newConnectUrl = '';
5858
if (selNetwork === 'Commando' || selNetwork === 'Commando (Tor)') {
59-
newConnectUrl = 'commando+' + connectWallet.LIGHTNING_WS_PROTOCOL + '://' + (selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_TOR_HOST : connectWallet.LIGHTNING_HOST) + ':' + connectWallet.LIGHTNING_WS_PORT + '?pubkey=' + connectWallet.NODE_PUBKEY + '&rune=' + connectWallet.ADMIN_RUNE + (connectWallet.INVOICE_RUNE != '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : '') + (connectWallet.LIGHTNING_WS_PROTOCOL?.toLowerCase() === 'wss' ? '&certs=' + connectWallet.LIGHTNING_WS_TLS_CERTS : '');
59+
newConnectUrl = 'commando+' + connectWallet.LIGHTNING_WS_PROTOCOL + '://' + (selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_WS_TOR_HOST : connectWallet.LIGHTNING_WS_HOST) + ':' + connectWallet.LIGHTNING_WS_PORT + '?pubkey=' + connectWallet.NODE_PUBKEY + '&rune=' + connectWallet.ADMIN_RUNE + (connectWallet.INVOICE_RUNE != '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : '') + (connectWallet.LIGHTNING_WS_PROTOCOL?.toLowerCase() === 'wss' ? '&certs=' + connectWallet.LIGHTNING_WS_TLS_CERTS : '');
6060
} else if (selNetwork === 'REST' || selNetwork === 'REST (Tor)') {
6161
newConnectUrl = 'clnrest+' + connectWallet.LIGHTNING_REST_PROTOCOL + '://' + (selNetwork.includes('(Tor)') ? connectWallet.LIGHTNING_REST_TOR_HOST : connectWallet.LIGHTNING_REST_HOST) + ':' + connectWallet.LIGHTNING_REST_PORT + '?rune=' + connectWallet.ADMIN_RUNE + (connectWallet.LIGHTNING_REST_PROTOCOL?.toLowerCase() === 'https' ? '&certs=' + connectWallet.LIGHTNING_REST_TLS_CERTS : '');
6262
} else if (selNetwork === 'gRPC' || selNetwork === 'gRPC (Tor)') {

apps/frontend/src/types/root.type.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ export type WalletConnect = {
6767
LIGHTNING_TOR_HOST?: string;
6868
LIGHTNING_VARS_FILE?: string;
6969
LIGHTNING_WS_PROTOCOL?: string;
70+
LIGHTNING_WS_HOST?: string;
71+
LIGHTNING_WS_TOR_HOST?: string;
7072
LIGHTNING_WS_PORT?: number;
7173
LIGHTNING_WS_CLIENT_KEY_FILE?: string;
7274
LIGHTNING_WS_CLIENT_CERT_FILE?: string;

apps/frontend/src/utilities/test-utilities/mockData.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ export const mockConnectWallet = {
239239
LIGHTNING_TOR_HOST: "lightning.tor.onion",
240240
LIGHTNING_VARS_FILE: "/home/data/app/.commando",
241241
LIGHTNING_WS_PROTOCOL: "wss",
242+
LIGHTNING_WS_HOST: "localhost",
243+
LIGHTNING_WS_TOR_HOST: "lightning.ws.tor.onion",
242244
LIGHTNING_WS_PORT: 5015,
243245
LIGHTNING_WS_CLIENT_KEY_FILE: "/home/network/regtest/client-key.pem",
244246
LIGHTNING_WS_CLIENT_CERT_FILE: "/home/network/regtest/client.pem",
@@ -740,7 +742,7 @@ export const mockRootStoreData = {
740742
showModals: mockShowModals,
741743
showToast: mockShowToast,
742744
connectWallet: mockConnectWallet,
743-
connectionUrl: 'commando+' + mockConnectWallet.LIGHTNING_WS_PROTOCOL + '://' + mockConnectWallet.LIGHTNING_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS,
745+
connectionUrl: 'commando+' + mockConnectWallet.LIGHTNING_WS_PROTOCOL + '://' + mockConnectWallet.LIGHTNING_WS_HOST + ':' + mockConnectWallet.LIGHTNING_WS_PORT + '?pubkey=' + mockConnectWallet.NODE_PUBKEY + '&rune=' + mockConnectWallet.ADMIN_RUNE + '&invoiceRune=' + mockConnectWallet.INVOICE_RUNE + '&certs=' + mockConnectWallet.LIGHTNING_WS_TLS_CERTS,
744746
walletBalances: mockWalletBalances,
745747
nodeInfo: mockNodeInfo,
746748
listFunds: mockListFunds,

docker-compose.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ services:
7373
APP_HOST: ${APP_HOST}
7474
LIGHTNING_GRPC_PORT: ${LIGHTNING_GRPC_PORT}
7575
LIGHTNING_REST_PORT: ${LIGHTNING_REST_PORT}
76+
LIGHTNING_WS_HOST: ${LIGHTNING_WS_HOST}
77+
LIGHTNING_WS_TOR_HOST: ${LIGHTNING_WS_TOR_HOST}
7678
LIGHTNING_WS_PORT: ${LIGHTNING_WS_PORT}
7779
LIGHTNING_TOR_HOST: ${LIGHTNING_TOR_HOST}
7880
LIGHTNING_DATA_DIR: ${LIGHTNING_DATA_DIR}
@@ -115,6 +117,8 @@ services:
115117
LIGHTNING_GRPC_PORT: 2115
116118
LIGHTNING_REST_PORT: 2114
117119
LIGHTNING_WS_PORT: 2116
120+
LIGHTNING_WS_HOST: 170.21.22.13
121+
LIGHTNING_WS_TOR_HOST: tor2.onion
118122
LIGHTNING_TOR_HOST: tor2.onion
119123
LIGHTNING_DATA_DIR: /data/.lightning-2
120124
LIGHTNING_VARS_FILE: /data/.lightning-2/.commando-env

0 commit comments

Comments
 (0)