astra-lightning 1.1.2 → 1.1.4
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/.github/workflows/unit-test.yml +20 -0
- package/CHANGELOG.md +46 -1
- package/README.md +2 -0
- package/bolt02/ids.json +1 -0
- package/grpc/grpc_services.json +1 -1
- package/grpc/protos/lightning.proto +251 -28
- package/grpc/protos/rfqrpc/rfq.proto +53 -5
- package/grpc/protos/router.proto +9 -4
- package/grpc/protos/routerrpc/router.proto +26 -4
- package/grpc/protos/{tapchannelrpc.proto → tapchannel.proto} +105 -25
- package/grpc/protos/tapcommon.proto +36 -0
- package/grpc/protos/taprootassets.proto +544 -23
- package/grpc/protos/walletkit.proto +78 -6
- package/index.js +162 -160
- package/lnd_methods/generic/get_height.js +1 -1
- package/lnd_methods/index.js +162 -160
- package/lnd_methods/info/constants.json +7 -0
- package/lnd_methods/invoices/create_invoice.js +10 -14
- package/lnd_methods/invoices/subscribe_to_invoice.d.ts +4 -0
- package/lnd_methods/invoices/subscribe_to_invoice.js +21 -21
- package/lnd_methods/macaroon/methods.json +4 -0
- package/lnd_methods/offchain/decode_asset_pay_req.d.ts +69 -28
- package/lnd_methods/offchain/decode_asset_pay_req.js +54 -61
- package/lnd_methods/offchain/get_pending_channels.d.ts +16 -0
- package/lnd_methods/offchain/get_pending_channels.js +6 -0
- package/lnd_methods/offchain/get_routing_fee_estimate.d.ts +32 -0
- package/lnd_methods/offchain/get_routing_fee_estimate.js +86 -0
- package/lnd_methods/offchain/index.d.ts +60 -60
- package/lnd_methods/offchain/index.js +6 -4
- package/lnd_methods/offchain/pay_via_routes.d.ts +4 -0
- package/lnd_methods/onchain/close_channel.d.ts +4 -0
- package/lnd_methods/onchain/close_channel.js +4 -0
- package/lnd_methods/onchain/open_channels.d.ts +1 -0
- package/lnd_methods/onchain/open_channels.js +7 -1
- package/lnd_methods/onchain/request_chain_fee_increase.js +5 -0
- package/lnd_methods/onchain/subscribe_to_blocks.js +1 -1
- package/lnd_responses/confirmed_from_payment_status.js +38 -40
- package/lnd_responses/constants.json +1 -0
- package/lnd_responses/forward_from_htlc_event.js +31 -31
- package/lnd_responses/info_as_wallet_info.js +28 -28
- package/lnd_responses/payment_request_details.js +28 -32
- package/lnd_responses/pending_as_pending_channels.js +8 -0
- package/lnd_responses/pending_from_payment.js +24 -24
- package/lnd_responses/routes_from_query_routes.js +30 -30
- package/lnd_responses/rpc_channel_as_channel.js +10 -9
- package/lnd_responses/rpc_fees_as_channel_fees.js +16 -16
- package/lnd_responses/rpc_forward_as_forward_request.js +27 -27
- package/lnd_responses/rpc_payment_as_payment.js +28 -31
- package/package.json +24 -20
- package/test/lnd_methods/offchain/test_get_routing_fee_estimate.js +82 -0
- package/test/lnd_methods/onchain/test_close_channel.js +5 -0
- package/test/lnd_methods/onchain/test_open_channels.js +5 -1
- package/test/lnd_methods/onchain/test_request_chain_fee_increase.js +13 -0
- package/test/lnd_responses/test_pending_as_pending_channels.js +34 -1
- package/test.js +194 -22
- package/.yarn/cache/@babel-code-frame-npm-7.25.7-40a9f53f43-f235cdf9c5.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.25.7-1c758f0472-062f55208d.zip +0 -0
- package/.yarn/cache/@babel-highlight-npm-7.25.7-308b20da71-b6aa45c5bf.zip +0 -0
- package/.yarn/cache/@grpc-grpc-js-npm-1.12.2-733ec8eabe-ee51317f92.zip +0 -0
- package/.yarn/cache/@grpc-proto-loader-npm-0.7.13-be5b6af1c1-399c1b8a46.zip +0 -0
- package/.yarn/cache/@jest-schemas-npm-29.6.3-292730e442-910040425f.zip +0 -0
- package/.yarn/cache/@js-sdsl-ordered-map-npm-4.4.2-158f6c6b74-a927ae4ff8.zip +0 -0
- package/.yarn/cache/@noble-hashes-npm-1.5.0-87c768d742-9cc031d5c8.zip +0 -0
- package/.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-a970d595bd.zip +0 -0
- package/.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip +0 -0
- package/.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-190c643f15.zip +0 -0
- package/.yarn/cache/@protobufjs-aspromise-npm-1.1.2-71d00b938f-011fe7ef08.zip +0 -0
- package/.yarn/cache/@protobufjs-base64-npm-1.1.2-cd8ca6814a-67173ac34d.zip +0 -0
- package/.yarn/cache/@protobufjs-codegen-npm-2.0.4-36e188bbe6-59240c850b.zip +0 -0
- package/.yarn/cache/@protobufjs-eventemitter-npm-1.1.0-029cc7d431-0369163a3d.zip +0 -0
- package/.yarn/cache/@protobufjs-fetch-npm-1.1.0-ca857b7df4-3fce7e09eb.zip +0 -0
- package/.yarn/cache/@protobufjs-float-npm-1.0.2-5678f64d08-5781e12412.zip +0 -0
- package/.yarn/cache/@protobufjs-inquire-npm-1.1.0-3c7759e9ce-ca06f02eaf.zip +0 -0
- package/.yarn/cache/@protobufjs-path-npm-1.1.2-641d08de76-856eeb532b.zip +0 -0
- package/.yarn/cache/@protobufjs-pool-npm-1.1.0-47a76f96a1-d6a34fbbd2.zip +0 -0
- package/.yarn/cache/@protobufjs-utf8-npm-1.1.0-02c590807c-f9bf3163d1.zip +0 -0
- package/.yarn/cache/@sinclair-typebox-npm-0.27.8-23e206d653-00bd7362a3.zip +0 -0
- package/.yarn/cache/@tsd-typescript-npm-5.4.5-31c3b104b3-86498d5e15.zip +0 -0
- package/.yarn/cache/@types-caseless-npm-0.12.5-d7dbdab81c-f6a3628add.zip +0 -0
- package/.yarn/cache/@types-eslint-npm-7.29.0-46534a7300-df13991c55.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.6-b5e23f2ea2-8825d6e729.zip +0 -0
- package/.yarn/cache/@types-json-schema-npm-7.0.15-fd16381786-97ed0cb44d.zip +0 -0
- package/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip +0 -0
- package/.yarn/cache/@types-node-npm-22.7.5-0428b60a8c-1a8bbb504e.zip +0 -0
- package/.yarn/cache/@types-node-npm-22.7.6-cbb64e0ad4-6afe2a1bd7.zip +0 -0
- package/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip +0 -0
- package/.yarn/cache/@types-request-npm-2.48.12-d921ef35cb-20dfad0a46.zip +0 -0
- package/.yarn/cache/@types-tough-cookie-npm-4.0.5-8c5e2162e1-f19409d019.zip +0 -0
- package/.yarn/cache/@types-ws-npm-8.5.12-90c42288cf-ddefb6ad16.zip +0 -0
- package/.yarn/cache/ansi-escapes-npm-4.3.2-3ad173702f-93111c4218.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip +0 -0
- package/.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip +0 -0
- package/.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip +0 -0
- package/.yarn/cache/async-npm-3.2.4-aba13508f9-43d07459a4.zip +0 -0
- package/.yarn/cache/async-npm-3.2.6-aa4f5aa081-ee6eb8cd8a.zip +0 -0
- package/.yarn/cache/asyncjs-util-npm-1.2.12-f1ef4c2905-55ff005a7f.zip +0 -0
- package/.yarn/cache/asynckit-npm-0.4.0-c718858525-7b78c451df.zip +0 -0
- package/.yarn/cache/base-x-npm-3.0.10-2d05c06792-5230773955.zip +0 -0
- package/.yarn/cache/base-x-npm-4.0.0-64a1f6fa5e-b25db9e07e.zip +0 -0
- package/.yarn/cache/bech32-npm-2.0.0-ad98b7dd79-fa15acb270.zip +0 -0
- package/.yarn/cache/bip174-npm-2.1.1-d9fcaf36f9-bc5b99e7d1.zip +0 -0
- package/.yarn/cache/bip66-npm-1.1.5-e1d2ea7768-956cff6e51.zip +0 -0
- package/.yarn/cache/bitcoin-ops-npm-1.4.1-e1e62763b3-3daa3303d6.zip +0 -0
- package/.yarn/cache/bitcoinjs-lib-npm-6.1.3-8b823f7e69-b1d9ffd999.zip +0 -0
- package/.yarn/cache/bitcoinjs-lib-npm-6.1.6-d063b5a8ff-04370cf699.zip +0 -0
- package/.yarn/cache/bn.js-npm-5.2.1-dc952b1965-3dd8c8d380.zip +0 -0
- package/.yarn/cache/bolt07-npm-1.8.4-297a4ac40d-58cdf15aba.zip +0 -0
- package/.yarn/cache/bolt07-npm-1.9.4-6f74865601-d18efc5f83.zip +0 -0
- package/.yarn/cache/bolt09-npm-1.0.0-b3d5b54cf9-09d53b86f2.zip +0 -0
- package/.yarn/cache/bolt09-npm-2.1.0-1fc0cfcef2-629cd3bdd4.zip +0 -0
- package/.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip +0 -0
- package/.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip +0 -0
- package/.yarn/cache/bs58-npm-5.0.0-da02537b92-2475cb0684.zip +0 -0
- package/.yarn/cache/bs58check-npm-2.1.2-4e87e40195-43bdf08a5d.zip +0 -0
- package/.yarn/cache/bs58check-npm-3.0.1-be32851e5e-dbbecc7a09.zip +0 -0
- package/.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-43c9af1adf.zip +0 -0
- package/.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip +0 -0
- package/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip +0 -0
- package/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip +0 -0
- package/.yarn/cache/cipher-base-npm-1.0.4-2e98b97140-47d3568dbc.zip +0 -0
- package/.yarn/cache/cliui-npm-8.0.1-3b029092cf-79648b3b00.zip +0 -0
- package/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip +0 -0
- package/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip +0 -0
- package/.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-49fa4aeb49.zip +0 -0
- package/.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip +0 -0
- package/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-fc645fe20b.zip +0 -0
- package/.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip +0 -0
- package/.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip +0 -0
- package/.yarn/cache/diff-sequences-npm-29.6.3-18ab2c9949-f4914158e1.zip +0 -0
- package/.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip +0 -0
- package/.yarn/cache/ecpair-npm-2.1.0-d034fc21e2-924a776808.zip +0 -0
- package/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip +0 -0
- package/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-c1c2b8b65f.zip +0 -0
- package/.yarn/cache/escalade-npm-3.2.0-19b50dd48f-47b029c83d.zip +0 -0
- package/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip +0 -0
- package/.yarn/cache/eslint-formatter-pretty-npm-4.1.0-30790f28b4-e8e0cd3843.zip +0 -0
- package/.yarn/cache/eslint-rule-docs-npm-1.1.235-64d33df34f-b163596f9a.zip +0 -0
- package/.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-900e4979f4.zip +0 -0
- package/.yarn/cache/fastq-npm-1.17.1-56d4554993-a8c5b26788.zip +0 -0
- package/.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip +0 -0
- package/.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip +0 -0
- package/.yarn/cache/form-data-npm-2.5.2-f40bcd738c-89ed3d9623.zip +0 -0
- package/.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-2b0ff4ce70.zip +0 -0
- package/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip +0 -0
- package/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip +0 -0
- package/.yarn/cache/globby-npm-11.1.0-bdcdf20c71-b4be8885e0.zip +0 -0
- package/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip +0 -0
- package/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip +0 -0
- package/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip +0 -0
- package/.yarn/cache/hash-base-npm-3.1.0-26fc5711dd-26b7e97ac3.zip +0 -0
- package/.yarn/cache/hasown-npm-2.0.2-80fe6c9901-e8516f776a.zip +0 -0
- package/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-c955394bda.zip +0 -0
- package/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-c3f87b3c2f.zip +0 -0
- package/.yarn/cache/ignore-npm-5.3.2-346d3ba017-2acfd32a57.zip +0 -0
- package/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip +0 -0
- package/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip +0 -0
- package/.yarn/cache/invoices-npm-3.0.0-123907e565-27119b1449.zip +0 -0
- package/.yarn/cache/irregular-plurals-npm-3.5.0-2415613615-5b663091dc.zip +0 -0
- package/.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-eef4417e3c.zip +0 -0
- package/.yarn/cache/is-core-module-npm-2.15.1-34c73a6cbd-df134c1681.zip +0 -0
- package/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip +0 -0
- package/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip +0 -0
- package/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip +0 -0
- package/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip +0 -0
- package/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip +0 -0
- package/.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip +0 -0
- package/.yarn/cache/jest-diff-npm-29.7.0-0149e01930-08e24a9dd4.zip +0 -0
- package/.yarn/cache/jest-get-type-npm-29.6.3-500477292e-88ac9102d4.zip +0 -0
- package/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip +0 -0
- package/.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-798ed4cf33.zip +0 -0
- package/.yarn/cache/kind-of-npm-6.0.3-ab15f36220-3ab01e7b1d.zip +0 -0
- package/.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip +0 -0
- package/.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip +0 -0
- package/.yarn/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-cb9227612f.zip +0 -0
- package/.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip +0 -0
- package/.yarn/cache/long-npm-5.2.3-61dddb7586-885ede7c3d.zip +0 -0
- package/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip +0 -0
- package/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-9949e7baec.zip +0 -0
- package/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip +0 -0
- package/.yarn/cache/md5.js-npm-1.3.5-130901125a-098494d885.zip +0 -0
- package/.yarn/cache/meow-npm-9.0.0-8b2707248e-99799c4724.zip +0 -0
- package/.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip +0 -0
- package/.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-79920eb634.zip +0 -0
- package/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip +0 -0
- package/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip +0 -0
- package/.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip +0 -0
- package/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip +0 -0
- package/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-7999112efc.zip +0 -0
- package/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-bbcee00339.zip +0 -0
- package/.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip +0 -0
- package/.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip +0 -0
- package/.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip +0 -0
- package/.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip +0 -0
- package/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip +0 -0
- package/.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip +0 -0
- package/.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip +0 -0
- package/.yarn/cache/picocolors-npm-1.1.1-4fede47cf1-e1cf46bf84.zip +0 -0
- package/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip +0 -0
- package/.yarn/cache/plur-npm-4.0.0-96f2a49c24-fea2e903ef.zip +0 -0
- package/.yarn/cache/pretty-format-npm-29.7.0-7d330b2ea2-032c160238.zip +0 -0
- package/.yarn/cache/protobufjs-npm-7.4.0-12c56a3adc-ba0e6b6054.zip +0 -0
- package/.yarn/cache/psbt-npm-3.0.0-7f3e8059ba-1dddca470a.zip +0 -0
- package/.yarn/cache/pushdata-bitcoin-npm-1.0.1-959a90bb14-8452106d4b.zip +0 -0
- package/.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-b676f8c040.zip +0 -0
- package/.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-bea46e1abf.zip +0 -0
- package/.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip +0 -0
- package/.yarn/cache/react-is-npm-18.3.1-370a81e1e9-e20fe84c86.zip +0 -0
- package/.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip +0 -0
- package/.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip +0 -0
- package/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-bdcbe6c22e.zip +0 -0
- package/.yarn/cache/redent-npm-3.0.0-31892f4906-fa1ef20404.zip +0 -0
- package/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip +0 -0
- package/.yarn/cache/resolve-npm-1.22.8-098f379dfe-f8a26958aa.zip +0 -0
- package/.yarn/cache/resolve-patch-f6b5304cab-5479b7d431.zip +0 -0
- package/.yarn/cache/reusify-npm-1.0.4-95ac4aec11-c3076ebcc2.zip +0 -0
- package/.yarn/cache/ripemd160-npm-2.0.2-7b1fb8dc76-006accc405.zip +0 -0
- package/.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip +0 -0
- package/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip +0 -0
- package/.yarn/cache/semver-npm-5.7.2-938ee91eaa-fb4ab5e0dd.zip +0 -0
- package/.yarn/cache/semver-npm-7.6.3-57e82c14d5-4110ec5d01.zip +0 -0
- package/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip +0 -0
- package/.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip +0 -0
- package/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-e9ae98d22f.zip +0 -0
- package/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip +0 -0
- package/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip +0 -0
- package/.yarn/cache/spdx-license-ids-npm-3.0.20-f08e1eabc0-0c57750bed.zip +0 -0
- package/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip +0 -0
- package/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip +0 -0
- package/.yarn/cache/strip-indent-npm-3.0.0-519e75a28d-18f045d57d.zip +0 -0
- package/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip +0 -0
- package/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip +0 -0
- package/.yarn/cache/supports-hyperlinks-npm-2.3.0-d19176eba2-9ee0de3c8c.zip +0 -0
- package/.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-53b1e247e6.zip +0 -0
- package/.yarn/cache/tiny-secp256k1-npm-2.2.2-54168b74b6-2b38491186.zip +0 -0
- package/.yarn/cache/tiny-secp256k1-npm-2.2.3-8c5163b5d1-f7a74a1fce.zip +0 -0
- package/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip +0 -0
- package/.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip +0 -0
- package/.yarn/cache/tsd-npm-0.31.2-07f84c93d0-23bb84f8ba.zip +0 -0
- package/.yarn/cache/type-fest-npm-0.18.1-47b079775d-e96dcee18a.zip +0 -0
- package/.yarn/cache/type-fest-npm-0.21.3-5ff2a9c6fd-e6b32a3b38.zip +0 -0
- package/.yarn/cache/type-fest-npm-0.6.0-76b229965b-b2188e6e4b.zip +0 -0
- package/.yarn/cache/type-fest-npm-0.8.1-351ad028fe-d61c4b2eba.zip +0 -0
- package/.yarn/cache/type-fest-npm-4.26.1-274c31182d-7188db3bca.zip +0 -0
- package/.yarn/cache/typeforce-npm-1.18.0-372e34e2a2-e3b21e27e7.zip +0 -0
- package/.yarn/cache/typescript-npm-5.6.3-cc9b3687b0-ba302f8822.zip +0 -0
- package/.yarn/cache/typescript-patch-be88537122-ade87bce23.zip +0 -0
- package/.yarn/cache/uint8array-tools-npm-0.0.7-96ca58a124-6ffc45c7d2.zip +0 -0
- package/.yarn/cache/undici-types-npm-6.19.8-9f12285b7a-de51f1b447.zip +0 -0
- package/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip +0 -0
- package/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-35703ac889.zip +0 -0
- package/.yarn/cache/varuint-bitcoin-npm-1.1.2-83f928c112-1c900bf08f.zip +0 -0
- package/.yarn/cache/wif-npm-2.0.6-f351bf025a-8c3147ef98.zip +0 -0
- package/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip +0 -0
- package/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip +0 -0
- package/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip +0 -0
- package/.yarn/cache/yargs-npm-17.7.2-80b62638e1-73b572e863.zip +0 -0
- package/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip +0 -0
- package/.yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-ed2d96a616.zip +0 -0
- package/.yarn/install-state.gz +0 -0
|
@@ -47,6 +47,8 @@ export type ForceCloseChannelArgs = AuthenticatedLightningArgs<
|
|
|
47
47
|
export type CoopCloseChannelArgs = AuthenticatedLightningArgs<
|
|
48
48
|
ExpectedIdOfChannelToClose & {
|
|
49
49
|
is_force_close?: false;
|
|
50
|
+
/** Is Waiting For Pending Payments to Coop Close Bool */
|
|
51
|
+
is_graceful_close?: boolean;
|
|
50
52
|
/** Request Sending Local Channel Funds To Address String */
|
|
51
53
|
address?: string;
|
|
52
54
|
/** Fail Cooperative Close Above Fee Rate */
|
|
@@ -79,6 +81,8 @@ export type CloseChannelResult = {
|
|
|
79
81
|
* Requires `info:read`, `offchain:write`, `onchain:write`, `peers:write` permissions
|
|
80
82
|
*
|
|
81
83
|
* `max_tokens_per_vbyte` is not supported in LND 0.15.0 and below
|
|
84
|
+
*
|
|
85
|
+
* `is_graceful_close` is not supported in LND 0.17.5 and below
|
|
82
86
|
*/
|
|
83
87
|
export const closeChannel: AuthenticatedLightningMethod<
|
|
84
88
|
CloseChannelArgs,
|
|
@@ -23,10 +23,13 @@ const type = 'default';
|
|
|
23
23
|
|
|
24
24
|
`max_tokens_per_vbyte` is not supported in LND 0.15.0 and below
|
|
25
25
|
|
|
26
|
+
`is_graceful_close` is not supported in LND 0.17.5 and below
|
|
27
|
+
|
|
26
28
|
{
|
|
27
29
|
[address]: <Request Sending Local Channel Funds To Address String>
|
|
28
30
|
[id]: <Standard Format Channel Id String>
|
|
29
31
|
[is_force_close]: <Is Force Close Bool>
|
|
32
|
+
[is_graceful_close]: <Is Waiting For Pending Payments to Coop Close Bool>
|
|
30
33
|
lnd: <Authenticated LND API Object>
|
|
31
34
|
[max_tokens_per_vbyte]: <Fail Cooperative Close Above Fee Rate Number>
|
|
32
35
|
[public_key]: <Peer Public Key String>
|
|
@@ -143,6 +146,7 @@ module.exports = (args, cbk) => {
|
|
|
143
146
|
delivery_address: args.address || undefined,
|
|
144
147
|
force: !!args.is_force_close,
|
|
145
148
|
max_fee_per_vbyte: args.max_tokens_per_vbyte || undefined,
|
|
149
|
+
no_wait: args.is_graceful_close || undefined,
|
|
146
150
|
sat_per_vbyte: !!tokensPerVByte ? tokensPerVByte : undefined,
|
|
147
151
|
target_conf: targetConf,
|
|
148
152
|
});
|
|
@@ -17,7 +17,7 @@ const {isArray} = Array;
|
|
|
17
17
|
const isPublicKey = n => /^[0-9A-F]{66}$/i.test(n);
|
|
18
18
|
const makeId = () => randomBytes(32);
|
|
19
19
|
const method = 'openChannel';
|
|
20
|
-
const
|
|
20
|
+
const reserve = isDust => isDust ? 354 : undefined;
|
|
21
21
|
const taproot = 'SIMPLE_TAPROOT';
|
|
22
22
|
const type = 'default';
|
|
23
23
|
|
|
@@ -38,6 +38,8 @@ const type = 'default';
|
|
|
38
38
|
`--protocol.option-scid-alias` and `--protocol.zero-conf` set on both sides
|
|
39
39
|
as well as a channel open request listener to accept the trusted funding.
|
|
40
40
|
|
|
41
|
+
`is_allowing_minimal_reserve` is not supported on LND 0.15.0 and below
|
|
42
|
+
|
|
41
43
|
`base_fee_mtokens` is not supported on LND 0.15.5 and below
|
|
42
44
|
`fee_rate` is not supported on LND 0.15.5 and below
|
|
43
45
|
|
|
@@ -54,6 +56,7 @@ const type = 'default';
|
|
|
54
56
|
[description]: <Immutable Channel Description String>
|
|
55
57
|
[fee_rate]: <Routing Fee Rate In Millitokens Per Million Number>
|
|
56
58
|
[give_tokens]: <Tokens to Gift To Partner Number> // Defaults to zero
|
|
59
|
+
[is_allowing_minimal_reserve]: <Allow Peer to Have Minimal Reserve Bool>
|
|
57
60
|
[is_private]: <Channel is Private Bool> // Defaults to false
|
|
58
61
|
[is_simplified_taproot]: <Channel is Simplified Taproot Type Bool>
|
|
59
62
|
[is_trusted_funding]: <Peer Should Avoid Waiting For Confirmation Bool>
|
|
@@ -112,6 +115,7 @@ module.exports = (args, cbk) => {
|
|
|
112
115
|
id: makeId(),
|
|
113
116
|
cooperative_close_address: channel.cooperative_close_address,
|
|
114
117
|
give_tokens: channel.give_tokens,
|
|
118
|
+
is_allowing_minimal_reserve: channel.is_allowing_minimal_reserve,
|
|
115
119
|
is_private: channel.is_private,
|
|
116
120
|
is_simplified_taproot: channel.is_simplified_taproot,
|
|
117
121
|
is_trusted_funding: channel.is_trusted_funding,
|
|
@@ -129,6 +133,7 @@ module.exports = (args, cbk) => {
|
|
|
129
133
|
const baseType = !!channel.is_trusted_funding ? anchors : undefined;
|
|
130
134
|
let isDone = false;
|
|
131
135
|
const isSelfPublish = !!args.is_avoiding_broadcast;
|
|
136
|
+
const remoteReserve = reserve(!!channel.is_allowing_minimal_reserve);
|
|
132
137
|
|
|
133
138
|
const commit = !!channel.is_simplified_taproot ? taproot : baseType;
|
|
134
139
|
|
|
@@ -149,6 +154,7 @@ module.exports = (args, cbk) => {
|
|
|
149
154
|
node_pubkey: bufferFromHex(channel.partner_public_key),
|
|
150
155
|
private: !!channel.is_private,
|
|
151
156
|
push_sat: channel.give_tokens || undefined,
|
|
157
|
+
remote_chan_reserve_sat: remoteReserve,
|
|
152
158
|
remote_csv_delay: channel.partner_csv_delay || undefined,
|
|
153
159
|
scid_alias: channel.is_trusted_funding && channel.is_private,
|
|
154
160
|
use_base_fee: channel.base_fee_mtokens !== undefined,
|
|
@@ -7,6 +7,7 @@ const defaultConfirmations = 6;
|
|
|
7
7
|
const isHash = n => /^[0-9A-F]{64}$/i.test(n);
|
|
8
8
|
const isNumber = n => !isNaN(n);
|
|
9
9
|
const messageExternalUtxo = 'the passed output does not belong to the wallet';
|
|
10
|
+
const messageInvalidOutputIndex = /^invalid.output.index/;
|
|
10
11
|
const method = 'bumpFee';
|
|
11
12
|
const type = 'wallet';
|
|
12
13
|
|
|
@@ -81,6 +82,10 @@ module.exports = (args, cbk) => {
|
|
|
81
82
|
return cbk([404, 'SpecifiedOutpointNotFoundInWalletUtxos']);
|
|
82
83
|
}
|
|
83
84
|
|
|
85
|
+
if (!!err && messageInvalidOutputIndex.test(err.details)) {
|
|
86
|
+
return cbk([404, 'SpecifiedOutpointNotFoundInWalletUtxos']);
|
|
87
|
+
}
|
|
88
|
+
|
|
84
89
|
if (!!err) {
|
|
85
90
|
return cbk([500, 'UnexpectedErrorRequestingChainFeeBump', {err}]);
|
|
86
91
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {createHash} = require('crypto');
|
|
2
2
|
|
|
3
|
-
const {
|
|
3
|
+
const {chanFormat} = require('bolt07');
|
|
4
4
|
|
|
5
|
-
const {
|
|
6
|
-
const {
|
|
5
|
+
const {attemptStates} = require('./constants');
|
|
6
|
+
const {safeTokens} = require('./../bolt00');
|
|
7
7
|
|
|
8
|
-
const {
|
|
9
|
-
const hexFromBuffer =
|
|
10
|
-
const {
|
|
11
|
-
const {
|
|
12
|
-
const {
|
|
13
|
-
const sha256 =
|
|
14
|
-
const sum =
|
|
8
|
+
const {confirmed} = attemptStates;
|
|
9
|
+
const hexFromBuffer = buffer => buffer.toString('hex');
|
|
10
|
+
const {isArray} = Array;
|
|
11
|
+
const {isBuffer} = Buffer;
|
|
12
|
+
const {max} = Math;
|
|
13
|
+
const sha256 = preimage => createHash('sha256').update(preimage).digest();
|
|
14
|
+
const sum = arr => arr.reduce((sum, n) => sum + BigInt(n), BigInt(Number()));
|
|
15
15
|
|
|
16
16
|
/** Calculate total payment details from RPC payment HTLC elements
|
|
17
17
|
|
|
@@ -110,67 +110,65 @@ const sum = (arr) => arr.reduce((sum, n) => sum + BigInt(n), BigInt(Number()));
|
|
|
110
110
|
tokens: <Total Tokens Paid Rounded Down Number>
|
|
111
111
|
}
|
|
112
112
|
*/
|
|
113
|
-
module.exports = ({
|
|
113
|
+
module.exports = ({htlcs, preimage, route}) => {
|
|
114
114
|
if (!isArray(htlcs)) {
|
|
115
|
-
throw new Error(
|
|
115
|
+
throw new Error('ExpectedArrayOfHtlcsToDeriveConfirmedFromPaymentStatus');
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
if (!isBuffer(preimage)) {
|
|
119
|
-
throw new Error(
|
|
119
|
+
throw new Error('ExpectedPreimageBufferToDeriveConfirmFromPaymentStatus');
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
if (!route && !htlcs.length) {
|
|
123
|
-
throw new Error(
|
|
123
|
+
throw new Error('ExpectedEitherRouteOrAttemptHtlcs');
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
if (!!htlcs.length && !htlcs.filter(
|
|
127
|
-
throw new Error(
|
|
126
|
+
if (!!htlcs.length && !htlcs.filter(n => n.status === confirmed).length) {
|
|
127
|
+
throw new Error('ExpectedSuccessfulHtlcAttemptForConfirmedStatus');
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
const hasHtlcs = !!htlcs.length;
|
|
131
|
-
const id = sha256(preimage).toString(
|
|
132
|
-
const secret = preimage.toString(
|
|
133
|
-
const successHtlcs = htlcs.filter(
|
|
134
|
-
(n) => n.status === attemptStates.confirmed
|
|
135
|
-
);
|
|
131
|
+
const id = sha256(preimage).toString('hex');
|
|
132
|
+
const secret = preimage.toString('hex');
|
|
133
|
+
const successHtlcs = htlcs.filter(n => n.status === attemptStates.confirmed);
|
|
136
134
|
|
|
137
|
-
const payments = hasHtlcs ? successHtlcs.map(({
|
|
135
|
+
const payments = hasHtlcs ? successHtlcs.map(({route}) => route) : [route];
|
|
138
136
|
|
|
139
|
-
const paths = payments.map(
|
|
140
|
-
fee: safeTokens({
|
|
137
|
+
const paths = payments.map(route => ({
|
|
138
|
+
fee: safeTokens({mtokens: route.total_fees_msat}).tokens,
|
|
141
139
|
fee_mtokens: route.total_fees_msat,
|
|
142
|
-
hops: route.hops.map(
|
|
143
|
-
channel: chanFormat({
|
|
140
|
+
hops: route.hops.map(hop => ({
|
|
141
|
+
channel: chanFormat({number: hop.chan_id}).channel,
|
|
144
142
|
channel_capacity: Number(hop.chan_capacity),
|
|
145
|
-
fee: safeTokens({
|
|
143
|
+
fee: safeTokens({mtokens: hop.fee_msat}).tokens,
|
|
146
144
|
fee_mtokens: hop.fee_msat,
|
|
147
|
-
forward: safeTokens({
|
|
145
|
+
forward: safeTokens({mtokens: hop.amt_to_forward_msat}).tokens,
|
|
148
146
|
forward_mtokens: hop.amt_to_forward_msat,
|
|
149
147
|
public_key: hexFromBuffer(hop.pub_key),
|
|
150
148
|
timeout: hop.expiry,
|
|
151
149
|
})),
|
|
152
150
|
mtokens: route.total_amt_msat,
|
|
153
|
-
safe_fee: safeTokens({
|
|
154
|
-
safe_tokens: safeTokens({
|
|
151
|
+
safe_fee: safeTokens({mtokens: route.total_fees_msat}).safe,
|
|
152
|
+
safe_tokens: safeTokens({mtokens: route.total_amt_msat}).safe,
|
|
155
153
|
timeout: route.total_time_lock,
|
|
156
|
-
tokens: safeTokens({
|
|
154
|
+
tokens: safeTokens({mtokens: route.total_amt_msat}).tokens,
|
|
157
155
|
}));
|
|
158
156
|
|
|
159
|
-
const feeMtokens = sum(paths.map(
|
|
160
|
-
const [{
|
|
161
|
-
const mtokens = sum(paths.map(({
|
|
157
|
+
const feeMtokens = sum(paths.map(n => n.fee_mtokens));
|
|
158
|
+
const [{hops}] = paths;
|
|
159
|
+
const mtokens = sum(paths.map(({mtokens}) => mtokens));
|
|
162
160
|
|
|
163
161
|
return {
|
|
164
162
|
hops,
|
|
165
163
|
id,
|
|
166
164
|
paths,
|
|
167
165
|
secret,
|
|
168
|
-
fee: safeTokens({
|
|
166
|
+
fee: safeTokens({mtokens: feeMtokens.toString()}).tokens,
|
|
169
167
|
fee_mtokens: feeMtokens.toString(),
|
|
170
168
|
mtokens: mtokens.toString(),
|
|
171
|
-
safe_fee: safeTokens({
|
|
172
|
-
safe_tokens: safeTokens({
|
|
173
|
-
timeout: max(...paths.map(({
|
|
174
|
-
tokens: safeTokens({
|
|
169
|
+
safe_fee: safeTokens({mtokens: feeMtokens.toString()}).safe,
|
|
170
|
+
safe_tokens: safeTokens({mtokens: mtokens.toString()}).safe,
|
|
171
|
+
timeout: max(...paths.map(({timeout}) => timeout)),
|
|
172
|
+
tokens: safeTokens({mtokens: mtokens.toString()}).tokens,
|
|
175
173
|
};
|
|
176
174
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {chanFormat} = require('bolt07');
|
|
2
2
|
|
|
3
|
-
const {
|
|
4
|
-
const {
|
|
3
|
+
const {htlcTypes} = require('./constants');
|
|
4
|
+
const {safeTokens} = require('./../bolt00');
|
|
5
5
|
|
|
6
|
-
const bufferAsHex =
|
|
6
|
+
const bufferAsHex = buffer => buffer.toString('hex');
|
|
7
7
|
const nsPerMs = BigInt(1e6);
|
|
8
8
|
|
|
9
9
|
/** Get RPC HTLC Event as a forward event
|
|
@@ -65,97 +65,97 @@ const nsPerMs = BigInt(1e6);
|
|
|
65
65
|
[tokens]: <Sending Tokens Number>
|
|
66
66
|
}
|
|
67
67
|
*/
|
|
68
|
-
module.exports =
|
|
68
|
+
module.exports = htlc => {
|
|
69
69
|
if (!htlc.event_type) {
|
|
70
|
-
throw new Error(
|
|
70
|
+
throw new Error('ExpectedHtlcEventTypeToDeriveForwardFromHtlcEvent');
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
if (!!htlc.forward_event) {
|
|
74
74
|
if (!htlc.forward_event.info) {
|
|
75
|
-
throw new Error(
|
|
75
|
+
throw new Error('ExpectedHtlcInfoInForwardEvent');
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
if (!htlc.forward_event.info.incoming_amt_msat) {
|
|
79
|
-
throw new Error(
|
|
79
|
+
throw new Error('ExpectedForwardEventIncomingAmountMsatToDeriveForward');
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
if (htlc.forward_event.info.incoming_timelock === undefined) {
|
|
83
|
-
throw new Error(
|
|
83
|
+
throw new Error('ExpectedForwardEventIncomingTimelockToDeriveForward');
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
if (!htlc.forward_event.info.outgoing_amt_msat) {
|
|
87
|
-
throw new Error(
|
|
87
|
+
throw new Error('ExpectedForwardEventOutgoingAmountMsatToDeriveForward');
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
if (htlc.forward_event.info.outgoing_timelock === undefined) {
|
|
91
|
-
throw new Error(
|
|
91
|
+
throw new Error('ExpectedForwardEventOutgoingTimelockToDeriveForward');
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
if (!htlc.incoming_channel_id) {
|
|
96
|
-
throw new Error(
|
|
96
|
+
throw new Error('ExpectedIncomingChannelIdToDeriveForward');
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
if (!htlc.incoming_htlc_id) {
|
|
100
|
-
throw new Error(
|
|
100
|
+
throw new Error('ExpectedIncomingHtlcIdToDeriveForward');
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
if (!!htlc.link_fail_event) {
|
|
104
104
|
if (!htlc.link_fail_event.failure_detail) {
|
|
105
|
-
throw new Error(
|
|
105
|
+
throw new Error('ExpectedLinkFailureDetailInLinkFailureEvent');
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
if (!htlc.link_fail_event.failure_string) {
|
|
109
|
-
throw new Error(
|
|
109
|
+
throw new Error('ExpectedLinkFailureStringInLinkFailureEvent');
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
if (!htlc.link_fail_event.info) {
|
|
113
|
-
throw new Error(
|
|
113
|
+
throw new Error('ExpectedHtlcInfoInLinkFailEvent');
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
if (!htlc.link_fail_event.info.incoming_amt_msat) {
|
|
117
|
-
throw new Error(
|
|
117
|
+
throw new Error('ExpectedLinkFailEventIncomingMsatToDeriveForward');
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
if (htlc.link_fail_event.info.incoming_timelock === undefined) {
|
|
121
|
-
throw new Error(
|
|
121
|
+
throw new Error('ExpectedLinkFailEventIncomingTimelockToDeriveForward');
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
if (!htlc.link_fail_event.info.outgoing_amt_msat) {
|
|
125
|
-
throw new Error(
|
|
125
|
+
throw new Error('ExpectedLinkFailEventOutgoingMsatToDeriveForward');
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
if (htlc.link_fail_event.info.outgoing_timelock === undefined) {
|
|
129
|
-
throw new Error(
|
|
129
|
+
throw new Error('ExpectedForwardEventOutgoingTimelockToDeriveForward');
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
if (!htlc.outgoing_channel_id) {
|
|
134
|
-
throw new Error(
|
|
134
|
+
throw new Error('ExpectedOutgoingChannelIdToDeriveForward');
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
if (!htlc.outgoing_htlc_id) {
|
|
138
|
-
throw new Error(
|
|
138
|
+
throw new Error('ExpectedOutgoingHtlcIdToDeriveForward');
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
if (!!htlc.settle_event && !Buffer.isBuffer(htlc.settle_event.preimage)) {
|
|
142
|
-
throw new Error(
|
|
142
|
+
throw new Error('ExpectedHtlcPreimageInForwardedSettleEvent');
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
if (!htlc.timestamp_ns) {
|
|
146
|
-
throw new Error(
|
|
146
|
+
throw new Error('ExpectedHtlcTimestampToDeriveForward');
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
const createdAt = new Date(Number(BigInt(htlc.timestamp_ns) / nsPerMs));
|
|
150
|
-
const incoming = chanFormat({
|
|
150
|
+
const incoming = chanFormat({number: htlc.incoming_channel_id});
|
|
151
151
|
const incomingId = Number(htlc.incoming_htlc_id);
|
|
152
152
|
const isFailure = !!htlc.forward_fail_event || !!htlc.link_fail_event;
|
|
153
153
|
const isForward = htlc.event_type === htlcTypes.forward;
|
|
154
154
|
const isReceive = htlc.event_type === htlcTypes.receive;
|
|
155
155
|
const isSend = htlc.event_type === htlcTypes.send;
|
|
156
|
-
const outgoing = chanFormat({
|
|
156
|
+
const outgoing = chanFormat({number: htlc.outgoing_channel_id});
|
|
157
157
|
const outgoingId = Number(htlc.outgoing_htlc_id);
|
|
158
|
-
const settleEvent = htlc.settle_event || {
|
|
158
|
+
const settleEvent = htlc.settle_event || {preimage: Buffer.alloc(Number())};
|
|
159
159
|
|
|
160
160
|
// Exit early when there is no extended info, for failed forwards and settles
|
|
161
161
|
if (!!htlc.forward_fail_event || !!htlc.settle_event) {
|
|
@@ -182,10 +182,10 @@ module.exports = (htlc) => {
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
if (!htlc.forward_event && !htlc.link_fail_event) {
|
|
185
|
-
throw new Error(
|
|
185
|
+
throw new Error('ExpectedForwardEventOrLinkFailEventInHtlcEvent');
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
const {
|
|
188
|
+
const {info} = htlc.forward_event || htlc.link_fail_event;
|
|
189
189
|
|
|
190
190
|
const outgoingAmount = BigInt(info.outgoing_amt_msat);
|
|
191
191
|
const outgoingCltvHeight = Number(info.outgoing_timelock);
|
|
@@ -193,13 +193,13 @@ module.exports = (htlc) => {
|
|
|
193
193
|
const cltvDelta = Number(info.incoming_timelock) - outgoingCltvHeight;
|
|
194
194
|
const feeMtok = (BigInt(info.incoming_amt_msat) - outgoingAmount).toString();
|
|
195
195
|
|
|
196
|
-
const {
|
|
196
|
+
const {tokens} = safeTokens({mtokens: info.outgoing_amt_msat});
|
|
197
197
|
|
|
198
198
|
return {
|
|
199
199
|
at: createdAt.toISOString(),
|
|
200
200
|
cltv_delta: !isForward ? undefined : cltvDelta,
|
|
201
201
|
external_failure: (htlc.link_fail_event || {}).wire_failure,
|
|
202
|
-
fee: !isForward ? undefined : safeTokens({
|
|
202
|
+
fee: !isForward ? undefined : safeTokens({mtokens: feeMtok}).tokens,
|
|
203
203
|
fee_mtokens: !isForward ? undefined : feeMtok,
|
|
204
204
|
in_channel: !!isSend ? undefined : incoming.channel,
|
|
205
205
|
in_payment: !!isSend ? undefined : incomingId,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const {
|
|
2
|
-
const {
|
|
1
|
+
const {chainId} = require('./../bolt02');
|
|
2
|
+
const {featureFlagDetails} = require('bolt09');
|
|
3
3
|
|
|
4
|
-
const dateFromEpoch =
|
|
5
|
-
const {
|
|
6
|
-
const isBoolean =
|
|
7
|
-
const isNumber =
|
|
8
|
-
const isString =
|
|
9
|
-
const {
|
|
4
|
+
const dateFromEpoch = epoch => new Date(epoch * 1e3);
|
|
5
|
+
const {isArray} = Array;
|
|
6
|
+
const isBoolean = n => n === false || n === true;
|
|
7
|
+
const isNumber = n => !isNaN(n);
|
|
8
|
+
const isString = n => typeof n === 'string';
|
|
9
|
+
const {keys} = Object;
|
|
10
10
|
|
|
11
11
|
/** Interpret info as wallet info
|
|
12
12
|
|
|
@@ -29,81 +29,81 @@ const { keys } = Object;
|
|
|
29
29
|
version: <Node Version String>
|
|
30
30
|
}
|
|
31
31
|
*/
|
|
32
|
-
module.exports =
|
|
32
|
+
module.exports = args => {
|
|
33
33
|
if (!args) {
|
|
34
|
-
throw new Error(
|
|
34
|
+
throw new Error('ExpectedWalletResponse');
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
if (!isString(args.alias)) {
|
|
38
|
-
throw new Error(
|
|
38
|
+
throw new Error('ExpectedWalletAlias');
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
if (!args.best_header_timestamp) {
|
|
42
|
-
throw new Error(
|
|
42
|
+
throw new Error('ExpectedBestHeaderTimestampInInfoResponse');
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
if (!isString(args.block_hash)) {
|
|
46
|
-
throw new Error(
|
|
46
|
+
throw new Error('ExpectedCurrentBlockHash');
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
if (!isNumber(args.block_height)) {
|
|
50
|
-
throw new Error(
|
|
50
|
+
throw new Error('ExpectedBlockHeight');
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
if (!isArray(args.chains)) {
|
|
54
|
-
throw new Error(
|
|
54
|
+
throw new Error('ExpectedChainsAssociatedWithWallet');
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
if (!args.color) {
|
|
58
|
-
throw new Error(
|
|
58
|
+
throw new Error('ExpectedWalletColorInWalletInfoResponse');
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
if (!args.features) {
|
|
62
|
-
throw new Error(
|
|
62
|
+
throw new Error('ExpectedFeaturesMapInWalletInfoResponse');
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
if (!args.identity_pubkey) {
|
|
66
|
-
throw new Error(
|
|
66
|
+
throw new Error('ExpectedIdentityPubkey');
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
if (!isNumber(args.num_active_channels)) {
|
|
70
|
-
throw new Error(
|
|
70
|
+
throw new Error('ExpectedNumActiveChannels');
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
if (!isNumber(args.num_peers)) {
|
|
74
|
-
throw new Error(
|
|
74
|
+
throw new Error('ExpectedNumPeers');
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
if (!isNumber(args.num_pending_channels)) {
|
|
78
|
-
throw new Error(
|
|
78
|
+
throw new Error('ExpectedNumPendingChannels');
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
if (!isBoolean(args.synced_to_chain)) {
|
|
82
|
-
throw new Error(
|
|
82
|
+
throw new Error('ExpectedSyncedToChainStatus');
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
if (!isArray(args.uris)) {
|
|
86
|
-
throw new Error(
|
|
86
|
+
throw new Error('ExpectedArrayOfUrisInWalletInfoResponse');
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
if (!isString(args.version)) {
|
|
90
|
-
throw new Error(
|
|
90
|
+
throw new Error('ExpectedWalletLndVersion');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
return {
|
|
94
94
|
chains: args.chains
|
|
95
|
-
.map(({
|
|
96
|
-
.filter(
|
|
95
|
+
.map(({chain, network}) => chainId({chain, network}).chain)
|
|
96
|
+
.filter(n => !!n),
|
|
97
97
|
color: args.color,
|
|
98
98
|
active_channels_count: args.num_active_channels,
|
|
99
99
|
alias: args.alias,
|
|
100
100
|
current_block_hash: args.block_hash,
|
|
101
101
|
current_block_height: args.block_height,
|
|
102
|
-
features: keys(args.features).map(
|
|
102
|
+
features: keys(args.features).map(bit => ({
|
|
103
103
|
bit: Number(bit),
|
|
104
104
|
is_known: args.features[bit].is_known,
|
|
105
105
|
is_required: args.features[bit].is_required,
|
|
106
|
-
type: featureFlagDetails({
|
|
106
|
+
type: featureFlagDetails({bit: Number(bit)}).type,
|
|
107
107
|
})),
|
|
108
108
|
is_synced_to_chain: args.synced_to_chain,
|
|
109
109
|
is_synced_to_graph: !args.synced_to_graph ? undefined : true,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {featureFlagDetails} = require('bolt09');
|
|
2
2
|
|
|
3
|
-
const routeFromRouteHint = require(
|
|
4
|
-
const {
|
|
3
|
+
const routeFromRouteHint = require('./route_from_route_hint');
|
|
4
|
+
const {safeTokens} = require('./../bolt00');
|
|
5
5
|
|
|
6
|
-
const bufToHex =
|
|
6
|
+
const bufToHex = n => !n.length ? undefined : n.toString('hex');
|
|
7
7
|
const defaultExpireMs = 1000 * 60 * 60;
|
|
8
|
-
const {
|
|
9
|
-
const {
|
|
10
|
-
const isHash =
|
|
11
|
-
const {
|
|
8
|
+
const {isArray} = Array;
|
|
9
|
+
const {isBuffer} = Buffer;
|
|
10
|
+
const isHash = n => !!n && /^[0-9A-F]{64}$/i.test(n);
|
|
11
|
+
const {keys} = Object;
|
|
12
12
|
const msPerSec = 1e3;
|
|
13
|
-
const {
|
|
13
|
+
const {now} = Date;
|
|
14
14
|
|
|
15
15
|
/** Map payment request details to request details
|
|
16
16
|
|
|
@@ -76,40 +76,38 @@ const { now } = Date;
|
|
|
76
76
|
tokens: <Requested Tokens Rounded Down Number>
|
|
77
77
|
}
|
|
78
78
|
*/
|
|
79
|
-
module.exports =
|
|
79
|
+
module.exports = args => {
|
|
80
80
|
if (!args.destination) {
|
|
81
|
-
throw new Error(
|
|
81
|
+
throw new Error('ExpectedDestinationInDecodedPaymentRequest');
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
if (!args.expiry) {
|
|
85
|
-
throw new Error(
|
|
85
|
+
throw new Error('ExpectedPaymentReqExpirationInDecodedPayReq');
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (!isBuffer(args.payment_addr)) {
|
|
89
|
-
throw new Error(
|
|
89
|
+
throw new Error('ExpectedPaymentAddrBufferInDecodePayReqResponse');
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
if (!isHash(args.payment_hash)) {
|
|
93
|
-
throw new Error(
|
|
93
|
+
throw new Error('ExpectedPaymentHashFromDecodePayReqResponse');
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
if (!args.num_satoshis) {
|
|
97
|
-
throw new Error(
|
|
97
|
+
throw new Error('ExpectedNumSatoshis');
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
if (!isArray(args.route_hints)) {
|
|
101
|
-
throw new Error(
|
|
101
|
+
throw new Error('ExpectedRouteHintsArray');
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
const routes = args.route_hints.forEach(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
);
|
|
104
|
+
const routes = args.route_hints.forEach(route => routeFromRouteHint({
|
|
105
|
+
destination: args.destination,
|
|
106
|
+
hop_hints: route.hop_hints,
|
|
107
|
+
}));
|
|
110
108
|
|
|
111
109
|
if (!args.timestamp) {
|
|
112
|
-
throw new Error(
|
|
110
|
+
throw new Error('ExpectedPaymentRequestTimestamp');
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
const createdAtMs = Number(args.timestamp) * msPerSec;
|
|
@@ -125,23 +123,21 @@ module.exports = (args) => {
|
|
|
125
123
|
description_hash: args.description_hash || undefined,
|
|
126
124
|
destination: args.destination,
|
|
127
125
|
expires_at: new Date(expiryDateMs).toISOString(),
|
|
128
|
-
features: keys(args.features).map(
|
|
126
|
+
features: keys(args.features).map(bit => ({
|
|
129
127
|
bit: Number(bit),
|
|
130
128
|
is_known: args.features[bit].is_known,
|
|
131
129
|
is_required: args.features[bit].is_required,
|
|
132
|
-
type: featureFlagDetails({
|
|
130
|
+
type: featureFlagDetails({bit}).type,
|
|
133
131
|
})),
|
|
134
132
|
id: args.payment_hash,
|
|
135
133
|
is_expired: now() > expiryDateMs,
|
|
136
134
|
mtokens: args.num_msat,
|
|
137
135
|
payment: bufToHex(args.payment_addr) || undefined,
|
|
138
|
-
routes: args.route_hints.map(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
),
|
|
144
|
-
safe_tokens: safeTokens({ mtokens: args.num_msat }).safe,
|
|
136
|
+
routes: args.route_hints.map(route => routeFromRouteHint({
|
|
137
|
+
destination: args.destination,
|
|
138
|
+
hop_hints: route.hop_hints,
|
|
139
|
+
})),
|
|
140
|
+
safe_tokens: safeTokens({mtokens: args.num_msat}).safe,
|
|
145
141
|
tokens: Number(args.num_satoshis),
|
|
146
142
|
};
|
|
147
143
|
};
|