paid-services 3.9.1 → 3.10.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/package.json +3 -3
- package/trades/create_anchored_trade.js +86 -0
- package/trades/create_trade.js +4 -9
- package/trades/get_anchored_trade.js +72 -0
- package/trades/index.js +4 -0
package/CHANGELOG.md
CHANGED
package/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const {changeChannelCapacity} = require('./capacity');
|
|
2
2
|
const {confirmServiceUse} = require('./client');
|
|
3
|
+
const {createAnchoredTrade} = require('./trades');
|
|
3
4
|
const {decodeTrade} = require('./trades');
|
|
4
5
|
const {encodeTrade} = require('./trades');
|
|
6
|
+
const {getAnchoredTrade} = require('./trades');
|
|
5
7
|
const {getServiceSchema} = require('./client');
|
|
6
8
|
const {getServicesList} = require('./client');
|
|
7
9
|
const {makePeerRequest} = require('./p2p');
|
|
@@ -17,8 +19,10 @@ const serviceIds = schema.types;
|
|
|
17
19
|
module.exports = {
|
|
18
20
|
changeChannelCapacity,
|
|
19
21
|
confirmServiceUse,
|
|
22
|
+
createAnchoredTrade,
|
|
20
23
|
decodeTrade,
|
|
21
24
|
encodeTrade,
|
|
25
|
+
getAnchoredTrade,
|
|
22
26
|
getServiceSchema,
|
|
23
27
|
getServicesList,
|
|
24
28
|
makePeerRequest,
|
package/package.json
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"bolt01": "1.2.3",
|
|
13
13
|
"bolt07": "1.8.0",
|
|
14
14
|
"invoices": "2.0.3",
|
|
15
|
-
"ln-service": "53.
|
|
16
|
-
"ln-sync": "3.
|
|
15
|
+
"ln-service": "53.5.0",
|
|
16
|
+
"ln-sync": "3.7.0"
|
|
17
17
|
},
|
|
18
18
|
"description": "Lightning Paid Services library",
|
|
19
19
|
"devDependencies": {
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"integration-tests": "tap -j 2 --branches=1 --functions=1 --lines=1 --statements=1 -t 180 test/integration/*.js",
|
|
41
41
|
"test": "tap --branches=1 --functions=1 --lines=1 --statements=1 -t 60 test/actions/*.js test/capacity/*.js test/client/*.js test/config/*.js test/p2p/*.js test/records/*.js test/respond/*.js test/server/*.js test/server/*.js test/services/*.js test/trades/*.js"
|
|
42
42
|
},
|
|
43
|
-
"version": "3.
|
|
43
|
+
"version": "3.10.0"
|
|
44
44
|
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const asyncAuto = require('async/auto');
|
|
2
|
+
const {createInvoice} = require('ln-service');
|
|
3
|
+
const {returnResult} = require('asyncjs-util');
|
|
4
|
+
|
|
5
|
+
const encodeAnchoredTrade = require('./encode_anchored_trade');
|
|
6
|
+
|
|
7
|
+
const maxDescriptionLength = 100;
|
|
8
|
+
const maxSecretLength = 100;
|
|
9
|
+
|
|
10
|
+
/** Create an anchored trade
|
|
11
|
+
|
|
12
|
+
{
|
|
13
|
+
description: <Trade Description String>
|
|
14
|
+
expires_at: <Trade Expires at ISO 8601 Date String>
|
|
15
|
+
lnd: <Authenticated LND API Object>
|
|
16
|
+
secret: <Trade Secret String>
|
|
17
|
+
tokens: <Trade Price Tokens Number>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@returns via cbk or Promise
|
|
21
|
+
{
|
|
22
|
+
id: <Anchored Trade Id Hex String>
|
|
23
|
+
}
|
|
24
|
+
*/
|
|
25
|
+
module.exports = (args, cbk) => {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
return asyncAuto({
|
|
28
|
+
// Check arguments
|
|
29
|
+
validate: cbk => {
|
|
30
|
+
if (args.description === undefined) {
|
|
31
|
+
return cbk([400, 'ExpectedTradeDescriptionToCreateAnchoredTrade']);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (args.description.length > maxDescriptionLength) {
|
|
35
|
+
return cbk([400, 'ExpectedShorterTradeDescriptionToCreateTrade']);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!args.expires_at) {
|
|
39
|
+
return cbk([400, 'ExpectedTradeExpirationDateToCreateTrade']);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (args.expires_at < new Date().toISOString()) {
|
|
43
|
+
return cbk([400, 'ExpectedLaterExpiresAtDateToCreateTrade']);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!args.lnd) {
|
|
47
|
+
return cbk([400, 'ExpectedAuthenticatedLndToCreateAnchoredTrade']);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!args.secret) {
|
|
51
|
+
return cbk([400, 'ExpectedTradeSecretToCreateAnchoredTrade']);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (args.secret.length > maxSecretLength) {
|
|
55
|
+
return cbk([400, 'ExpectedShorterTradeSecretToCreateAnchoredTrade']);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!args.tokens) {
|
|
59
|
+
return cbk([400, 'ExpectedTokensPriceToCreateAnchoredTrade']);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return cbk();
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
// Create the trade
|
|
66
|
+
create: ['validate', ({}, cbk) => {
|
|
67
|
+
const {encoded} = encodeAnchoredTrade({
|
|
68
|
+
description: args.description,
|
|
69
|
+
secret: args.secret,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return createInvoice({
|
|
73
|
+
description: encoded,
|
|
74
|
+
expires_at: args.expires_at,
|
|
75
|
+
lnd: args.lnd,
|
|
76
|
+
tokens: args.tokens,
|
|
77
|
+
},
|
|
78
|
+
cbk);
|
|
79
|
+
}],
|
|
80
|
+
|
|
81
|
+
// Final trade
|
|
82
|
+
trade: ['create', ({create}, cbk) => cbk(null, {id: create.id})],
|
|
83
|
+
},
|
|
84
|
+
returnResult({reject, resolve, of: 'trade'}, cbk));
|
|
85
|
+
});
|
|
86
|
+
};
|
package/trades/create_trade.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
const asyncAuto = require('async/auto');
|
|
2
|
-
const {createInvoice} = require('ln-service');
|
|
3
2
|
const {getChannels} = require('ln-service');
|
|
4
3
|
const {getNetwork} = require('ln-sync');
|
|
5
4
|
const {getWalletInfo} = require('ln-service');
|
|
6
5
|
const {returnResult} = require('asyncjs-util');
|
|
7
6
|
|
|
8
|
-
const
|
|
7
|
+
const createAnchoredTrade = require('./create_anchored_trade');
|
|
9
8
|
const finalizeTradeSecret = require('./finalize_trade_secret');
|
|
10
9
|
const serviceOpenTrade = require('./service_open_trade');
|
|
11
10
|
|
|
@@ -204,15 +203,11 @@ module.exports = ({ask, lnd, logger}, cbk) => {
|
|
|
204
203
|
return cbk();
|
|
205
204
|
}
|
|
206
205
|
|
|
207
|
-
|
|
208
|
-
description: askForDescription.description,
|
|
209
|
-
secret: askForSecret.secret,
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
return createInvoice({
|
|
206
|
+
return createAnchoredTrade({
|
|
213
207
|
lnd,
|
|
214
|
-
description:
|
|
208
|
+
description: askForDescription.description,
|
|
215
209
|
expires_at: futureDate(daysAsMs(askForExpiration.days)),
|
|
210
|
+
secret: askForSecret.secret,
|
|
216
211
|
tokens: asNumber(askForPrice.tokens),
|
|
217
212
|
},
|
|
218
213
|
cbk);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const asyncAuto = require('async/auto');
|
|
2
|
+
const asyncReflect = require('async/reflect');
|
|
3
|
+
const {getInvoice} = require('ln-service');
|
|
4
|
+
const {returnResult} = require('asyncjs-util');
|
|
5
|
+
|
|
6
|
+
const decodeAnchoredTrade = require('./decode_anchored_trade');
|
|
7
|
+
|
|
8
|
+
/** Get anchored trade
|
|
9
|
+
|
|
10
|
+
{
|
|
11
|
+
id: <Trade Id Hex String>
|
|
12
|
+
lnd: <Authenticated LND API Object>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@returns via cbk or Promise
|
|
16
|
+
{
|
|
17
|
+
[trade]: {
|
|
18
|
+
description: <Trade Description String>
|
|
19
|
+
expires_at: <Trade Expires at ISO 8601 Date String>
|
|
20
|
+
secret: <Trade Secret String>
|
|
21
|
+
tokens: <Trade Price Tokens Number>
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
*/
|
|
25
|
+
module.exports = ({id, lnd}, cbk) => {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
return asyncAuto({
|
|
28
|
+
// Check arguments
|
|
29
|
+
validate: cbk => {
|
|
30
|
+
if (!id) {
|
|
31
|
+
return cbk([400, 'ExpectedIdToGetAnchoredTrade']);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!lnd) {
|
|
35
|
+
return cbk([400, 'ExpectedLndToGetAnchoredTrade']);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return cbk();
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
// Get invoice
|
|
42
|
+
getInvoice: ['validate', asyncReflect(({}, cbk) => {
|
|
43
|
+
return getInvoice({id, lnd}, cbk);
|
|
44
|
+
})],
|
|
45
|
+
|
|
46
|
+
// Decode trade details
|
|
47
|
+
decode: ['getInvoice', ({getInvoice}, cbk) => {
|
|
48
|
+
if (!getInvoice.value) {
|
|
49
|
+
return cbk(null, {});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const encoded = getInvoice.value.description;
|
|
53
|
+
|
|
54
|
+
const {trade} = decodeAnchoredTrade({encoded});
|
|
55
|
+
|
|
56
|
+
if (!trade) {
|
|
57
|
+
return cbk([400, 'ExpectedAnchoredTradeData']);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return cbk(null, {
|
|
61
|
+
trade: {
|
|
62
|
+
description: trade.description,
|
|
63
|
+
expires_at: getInvoice.value.expires_at,
|
|
64
|
+
secret: trade.secret,
|
|
65
|
+
tokens: getInvoice.value.tokens,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}],
|
|
69
|
+
},
|
|
70
|
+
returnResult({reject, resolve, of: 'decode'}, cbk));
|
|
71
|
+
});
|
|
72
|
+
};
|
package/trades/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
const createAnchoredTrade = require('./create_anchored_trade');
|
|
1
2
|
const decodeTrade = require('./decode_trade');
|
|
2
3
|
const encodeTrade = require('./encode_trade');
|
|
4
|
+
const getAnchoredTrade = require('./get_anchored_trade');
|
|
3
5
|
const manageTrades = require('./manage_trades');
|
|
4
6
|
const serviceAnchoredTrades = require('./service_anchored_trades');
|
|
5
7
|
|
|
6
8
|
module.exports = {
|
|
9
|
+
createAnchoredTrade,
|
|
7
10
|
decodeTrade,
|
|
8
11
|
encodeTrade,
|
|
12
|
+
getAnchoredTrade,
|
|
9
13
|
manageTrades,
|
|
10
14
|
serviceAnchoredTrades,
|
|
11
15
|
};
|