fix testnet swaps

This commit is contained in:
Alex Bosworth 2020-10-06 22:23:43 -07:00
parent 232afeea6a
commit e5508460b8
No known key found for this signature in database
GPG key ID: E80D2F3F311FD87E
14 changed files with 456 additions and 459 deletions

View file

@ -1,5 +1,10 @@
# Versions
## Version 6.2.1
- `chain-receive`: Fix method on testnet
- `increase-inbound-liquidity`: Fix method on testnet
## Version 6.2.0
- `fees`: Allow specifying formulas with `--set-fee-rate`, including INBOUND_FEE_RATE

28
bos
View file

@ -9,6 +9,7 @@ const {statSync} = require('fs');
const {unlink} = require('fs');
const {writeFile} = require('fs');
const fetch = require('node-fetch');
const {findKey} = require('ln-sync');
const inquirer = require('inquirer');
const prog = require('caporal');
@ -38,12 +39,12 @@ const {getFeesPaid} = require('./routing');
const {getForwards} = require('./network');
const {getLiquidity} = require('./balances');
const {getLnds} = require('./lnd');
const {getPaidService} = require('./swaps');
const {getPeers} = require('./network');
const {getPriceChart} = require('./fiat');
const {getReceivedChart} = require('./wallets');
const {getReport} = require('./wallets');
const {getSwapCost} = require('./swaps');
const {getSwapService} = require('./swaps');
const {getUtxos} = require('./chain');
const {ignoreFromAvoid} = require('./routing');
const {lndCredentials} = require('./lnd');
@ -220,11 +221,13 @@ prog
.option('--node <node_name>', 'Node to receive funds on')
.option('--recovery <refund_recovery>', 'Attempt refund of swap')
.option('--refund-address <refund_address>', 'Refund address for swap')
.option('--service-socket <swap_service_socket>', 'host:port for service')
.option('--test-refund', 'Reduce refund timeout height to test refund')
.action((args, options, logger) => {
return new Promise(async (resolve, reject) => {
try {
return swapIn({
fetch,
logger,
api_key: options.apiKey || undefined,
in_through: options.in || undefined,
@ -234,6 +237,7 @@ prog
node: options.node,
recovery: options.recovery,
refund_address: options.refundAddress,
socket: options.serviceSocket || undefined,
tokens: args.amount,
},
returnObject({exit, logger, reject, resolve}));
@ -632,6 +636,7 @@ prog
return new Promise(async (resolve, reject) => {
try {
return swapOut({
fetch,
logger,
api_key: options.apiKey || undefined,
avoid: flatten([options.avoid].filter(n => !!n)),
@ -695,22 +700,32 @@ prog
.visible(false)
.argument('<type>', 'Liquidity direction', swapTypes)
.argument('<amount>', 'Amount of liquidity to get quote for', INT)
.argument('<api-key>', 'Swap API key to use', hexMatch)
.option('--above <tokens>', 'Return amount above watermark', INT)
.option('--api-key <api_key>', 'Pre-paid API key to use', hexMatch)
.option('--fast', 'Avoid any server batching wait time')
.option('--node <node_name>', 'Node to get liquidity cost')
.option('--service-socket', 'Specify a custom swap service address')
.action((args, options, logger) => {
return new Promise(async (resolve, reject) => {
try {
const {service} = await getSwapService({logger, node: options.node});
const {lnd} = await authenticatedLnd({logger, node: options.node});
const {macaroon, preimage, service} = await getPaidService({
fetch,
lnd,
logger,
socket: options.serviceSocket,
token: args.apiKey,
});
return getSwapCost({
lnd,
logger,
macaroon,
preimage,
service,
above: options.above,
api_key: options.apiKey || undefined,
is_fast: options.fast || undefined,
lnd: (await authenticatedLnd({logger, node: options.node})).lnd,
tokens: args.amount,
type: args.type,
},
@ -1120,10 +1135,12 @@ prog
.option('--macaroon <macaroon>', 'Hex encoded macaroon of swap API key')
.option('--node <node_name>', 'Node to use to pay for API key')
.option('--preimage <preimage>', 'Hex encoded preimage of swap API key')
.option('--service-socket <swap_service_socket>', 'host:port for service')
.action((args, options, logger) => {
return new Promise(async (resolve, reject) => {
try {
return swapApiKey({
fetch,
logger,
api_key: options.apiKey,
is_purchase: options.purchase,
@ -1131,6 +1148,7 @@ prog
macaroon: options.macaroon,
node: options.node,
preimage: options.preimage,
socket: options.serviceSocket,
},
returnObject({logger, reject, resolve}));
} catch (err) {

View file

@ -121,6 +121,8 @@ module.exports = (args, cbk) => {
const method = !features ? subscribeToProbe : subscribeToProbeForRoute;
const timeoutMinutes = minutesAsMs((args.timeout_minutes || Number()));
const sub = method({
cltv_delta: args.cltv_delta,
destination: args.destination,
@ -135,7 +137,7 @@ module.exports = (args, cbk) => {
outgoing_channel: args.outgoing_channel,
path_timeout_ms: pathTimeoutMs,
payment: args.payment,
probe_timeout_ms: minutesAsMs((args.timeout_minutes || Number())),
probe_timeout_ms: timeoutMinutes || undefined,
routes: args.routes,
tokens: args.tokens,
total_mtokens: mtokens,

682
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "balanceofsatoshis",
"version": "6.2.0",
"version": "6.2.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -249,9 +249,9 @@
"integrity": "sha512-LIbt3dAK7v7VPoDQ/hNO3KSlUdPLkO74m1A/c+guKhoBiY1192F2Nt0moHU0wyWw/sUV9zAnw1GPyGsS7401ZQ=="
},
"@datastructures-js/priority-queue": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.1.tgz",
"integrity": "sha512-2i9+/23VjcJRZrPRoQtuQwL8lMy/FVoRTMurZAV+1x0lZxCJjUUo8m83SC0ndCycFmiNjxdWVns/vsHWtj4bpQ==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.2.tgz",
"integrity": "sha512-S4fXJcsPdqEp2bbKZlH7suSiZ0lqmIs8n5BXqQXB+7/lA9LSK/Ng0hIehTjgETfe7n3g4ZVLoyjEUWHEbHJFdQ==",
"requires": {
"@datastructures-js/heap": "^2.0.0"
}
@ -363,11 +363,6 @@
"@types/node": "*"
}
},
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
},
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@ -670,9 +665,9 @@
"integrity": "sha512-Al3nHGQGqDYqqinXhQzmwmcRToe/3WyBv4N8aZc5Pef8xw2neZlR9VPi84Sa23JtgWcucu18HxVZrnI0fn2etw=="
},
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
"integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
},
"binary-extensions": {
"version": "2.1.0",
@ -856,9 +851,9 @@
}
},
"bolt09": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.1.tgz",
"integrity": "sha512-BX1LjpvU7qLyv8LRpYsq7p6fM2SiECWtfwjzx2/cStT0YFJhS74qFw5CfivoRz6ZEg3W7g1Exrv0tmDRkKeBkA=="
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
},
"boxen": {
"version": "4.2.0",
@ -881,11 +876,10 @@
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
@ -1945,18 +1939,18 @@
"dev": true
},
"flow-parser": {
"version": "0.134.0",
"resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.134.0.tgz",
"integrity": "sha512-VmRba5YXKmVqIH3xNzUJ4pNobxXEOl6h36m+0f5dZ6/av9YlRpls/yBnPESQ4qBUbyyp7iqoc1Feo1lFw3u1YQ==",
"version": "0.135.0",
"resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.135.0.tgz",
"integrity": "sha512-ev8SvmG+XU9D6WgHVezP4kY3Myr1tJvTUTEi7mbhhj+rn889K7YXdakte6oqXNLIJYJ2f5Fuw18zXTVa1NO8Kw==",
"dev": true
},
"flow-remove-types": {
"version": "2.134.0",
"resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.134.0.tgz",
"integrity": "sha512-NVtghveE8GbU+980DRZQ0NZYGE7l7FIZm/UU8Ft7QoFgpsU8Tauv/WRLX+Exj4WT+GbAndmyUWZFOtcBfeT+gg==",
"version": "2.135.0",
"resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.135.0.tgz",
"integrity": "sha512-l/9INhkrrTD+91k35P0eiF94E1cOpjfd86WVVqRwQRjamjSwTKKgu7MDLel3DGmBB09I2AXv7IjacNiwt0yc1g==",
"dev": true,
"requires": {
"flow-parser": "^0.134.0",
"flow-parser": "^0.135.0",
"pirates": "^3.0.2",
"vlq": "^0.2.1"
}
@ -2109,9 +2103,9 @@
"dev": true
},
"goldengate": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-7.0.2.tgz",
"integrity": "sha512-ION2SoSTsePG9boPyREvPbH0f3bz9ZnYfUUaZsgPlEwj+od7+vGvHTQRdEvg3hl4Yod2U+gxNG7SpMHsY9Yuaw==",
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-7.1.0.tgz",
"integrity": "sha512-LwQDMX/kEKqBUoaBI8ssgbJ9f1HWbRv62pMbMfIjGxqrH4HSB8fd3ZkMBqDLicA4J5LfFIxvUjn5aqo6KgvVvg==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"@mitmaro/http-authorization-header": "1.0.0",
@ -2124,95 +2118,17 @@
"bn.js": "5.1.3",
"cbor": "5.1.0",
"grpc": "1.24.3",
"ln-service": "49.10.0",
"ln-service": "49.14.0",
"macaroon": "3.0.4",
"node-fetch": "2.6.1",
"pushdata-bitcoin": "1.0.1",
"varuint-bitcoin": "1.1.2"
},
"dependencies": {
"bip174": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz",
"integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ=="
},
"bn.js": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt07": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.5.2.tgz",
"integrity": "sha512-P7LNOnBLtRYe0v30JvVR2xVvWWNrUt4IZ19njFRJb1NMhEx2xe+O0G7x4WZTWB7bHPAdkfR76l9F7jEVxizjlQ==",
"requires": {
"bn.js": "5.1.2"
},
"dependencies": {
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
}
}
},
"invoices": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.3.tgz",
"integrity": "sha512-+RZmDmgVXvn6hAzGUqdl+1q8lEm9Th5XO/yg2aAIHpxhBc+BrrdCaMjjsk+weoZp9jm6LA92Dt2bzo+4ou1SVw==",
"requires": {
"bech32": "1.1.4",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"secp256k1": "4.0.2"
},
"dependencies": {
"bitcoinjs-lib": {
"version": "5.1.10",
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz",
"integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==",
"requires": {
"bech32": "^1.1.2",
"bip174": "^1.0.1",
"bip32": "^2.0.4",
"bip66": "^1.1.0",
"bitcoin-ops": "^1.4.0",
"bs58check": "^2.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"merkle-lib": "^2.0.10",
"pushdata-bitcoin": "^1.0.1",
"randombytes": "^2.0.1",
"tiny-secp256k1": "^1.1.1",
"typeforce": "^1.11.3",
"varuint-bitcoin": "^1.0.4",
"wif": "^2.0.1"
}
}
}
},
"ln-service": {
"version": "49.10.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.10.0.tgz",
"integrity": "sha512-XK3gFc+Qowy9SquJ37UUktn61dlyoAR/4eN6eV2WPSY4DaSahZ/Xwe9j3ljXnZjTL5FClNzAfPwAhS/ljrgbhw==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cors": "2.8.5",
"express": "4.17.1",
"invoices": "1.1.3",
"is-base64": "1.1.0",
"lightning": "2.0.44",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.1"
}
}
}
},
@ -2501,11 +2417,10 @@
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
@ -2634,11 +2549,6 @@
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt09": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
}
}
},
@ -3114,9 +3024,9 @@
"dev": true
},
"lightning": {
"version": "2.0.44",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.44.tgz",
"integrity": "sha512-Xi8C0FmxIZ1Pg23JlXRoXc7ELEtskiWI7jfcdr1oYWpVlNxUJKc4ALrUMofqo+EXaoHhtEvc6byyHtxuNl6iLw==",
"version": "2.0.54",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.54.tgz",
"integrity": "sha512-NbKno+RNlOUIIND9s5DwfBwPvUcEfWhaiRKHzOsOJB9NZZUgzczjSK9aO84yd5Sen/fauMyA0jNHbBdBp7jtqQ==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
@ -3124,75 +3034,19 @@
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"body-parser": "1.19.0",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"bolt07": "1.6.0",
"bolt09": "0.1.2",
"cbor": "5.1.0",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.3"
"invoices": "1.1.4",
"psbt": "1.1.5"
},
"dependencies": {
"bip174": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz",
"integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ=="
},
"bn.js": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt07": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.5.2.tgz",
"integrity": "sha512-P7LNOnBLtRYe0v30JvVR2xVvWWNrUt4IZ19njFRJb1NMhEx2xe+O0G7x4WZTWB7bHPAdkfR76l9F7jEVxizjlQ==",
"requires": {
"bn.js": "5.1.2"
},
"dependencies": {
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
}
}
},
"invoices": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.3.tgz",
"integrity": "sha512-+RZmDmgVXvn6hAzGUqdl+1q8lEm9Th5XO/yg2aAIHpxhBc+BrrdCaMjjsk+weoZp9jm6LA92Dt2bzo+4ou1SVw==",
"requires": {
"bech32": "1.1.4",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"secp256k1": "4.0.2"
},
"dependencies": {
"bitcoinjs-lib": {
"version": "5.1.10",
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz",
"integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==",
"requires": {
"bech32": "^1.1.2",
"bip174": "^1.0.1",
"bip32": "^2.0.4",
"bip66": "^1.1.0",
"bitcoin-ops": "^1.4.0",
"bs58check": "^2.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"merkle-lib": "^2.0.10",
"pushdata-bitcoin": "^1.0.1",
"randombytes": "^2.0.1",
"tiny-secp256k1": "^1.1.1",
"typeforce": "^1.11.3",
"varuint-bitcoin": "^1.0.4",
"wif": "^2.0.1"
}
}
}
}
}
},
@ -3208,6 +3062,14 @@
"ln-service": "49.10.0"
},
"dependencies": {
"@datastructures-js/priority-queue": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.1.tgz",
"integrity": "sha512-2i9+/23VjcJRZrPRoQtuQwL8lMy/FVoRTMurZAV+1x0lZxCJjUUo8m83SC0ndCycFmiNjxdWVns/vsHWtj4bpQ==",
"requires": {
"@datastructures-js/heap": "^2.0.0"
}
},
"bip174": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz",
@ -3233,6 +3095,33 @@
}
}
},
"bolt09": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.1.tgz",
"integrity": "sha512-BX1LjpvU7qLyv8LRpYsq7p6fM2SiECWtfwjzx2/cStT0YFJhS74qFw5CfivoRz6ZEg3W7g1Exrv0tmDRkKeBkA=="
},
"goldengate": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-7.0.2.tgz",
"integrity": "sha512-ION2SoSTsePG9boPyREvPbH0f3bz9ZnYfUUaZsgPlEwj+od7+vGvHTQRdEvg3hl4Yod2U+gxNG7SpMHsY9Yuaw==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"@mitmaro/http-authorization-header": "1.0.0",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bip65": "1.0.3",
"bip68": "1.0.4",
"bitcoin-ops": "1.4.1",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"cbor": "5.1.0",
"grpc": "1.24.3",
"ln-service": "49.10.0",
"macaroon": "3.0.4",
"pushdata-bitcoin": "1.0.1",
"varuint-bitcoin": "1.1.2"
}
},
"invoices": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.3.tgz",
@ -3270,6 +3159,25 @@
}
}
},
"lightning": {
"version": "2.0.44",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.44.tgz",
"integrity": "sha512-Xi8C0FmxIZ1Pg23JlXRoXc7ELEtskiWI7jfcdr1oYWpVlNxUJKc4ALrUMofqo+EXaoHhtEvc6byyHtxuNl6iLw==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"body-parser": "1.19.0",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cbor": "5.1.0",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.3"
}
},
"ln-service": {
"version": "49.10.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.10.0.tgz",
@ -3295,9 +3203,9 @@
}
},
"ln-service": {
"version": "49.12.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.12.0.tgz",
"integrity": "sha512-giGNeXH/d2vpzny9HdxTp7DSHN+gnL2Qz8U4RHW5sIOOdc4dXR4E/G1H5cpKovX0Ix4IuQ8FlyvwwXwMHPJHEw==",
"version": "49.14.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.14.0.tgz",
"integrity": "sha512-01CoIfdo1vRQfc3siVGAZEDaKv3IrAwpjLLCtOa8aYxIwjQN+a7YC4GIBysbxiOaF0E+eZZIGz8Y76U7zWHhEQ==",
"requires": {
"@datastructures-js/priority-queue": "4.1.2",
"async": "3.2.0",
@ -3310,48 +3218,16 @@
"express": "4.17.1",
"invoices": "1.1.4",
"is-base64": "1.1.0",
"lightning": "2.0.50",
"lightning": "2.0.54",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.1"
},
"dependencies": {
"@datastructures-js/priority-queue": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.2.tgz",
"integrity": "sha512-S4fXJcsPdqEp2bbKZlH7suSiZ0lqmIs8n5BXqQXB+7/lA9LSK/Ng0hIehTjgETfe7n3g4ZVLoyjEUWHEbHJFdQ==",
"requires": {
"@datastructures-js/heap": "^2.0.0"
}
},
"bn.js": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt09": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
},
"lightning": {
"version": "2.0.50",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.50.tgz",
"integrity": "sha512-vLD7N0OH5prJ+Ebt0lYestUuVKRmqMapH00jK+SR8IxIxzT6JM/KpMSJNWujUkP6yRSwBPF7QSUrIf/U1nk/FQ==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"body-parser": "1.19.0",
"bolt07": "1.6.0",
"bolt09": "0.1.2",
"cbor": "5.1.0",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.4"
}
}
}
},
@ -3375,11 +3251,6 @@
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt09": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
},
"lightning": {
"version": "2.0.49",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.49.tgz",
@ -3417,27 +3288,130 @@
},
"dependencies": {
"@datastructures-js/priority-queue": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.2.tgz",
"integrity": "sha512-S4fXJcsPdqEp2bbKZlH7suSiZ0lqmIs8n5BXqQXB+7/lA9LSK/Ng0hIehTjgETfe7n3g4ZVLoyjEUWHEbHJFdQ==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.1.tgz",
"integrity": "sha512-2i9+/23VjcJRZrPRoQtuQwL8lMy/FVoRTMurZAV+1x0lZxCJjUUo8m83SC0ndCycFmiNjxdWVns/vsHWtj4bpQ==",
"requires": {
"@datastructures-js/heap": "^2.0.0"
}
},
"bip174": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz",
"integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ=="
},
"bn.js": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"bolt07": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.5.2.tgz",
"integrity": "sha512-P7LNOnBLtRYe0v30JvVR2xVvWWNrUt4IZ19njFRJb1NMhEx2xe+O0G7x4WZTWB7bHPAdkfR76l9F7jEVxizjlQ==",
"requires": {
"bn.js": "5.1.2"
},
"dependencies": {
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
}
}
},
"bolt09": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.1.tgz",
"integrity": "sha512-BX1LjpvU7qLyv8LRpYsq7p6fM2SiECWtfwjzx2/cStT0YFJhS74qFw5CfivoRz6ZEg3W7g1Exrv0tmDRkKeBkA=="
},
"goldengate": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-7.0.2.tgz",
"integrity": "sha512-ION2SoSTsePG9boPyREvPbH0f3bz9ZnYfUUaZsgPlEwj+od7+vGvHTQRdEvg3hl4Yod2U+gxNG7SpMHsY9Yuaw==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"@mitmaro/http-authorization-header": "1.0.0",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bip65": "1.0.3",
"bip68": "1.0.4",
"bitcoin-ops": "1.4.1",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"cbor": "5.1.0",
"grpc": "1.24.3",
"ln-service": "49.10.0",
"macaroon": "3.0.4",
"pushdata-bitcoin": "1.0.1",
"varuint-bitcoin": "1.1.2"
},
"dependencies": {
"invoices": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.3.tgz",
"integrity": "sha512-+RZmDmgVXvn6hAzGUqdl+1q8lEm9Th5XO/yg2aAIHpxhBc+BrrdCaMjjsk+weoZp9jm6LA92Dt2bzo+4ou1SVw==",
"requires": {
"bech32": "1.1.4",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"secp256k1": "4.0.2"
},
"dependencies": {
"bitcoinjs-lib": {
"version": "5.1.10",
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz",
"integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==",
"requires": {
"bech32": "^1.1.2",
"bip174": "^1.0.1",
"bip32": "^2.0.4",
"bip66": "^1.1.0",
"bitcoin-ops": "^1.4.0",
"bs58check": "^2.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"merkle-lib": "^2.0.10",
"pushdata-bitcoin": "^1.0.1",
"randombytes": "^2.0.1",
"tiny-secp256k1": "^1.1.1",
"typeforce": "^1.11.3",
"varuint-bitcoin": "^1.0.4",
"wif": "^2.0.1"
}
}
}
},
"ln-service": {
"version": "49.10.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.10.0.tgz",
"integrity": "sha512-XK3gFc+Qowy9SquJ37UUktn61dlyoAR/4eN6eV2WPSY4DaSahZ/Xwe9j3ljXnZjTL5FClNzAfPwAhS/ljrgbhw==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cors": "2.8.5",
"express": "4.17.1",
"invoices": "1.1.3",
"is-base64": "1.1.0",
"lightning": "2.0.44",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.1"
}
}
}
},
"lightning": {
"version": "2.0.50",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.50.tgz",
"integrity": "sha512-vLD7N0OH5prJ+Ebt0lYestUuVKRmqMapH00jK+SR8IxIxzT6JM/KpMSJNWujUkP6yRSwBPF7QSUrIf/U1nk/FQ==",
"version": "2.0.44",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.44.tgz",
"integrity": "sha512-Xi8C0FmxIZ1Pg23JlXRoXc7ELEtskiWI7jfcdr1oYWpVlNxUJKc4ALrUMofqo+EXaoHhtEvc6byyHtxuNl6iLw==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
@ -3445,12 +3419,51 @@
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"body-parser": "1.19.0",
"bolt07": "1.6.0",
"bolt09": "0.1.2",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cbor": "5.1.0",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.4"
"invoices": "1.1.3"
},
"dependencies": {
"invoices": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.3.tgz",
"integrity": "sha512-+RZmDmgVXvn6hAzGUqdl+1q8lEm9Th5XO/yg2aAIHpxhBc+BrrdCaMjjsk+weoZp9jm6LA92Dt2bzo+4ou1SVw==",
"requires": {
"bech32": "1.1.4",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.3",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"secp256k1": "4.0.2"
},
"dependencies": {
"bitcoinjs-lib": {
"version": "5.1.10",
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz",
"integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==",
"requires": {
"bech32": "^1.1.2",
"bip174": "^1.0.1",
"bip32": "^2.0.4",
"bip66": "^1.1.0",
"bitcoin-ops": "^1.4.0",
"bs58check": "^2.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"merkle-lib": "^2.0.10",
"pushdata-bitcoin": "^1.0.1",
"randombytes": "^2.0.1",
"tiny-secp256k1": "^1.1.1",
"typeforce": "^1.11.3",
"varuint-bitcoin": "^1.0.4",
"wif": "^2.0.1"
}
}
}
}
}
},
"ln-service": {
@ -3473,6 +3486,48 @@
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.1"
},
"dependencies": {
"@datastructures-js/priority-queue": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-4.1.2.tgz",
"integrity": "sha512-S4fXJcsPdqEp2bbKZlH7suSiZ0lqmIs8n5BXqQXB+7/lA9LSK/Ng0hIehTjgETfe7n3g4ZVLoyjEUWHEbHJFdQ==",
"requires": {
"@datastructures-js/heap": "^2.0.0"
}
},
"bolt07": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.6.0.tgz",
"integrity": "sha512-c+o1FdDxsmrCmrcqW6YRpk/dHDXk3frqHd1552b0JMXM2Kp6K74dbj74vioeYYUTzwyXB3zZFh9g2OZBg3JcYQ==",
"requires": {
"bn.js": "5.1.3"
}
},
"bolt09": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.1.2.tgz",
"integrity": "sha512-UcjCWM5w0ncmeLy+L1ghgWBmFUD7F+tvYpYw/pi1PLXMhRJ10gHFbPjzX2CTMsU0ICb8CisIFBsd16DWaUd4FA=="
},
"lightning": {
"version": "2.0.50",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.50.tgz",
"integrity": "sha512-vLD7N0OH5prJ+Ebt0lYestUuVKRmqMapH00jK+SR8IxIxzT6JM/KpMSJNWujUkP6yRSwBPF7QSUrIf/U1nk/FQ==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.2.0",
"bn.js": "5.1.3",
"body-parser": "1.19.0",
"bolt07": "1.6.0",
"bolt09": "0.1.2",
"cbor": "5.1.0",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.4"
}
}
}
}
}
@ -3773,9 +3828,9 @@
"integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q=="
},
"moment": {
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz",
"integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA=="
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"morgan": {
"version": "1.10.0",
@ -4557,130 +4612,15 @@
}
},
"probing": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/probing/-/probing-1.2.0.tgz",
"integrity": "sha512-i8VEApQgD8jI5V2taxOpIFSGSqtrC4lfNLFwf0j7YHBjStCCXpBqgO+a4iQVBOcb5TWk2yN99nqxvnPPIIasew==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/probing/-/probing-1.2.1.tgz",
"integrity": "sha512-G1xDei0tamsy0fRsXzAB6dxb4PVhUNkV3ogwjNOQaFanFTNuax1m/wDQrRwMPLTA9pqGniQnWpwDjFAQmb+gpg==",
"requires": {
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bolt07": "1.5.2",
"invoices": "1.1.1",
"ln-service": "49.4.2"
},
"dependencies": {
"bip174": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz",
"integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ=="
},
"bitcoinjs-lib": {
"version": "5.1.10",
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz",
"integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==",
"requires": {
"bech32": "^1.1.2",
"bip174": "^1.0.1",
"bip32": "^2.0.4",
"bip66": "^1.1.0",
"bitcoin-ops": "^1.4.0",
"bs58check": "^2.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"merkle-lib": "^2.0.10",
"pushdata-bitcoin": "^1.0.1",
"randombytes": "^2.0.1",
"tiny-secp256k1": "^1.1.1",
"typeforce": "^1.11.3",
"varuint-bitcoin": "^1.0.4",
"wif": "^2.0.1"
}
},
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
},
"bolt07": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.5.2.tgz",
"integrity": "sha512-P7LNOnBLtRYe0v30JvVR2xVvWWNrUt4IZ19njFRJb1NMhEx2xe+O0G7x4WZTWB7bHPAdkfR76l9F7jEVxizjlQ==",
"requires": {
"bn.js": "5.1.2"
}
},
"cbor": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/cbor/-/cbor-5.0.2.tgz",
"integrity": "sha512-6JiKVURxxO92FntzTJq54QdN/8fBaBwD7+nNyGIAi1HL9mBgU3YK6ULV8k7WTuT/EwfRsjy3MuqDKlkQMCmfXg==",
"requires": {
"bignumber.js": "^9.0.0",
"nofilter": "^1.0.3"
}
},
"invoices": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/invoices/-/invoices-1.1.1.tgz",
"integrity": "sha512-vcqo6soFOi+BXbirhuw1KRsL9GKmIbG150dk8Pb5SH/GfECxxEJwnY6DX4qcHylTy3GJSfAsiBT2jFgpls33Aw==",
"requires": {
"bech32": "1.1.4",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"secp256k1": "4.0.1"
}
},
"lightning": {
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.30.tgz",
"integrity": "sha512-XZFefXdOE4kPa/C533MwnTpgfidwM6M9s0Mtg7U0jmDA5dRB9VmMU8zssBAeo+cZ46fXEx7fz4lXLGQ6V7opUw==",
"requires": {
"@grpc/proto-loader": "0.5.5",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"body-parser": "1.19.0",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cbor": "5.0.2",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.1"
}
},
"ln-service": {
"version": "49.4.2",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.4.2.tgz",
"integrity": "sha512-ePUaLFWUEfz+QYAeaAvSAiHL33IpQILAEbMPFPc0KQ9/gFlWgnLDwBQmlIona2G10xePfOhTbaKz8Mjy0bQ+OA==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
"asyncjs-util": "1.2.3",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"bolt07": "1.5.2",
"bolt09": "0.1.1",
"cors": "2.8.5",
"express": "4.17.1",
"invoices": "1.1.1",
"is-base64": "1.1.0",
"lightning": "2.0.30",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.1"
}
},
"secp256k1": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.1.tgz",
"integrity": "sha512-iGRjbGAKfXMqhtdkkuNxsgJQfJO8Oo78Rm7DAvsG3XKngq+nJIOGqrCSXcQqIVsmCj0wFanE5uTKFxV3T9j2wg==",
"requires": {
"elliptic": "^6.5.2",
"node-addon-api": "^2.0.0",
"node-gyp-build": "^4.2.0"
}
}
"bolt07": "1.6.0",
"invoices": "1.1.4",
"ln-service": "49.14.0"
}
},
"process-nextick-args": {
@ -4720,9 +4660,9 @@
},
"dependencies": {
"@types/node": {
"version": "13.13.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.21.tgz",
"integrity": "sha512-tlFWakSzBITITJSxHV4hg4KvrhR/7h3xbJdSFbYJBVzKubrASbnnIFuSgolUh7qKGo/ZeJPKUfbZ0WS6Jp14DQ=="
"version": "13.13.23",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.23.tgz",
"integrity": "sha512-L31WmMJYKb15PDqFWutn8HNwrNK6CE6bkWgSB0dO1XpNoHrszVKV1Clcnfgd6c/oG54TVF8XQEvY2gQrW8K6Mw=="
}
}
},
@ -5263,11 +5203,10 @@
},
"dependencies": {
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
@ -6985,9 +6924,9 @@
}
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz",
"integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw=="
},
"tunnel-agent": {
"version": "0.6.0",
@ -7107,11 +7046,10 @@
},
"dependencies": {
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},

