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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # Versions
2
2
 
3
+ ## 10.6.0
4
+
5
+ - `addAdvertisedFeature`: Add method to advertise a feature bit support
6
+
7
+ ## 10.5.1
8
+
9
+ - Add support for LND 0.17.4
10
+
3
11
  ## 10.5.0
4
12
 
5
13
  - `getSweepTransactions`: Add `after` to scope sweep result set
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,
@@ -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",
@@ -1,4 +1,8 @@
1
1
  {
2
+ "addAdvertisedFeature": {
3
+ "method": "updateNodeAnnouncement",
4
+ "type": "peers"
5
+ },
2
6
  "addExternalSocket": {
3
7
  "method": "updateNodeAnnouncement",
4
8
  "type": "peers"
@@ -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.0",
10
+ "@grpc/grpc-js": "1.10.1",
11
11
  "@grpc/proto-loader": "0.7.10",
12
- "@types/node": "20.11.16",
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.5.0"
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
+ });