lightning 5.12.0 → 5.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/index.js +4 -0
- package/lnd_methods/index.js +4 -0
- package/lnd_methods/macaroon/methods.json +8 -0
- package/lnd_methods/peers/add_external_socket.js +62 -0
- package/lnd_methods/peers/index.js +4 -0
- package/lnd_methods/peers/remove_external_socket.js +62 -0
- package/package.json +2 -2
- package/test/lnd_methods/peers/test_add_external_socket.js +56 -0
- package/test/lnd_methods/peers/test_remove_external_socket.js +56 -0
package/CHANGELOG.md
CHANGED
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const {addExternalSocket} = require('./lnd_methods');
|
|
1
2
|
const {addPeer} = require('./lnd_methods');
|
|
2
3
|
const {authenticatedLndGrpc} = require('./lnd_grpc');
|
|
3
4
|
const {broadcastChainTransaction} = require('./lnd_methods');
|
|
@@ -88,6 +89,7 @@ const {probeForRoute} = require('./lnd_methods');
|
|
|
88
89
|
const {proposeChannel} = require('./lnd_methods');
|
|
89
90
|
const {recoverFundsFromChannel} = require('./lnd_methods');
|
|
90
91
|
const {recoverFundsFromChannels} = require('./lnd_methods');
|
|
92
|
+
const {removeExternalSocket} = require('./lnd_methods');
|
|
91
93
|
const {removePeer} = require('./lnd_methods');
|
|
92
94
|
const {requestChainFeeIncrease} = require('./lnd_methods');
|
|
93
95
|
const {revokeAccess} = require('./lnd_methods');
|
|
@@ -140,6 +142,7 @@ const {verifyBytesSignature} = require('./lnd_methods');
|
|
|
140
142
|
const {verifyMessage} = require('./lnd_methods');
|
|
141
143
|
|
|
142
144
|
module.exports = {
|
|
145
|
+
addExternalSocket,
|
|
143
146
|
addPeer,
|
|
144
147
|
authenticatedLndGrpc,
|
|
145
148
|
broadcastChainTransaction,
|
|
@@ -230,6 +233,7 @@ module.exports = {
|
|
|
230
233
|
proposeChannel,
|
|
231
234
|
recoverFundsFromChannel,
|
|
232
235
|
recoverFundsFromChannels,
|
|
236
|
+
removeExternalSocket,
|
|
233
237
|
removePeer,
|
|
234
238
|
requestChainFeeIncrease,
|
|
235
239
|
revokeAccess,
|
package/lnd_methods/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const {addExternalSocket} = require('./peers');
|
|
1
2
|
const {addPeer} = require('./peers');
|
|
2
3
|
const {broadcastChainTransaction} = require('./onchain');
|
|
3
4
|
const {cancelHodlInvoice} = require('./invoices');
|
|
@@ -85,6 +86,7 @@ const {probeForRoute} = require('./offchain');
|
|
|
85
86
|
const {proposeChannel} = require('./onchain');
|
|
86
87
|
const {recoverFundsFromChannel} = require('./offchain');
|
|
87
88
|
const {recoverFundsFromChannels} = require('./offchain');
|
|
89
|
+
const {removeExternalSocket} = require('./peers');
|
|
88
90
|
const {removePeer} = require('./peers');
|
|
89
91
|
const {requestChainFeeIncrease} = require('./onchain');
|
|
90
92
|
const {revokeAccess} = require('./macaroon');
|
|
@@ -136,6 +138,7 @@ const {verifyBytesSignature} = require('./signer');
|
|
|
136
138
|
const {verifyMessage} = require('./message');
|
|
137
139
|
|
|
138
140
|
module.exports = {
|
|
141
|
+
addExternalSocket,
|
|
139
142
|
addPeer,
|
|
140
143
|
broadcastChainTransaction,
|
|
141
144
|
cancelHodlInvoice,
|
|
@@ -223,6 +226,7 @@ module.exports = {
|
|
|
223
226
|
proposeChannel,
|
|
224
227
|
recoverFundsFromChannel,
|
|
225
228
|
recoverFundsFromChannels,
|
|
229
|
+
removeExternalSocket,
|
|
226
230
|
removePeer,
|
|
227
231
|
requestChainFeeIncrease,
|
|
228
232
|
revokeAccess,
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
+
"addExternalSocket": {
|
|
3
|
+
"method": "updateNodeAnnouncement",
|
|
4
|
+
"type": "peers"
|
|
5
|
+
},
|
|
2
6
|
"addPeer": {
|
|
3
7
|
"method": "ConnectPeer",
|
|
4
8
|
"type": "default"
|
|
@@ -338,6 +342,10 @@
|
|
|
338
342
|
"method": "restoreChannelBackups",
|
|
339
343
|
"type": "default"
|
|
340
344
|
},
|
|
345
|
+
"removeExternalSocket": {
|
|
346
|
+
"method": "updateNodeAnnouncement",
|
|
347
|
+
"type": "peers"
|
|
348
|
+
},
|
|
341
349
|
"removePeer": {
|
|
342
350
|
"method": "DisconnectPeer",
|
|
343
351
|
"type": "default"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const asyncAuto = require('async/auto');
|
|
2
|
+
const {returnResult} = require('asyncjs-util');
|
|
3
|
+
|
|
4
|
+
const {isLnd} = require('./../../lnd_requests');
|
|
5
|
+
|
|
6
|
+
const action = 0;
|
|
7
|
+
const errorUnimplemented = 'unknown service peersrpc.Peers';
|
|
8
|
+
const method = 'updateNodeAnnouncement';
|
|
9
|
+
const type = 'peers';
|
|
10
|
+
|
|
11
|
+
/** Add a new advertised p2p socket address
|
|
12
|
+
|
|
13
|
+
Note: this method is not supported in LND versions 0.14.3 and below
|
|
14
|
+
|
|
15
|
+
Requires LND built with `peersrpc` build tag
|
|
16
|
+
|
|
17
|
+
Requires `peers:write` permissions
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
lnd: <Authenticated LND API Object>
|
|
21
|
+
socket: <Add Socket Address String>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@returns via cbk or Promise
|
|
25
|
+
*/
|
|
26
|
+
module.exports = ({lnd, socket}, cbk) => {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
return asyncAuto({
|
|
29
|
+
// Check arguments
|
|
30
|
+
validate: cbk => {
|
|
31
|
+
if (!isLnd({lnd, method, type})) {
|
|
32
|
+
return cbk([400, 'ExpectedLndToAddExternalSocket']);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!socket) {
|
|
36
|
+
return cbk([400, 'ExpectedHostAndPortOfSocketToAdd']);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return cbk();
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Add external socket to be advertised
|
|
43
|
+
add: ['validate', ({}, cbk) => {
|
|
44
|
+
return lnd[type][method]({
|
|
45
|
+
address_updates: [{action, address: socket}],
|
|
46
|
+
},
|
|
47
|
+
err => {
|
|
48
|
+
if (!!err && err.details === errorUnimplemented) {
|
|
49
|
+
return cbk([400, 'ExpectedPeersRpcLndBuildTagToAddSocket']);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!!err) {
|
|
53
|
+
return cbk([503, 'UnexpectedErrorAddingExternalSocket', {err}]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return cbk();
|
|
57
|
+
});
|
|
58
|
+
}],
|
|
59
|
+
},
|
|
60
|
+
returnResult({reject, resolve}, cbk));
|
|
61
|
+
});
|
|
62
|
+
};
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
const addExternalSocket = require('./add_external_socket');
|
|
1
2
|
const addPeer = require('./add_peer');
|
|
2
3
|
const getPeers = require('./get_peers');
|
|
4
|
+
const removeExternalSocket = require('./remove_external_socket');
|
|
3
5
|
const removePeer = require('./remove_peer');
|
|
4
6
|
const subscribeToPeers = require('./subscribe_to_peers');
|
|
5
7
|
const updateAlias = require('./update_alias');
|
|
6
8
|
const updateColor = require('./update_color');
|
|
7
9
|
|
|
8
10
|
module.exports = {
|
|
11
|
+
addExternalSocket,
|
|
9
12
|
addPeer,
|
|
10
13
|
getPeers,
|
|
14
|
+
removeExternalSocket,
|
|
11
15
|
removePeer,
|
|
12
16
|
subscribeToPeers,
|
|
13
17
|
updateAlias,
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const asyncAuto = require('async/auto');
|
|
2
|
+
const {returnResult} = require('asyncjs-util');
|
|
3
|
+
|
|
4
|
+
const {isLnd} = require('./../../lnd_requests');
|
|
5
|
+
|
|
6
|
+
const action = 1;
|
|
7
|
+
const errorUnimplemented = 'unknown service peersrpc.Peers';
|
|
8
|
+
const method = 'updateNodeAnnouncement';
|
|
9
|
+
const type = 'peers';
|
|
10
|
+
|
|
11
|
+
/** Remove an existing advertised p2p socket address
|
|
12
|
+
|
|
13
|
+
Note: this method is not supported in LND versions 0.14.3 and below
|
|
14
|
+
|
|
15
|
+
Requires LND built with `peersrpc` build tag
|
|
16
|
+
|
|
17
|
+
Requires `peers:write` permissions
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
lnd: <Authenticated LND API Object>
|
|
21
|
+
socket: <Remove Socket Address String>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@returns via cbk or Promise
|
|
25
|
+
*/
|
|
26
|
+
module.exports = ({lnd, socket}, cbk) => {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
return asyncAuto({
|
|
29
|
+
// Check arguments
|
|
30
|
+
validate: cbk => {
|
|
31
|
+
if (!isLnd({lnd, method, type})) {
|
|
32
|
+
return cbk([400, 'ExpectedLndToRemoveExternalSocket']);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!socket) {
|
|
36
|
+
return cbk([400, 'ExpectedHostAndPortOfSocketToRemove']);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return cbk();
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Stop external socket from being advertised
|
|
43
|
+
add: ['validate', ({}, cbk) => {
|
|
44
|
+
return lnd[type][method]({
|
|
45
|
+
address_updates: [{action, address: socket}],
|
|
46
|
+
},
|
|
47
|
+
err => {
|
|
48
|
+
if (!!err && err.details === errorUnimplemented) {
|
|
49
|
+
return cbk([400, 'ExpectedPeersRpcLndBuildTagToRemoveSocket']);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!!err) {
|
|
53
|
+
return cbk([503, 'UnexpectedErrorRemovingExternalSocket', {err}]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return cbk();
|
|
57
|
+
});
|
|
58
|
+
}],
|
|
59
|
+
},
|
|
60
|
+
returnResult({reject, resolve}, cbk));
|
|
61
|
+
});
|
|
62
|
+
};
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"url": "https://github.com/alexbosworth/lightning/issues"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@grpc/grpc-js": "1.6.
|
|
10
|
+
"@grpc/grpc-js": "1.6.7",
|
|
11
11
|
"@grpc/proto-loader": "0.6.9",
|
|
12
12
|
"@types/express": "4.17.13",
|
|
13
13
|
"@types/node": "17.0.25",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"directory": "test/typescript"
|
|
60
60
|
},
|
|
61
61
|
"types": "index.d.ts",
|
|
62
|
-
"version": "5.
|
|
62
|
+
"version": "5.13.0"
|
|
63
63
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const {test} = require('@alexbosworth/tap');
|
|
2
|
+
|
|
3
|
+
const {addExternalSocket} = require('./../../../');
|
|
4
|
+
|
|
5
|
+
const makeLnd = ({err}) => {
|
|
6
|
+
return {peers: {updateNodeAnnouncement: (args, cbk) => cbk(err)}};
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const makeArgs = overrides => {
|
|
10
|
+
const args = {lnd: makeLnd({}), socket: '127.0.0.1:9735'};
|
|
11
|
+
|
|
12
|
+
Object.keys(overrides).forEach(key => args[key] = overrides[key]);
|
|
13
|
+
|
|
14
|
+
return args;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const tests = [
|
|
18
|
+
{
|
|
19
|
+
args: makeArgs({lnd: undefined}),
|
|
20
|
+
description: 'LND is required to add an external socket',
|
|
21
|
+
error: [400, 'ExpectedLndToAddExternalSocket'],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
args: makeArgs({socket: undefined}),
|
|
25
|
+
description: 'A socket is required to add an external socket',
|
|
26
|
+
error: [400, 'ExpectedHostAndPortOfSocketToAdd'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
args: makeArgs({
|
|
30
|
+
lnd: makeLnd({err: {details: 'unknown service peersrpc.Peers'}}),
|
|
31
|
+
}),
|
|
32
|
+
description: 'LND with peersrpc is required to add an external socket',
|
|
33
|
+
error: [400, 'ExpectedPeersRpcLndBuildTagToAddSocket'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
args: makeArgs({lnd: makeLnd({err: 'err'})}),
|
|
37
|
+
description: 'LND error is returned',
|
|
38
|
+
error: [503, 'UnexpectedErrorAddingExternalSocket', {err: 'err'}],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
args: makeArgs({}),
|
|
42
|
+
description: 'Socket added successfully',
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
tests.forEach(({args, description, error, expected}) => {
|
|
47
|
+
return test(description, async ({deepEqual, end, equal, rejects}) => {
|
|
48
|
+
if (!!error) {
|
|
49
|
+
await rejects(() => addExternalSocket(args), error, 'Got error');
|
|
50
|
+
} else {
|
|
51
|
+
await addExternalSocket(args);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return end();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const {test} = require('@alexbosworth/tap');
|
|
2
|
+
|
|
3
|
+
const {removeExternalSocket} = require('./../../../');
|
|
4
|
+
|
|
5
|
+
const makeLnd = ({err}) => {
|
|
6
|
+
return {peers: {updateNodeAnnouncement: (args, cbk) => cbk(err)}};
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const makeArgs = overrides => {
|
|
10
|
+
const args = {lnd: makeLnd({}), socket: '127.0.0.1:9735'};
|
|
11
|
+
|
|
12
|
+
Object.keys(overrides).forEach(key => args[key] = overrides[key]);
|
|
13
|
+
|
|
14
|
+
return args;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const tests = [
|
|
18
|
+
{
|
|
19
|
+
args: makeArgs({lnd: undefined}),
|
|
20
|
+
description: 'LND is required to remove an external socket',
|
|
21
|
+
error: [400, 'ExpectedLndToRemoveExternalSocket'],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
args: makeArgs({socket: undefined}),
|
|
25
|
+
description: 'A socket is required to remove an external socket',
|
|
26
|
+
error: [400, 'ExpectedHostAndPortOfSocketToRemove'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
args: makeArgs({
|
|
30
|
+
lnd: makeLnd({err: {details: 'unknown service peersrpc.Peers'}}),
|
|
31
|
+
}),
|
|
32
|
+
description: 'LND with peersrpc is required to add an external socket',
|
|
33
|
+
error: [400, 'ExpectedPeersRpcLndBuildTagToRemoveSocket'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
args: makeArgs({lnd: makeLnd({err: 'err'})}),
|
|
37
|
+
description: 'LND error is returned',
|
|
38
|
+
error: [503, 'UnexpectedErrorRemovingExternalSocket', {err: 'err'}],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
args: makeArgs({}),
|
|
42
|
+
description: 'Socket removed successfully',
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
tests.forEach(({args, description, error, expected}) => {
|
|
47
|
+
return test(description, async ({deepEqual, end, equal, rejects}) => {
|
|
48
|
+
if (!!error) {
|
|
49
|
+
await rejects(() => removeExternalSocket(args), error, 'Got error');
|
|
50
|
+
} else {
|
|
51
|
+
await removeExternalSocket(args);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return end();
|
|
55
|
+
});
|
|
56
|
+
});
|