ln-service 54.2.6 → 54.3.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,9 @@
1
1
  # Versions
2
2
 
3
+ ## 54.3.0
4
+
5
+ - `getSettlementStatus`: Add method to lookup received htlc settlement status
6
+
3
7
  ## 54.2.6
4
8
 
5
9
  - `getWalletInfo`: Add support for LND 0.14.5
package/README.md CHANGED
@@ -177,6 +177,7 @@ for `unlocker` methods.
177
177
  - [getRouteConfidence](#getrouteconfidence) - Get confidence in a route
178
178
  - [getRouteThroughHops](#getroutethroughhops) - Get a route through nodes
179
179
  - [getRouteToDestination](#getroutetodestination) - Get a route to a destination
180
+ - [getSettlementStatus](#getsettlementstatus) - Get status of a received HTLC
180
181
  - [getSweepTransactions](#getsweeptransactions) - Get transactions sweeping to
181
182
  self
182
183
  - [getTowerServerInfo](#gettowerserverinfo) - Get information about tower server
@@ -3153,6 +3154,43 @@ const {route} = await getRouteToDestination({destination, lnd, tokens});
3153
3154
  await payViaRoutes({lnd, routes: [route]});
3154
3155
  ```
3155
3156
 
3157
+ ### getSettlementStatus
3158
+
3159
+ Get the settlement status of a received HTLC
3160
+
3161
+ Note: this method is not supported in LND versions 0.15.4 and below
3162
+
3163
+ Requires `offchain:read` permissions
3164
+
3165
+ {
3166
+ channel: <Standard Format Channel Id String>
3167
+ lnd: <Authenticated LND API Object>
3168
+ payment: <Payment Id Number>
3169
+ }
3170
+
3171
+ @returns via cbk or Promise
3172
+ {
3173
+ is_onchain: <Payment Went to Chain Bool>
3174
+ is_settled: <Payment Is Settled Into Non-HTLC Balance Bool>
3175
+ }
3176
+
3177
+ Example:
3178
+
3179
+ ```node
3180
+ const {getSettlementStatus} = require('ln-service');
3181
+ const {getChannels} = require('ln-service');
3182
+
3183
+ const [channel] = (await getChannels({lnd})).channels;
3184
+
3185
+ const settlement = await getSettlementStatus({
3186
+ lnd,
3187
+ channel: channel.id,
3188
+ payment: 0,
3189
+ });
3190
+
3191
+ const isSettledOffchain = settlement.is_settled && !settlement.is_onchain;
3192
+ ```
3193
+
3156
3194
  ### getSweepTransactions
3157
3195
 
3158
3196
  Get self-transfer spend transactions related to channel closes
package/index.js CHANGED
@@ -70,6 +70,7 @@ const {getPublicKey} = require('lightning');
70
70
  const {getRouteConfidence} = require('lightning');
71
71
  const {getRouteThroughHops} = require('lightning');
72
72
  const {getRouteToDestination} = require('lightning');
73
+ const {getSettlementStatus} = require('lightning');
73
74
  const {getSweepTransactions} = require('lightning');
74
75
  const {getTowerServerInfo} = require('lightning');
75
76
  const {getUtxos} = require('lightning');
@@ -221,6 +222,7 @@ module.exports = {
221
222
  getRouteConfidence,
222
223
  getRouteThroughHops,
223
224
  getRouteToDestination,
225
+ getSettlementStatus,
224
226
  getSweepTransactions,
225
227
  getTowerServerInfo,
226
228
  getUtxos,
package/package.json CHANGED
@@ -10,11 +10,11 @@
10
10
  "bolt07": "1.8.2",
11
11
  "cors": "2.8.5",
12
12
  "express": "4.18.2",
13
- "invoices": "2.2.0",
14
- "lightning": "6.2.7",
13
+ "invoices": "2.2.1",
14
+ "lightning": "6.3.0",
15
15
  "macaroon": "3.0.4",
16
16
  "morgan": "1.10.0",
17
- "ws": "8.10.0"
17
+ "ws": "8.11.0"
18
18
  },
19
19
  "description": "Interaction helper for your Lightning Network daemon",
20
20
  "devDependencies": {
@@ -28,7 +28,7 @@
28
28
  "bn.js": "5.2.1",
29
29
  "bs58check": "2.1.2",
30
30
  "ecpair": "2.1.0",
31
- "ln-docker-daemons": "3.1.4",
31
+ "ln-docker-daemons": "3.1.5",
32
32
  "p2tr": "1.3.2",
33
33
  "portfinder": "1.0.32",
34
34
  "psbt": "2.7.1",
@@ -63,5 +63,5 @@
63
63
  "integration-test-0.14.4": "DOCKER_LND_VERSION=v0.14.4-beta npm run test",
64
64
  "test": "echo $DOCKER_LND_VERSION && tap -j 2 --branches=1 --functions=1 --lines=1 --statements=1 -t 200 test/autopilotrpc-integration/*.js test/chainrpc-integration/*.js test/integration/*.js test/invoicesrpc-integration/*.js test/peersrpc-integration/*.js test/routerrpc-integration/*.js test/signerrpc-integration/*.js test/tower_clientrpc-integration/*.js test/tower_serverrpc-integration/*.js test/walletrpc-integration/*.js"
65
65
  },
66
- "version": "54.2.6"
66
+ "version": "54.3.0"
67
67
  }
@@ -0,0 +1,65 @@
1
+ const asyncRetry = require('async/retry');
2
+ const {setupChannel} = require('ln-docker-daemons');
3
+ const {spawnLightningCluster} = require('ln-docker-daemons');
4
+ const {test} = require('@alexbosworth/tap');
5
+
6
+ const {createInvoice} = require('./../../');
7
+ const {getSettlementStatus} = require('./../../');
8
+ const {pay} = require('./../../');
9
+
10
+ const fakeChannelId = '1x1x1';
11
+ const interval = 100;
12
+ const size = 2;
13
+ const times = 1000;
14
+ const tokens = 100;
15
+
16
+ // Get the settlement status of an HTLC
17
+ test(`Get settlement status`, async ({end, equal, strictSame}) => {
18
+ const {kill, nodes} = await spawnLightningCluster({size});
19
+
20
+ const [{generate, lnd}, target] = nodes;
21
+
22
+ // LND 0.15.4 and below do not support settlement status lookups
23
+ try {
24
+ await getSettlementStatus({
25
+ lnd: target.lnd,
26
+ channel: fakeChannelId,
27
+ payment: Number(),
28
+ });
29
+ } catch (err) {
30
+ const [code, message] = err;
31
+
32
+ if (code !== 404) {
33
+ equal(code, 501, 'Method unsupported');
34
+ equal(message, 'LookupHtlcMethodUnsupported', 'Got unsupported message');
35
+
36
+ await kill({});
37
+
38
+ return end();
39
+ }
40
+ }
41
+
42
+ try {
43
+ const channel = await setupChannel({generate, lnd, to: target});
44
+
45
+ const {request} = await createInvoice({tokens, lnd: target.lnd});
46
+
47
+ const payment = await pay({lnd, request});
48
+
49
+ const settlement = await asyncRetry({interval, times}, async () => {
50
+ return await getSettlementStatus({
51
+ lnd: target.lnd,
52
+ channel: channel.id,
53
+ payment: Number(),
54
+ });
55
+ });
56
+
57
+ strictSame(settlement, {is_onchain: false, is_settled: true}, 'Status');
58
+ } catch (err) {
59
+ equal(err, null, 'Expected no error');
60
+ }
61
+
62
+ await kill({});
63
+
64
+ return end();
65
+ });