lightning 10.5.0 → 10.6.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 +8 -0
- package/README.md +2 -0
- package/index.js +2 -0
- package/lnd_methods/index.js +2 -0
- package/lnd_methods/info/constants.json +1 -0
- package/lnd_methods/macaroon/methods.json +4 -0
- package/lnd_methods/peers/add_advertised_feature.js +62 -0
- package/lnd_methods/peers/index.js +2 -0
- package/package.json +3 -3
- package/test/lnd_methods/peers/test_add_advertised_feature.js +57 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -80,6 +80,8 @@ variables set:
|
|
|
80
80
|
|
|
81
81
|
## Methods
|
|
82
82
|
|
|
83
|
+
- [addAdvertisedFeature](https://github.com/alexbosworth/ln-service#addadvertisedfeature):
|
|
84
|
+
Add a new supported feature to the graph node announcement
|
|
83
85
|
- [addExternalSocket](https://github.com/alexbosworth/ln-service#addexternalsocket):
|
|
84
86
|
Add a new LN p2p network socket to node advertisement
|
|
85
87
|
- [addPeer](https://github.com/alexbosworth/ln-service#addpeer): Connect to a new peer
|
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const {addAdvertisedFeature} = require('./lnd_methods');
|
|
1
2
|
const {addExternalSocket} = require('./lnd_methods');
|
|
2
3
|
const {addPeer} = require('./lnd_methods');
|
|
3
4
|
const {authenticatedLndGrpc} = require('./lnd_grpc');
|
|
@@ -153,6 +154,7 @@ const {verifyChainAddressMessage} = require('./lnd_methods');
|
|
|
153
154
|
const {verifyMessage} = require('./lnd_methods');
|
|
154
155
|
|
|
155
156
|
module.exports = {
|
|
157
|
+
addAdvertisedFeature,
|
|
156
158
|
addExternalSocket,
|
|
157
159
|
addPeer,
|
|
158
160
|
authenticatedLndGrpc,
|
package/lnd_methods/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const {addAdvertisedFeature} = require('./peers');
|
|
1
2
|
const {addExternalSocket} = require('./peers');
|
|
2
3
|
const {addPeer} = require('./peers');
|
|
3
4
|
const {beginGroupSigningSession} = require('./signer');
|
|
@@ -152,6 +153,7 @@ const {verifyChainAddressMessage} = require('./onchain');
|
|
|
152
153
|
const {verifyMessage} = require('./message');
|
|
153
154
|
|
|
154
155
|
module.exports = {
|
|
156
|
+
addAdvertisedFeature,
|
|
155
157
|
addExternalSocket,
|
|
156
158
|
addPeer,
|
|
157
159
|
beginGroupSigningSession,
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"7f34774529fa0964d47fc418d4d2965435cbfdc0": "0.11.1-beta",
|
|
41
41
|
"86d3dec7b939b21bb10f2cd1ff56970c392a1c69": "0.13.2-beta",
|
|
42
42
|
"86114c575c2dff9dff1e1bb4df961c64aea9fc1c": "0.10.4-beta",
|
|
43
|
+
"8bba79222f439127e46ec3ff7ec7c650e0d88d56": "0.17.4-beta",
|
|
43
44
|
"96fe51e2e5c2ee0c97909499e0e96a3d3755757e": "0.15.4-beta",
|
|
44
45
|
"aff2ed3a6a118d664049835c325a5b69e977172f": "0.15.2-beta",
|
|
45
46
|
"b4e7131bdb47531ad2f00ce345ddcdb58935bba5": "0.15.3-beta",
|
|
@@ -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 an advertised feature to the graph node announcement
|
|
12
|
+
|
|
13
|
+
Note: this method is not supported in LND versions 0.14.5 and below
|
|
14
|
+
|
|
15
|
+
Requires LND built with `peersrpc` build tag
|
|
16
|
+
|
|
17
|
+
Requires `peers:write` permissions
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
feature: <BOLT 09 Feature Bit Number>
|
|
21
|
+
lnd: <Authenticated LND API Object>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@returns via cbk or Promise
|
|
25
|
+
*/
|
|
26
|
+
module.exports = ({feature, lnd}, cbk) => {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
return asyncAuto({
|
|
29
|
+
// Check arguments
|
|
30
|
+
validate: cbk => {
|
|
31
|
+
if (!feature) {
|
|
32
|
+
return cbk([400, 'ExpectedFeatureToAddAnnouncementFeature']);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!isLnd({lnd, method, type})) {
|
|
36
|
+
return cbk([400, 'ExpectedLndToAddNodeAnnouncementFeature']);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return cbk();
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Update the node features with the updated feature
|
|
43
|
+
updateFeatures: ['validate', ({}, cbk) => {
|
|
44
|
+
return lnd[type][method]({
|
|
45
|
+
feature_updates: [{action, feature_bit: feature}],
|
|
46
|
+
},
|
|
47
|
+
(err, res) => {
|
|
48
|
+
if (!!err && err.details === errorUnimplemented) {
|
|
49
|
+
return cbk([400, 'ExpectedPeersRpcLndBuildTagToUpdateFeatures']);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!!err) {
|
|
53
|
+
return cbk([503, 'UnexpectedErrorUpdatingNodeFeatures', {err}]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return cbk();
|
|
57
|
+
});
|
|
58
|
+
}],
|
|
59
|
+
},
|
|
60
|
+
returnResult({reject, resolve}, cbk));
|
|
61
|
+
});
|
|
62
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const addAdvertisedFeature = require('./add_advertised_feature');
|
|
1
2
|
const addExternalSocket = require('./add_external_socket');
|
|
2
3
|
const addPeer = require('./add_peer');
|
|
3
4
|
const getPeers = require('./get_peers');
|
|
@@ -8,6 +9,7 @@ const updateAlias = require('./update_alias');
|
|
|
8
9
|
const updateColor = require('./update_color');
|
|
9
10
|
|
|
10
11
|
module.exports = {
|
|
12
|
+
addAdvertisedFeature,
|
|
11
13
|
addExternalSocket,
|
|
12
14
|
addPeer,
|
|
13
15
|
getPeers,
|
package/package.json
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"url": "https://github.com/alexbosworth/lightning/issues"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@grpc/grpc-js": "1.10.
|
|
10
|
+
"@grpc/grpc-js": "1.10.1",
|
|
11
11
|
"@grpc/proto-loader": "0.7.10",
|
|
12
|
-
"@types/node": "20.11.
|
|
12
|
+
"@types/node": "20.11.19",
|
|
13
13
|
"@types/request": "2.48.12",
|
|
14
14
|
"@types/ws": "8.5.10",
|
|
15
15
|
"async": "3.2.5",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"directory": "test/typescript"
|
|
54
54
|
},
|
|
55
55
|
"types": "index.d.ts",
|
|
56
|
-
"version": "10.
|
|
56
|
+
"version": "10.6.0"
|
|
57
57
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const {rejects} = require('node:assert').strict;
|
|
2
|
+
const test = require('node:test');
|
|
3
|
+
|
|
4
|
+
const {addAdvertisedFeature} = require('./../../../');
|
|
5
|
+
|
|
6
|
+
const makeLnd = ({err}) => {
|
|
7
|
+
return {peers: {updateNodeAnnouncement: (args, cbk) => cbk(err)}};
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const makeArgs = overrides => {
|
|
11
|
+
const args = {feature: 127, lnd: makeLnd({})};
|
|
12
|
+
|
|
13
|
+
Object.keys(overrides).forEach(key => args[key] = overrides[key]);
|
|
14
|
+
|
|
15
|
+
return args;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const tests = [
|
|
19
|
+
{
|
|
20
|
+
args: makeArgs({feature: undefined}),
|
|
21
|
+
description: 'A feature is required to add an advertised feature',
|
|
22
|
+
error: [400, 'ExpectedFeatureToAddAnnouncementFeature'],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
args: makeArgs({lnd: undefined}),
|
|
26
|
+
description: 'LND is required to add an advertised feature',
|
|
27
|
+
error: [400, 'ExpectedLndToAddNodeAnnouncementFeature'],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
args: makeArgs({
|
|
31
|
+
lnd: makeLnd({err: {details: 'unknown service peersrpc.Peers'}}),
|
|
32
|
+
}),
|
|
33
|
+
description: 'LND with peersrpc is required to add an advertised feature',
|
|
34
|
+
error: [400, 'ExpectedPeersRpcLndBuildTagToUpdateFeatures'],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
args: makeArgs({lnd: makeLnd({err: 'err'})}),
|
|
38
|
+
description: 'LND error is returned',
|
|
39
|
+
error: [503, 'UnexpectedErrorUpdatingNodeFeatures', {err: 'err'}],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
args: makeArgs({}),
|
|
43
|
+
description: 'Feature added successfully',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
tests.forEach(({args, description, error, expected}) => {
|
|
48
|
+
return test(description, async () => {
|
|
49
|
+
if (!!error) {
|
|
50
|
+
await rejects(() => addAdvertisedFeature(args), error, 'Got error');
|
|
51
|
+
} else {
|
|
52
|
+
await addAdvertisedFeature(args);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return;
|
|
56
|
+
});
|
|
57
|
+
});
|