View file

@ -25,17 +25,18 @@
"colorette": "1.2.1",
"crypto-js": "4.0.0",
"csv-parse": "4.12.0",
"goldengate": "7.0.2",
"goldengate": "7.1.0",
"hot-formula-parser": "3.0.2",
"ini": "1.3.5",
"inquirer": "7.3.3",
"invoices": "1.1.4",
"ln-accounting": "4.1.10",
"ln-service": "49.12.0",
"ln-service": "49.14.0",
"ln-sync": "0.3.0",
"ln-telegram": "1.1.0",
"moment": "2.29.0",
"probing": "1.2.0",
"moment": "2.29.1",
"node-fetch": "2.6.1",
"probing": "1.2.1",
"psbt": "1.1.5",
"qrcode-terminal": "0.12.0",
"sanitize-filename": "1.6.3",
@ -72,5 +73,5 @@
"postpublish": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t alexbosworth/balanceofsatoshis --push .",
"test": "tap test/arrays/*.js test/balances/*.js test/chain/*.js test/display/*.js test/encryption/*.js test/fiat/*.js test/lnd/*.js test/network/*.js test/nodes/*.js test/responses/*.js test/routing/*.js test/swaps/*.js test/wallets/*.js"
},
"version": "6.2.0"
"version": "6.2.1"
}

View file

@ -1,5 +1,6 @@
const asyncAuto = require('async/auto');
const {encode} = require('cbor');
const {genericSwapService} = require('goldengate');
const {getNetwork} = require('ln-sync');
const {getSwapMacaroon} = require('goldengate');
const {lightningLabsSwapService} = require('goldengate');
@ -10,12 +11,18 @@ const {swapUserId} = require('goldengate');
const decodeSwapApiKey = require('./decode_swap_api_key');
const {probeDestination} = require('./../network');
const bitcoinTestnetNetwork = 'btctestnet';
const bufferFromBase64 = base64 => Buffer.from(base64, 'base64');
const bufferFromHex = hex => Buffer.from(hex, 'hex');
const encodeCbor = json => encode(json).toString('hex');
const httpMatch = /^https?:\/\//;
const maxRoutingFee = 100;
const testnetSocket = 'https://balanceofsatoshis.com:11010';
/** Get a paid swap service object
{
fetch: <Fetch Function>
lnd: <Authenticated LND gRPC API Object>
logger: <Winston Logger Object>
[socket]: <Custom Backing Service Socket String>
@ -32,11 +39,15 @@ const maxRoutingFee = 100;
token: <Authentication Token Hex String>
}
*/
module.exports = ({lnd, logger, socket, token}, cbk) => {
module.exports = ({fetch, lnd, logger, socket, token}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
// Check arguments
validate: cbk => {
if (!fetch) {
return cbk([400, 'ExpectedFetchFunctionToGetPaidService']);
}
if (!lnd) {
return cbk([400, 'ExpectedLndToGetPaidService']);
}
@ -61,11 +72,36 @@ module.exports = ({lnd, logger, socket, token}, cbk) => {
// Get network
getNetwork: ['validate', ({}, cbk) => getNetwork({lnd}, cbk)],
// Make a service object for the remote swap service
remote: ['getNetwork', ({getNetwork}, cbk) => {
// Exit early when using a generic service
if (!!socket && httpMatch.test(socket)) {
try {
return cbk(null, genericSwapService({fetch, socket}));
} catch (err) {
return cbk([500, 'UnexpectedErrorInitiatingSwapService', {err}]);
}
}
const {network} = getNetwork;
// Exit early and use a generic service on testnet
if (!socket && network === bitcoinTestnetNetwork) {
return cbk(null, genericSwapService({fetch, socket: testnetSocket}));
}
try {
return cbk(null, lightningLabsSwapService({network, socket}));
} catch (err) {
return cbk([500, 'UnexpectedErrorInitiatingSwapService', {err}]);
}
}],
// Get an unpaid swap macaroon
getUnpaidMacaroon: [
'decodeToken',
'getNetwork',
({decodeToken, getNetwork}, cbk) =>
'remote',
({decodeToken, remote}, cbk) =>
{
// Exit early when there is already a service token macaroon
if (!!decodeToken) {
@ -75,17 +111,7 @@ module.exports = ({lnd, logger, socket, token}, cbk) => {
});
}
const {network} = getNetwork;
try {
lightningLabsSwapService({network, socket});
} catch (err) {
return cbk([400, 'UnexpectedErrorInitiatingSwapService', {err}]);
}
const {service} = lightningLabsSwapService({network, socket});
return getSwapMacaroon({service}, cbk);
return getSwapMacaroon({service: remote.service}, cbk);
}],
// Pay for the macaroon
@ -110,44 +136,32 @@ module.exports = ({lnd, logger, socket, token}, cbk) => {
cbk);
}],
// Get the paid service object
service: [
// Final service method details
paidService: [
'decodeToken',
'getNetwork',
'getUnpaidMacaroon',
'payForMacaroon',
({decodeToken, getNetwork, getUnpaidMacaroon, payForMacaroon}, cbk) =>
'remote',
({decodeToken, getUnpaidMacaroon, payForMacaroon, remote}, cbk) =>
{
const {id} = getUnpaidMacaroon;
const {macaroon} = getUnpaidMacaroon;
const {network} = getNetwork;
const {paid} = payForMacaroon;
const {preimage} = payForMacaroon;
const {service} = remote;
if (!decodeToken && !paid) {
return cbk([400, 'FailedToPurchasePaidServiceTokens']);
}
try {
lightningLabsSwapService({macaroon, network, socket});
} catch (err) {
return cbk([400, 'FailedToFindSupportedSwapService', {err}]);
}
const {service} = lightningLabsSwapService({
macaroon,
network,
socket,
});
const token = encodeCbor({
macaroon: Buffer.from(macaroon, 'base64'),
preimage: Buffer.from(preimage, 'hex'),
macaroon: bufferFromBase64(macaroon),
preimage: bufferFromHex(preimage),
});
return cbk(null, {id, macaroon, paid, preimage, service, token});
}],
},
returnResult({reject, resolve, of: 'service'}, cbk));
returnResult({reject, resolve, of: 'paidService'}, cbk));
});
};

View file

@ -10,18 +10,17 @@ const {returnResult} = require('asyncjs-util');
const {balanceFromTokens} = require('./../balances');
const {cltvDeltaBuffer} = require('./constants');
const {fastDelayMinutes} = require('./constants');
const getPaidService = require('./get_paid_service');
const {slowDelayMinutes} = require('./constants');
/** Get the cost of liquidity via swap
{
[above]: <Cost Above Tokens Number>
[api_key]: <CBOR API Key Hex Encoded String>
[is_fast]: <Swap Out Is Immediate Bool>
lnd: <Authenticated LND API Object>
logger: <Winston Logger Object>
service: <Swap Service API Object>
macaroon: <Authenticated Service Macaroon Base64 String>
preimage: <Authenticated Preimage Hex String>
tokens: <Liquidity Tokens Number>
type: <Liquidity Type String>
}
@ -44,6 +43,14 @@ module.exports = (args, cbk) => {
return cbk([400, 'ExpectedLoggerToGetSwapCost']);
}
if (!args.macaroon) {
return cbk([400, 'ExpectedServiceMacaroonToGetSwapCost']);
}
if (!args.preimage) {
return cbk([400, 'ExpectedPaymentPreimageToGetSwapCost']);
}
if (!args.service) {
return cbk([400, 'ExpectedSwapServiceToGetSwapCost']);
}
@ -59,37 +66,22 @@ module.exports = (args, cbk) => {
return cbk();
},
// Get paid service
getService: ['validate', ({}, cbk) => {
// Exit early when there is no API key with the vanilla service
if (!args.api_key) {
return cbk(null, {service: args.service});
}
return getPaidService({
lnd: args.lnd,
logger: args.logger,
token: args.api_key,
},
cbk);
}],
// Get swap terms
getTerms: ['getService', ({getService}, cbk) => {
getTerms: ['validate', ({}, cbk) => {
switch (args.type) {
case 'inbound':
return getSwapOutTerms({
macaroon: getService.macaroon,
preimage: getService.preimage,
service: getService.service,
macaroon: args.macaroon,
preimage: args.preimage,
service: args.service,
},
cbk);
case 'outbound':
return getSwapInTerms({
macaroon: getService.macaroon,
preimage: getService.preimage,
service: getService.service,
macaroon: args.macaroon,
preimage: args.preimage,
service: args.service,
},
cbk);
@ -104,12 +96,7 @@ module.exports = (args, cbk) => {
}],
// Get a swap quote
getQuote: [
'getHeight',
'getService',
'getTerms',
({getHeight, getService, getTerms}, cbk) =>
{
getQuote: ['getHeight', 'getTerms', ({getHeight, getTerms}, cbk) => {
const cltv = getTerms.max_cltv_delta + getHeight.current_block_height;
const swapDelay = !args.is_fast ? slowDelayMinutes : fastDelayMinutes;
@ -117,9 +104,9 @@ module.exports = (args, cbk) => {
case 'inbound':
return getSwapOutQuote({
delay: moment().add(swapDelay, 'minutes').toISOString(),
macaroon: getService.macaroon,
preimage: getService.preimage,
service: getService.service,
macaroon: args.macaroon,
preimage: args.preimage,
service: args.service,
timeout: cltv - cltvDeltaBuffer,
tokens: args.tokens,
},
@ -127,9 +114,9 @@ module.exports = (args, cbk) => {
case 'outbound':
return getSwapInQuote({
macaroon: getService.macaroon,
preimage: getService.preimage,
service: getService.service,
macaroon: args.macaroon,
preimage: args.preimage,
service: args.service,
tokens: args.tokens,
},
cbk);

View file

@ -1,3 +1,4 @@
const getPaidService = require('./get_paid_service');
const getSwapCost = require('./get_swap_cost');
const getSwapService = require('./get_swap_service');
const rebalance = require('./rebalance');
@ -7,6 +8,7 @@ const swapOut = require('./swap_out');
const {swapTypes} = require('./constants');
module.exports = {
getPaidService,
getSwapCost,
getSwapService,
rebalance,

View file

@ -10,6 +10,7 @@ const getPaidService = require('./get_paid_service');
{
[api_key]: <Swap CBOR Encoded API Key Hex String>
[fetch]: <Node Fetch Function>
[is_purchase]: <Purchase a New API Key Bool>
[macaroon]: <Macaroon Hex Encoded String>
[lnd]: <Authenticated LND API gRPC API Object>
@ -87,8 +88,10 @@ module.exports = (args, cbk) => {
}
return getPaidService({
fetch: args.fetch,
lnd: args.lnd,
logger: args.logger,
socket: args.socket,
token: args.api_key,
},
cbk);

View file

@ -14,7 +14,6 @@ const {getNetwork} = require('ln-sync');
const {getSwapInQuote} = require('goldengate');
const {getSwapInTerms} = require('goldengate');
const {getWalletInfo} = require('ln-service');
const {lightningLabsSwapService} = require('goldengate');
const moment = require('moment');
const qrcode = require('qrcode-terminal');
const {refundTransaction} = require('goldengate');
@ -39,6 +38,7 @@ const waitForDepositMs = 1000 * 60 * 60 * 24;
{
[api_key]: <API Key CBOR Hex String>
fetch: <Fetch Function>
[in_through]: <Request Inbound Payment Public Key Hex String>
[is_refund_test]: <Alter Swap Timeout To Have Short Refund Bool>
lnd: <Authenticated LND gRPC API Object>
@ -46,6 +46,7 @@ const waitForDepositMs = 1000 * 60 * 60 * 24;
[max_fee]: <Maximum Fee Tokens to Pay Number>
[recovery]: <Recover In-Progress Swap String>
[refund_address]: <Refund Address String>
[socket]: <Swap Socket String>
[tokens]: <Tokens Number>
}
@ -60,6 +61,10 @@ module.exports = (args, cbk) => {
return asyncAuto({
// Check arguments
validate: cbk => {
if (!args.fetch) {
return cbk([400, 'ExpectedFetchFunctionToReceiveOnChain']);
}
if (!args.logger) {
return cbk([400, 'ExpectedLoggerToReceiveOnChain']);
}
@ -104,8 +109,10 @@ module.exports = (args, cbk) => {
}
return getPaidService({
fetch: args.fetch,
lnd: args.lnd,
logger: args.logger,
socket: args.socket,
token: args.api_key,
},
cbk);

View file

@ -84,6 +84,7 @@ const tokensAsBigUnit = tokens => ((tokens || 0) / 1e8).toFixed(8);
[api_key]: <API Key CBOR String>
[avoid]: [<Avoid Forwarding Through Node With Public Key Hex String>]
confs: <Confirmations to Wait for Deposit Number>
fetch: <Fetch Function>
[is_fast]: <Execute Swap Immediately Bool>
[is_dry_run]: <Avoid Actually Executing Operation Bool>
[is_raw_recovery_shown]: <Show Raw Recovery Transactions Bool>
@ -116,6 +117,10 @@ module.exports = (args, cbk) => {
return cbk([400, 'ExpectedConfirmationsCountToConsiderReorgSafe']);
}
if (!args.fetch) {
return cbk([400, 'ExpectedFetchFunctionToInitiateSwapOut']);
}
if (!args.lnd) {
return cbk([400, 'ExpectedLndToInitiateSwapOut']);
}
@ -295,6 +300,7 @@ module.exports = (args, cbk) => {
return getPaidService({
network,
fetch: args.fetch,
lnd: args.lnd,
logger: args.logger,
socket: args.socket,
@ -795,6 +801,7 @@ module.exports = (args, cbk) => {
'decodeFundingRequest',
'findRouteForExecution',
'findRoutesForFunding',
'getMinSweepFee',
({decodeFundingRequest, findRoutesForFunding}, cbk) =>
{
if (!!args.recovery) {

View file

@ -10,6 +10,7 @@ const {getWalletInfo} = require('ln-service');
const {handleBackupCommand} = require('ln-telegram');
const {handleBlocknotifyCommand} = require('ln-telegram');
const {handleConnectCommand} = require('ln-telegram');
const {handleEarningsCommand} = require('ln-telegram');
const {handleInvoiceCommand} = require('ln-telegram');
const {handleLiquidityCommand} = require('ln-telegram');
const {handleMempoolCommand} = require('ln-telegram');
@ -239,7 +240,6 @@ module.exports = ({fs, id, lnds, logger, payments, request}, cbk) => {
});
bot.command('earnings', ({message, replyWithMarkdown}) => {
const {handleEarningsCommand} = require('ln-telegram');
handleEarningsCommand({
from: message.from.id,
id: connectedId,

View file

@ -1,4 +1,5 @@
const {encode} = require('cbor');
const fetch = require('node-fetch');
const {test} = require('tap');
const {getInfoResponse} = require('./../fixtures');
@ -9,6 +10,7 @@ const makeToken = (m, p) => encode({macaroon: m, preimage: p}).toString('hex');
const makeArgs = override => {
const args = {
fetch,
lnd: {
default: {
getInfo: ({}, cbk) => cbk(null, getInfoResponse),

View file

@ -3,6 +3,9 @@ const {test} = require('tap');
const {getInfoResponse} = require('./../fixtures');
const {getSwapCost} = require('./../../swaps');
const macaroon = 'macaroon';
const preimage = 'preimage';
const makeLnd = ({}) => {
return {
default: {
@ -34,22 +37,24 @@ const makeTerms = ({max, min}) => ({
const tests = [
{
args: {lnd: {}, logger: {}},
args: {macaroon, preimage, lnd: {}, logger: {}},
description: 'Swap service is required',
error: [400, 'ExpectedSwapServiceToGetSwapCost'],
},
{
args: {lnd: {}, logger: {}, service: {}},
args: {macaroon, preimage, lnd: {}, logger: {}, service: {}},
description: 'Tokens are required',
error: [400, 'ExpectedTokensCountToGetSwapCost'],
},
{
args: {lnd: {}, logger: {}, service: {}, tokens: 1},
args: {macaroon, preimage, lnd: {}, logger: {}, service: {}, tokens: 1},
description: 'Swap type is required',
error: [400, 'ExpectedLiquidityTypeToGetSwapCost'],
},
{
args: {
macaroon,
preimage,
lnd: {},
logger: {},
service: makeService({}),
@ -61,6 +66,8 @@ const tests = [
},
{
args: {
macaroon,
preimage,
lnd: makeLnd({}),
logger: {},
service: {
@ -75,6 +82,8 @@ const tests = [
},
{
args: {
macaroon,
preimage,
lnd: makeLnd({}),
logger: {},
service: {
@ -91,6 +100,8 @@ const tests = [
},
{
args: {
macaroon,
preimage,
lnd: makeLnd({}),
logger: {},
service: makeService({}),