From 57b1b0f1105427794d6ecfca23cd0cdff7909f11 Mon Sep 17 00:00:00 2001 From: michael1011 Date: Thu, 12 Sep 2024 22:53:29 +0200 Subject: [PATCH] feat: bolt12 support in submarine swaps --- boltzr/Cargo.lock | 657 +++-- boltzr/Cargo.toml | 4 + boltzr/build.rs | 6 + boltzr/protos/boltzr.proto | 93 + boltzr/src/config.rs | 7 + boltzr/src/currencies.rs | 39 + boltzr/src/grpc/server.rs | 10 + boltzr/src/grpc/service.rs | 194 +- boltzr/src/lightning/cln/mod.rs | 120 + boltzr/src/lightning/invoice.rs | 165 ++ boltzr/src/lightning/mod.rs | 19 + boltzr/src/main.rs | 15 +- docker/build.py | 2 +- docker/regtest/data/cln/config | 2 + docker/regtest/startRegtest.sh | 2 +- lib/Boltz.ts | 1 + lib/Utils.ts | 68 - lib/api/v2/ApiV2.ts | 2 + lib/api/v2/routers/LightningRouter.ts | 99 + lib/db/Migration.ts | 66 +- lib/lightning/ChannelUtils.ts | 2 +- lib/lightning/LightningClient.ts | 10 +- lib/lightning/LndClient.ts | 10 +- lib/lightning/PendingPaymentTracker.ts | 20 +- lib/lightning/cln/ClnClient.ts | 88 +- lib/notifications/NotificationProvider.ts | 15 +- lib/proto/sidecar/boltzr_grpc_pb.d.ts | 34 + lib/proto/sidecar/boltzr_grpc_pb.js | 66 + lib/proto/sidecar/boltzr_pb.d.ts | 398 +++ lib/proto/sidecar/boltzr_pb.js | 3182 +++++++++++++++++++++ lib/service/InvoiceExpiryHelper.ts | 22 - lib/service/Service.ts | 63 +- lib/service/TimeoutDeltaProvider.ts | 47 +- lib/sidecar/DecodedInvoice.ts | 123 + lib/sidecar/Sidecar.ts | 31 + lib/swap/Errors.ts | 4 + lib/swap/InvoiceNursery.ts | 18 +- lib/swap/LightningNursery.ts | 11 +- lib/swap/NodeSwitch.ts | 10 +- lib/swap/PaymentHandler.ts | 3 + lib/swap/SwapManager.ts | 59 +- lib/swap/SwapNursery.ts | 21 +- package-lock.json | 1026 +------ package.json | 1 - swagger-spec.json | 74 + 45 files changed, 5411 insertions(+), 1498 deletions(-) create mode 100644 boltzr/src/currencies.rs create mode 100644 boltzr/src/lightning/cln/mod.rs create mode 100644 boltzr/src/lightning/invoice.rs create mode 100644 boltzr/src/lightning/mod.rs create mode 100644 lib/api/v2/routers/LightningRouter.ts create mode 100644 lib/sidecar/DecodedInvoice.ts diff --git a/boltzr/Cargo.lock b/boltzr/Cargo.lock index b73ecb98..c6e4c8a2 100644 --- a/boltzr/Cargo.lock +++ b/boltzr/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -69,9 +69,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.27" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b515e82c8468ddb6ff8db21c78a5997442f113fd8471fd5b2261b2602dd0c67" +checksum = "2b4f201b0ac8f81315fbdc55269965a8ddadbc04ab47fa65a1a468f9a40f7a5f" dependencies = [ "num_enum", "strum", @@ -138,7 +138,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -272,7 +272,7 @@ dependencies = [ "futures-utils-wasm", "lru", "pin-project 1.1.5", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "tokio", @@ -299,7 +299,7 @@ checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -313,7 +313,7 @@ dependencies = [ "alloy-transport-http", "futures", "pin-project 1.1.5", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "tokio", @@ -454,7 +454,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -467,11 +467,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.4.0", + "indexmap 2.5.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", "syn-solidity", "tiny-keccak", ] @@ -489,7 +489,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.74", + "syn 2.0.77", "syn-solidity", ] @@ -500,7 +500,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" dependencies = [ "serde", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -543,7 +543,7 @@ checksum = "2437d145d80ea1aecde8574d2058cceb8b3c9cba05f6aea8e67907c660d46698" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde_json", "tower", "tracing", @@ -616,9 +616,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" [[package]] name = "ark-ff" @@ -654,7 +654,7 @@ dependencies = [ "num-bigint", "num-traits", "paste", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "zeroize", ] @@ -746,9 +746,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" @@ -774,7 +774,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", "synstructure", ] @@ -786,7 +786,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -821,18 +821,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -865,7 +865,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -876,9 +876,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "aws-credential-types" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16838e6c9e12125face1c1eff1343c75e3ff540de98ff7ebd61874a89bcfeb9" +checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -888,14 +888,15 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.4.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42c2d4218de4dcd890a109461e2f799a1a2ba3bcd2cde9af88360f5df9266c6" +checksum = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468" dependencies = [ "aws-credential-types", "aws-sigv4", "aws-smithy-async", "aws-smithy-http", + "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", "aws-types", @@ -912,9 +913,9 @@ dependencies = [ [[package]] name = "aws-sdk-kms" -version = "1.39.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc44afa1eaa1d4cae1fb61647b142083c3ae1b77c225b5d61be3d5b64bd93d3" +checksum = "d9f7cb482caa5444d445c94417b9c74e49a849beb09ede4f2f4c3c15f8157387" dependencies = [ "aws-credential-types", "aws-runtime", @@ -934,9 +935,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df1b0fa6be58efe9d4ccc257df0a53b89cd8909e86591a13ca54817c87517be" +checksum = "cc8db6904450bafe7473c6ca9123f88cc11089e41a025408f992db4e22d3be68" dependencies = [ "aws-credential-types", "aws-smithy-http", @@ -968,9 +969,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.60.9" +version = "0.60.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9cd0ae3d97daa0a2bf377a4d8e8e1362cae590c4a1aad0d40058ebca18eb91e" +checksum = "5c8bc3e8fdc6b8d07d976e301c02fe553f72a39b7a9fea820e023268467d7ab6" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -997,9 +998,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.6.3" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abbf454960d0db2ad12684a1640120e7557294b0ff8e2f11236290a1b293225" +checksum = "d1ce695746394772e7000b39fe073095db6d45a862d0767dd5ad0ac0d7f8eb87" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -1037,9 +1038,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.2" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cee7cadb433c781d3299b916fbf620fea813bf38f49db282fb6858141a05cc8" +checksum = "03701449087215b5369c7ea17fef0dd5d24cb93439ec5af0c7615f58c3f22605" dependencies = [ "base64-simd", "bytes", @@ -1068,7 +1069,7 @@ dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "tracing", ] @@ -1196,17 +1197,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -1215,6 +1216,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base58ck" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +dependencies = [ + "bitcoin-internals", + "bitcoin_hashes", +] + [[package]] name = "base64" version = "0.21.7" @@ -1249,6 +1260,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + [[package]] name = "bindgen" version = "0.69.4" @@ -1266,7 +1283,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -1284,12 +1301,44 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bitcoin" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea507acc1cd80fc084ace38544bbcf7ced7c2aa65b653b102de0ce718df668f6" +dependencies = [ + "base58ck", + "bech32 0.11.0", + "bitcoin-internals", + "bitcoin-io", + "bitcoin-units", + "bitcoin_hashes", + "hex-conservative", + "hex_lit", + "secp256k1", +] + +[[package]] +name = "bitcoin-internals" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" + [[package]] name = "bitcoin-io" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340e09e8399c7bd8912f495af6aa58bea0c9214773417ffaa8f6460f93aaee56" +[[package]] +name = "bitcoin-units" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" +dependencies = [ + "bitcoin-internals", +] + [[package]] name = "bitcoin_hashes" version = "0.14.0" @@ -1351,17 +1400,19 @@ version = "3.7.3" dependencies = [ "alloy", "alloy-transport-http", + "anyhow", "async-stream", "async-trait", "async-tungstenite", "axum 0.7.5", "axum-prometheus", + "bech32 0.9.1", "bitcoin_hashes", "built", "clap", "crossbeam-channel", "ctrlc", - "dashmap 6.0.1", + "dashmap 6.1.0", "diesel", "diesel-tracing", "diesel_migrations", @@ -1369,6 +1420,8 @@ dependencies = [ "eventsource-client", "futures", "futures-util", + "lightning", + "lightning-invoice", "metrics 0.23.0", "metrics-exporter-prometheus 0.15.3", "metrics-process", @@ -1378,11 +1431,11 @@ dependencies = [ "opentelemetry-otlp", "opentelemetry-semantic-conventions", "opentelemetry_sdk", - "prost 0.13.1", + "prost 0.13.2", "r2d2", "rand", "rcgen", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "serial_test", @@ -1391,7 +1444,7 @@ dependencies = [ "tokio", "tokio-util", "toml", - "tonic 0.12.1", + "tonic 0.12.2", "tonic-build", "tracing", "tracing-loki", @@ -1457,23 +1510,24 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" dependencies = [ "blst", "cc", "glob", "hex", "libc", + "once_cell", "serde", ] [[package]] name = "cc" -version = "1.1.13" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ "jobserver", "libc", @@ -1527,9 +1581,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -1537,9 +1591,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -1556,7 +1610,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -1604,7 +1658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b3aeeec621f4daec552e9d28befd58020a78cfc364827d06a753e8bc13c6c4b" dependencies = [ "base64 0.21.7", - "bech32", + "bech32 0.9.1", "bs58", "const-hex", "digest 0.10.7", @@ -1688,9 +1742,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1787,7 +1841,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -1798,7 +1852,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -1816,9 +1870,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.0.1" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1888,15 +1942,15 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 2.0.74", + "rustc_version 0.4.1", + "syn 2.0.77", ] [[package]] name = "diesel" -version = "2.2.3" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e13bab2796f412722112327f3e575601a3e9cdcbe426f0d30dbf43f3f5dc71" +checksum = "158fe8e2e68695bd615d7e4f3227c0727b151330d3e253b525086c348d055d5e" dependencies = [ "bitflags 2.6.0", "byteorder", @@ -1922,15 +1976,15 @@ dependencies = [ [[package]] name = "diesel_derives" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ff2be1e7312c858b2ef974f5c7089833ae57b5311b334b30923af58e5718d8" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -1950,7 +2004,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -2003,7 +2057,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -2023,7 +2077,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -2115,9 +2169,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fastrlp" @@ -2160,9 +2214,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", "miniz_oxide", @@ -2266,7 +2320,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -2374,9 +2428,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "git2" @@ -2420,7 +2474,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.4.0", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2429,9 +2483,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -2439,7 +2493,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.4.0", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2498,6 +2552,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + [[package]] name = "hidapi-rusb" version = "1.3.3" @@ -2620,7 +2680,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -2650,15 +2710,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -2708,9 +2768,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -2797,9 +2857,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2807,9 +2867,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "ipnetwork" @@ -2917,9 +2977,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -2939,9 +2999,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.156" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f43f184355eefb8d17fc948dbecf6c13be3c141f20d834ae842193a448c72a" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libgit2-sys" @@ -3006,9 +3066,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.19" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -3016,6 +3076,40 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "lightning" +version = "0.0.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fa15a82fa2862935552fe647d1bf15745a6d759c0dca5a4b1e7b7e80cf24d58" +dependencies = [ + "bech32 0.9.1", + "bitcoin", + "lightning-invoice", + "lightning-types", +] + +[[package]] +name = "lightning-invoice" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ab9f6ea77e20e3129235e62a2e6bd64ed932363df104e864ee65ccffb54a8f" +dependencies = [ + "bech32 0.9.1", + "bitcoin", + "lightning-types", +] + +[[package]] +name = "lightning-types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1083b8d9137000edf3bfcb1ff011c0d25e0cdd2feb98cc21d6765e64a494148f" +dependencies = [ + "bech32 0.9.1", + "bitcoin", + "hex-conservative", +] + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -3124,7 +3218,7 @@ checksum = "9bf4e7146e30ad172c42c39b3246864bd2d3c6396780711a1baf749cfe423e21" dependencies = [ "base64 0.21.7", "hyper 0.14.30", - "indexmap 2.4.0", + "indexmap 2.5.0", "ipnet", "metrics 0.22.3", "metrics-util 0.16.3", @@ -3140,7 +3234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4f0c8427b39666bf970460908b213ec09b3b350f20c0c2eabcbba51704a08e6" dependencies = [ "base64 0.22.1", - "indexmap 2.4.0", + "indexmap 2.5.0", "metrics 0.23.0", "metrics-util 0.17.0", "quanta", @@ -3237,11 +3331,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -3279,7 +3373,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -3412,23 +3506,23 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] name = "object" -version = "0.36.3" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] [[package]] name = "oid-registry" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ "asn1-rs", ] @@ -3462,7 +3556,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -3509,10 +3603,10 @@ dependencies = [ "opentelemetry", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.1", + "prost 0.13.2", "thiserror", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", ] [[package]] @@ -3523,8 +3617,8 @@ checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.1", - "tonic 0.12.1", + "prost 0.13.2", + "tonic 0.12.2", ] [[package]] @@ -3664,9 +3758,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -3680,7 +3774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.4.0", + "indexmap 2.5.0", ] [[package]] @@ -3720,7 +3814,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -3774,9 +3868,9 @@ dependencies = [ [[package]] name = "pq-sys" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24ff9e4cf6945c988f0db7005d87747bf72864965c3529d259ad155ac41d584" +checksum = "a92c30dd81695321846d4dfe348da67b1752ebb61cd1549d203a7b57e323c435" dependencies = [ "vcpkg", ] @@ -3809,12 +3903,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -3830,11 +3924,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -3925,19 +4019,19 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" +checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" dependencies = [ "bytes", - "prost-derive 0.13.1", + "prost-derive 0.13.2", ] [[package]] name = "prost-build" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb182580f71dd070f88d01ce3de9f4da5021db7115d2e1c3605a754153b77c1" +checksum = "f8650aabb6c35b860610e9cff5dc1af886c9e25073b7b1712a68972af4281302" dependencies = [ "bytes", "heck", @@ -3947,10 +4041,10 @@ dependencies = [ "once_cell", "petgraph", "prettyplease", - "prost 0.13.1", - "prost-types 0.13.1", + "prost 0.13.2", + "prost-types 0.13.2", "regex", - "syn 2.0.74", + "syn 2.0.77", "tempfile", ] @@ -3964,20 +4058,20 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] name = "prost-derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" +checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" dependencies = [ "anyhow", "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -3991,11 +4085,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" +checksum = "60caa6738c7369b940c3d49246a8d1749323674c65cb13010134f5c9bad5b519" dependencies = [ - "prost 0.13.1", + "prost 0.13.2", ] [[package]] @@ -4021,9 +4115,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4118,9 +4212,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -4209,7 +4303,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration", + "system-configuration 0.5.1", "tokio", "tokio-rustls 0.24.1", "tokio-util", @@ -4219,26 +4313,26 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper-rustls 0.27.3", "hyper-tls", "hyper-util", "ipnet", @@ -4254,7 +4348,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", - "system-configuration", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", "tower-service", @@ -4262,7 +4356,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -4301,9 +4395,9 @@ dependencies = [ [[package]] name = "rlimit" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8" +checksum = "7043b63bd0cd1aaa628e476b80e6d4023a3b50eb32789f2728908107bd0c793a" dependencies = [ "libc", ] @@ -4387,9 +4481,9 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver 1.0.23", ] @@ -4405,9 +4499,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" dependencies = [ "bitflags 2.6.0", "errno", @@ -4437,22 +4531,22 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -4471,9 +4565,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", "rustls-pemfile 2.1.3", @@ -4519,9 +4613,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -4554,20 +4648,20 @@ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "scc" -version = "2.1.15" +version = "2.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c478f373151538826ed50feaceeef7095ad435065a48153af789005fd5e44c0d" +checksum = "0c947adb109a8afce5fc9c7bf951f87f146e9147b3a6a58413105628fb1d1e66" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4597,9 +4691,9 @@ dependencies = [ [[package]] name = "sdd" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0495e4577c672de8254beb68d01a9b62d0e8a13c099edecdbedccce3223cd29f" +checksum = "60a7b59a5d9b0099720b417b6325d91a52cbf5b3dcb5041d864be53eefa58abc" [[package]] name = "sec1" @@ -4615,14 +4709,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +dependencies = [ + "bitcoin_hashes", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b" +dependencies = [ + "cc", +] + [[package]] name = "secret-vault-value" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc32a777b53b3433b974c9c26b6d502a50037f8da94e46cb8ce2ced2cfdfaea0" dependencies = [ - "prost 0.13.1", - "prost-types 0.13.1", + "prost 0.13.2", + "prost-types 0.13.2", "serde", "serde_json", "zeroize", @@ -4677,29 +4790,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.125" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -4760,7 +4873,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -4797,9 +4910,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", @@ -4926,7 +5039,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -4948,9 +5061,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.74" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -4966,7 +5079,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -4980,6 +5093,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -4989,7 +5105,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5000,7 +5116,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -5013,6 +5140,16 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -5055,7 +5192,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5134,9 +5271,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -5167,7 +5304,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5207,16 +5344,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -5226,9 +5363,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5246,7 +5383,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit", ] [[package]] @@ -5258,28 +5395,17 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.4.0", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -5301,7 +5427,7 @@ dependencies = [ "percent-encoding", "pin-project 1.1.5", "prost 0.12.6", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.3", "rustls-pemfile 2.1.3", "rustls-pki-types", "tokio", @@ -5315,16 +5441,16 @@ dependencies = [ [[package]] name = "tonic" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +checksum = "c6f6ba989e4b2c58ae83d862d3a3e27690b6e3ae630d0deb59f3697f32aa88ad" dependencies = [ "async-stream", "async-trait", "axum 0.7.5", "base64 0.22.1", "bytes", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", @@ -5333,7 +5459,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project 1.1.5", - "prost 0.13.1", + "prost 0.13.2", "rustls-pemfile 2.1.3", "socket2", "tokio", @@ -5347,15 +5473,15 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568392c5a2bd0020723e3f387891176aabafe36fd9fcd074ad309dfa0c8eb964" +checksum = "fe4ee8877250136bd7e3d2331632810a4df4ea5e004656990d8d66d2f5ee8a67" dependencies = [ "prettyplease", "proc-macro2", "prost-build", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5438,7 +5564,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5480,7 +5606,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea6023f9fe4b69267ccd3ed7d203d931c43c5f82dbaa0f07202bc17193a5f43" dependencies = [ "loki-api", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "snap", @@ -5612,9 +5738,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" @@ -5730,7 +5856,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", "wasm-bindgen-shared", ] @@ -5764,7 +5890,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5857,7 +5983,7 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ "windows-implement", "windows-interface", - "windows-result", + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -5869,7 +5995,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -5880,7 +6006,18 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] @@ -5892,6 +6029,25 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -6040,15 +6196,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.6.18" @@ -6068,16 +6215,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wyz" version = "0.5.1" @@ -6132,7 +6269,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] [[package]] @@ -6152,5 +6289,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.77", ] diff --git a/boltzr/Cargo.toml b/boltzr/Cargo.toml index 9ebdfbc1..c3174741 100644 --- a/boltzr/Cargo.toml +++ b/boltzr/Cargo.toml @@ -74,6 +74,10 @@ async-tungstenite = { version = "0.27.0", features = ["tokio-native-tls", "tokio async-trait = "0.1.81" futures-util = "0.3.30" async-stream = "0.3.5" +anyhow = "1.0.87" +lightning = { version = "0.0.124", features = ["std"] } +lightning-invoice = { version = "0.32.0", features = ["std"] } +bech32 = "0.9.1" [build-dependencies] built = { version = "0.7.4", features = ["git2"] } diff --git a/boltzr/build.rs b/boltzr/build.rs index d3d5951c..b6fdf018 100644 --- a/boltzr/build.rs +++ b/boltzr/build.rs @@ -5,6 +5,12 @@ fn main() { .protoc_arg("--experimental_allow_proto3_optional") .compile(&["protos/boltzr.proto"], &["protos"]) .unwrap_or_else(|e| panic!("Could not build protos: {}", e)); + + tonic_build::configure() + .protoc_arg("--experimental_allow_proto3_optional") + .compile(&["../proto/cln/node.proto"], &["../proto"]) + .unwrap_or_else(|e| panic!("Could not build CLN protos: {}", e)); + built::write_built_file() .unwrap_or_else(|e| panic!("Failed to acquire build-time information: {}", e)); } diff --git a/boltzr/protos/boltzr.proto b/boltzr/protos/boltzr.proto index c36ec731..8cc410a1 100644 --- a/boltzr/protos/boltzr.proto +++ b/boltzr/protos/boltzr.proto @@ -15,6 +15,9 @@ service BoltzR { rpc SendWebHook (SendWebHookRequest) returns (SendWebHookResponse); rpc SignEvmRefund (SignEvmRefundRequest) returns (SignEvmRefundResponse); + + rpc DecodeInvoiceOrOffer (DecodeInvoiceOrOfferRequest) returns (DecodeInvoiceOrOfferResponse); + rpc FetchInvoice (FetchInvoiceRequest) returns (FetchInvoiceResponse); } message GetInfoRequest {} @@ -101,3 +104,93 @@ message SignEvmRefundRequest { message SignEvmRefundResponse { bytes signature = 1; } + +message DecodeInvoiceOrOfferRequest { + string invoice_or_offer = 1; +} + +enum Feature { + BASIC_MPP = 0; +} + +message Bolt11Invoice { + bytes payee_pubkey = 1; + optional uint64 msat = 2; + bytes payment_hash = 3; + + oneof description { + string memo = 4; + bytes description_hash = 5; + } + + uint64 created_at = 6; + uint64 expiry = 7; + uint64 min_final_cltv_expiry = 8; + + message RoutingHints { + message RoutingHint { + bytes node = 1; + uint64 channel_id = 2; + + uint32 base_fee_msat = 3; + uint32 ppm_fee = 4; + + uint64 cltv_expiry_delta = 5; + optional uint64 htlc_minimum_msat = 6; + optional uint64 htlc_maximum_msat = 7; + } + + repeated RoutingHint hops = 1; + } + + repeated RoutingHints hints = 9; + repeated Feature features = 10; +} + +message Bolt12Offer { + bytes id = 1; + optional bytes signing_pubkey = 2; + optional string description = 3; + optional uint64 min_amount_msat = 4; +} + +message Bolt12Invoice { + bytes signing_pubkey = 1; + optional uint64 msat = 2; + bytes payment_hash = 3; + optional string description = 4; + uint64 created_at = 5; + uint64 expiry = 6; + + message Path { + optional bytes first_node_pubkey = 1; + + uint32 base_fee_msat = 2; + uint32 ppm_fee = 3; + + uint64 cltv_expiry_delta = 4; + } + + repeated Path paths = 7; + repeated Feature features = 8; +} + +message DecodeInvoiceOrOfferResponse { + bool is_expired = 1; + + oneof decoded { + Bolt11Invoice bolt11 = 2; + Bolt12Offer offer = 3; + Bolt12Invoice bolt12_invoice = 4; + } +} + +message FetchInvoiceRequest { + string currency = 1; + string offer = 2; + uint64 amount_msat = 3; +} + +message FetchInvoiceResponse { + string invoice = 1; +} diff --git a/boltzr/src/config.rs b/boltzr/src/config.rs index cf7e579b..2c8085da 100644 --- a/boltzr/src/config.rs +++ b/boltzr/src/config.rs @@ -4,6 +4,12 @@ use std::fs; use std::path::Path; use tracing::{debug, info, trace}; +#[derive(Deserialize, Serialize, PartialEq, Clone, Debug)] +pub struct CurrencyConfig { + pub symbol: String, + pub cln: Option, +} + #[derive(Deserialize, Serialize, PartialEq, Clone, Debug)] pub struct Config { #[serde(rename = "dataDir")] @@ -40,6 +46,7 @@ pub struct GlobalConfig { pub mnemonic_path: Option, pub postgres: crate::db::Config, + pub currencies: Option>, pub rsk: Option, pub notification: Option, diff --git a/boltzr/src/currencies.rs b/boltzr/src/currencies.rs new file mode 100644 index 00000000..da78aed0 --- /dev/null +++ b/boltzr/src/currencies.rs @@ -0,0 +1,39 @@ +use crate::config::CurrencyConfig; +use crate::lightning::cln::Cln; +use std::collections::HashMap; +use tracing::{debug, warn}; + +#[derive(Debug, Clone)] +pub struct Currency { + pub cln: Option, +} + +pub type Currencies = HashMap; + +pub async fn connect_nodes(currencies: Option>) -> anyhow::Result { + let mut curs = HashMap::new(); + + match currencies { + Some(currencies) => { + for currency in currencies { + debug!("Connecting to nodes of {}", currency.symbol); + + let cln = match currency.cln.clone() { + Some(config) => { + let mut cln = Cln::new(¤cy.symbol, config).await?; + cln.connect().await?; + Some(cln) + } + None => None, + }; + + curs.insert(currency.symbol.clone(), Currency { cln }); + } + } + None => { + warn!("No currencies are configured"); + } + } + + Ok(curs) +} diff --git a/boltzr/src/grpc/server.rs b/boltzr/src/grpc/server.rs index 1794e17a..d6509a00 100644 --- a/boltzr/src/grpc/server.rs +++ b/boltzr/src/grpc/server.rs @@ -1,3 +1,4 @@ +use crate::currencies::Currencies; use crate::db::helpers::web_hook::WebHookHelper; use crate::evm::refund_signer::RefundSigner; use crate::grpc::service::boltzr::boltz_r_server::BoltzRServer; @@ -32,6 +33,8 @@ pub struct Config { pub struct Server { config: Config, + currencies: Currencies, + web_hook_helper: Box, web_hook_caller: Caller, @@ -49,9 +52,11 @@ where W: WebHookHelper + Send + Sync + Clone + 'static, N: NotificationClient + Send + Sync + 'static, { + #[allow(clippy::too_many_arguments)] pub fn new( cancellation_token: CancellationToken, config: Config, + currencies: Currencies, swap_status_update_tx: tokio::sync::broadcast::Sender>, web_hook_helper: Box, web_hook_caller: Caller, @@ -60,6 +65,7 @@ where ) -> Self { Server { config, + currencies, refund_signer, web_hook_helper, web_hook_caller, @@ -85,6 +91,7 @@ where Arc::new(Default::default()); let service = BoltzService::new( + self.currencies.clone(), self.status_fetcher.clone(), self.swap_status_update_tx.clone(), Arc::new(self.web_hook_helper.clone()), @@ -147,6 +154,7 @@ mod server_test { use crate::ws; use alloy::primitives::{Address, FixedBytes, Signature, U256}; use mockall::{mock, predicate::*}; + use std::collections::HashMap; use std::error::Error; use std::fs; use std::path::{Path, PathBuf}; @@ -200,6 +208,7 @@ mod server_test { certificates: None, disable_ssl: Some(true), }, + HashMap::new(), status_tx, Box::new(make_mock_hook_helper()), caller::Caller::new( @@ -325,6 +334,7 @@ mod server_test { certificates: Some(certs_dir.clone().to_str().unwrap().to_string()), disable_ssl: Some(false), }, + HashMap::new(), status_tx, Box::new(make_mock_hook_helper()), caller::Caller::new( diff --git a/boltzr/src/grpc/service.rs b/boltzr/src/grpc/service.rs index faf34c8c..bae37d8f 100644 --- a/boltzr/src/grpc/service.rs +++ b/boltzr/src/grpc/service.rs @@ -1,29 +1,37 @@ -use std::cell::Cell; -use std::pin::Pin; -use std::sync::Arc; - -use alloy::primitives::{Address, FixedBytes}; -use futures::StreamExt; -use tokio::sync::{mpsc, Mutex}; -use tonic::codegen::tokio_stream::wrappers::ReceiverStream; -use tonic::codegen::tokio_stream::Stream; -use tonic::{Code, Request, Response, Status, Streaming}; -use tracing::{debug, error, instrument, trace}; - +use crate::currencies::Currencies; use crate::db::helpers::web_hook::WebHookHelper; use crate::db::models::{WebHook, WebHookState}; use crate::evm::refund_signer::RefundSigner; use crate::grpc::service::boltzr::boltz_r_server::BoltzR; use crate::grpc::service::boltzr::{ - CreateWebHookRequest, CreateWebHookResponse, GetInfoRequest, GetInfoResponse, - GetMessagesRequest, GetMessagesResponse, SendMessageRequest, SendMessageResponse, - SendWebHookRequest, SendWebHookResponse, SignEvmRefundRequest, SignEvmRefundResponse, - StartWebHookRetriesRequest, StartWebHookRetriesResponse, SwapUpdateRequest, SwapUpdateResponse, + bolt11_invoice, bolt12_invoice, decode_invoice_or_offer_response, Bolt11Invoice, Bolt12Invoice, + Bolt12Offer, CreateWebHookRequest, CreateWebHookResponse, DecodeInvoiceOrOfferRequest, + DecodeInvoiceOrOfferResponse, Feature, FetchInvoiceRequest, FetchInvoiceResponse, + GetInfoRequest, GetInfoResponse, GetMessagesRequest, GetMessagesResponse, SendMessageRequest, + SendMessageResponse, SendWebHookRequest, SendWebHookResponse, SignEvmRefundRequest, + SignEvmRefundResponse, StartWebHookRetriesRequest, StartWebHookRetriesResponse, + SwapUpdateRequest, SwapUpdateResponse, }; use crate::grpc::status_fetcher::StatusFetcher; +use crate::lightning::invoice::Invoice; use crate::notifications::NotificationClient; use crate::webhook::caller::Caller; use crate::ws::types::SwapStatus; +use alloy::primitives::{Address, FixedBytes}; +use futures::StreamExt; +use lightning::blinded_path::IntroductionNode; +use lightning::offers::offer::Amount; +use lightning::util::ser::Writeable; +use lightning_invoice::Bolt11InvoiceDescription; +use std::cell::Cell; +use std::pin::Pin; +use std::sync::Arc; +use std::time::UNIX_EPOCH; +use tokio::sync::{mpsc, Mutex}; +use tonic::codegen::tokio_stream::wrappers::ReceiverStream; +use tonic::codegen::tokio_stream::Stream; +use tonic::{Code, Request, Response, Status, Streaming}; +use tracing::{debug, error, instrument, trace}; pub mod boltzr { tonic::include_proto!("boltzr"); @@ -32,6 +40,8 @@ pub mod boltzr { pub struct BoltzService { pub web_hook_retry_handle: Arc>>>>, + currencies: Currencies, + web_hook_helper: Arc>, web_hook_caller: Arc, @@ -44,6 +54,7 @@ pub struct BoltzService { impl BoltzService { pub(crate) fn new( + currencies: Currencies, status_fetcher: StatusFetcher, swap_status_update_tx: tokio::sync::broadcast::Sender>, web_hook_helper: Arc>, @@ -52,6 +63,7 @@ impl BoltzService { notification_client: Option>, ) -> Self { BoltzService { + currencies, refund_signer, status_fetcher, web_hook_caller, @@ -358,6 +370,154 @@ where signature: Vec::from(signature.as_bytes()), })) } + + #[instrument(name = "grpc::fetch_invoice", skip_all)] + async fn fetch_invoice( + &self, + request: Request, + ) -> Result, Status> { + extract_parent_context(&request); + + let params = request.into_inner(); + + match self.currencies.get(¶ms.currency) { + Some(currency) => match currency.cln.clone() { + Some(mut cln) => match cln.fetch_invoice(params.offer, params.amount_msat).await { + Ok(invoice) => Ok(Response::new(FetchInvoiceResponse { invoice })), + Err(err) => Err(Status::new(Code::Internal, err.to_string())), + }, + None => Err(Status::new(Code::NotFound, "no BOLT12 support")), + }, + None => Err(Status::new(Code::NotFound, "currency not found")), + } + } + + #[instrument(name = "grpc::decode_invoice_or_offer", skip_all)] + async fn decode_invoice_or_offer( + &self, + request: Request, + ) -> Result, Status> { + extract_parent_context(&request); + + match crate::lightning::invoice::decode(&request.into_inner().invoice_or_offer) { + Ok(dec) => Ok(Response::new(match dec { + Invoice::Bolt11(invoice) => DecodeInvoiceOrOfferResponse { + is_expired: invoice.is_expired(), + decoded: Some(decode_invoice_or_offer_response::Decoded::Bolt11( + Bolt11Invoice { + payee_pubkey: invoice.get_payee_pub_key().encode(), + msat: invoice.amount_milli_satoshis(), + payment_hash: invoice.payment_hash()[..].to_vec(), + expiry: invoice.expiry_time().as_secs(), + min_final_cltv_expiry: invoice.min_final_cltv_expiry_delta(), + created_at: match invoice.timestamp().duration_since(UNIX_EPOCH) { + Ok(delta) => delta.as_secs(), + Err(err) => { + return Err(Status::new(Code::Internal, err.to_string())) + } + }, + description: Some(match invoice.description() { + Bolt11InvoiceDescription::Direct(memo) => { + bolt11_invoice::Description::Memo(memo.to_string()) + } + Bolt11InvoiceDescription::Hash(hash) => { + bolt11_invoice::Description::DescriptionHash( + hash.0[..].to_vec(), + ) + } + }), + hints: invoice + .route_hints() + .iter() + .map(|hint| bolt11_invoice::RoutingHints { + hops: hint + .0 + .iter() + .map(|hop| bolt11_invoice::routing_hints::RoutingHint { + node: hop.src_node_id.encode(), + channel_id: hop.short_channel_id, + base_fee_msat: hop.fees.base_msat, + ppm_fee: hop.fees.proportional_millionths, + cltv_expiry_delta: hop.cltv_expiry_delta as u64, + htlc_minimum_msat: hop.htlc_minimum_msat, + htlc_maximum_msat: hop.htlc_maximum_msat, + }) + .collect(), + }) + .collect(), + features: match invoice.features() { + Some(features) => { + if features.supports_basic_mpp() { + vec![Feature::BasicMpp.into()] + } else { + Vec::new() + } + } + None => Vec::new(), + }, + }, + )), + }, + Invoice::Offer(offer) => DecodeInvoiceOrOfferResponse { + is_expired: offer.is_expired(), + decoded: Some(decode_invoice_or_offer_response::Decoded::Offer( + Bolt12Offer { + id: offer.id().0[..].to_vec(), + signing_pubkey: offer.signing_pubkey().map(|pubkey| pubkey.encode()), + description: offer + .description() + .map(|description| description.to_string()), + min_amount_msat: match offer.amount() { + Some(amount) => match amount { + Amount::Bitcoin { amount_msats } => Some(amount_msats), + Amount::Currency { .. } => { + return Err(Status::new( + Code::InvalidArgument, + "non Bitcoin currencies are not supported", + )) + } + }, + None => None, + }, + }, + )), + }, + Invoice::Bolt12(invoice) => DecodeInvoiceOrOfferResponse { + is_expired: invoice.is_expired(), + decoded: Some(decode_invoice_or_offer_response::Decoded::Bolt12Invoice( + Bolt12Invoice { + signing_pubkey: invoice.signing_pubkey().encode(), + msat: Some(invoice.amount_msats()), + payment_hash: invoice.payment_hash().encode(), + description: invoice + .description() + .map(|description| description.to_string()), + created_at: invoice.created_at().as_secs(), + expiry: invoice.relative_expiry().as_secs(), + paths: invoice + .payment_paths() + .iter() + .map(|path| bolt12_invoice::Path { + first_node_pubkey: match path.introduction_node() { + IntroductionNode::NodeId(pubkey) => Some(pubkey.encode()), + IntroductionNode::DirectedShortChannelId(_, _) => None, + }, + base_fee_msat: path.payinfo.fee_base_msat, + ppm_fee: path.payinfo.fee_proportional_millionths, + cltv_expiry_delta: path.payinfo.cltv_expiry_delta as u64, + }) + .collect(), + features: match invoice.invoice_features().supports_basic_mpp() { + true => vec![Feature::BasicMpp.into()], + false => Vec::new(), + }, + }, + )), + }, + })), + Err(err) => Err(Status::new(Code::InvalidArgument, err.to_string())), + } + } } fn extract_parent_context(request: &Request) { @@ -374,6 +534,7 @@ fn extract_parent_context(request: &Request) { #[cfg(test)] mod test { + use std::collections::HashMap; use std::error::Error; use std::str::FromStr; use std::sync::Arc; @@ -711,6 +872,7 @@ mod test { ( token.clone(), BoltzService::new( + HashMap::new(), StatusFetcher::new(), status_tx, Arc::new(Box::new(make_mock_hook_helper())), diff --git a/boltzr/src/lightning/cln/mod.rs b/boltzr/src/lightning/cln/mod.rs new file mode 100644 index 00000000..07a2daa5 --- /dev/null +++ b/boltzr/src/lightning/cln/mod.rs @@ -0,0 +1,120 @@ +use crate::lightning::cln::cln_rpc::{ + Amount, FetchinvoiceRequest, GetinfoRequest, GetinfoResponse, ListconfigsRequest, + ListconfigsResponse, +}; +use alloy::hex; +use serde::{Deserialize, Serialize}; +use std::fs; +use tonic::transport::{Certificate, Channel, ClientTlsConfig, Identity}; +use tracing::info; + +#[allow(clippy::enum_variant_names)] +mod cln_rpc { + tonic::include_proto!("cln"); +} + +#[derive(Deserialize, Serialize, PartialEq, Clone, Debug)] +pub struct Config { + pub host: String, + pub port: u16, + + #[serde(rename = "rootCertPath")] + pub root_cert_path: String, + #[serde(rename = "privateKeyPath")] + pub private_key_path: String, + #[serde(rename = "certChainPath")] + pub cert_chain_path: String, +} + +#[derive(Clone, Debug)] +pub struct Cln { + symbol: String, + cln: cln_rpc::node_client::NodeClient, +} + +impl Cln { + pub async fn new(symbol: &str, config: Config) -> anyhow::Result { + let tls = ClientTlsConfig::new() + .domain_name("cln") + .ca_certificate(Certificate::from_pem(fs::read_to_string( + config.root_cert_path, + )?)) + .identity(Identity::from_pem( + fs::read_to_string(config.cert_chain_path)?, + fs::read_to_string(config.private_key_path)?, + )); + + let channel = Channel::from_shared(format!("https://{}:{}", config.host, config.port))? + .tls_config(tls)? + .connect() + .await?; + + Ok(Cln { + symbol: symbol.to_string(), + cln: cln_rpc::node_client::NodeClient::new(channel), + }) + } + + pub async fn connect(&mut self) -> anyhow::Result<()> { + let configs = self.list_configs().await?; + let experimental_offers = match configs.configs { + Some(config) => match config.experimental_offers { + Some(option) => option.set, + None => false, + }, + None => false, + }; + + if !experimental_offers { + return Err(crate::lightning::Error::NoBolt12Support( + "experimental-offers not enabled".into(), + ) + .into()); + } + + let info = self.get_info().await?; + info!( + "Connected to {} CLN {} ({})", + self.symbol, + info.version, + info.alias.unwrap_or(hex::encode(info.id)) + ); + + Ok(()) + } + + pub async fn fetch_invoice( + &mut self, + offer: String, + amount_msat: u64, + ) -> anyhow::Result { + let res = self + .cln + .fetch_invoice(FetchinvoiceRequest { + offer, + amount_msat: Some(Amount { msat: amount_msat }), + timeout: None, + quantity: None, + payer_note: None, + recurrence_start: None, + recurrence_label: None, + recurrence_counter: None, + }) + .await?; + + Ok(res.into_inner().invoice) + } + + async fn get_info(&mut self) -> anyhow::Result { + let res = self.cln.getinfo(GetinfoRequest {}).await?; + Ok(res.into_inner()) + } + + async fn list_configs(&mut self) -> anyhow::Result { + let res = self + .cln + .list_configs(ListconfigsRequest { config: None }) + .await?; + Ok(res.into_inner()) + } +} diff --git a/boltzr/src/lightning/invoice.rs b/boltzr/src/lightning/invoice.rs new file mode 100644 index 00000000..70d7735a --- /dev/null +++ b/boltzr/src/lightning/invoice.rs @@ -0,0 +1,165 @@ +use bech32::FromBase32; +use std::error::Error; +use std::fmt::{Display, Formatter}; +use std::str::FromStr; + +const BECH32_BOLT12_INVOICE_HRP: &str = "lni"; + +#[derive(Debug, PartialEq)] +pub enum InvoiceError { + InvalidInvariant, + DecodeError(String), +} + +impl Display for InvoiceError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + InvoiceError::InvalidInvariant => write!(f, "invalid invariant"), + InvoiceError::DecodeError(data) => write!(f, "could not parse invoice: {}", data), + } + } +} + +impl Error for InvoiceError {} + +#[derive(Debug, Clone, PartialEq)] +pub enum Invoice { + Bolt11(Box), + Offer(Box), + Bolt12(Box), +} + +pub fn decode(invoice_or_offer: &str) -> Result { + if let Ok(invoice) = decode_bolt11(invoice_or_offer) { + return Ok(invoice); + } + + if let Ok(invoice) = decode_bolt12_offer(invoice_or_offer) { + return Ok(invoice); + } + + if let Ok(invoice) = decode_bolt12_invoice(invoice_or_offer) { + return Ok(invoice); + } + + Err(InvoiceError::InvalidInvariant) +} + +fn decode_bolt12_offer(offer: &str) -> anyhow::Result { + match lightning::offers::offer::Offer::from_str(offer) { + Ok(offer) => Ok(Invoice::Offer(Box::new(offer))), + Err(err) => Err(InvoiceError::DecodeError(format!("{:?}", err)).into()), + } +} + +fn decode_bolt12_invoice(invoice: &str) -> anyhow::Result { + let (hrp, data) = bech32::decode_without_checksum(invoice)?; + if hrp != BECH32_BOLT12_INVOICE_HRP { + return Err(InvoiceError::DecodeError("invalid HRP".to_string()).into()); + } + + let data = Vec::::from_base32(&data)?; + match lightning::offers::invoice::Bolt12Invoice::try_from(data) { + Ok(invoice) => Ok(Invoice::Bolt12(Box::new(invoice))), + Err(err) => Err(InvoiceError::DecodeError(format!("{:?}", err)).into()), + } +} + +fn decode_bolt11(invoice: &str) -> anyhow::Result { + match lightning_invoice::Bolt11Invoice::from_str(invoice) { + Ok(invoice) => Ok(Invoice::Bolt11(Box::new(invoice))), + Err(err) => Err(InvoiceError::DecodeError(format!("{:?}", err)).into()), + } +} + +#[cfg(test)] +mod test { + use crate::lightning::invoice::{ + decode, decode_bolt11, decode_bolt12_invoice, decode_bolt12_offer, Invoice, InvoiceError, + }; + use bech32::FromBase32; + use std::str::FromStr; + + const BOLT12_OFFER: &str = "lno1qgsqvgnwgcg35z6ee2h3yczraddm72xrfua9uve2rlrm9deu7xyfzrc2q3skgumxzcssyeyreggqmet8r4k6krvd3knppsx6c8v5g7tj8hcuq8lleta9ve5n"; + const BOLT12_INVOICE: &str = "lni1qqgth299fq4pg07a2jnjjxg6apy37q3qqc3xu3s3rg94nj40zfsy866mhu5vxne6tcej5878k2mneuvgjy8s5prpwdjxv93pqfjg8jssphjkw8td4vxcmrdxzrqd4sweg3uhy003cq0lljh62enfx5pqqc3xu3s3rg94nj40zfsy866mhu5vxne6tcej5878k2mneuvgjy84yqucj6q9sggzymg62fj8dfjzz3uvmft8xeufw62x0a5znkc38f0jk04wqrkvwsy6pxqzvjpu5yqdu4n36mdtpkxcmfsscrdvrk2y09ermuwqrllu47jkv6fs9tuwsyhaydearc5eyax2lmlc8apwhp8n5yynlpr4lm058y9a8f50qypsd4f70enu0x03ecscycu5d350e42x02fmtkzskzc6a453h5adh3gqx25k2jgjzxh6rdxhlmhtvm3f89wpxms2hm3cff7mkx63y7s3vp7f5xzya6lw9sc9v5hlr69pcxcvx3emt23pcqqqqqqqqqqqqqqq5qqqqqqqqqqqqqwjfvkl43fqqqqqqzjqgehz6n86sg9hp98lphy7x4rrxejy48yzs5srcfmzdqeuwzglfym8r7fmtvce7x4q8xykszczzqnys09pqr09vuwkm2cd3kx6vyxqmtqaj3rewg7lrsqlll9054nxj0cyqg5ltjmfnrm8nerkvj0uz4wfn9annnm9r3fyx4w08hj463nmya8vmutf8fmufgzvfgkyea03tltjyn2qynt8ufenhxkh5nrl5usa2f8q"; + const BOLT11_INVOICE: &str = "lnbcrt1230p1pnwzkshsp584p434kjslfl030shwps75nvy4leq5k6psvdxn4kzsxjnptlmr3spp5nxqauehzqkx3xswjtrgx9lh5pqjxkyx0kszj0nc4m4jn7uk9gc5qdq8v9ekgesxqyjw5qcqp29qxpqysgqu6ft6p8c36khp082xng2xzmta25nlg803qjncal3fhzw8eshrsdyevhlgs970a09n95r3gtvqvvyk24vyv4506cu6cxl8ytaywrjkhcp468qnl"; + + #[test] + fn test_decode() { + assert_eq!( + decode(BOLT12_OFFER).unwrap(), + decode_bolt12_offer(BOLT12_OFFER).unwrap() + ); + assert_eq!( + decode(BOLT12_INVOICE).unwrap(), + decode_bolt12_invoice(BOLT12_INVOICE).unwrap() + ); + assert_eq!( + decode(BOLT11_INVOICE).unwrap(), + decode_bolt11(BOLT11_INVOICE).unwrap() + ); + + assert_eq!( + decode("invalid").err().unwrap(), + InvoiceError::InvalidInvariant + ); + } + + #[test] + fn test_decode_bolt12_offer() { + let res = decode_bolt12_offer(BOLT12_OFFER).unwrap(); + assert_eq!( + res, + Invoice::Offer( + lightning::offers::offer::Offer::from_str(BOLT12_OFFER) + .unwrap() + .into() + ) + ); + } + + #[test] + fn test_decode_bolt12_offer_phoenix() { + let offer = "lno1qgsyxjtl6luzd9t3pr62xr7eemp6awnejusgf6gw45q75vcfqqqqqqqsespexwyy4tcadvgg89l9aljus6709kx235hhqrk6n8dey98uyuftzdqrsj8mjdjf2rex0ycj80tdh8lrtnchzs0t2w5rzs3jsrfqenc20jesyqlsxuqy57zq257vh8dcc0nvhpetfafdp7hgd98p8kgygnharaqgkqqr89tcmrw5d6cx887yyej24t3d0ey5qjkkquqann2h55p8lf6xctnp40h4nuslpgvvv7y0ke68dup3tpvcqtqr2gv5wnvr8grra89rgurlnng69vzxy8uyy86gs3cfhad2xmzgfzkqqy8j8e9fz6qc54cmylqnvf8rhzlg"; + + let res = decode_bolt12_offer(offer).unwrap(); + assert_eq!( + res, + Invoice::Offer( + lightning::offers::offer::Offer::from_str(offer) + .unwrap() + .into() + ) + ); + } + + #[test] + fn test_decode_bolt12_invoice() { + let res = decode_bolt12_invoice(BOLT12_INVOICE).unwrap(); + + let data = + Vec::::from_base32(&bech32::decode_without_checksum(BOLT12_INVOICE).unwrap().1) + .unwrap(); + assert_eq!( + res, + Invoice::Bolt12( + lightning::offers::invoice::Bolt12Invoice::try_from(data) + .unwrap() + .into() + ) + ); + } + + #[test] + fn test_decode_bolt11_invoice() { + let res = decode_bolt11(BOLT11_INVOICE).unwrap(); + assert_eq!( + res, + Invoice::Bolt11( + lightning_invoice::Bolt11Invoice::from_str(BOLT11_INVOICE) + .unwrap() + .into() + ) + ); + } +} diff --git a/boltzr/src/lightning/mod.rs b/boltzr/src/lightning/mod.rs new file mode 100644 index 00000000..8f9683bb --- /dev/null +++ b/boltzr/src/lightning/mod.rs @@ -0,0 +1,19 @@ +use std::fmt::{Display, Formatter}; + +pub mod cln; +pub mod invoice; + +#[derive(Debug, PartialEq)] +pub enum Error { + NoBolt12Support(String), +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + Error::NoBolt12Support(reason) => write!(f, "no BOLT12 support: {}", reason), + } + } +} + +impl std::error::Error for Error {} diff --git a/boltzr/src/main.rs b/boltzr/src/main.rs index b7541bed..a111b14c 100644 --- a/boltzr/src/main.rs +++ b/boltzr/src/main.rs @@ -1,16 +1,18 @@ -use std::sync::Arc; - use clap::Parser; use serde::Serialize; +use std::sync::Arc; use tracing::{debug, error, info, trace, warn}; use crate::config::parse_config; +use crate::currencies::connect_nodes; mod api; mod config; +mod currencies; mod db; mod evm; mod grpc; +mod lightning; mod notifications; mod tracing_setup; mod utils; @@ -133,12 +135,21 @@ async fn main() { )), ); + let currencies = match connect_nodes(config.currencies).await { + Ok(currencies) => currencies, + Err(err) => { + error!("Could not connect to nodes: {}", err); + std::process::exit(1); + } + }; + let (swap_status_update_tx, _swap_status_update_rx) = tokio::sync::broadcast::channel::>(128); let mut grpc_server = grpc::server::Server::new( cancellation_token.clone(), config.sidecar.grpc, + currencies, swap_status_update_tx.clone(), Box::new(db::helpers::web_hook::WebHookHelperDatabase::new(db_pool)), web_hook_caller, diff --git a/docker/build.py b/docker/build.py index 601ed52f..2699d746 100755 --- a/docker/build.py +++ b/docker/build.py @@ -102,7 +102,7 @@ class Image: ], ), "regtest": Image( - tag="4.5.5", + tag="4.5.6", arguments=[ UBUNTU_VERSION, BITCOIN_BUILD_ARG, diff --git a/docker/regtest/data/cln/config b/docker/regtest/data/cln/config index 2cdca3cb..c28778b9 100644 --- a/docker/regtest/data/cln/config +++ b/docker/regtest/data/cln/config @@ -16,3 +16,5 @@ developer dev-fast-gossip dev-fast-reconnect dev-bitcoind-poll=5 + +experimental-offers diff --git a/docker/regtest/startRegtest.sh b/docker/regtest/startRegtest.sh index 46c8c052..dbb1c0fa 100755 --- a/docker/regtest/startRegtest.sh +++ b/docker/regtest/startRegtest.sh @@ -29,7 +29,7 @@ docker run \ -p 9735:9735 \ -p 9293:9293 \ -p 9292:9292 \ - boltz/regtest:4.5.5 + boltz/regtest:4.5.6 docker exec regtest bash -c "cp /root/.lightning/regtest/*.pem /root/.lightning/regtest/certs" docker exec regtest chmod -R 777 /root/.lightning/regtest/certs diff --git a/lib/Boltz.ts b/lib/Boltz.ts index a4ea7bfb..1d45942f 100644 --- a/lib/Boltz.ts +++ b/lib/Boltz.ts @@ -191,6 +191,7 @@ class Boltz { if (notificationClient !== undefined) { this.notifications = new NotificationProvider( this.logger, + this.sidecar, this.service, this.walletManager, this.backup, diff --git a/lib/Utils.ts b/lib/Utils.ts index 571fc12d..a9fe9daf 100644 --- a/lib/Utils.ts +++ b/lib/Utils.ts @@ -1,4 +1,3 @@ -import bolt11, { RoutingInfo } from '@boltz/bolt11'; import { Transaction, crypto } from 'bitcoinjs-lib'; import { OutputType, Scripts } from 'boltz-core'; import { randomBytes } from 'crypto'; @@ -147,73 +146,6 @@ export const minutesToMilliseconds = (minutes: number): number => { return minutes * 60 * 1000; }; -const coalesceInvoiceAmount = ( - decoded: bolt11.PaymentRequestObject, -): number => { - const decodedMsat = decoded.millisatoshis - ? Math.ceil(Number(decoded.millisatoshis) / 1000) - : undefined; - - return decoded.satoshis || decodedMsat || 0; -}; - -export const decodeInvoiceAmount = (invoice: string): number => - coalesceInvoiceAmount(bolt11.decode(invoice)); - -export const decodeInvoice = ( - invoice: string, -): bolt11.PaymentRequestObject & { - satoshis: number; - timeExpireDate: number; - paymentHash: string | undefined; - description: string | undefined; - descriptionHash: string | undefined; - minFinalCltvExpiry: number | undefined; - routingInfo: bolt11.RoutingInfo | undefined; -} => { - const decoded = bolt11.decode(invoice); - - let paymentHash: string | undefined; - let routingInfo: bolt11.RoutingInfo | undefined; - let minFinalCltvExpiry: number | undefined; - let description: string | undefined; - let descriptionHash: string | undefined; - - for (const tag of decoded.tags) { - switch (tag.tagName) { - case 'payment_hash': - paymentHash = tag.data as string; - break; - case 'routing_info': - routingInfo = tag.data as RoutingInfo; - break; - - case 'min_final_cltv_expiry': - minFinalCltvExpiry = tag.data as number; - break; - - case 'description': - description = tag.data as string; - break; - - case 'purpose_commit_hash': - descriptionHash = tag.data as string; - break; - } - } - - return { - ...decoded, - routingInfo, - paymentHash, - description, - descriptionHash, - minFinalCltvExpiry, - satoshis: coalesceInvoiceAmount(decoded), - timeExpireDate: decoded.timeExpireDate || (decoded.timestamp || 0) + 3600, - }; -}; - /** * Splits a derivation path into multiple parts */ diff --git a/lib/api/v2/ApiV2.ts b/lib/api/v2/ApiV2.ts index 5986578a..76d1c6a8 100644 --- a/lib/api/v2/ApiV2.ts +++ b/lib/api/v2/ApiV2.ts @@ -6,6 +6,7 @@ import SwapInfos from '../SwapInfos'; import { apiPrefix } from './Consts'; import ChainRouter from './routers/ChainRouter'; import InfoRouter from './routers/InfoRouter'; +import LightningRouter from './routers/LightningRouter'; import NodesRouter from './routers/NodesRouter'; import ReferralRouter from './routers/ReferralRouter'; import RouterBase from './routers/RouterBase'; @@ -24,6 +25,7 @@ class ApiV2 { new InfoRouter(this.logger, service), new SwapRouter(this.logger, service, swapInfos, countryCodes), new ChainRouter(this.logger, service), + new LightningRouter(this.logger, service.sidecar), new NodesRouter(this.logger, service), new ReferralRouter(this.logger), ]; diff --git a/lib/api/v2/routers/LightningRouter.ts b/lib/api/v2/routers/LightningRouter.ts new file mode 100644 index 00000000..2de00d27 --- /dev/null +++ b/lib/api/v2/routers/LightningRouter.ts @@ -0,0 +1,99 @@ +import { Request, Response, Router } from 'express'; +import Logger from '../../../Logger'; +import Sidecar from '../../../sidecar/Sidecar'; +import { createdResponse, validateRequest } from '../../Utils'; +import RouterBase from './RouterBase'; + +class LightningRouter extends RouterBase { + constructor( + logger: Logger, + private readonly sidecar: Sidecar, + ) { + super(logger, 'lightning'); + } + + public getRouter = () => { + const router = Router(); + + /** + * @openapi + * tags: + * name: Lightning + * description: Lightning related endpoints + */ + + /** + * @openapi + * /lightning/{currency}/bolt12/fetch: + * post: + * tags: [Lightning] + * description: Fetches an invoice for a BOLT12 offer + * parameters: + * - in: path + * name: currency + * required: true + * schema: + * type: string + * description: Currency of the lightning network to use + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * offer: + * type: string + * required: true + * description: A BOLT12 offer + * amount: + * type: number + * required: true + * description: Amount of the invoice that should be fetched in satoshis + * responses: + * '201': + * description: BOLT12 invoice fetched from the offer + * content: + * application/json: + * schema: + * type: object + * properties: + * invoice: + * type: string + * required: true + * description: A BOLT12 invoice + * '400': + * description: Error that caused the broadcast of the transaction to fail + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/ErrorResponse' + */ + router.post('/:currency/bolt12/fetch', this.handleError(this.fetchBolt12)); + + return router; + }; + + private fetchBolt12 = async (req: Request, res: Response) => { + const currency = this.getCurrencyFromPath(req); + const { offer, amount } = validateRequest(req.body, [ + { + name: 'offer', + type: 'string', + }, + { + name: 'amount', + type: 'number', + }, + ]); + + const invoice = await this.sidecar.fetchOffer(currency, offer, amount); + createdResponse(res, { invoice }); + }; + + private getCurrencyFromPath = (req: Request): string => + validateRequest(req.params, [{ name: 'currency', type: 'string' }]) + .currency; +} + +export default LightningRouter; diff --git a/lib/db/Migration.ts b/lib/db/Migration.ts index 5a8ab66f..3a25d71b 100644 --- a/lib/db/Migration.ts +++ b/lib/db/Migration.ts @@ -1,10 +1,10 @@ +import bolt11, { RoutingInfo } from '@boltz/bolt11'; import { Transaction } from 'bitcoinjs-lib'; import { detectSwap } from 'boltz-core'; import { DataTypes, Op, Sequelize } from 'sequelize'; import Logger from '../Logger'; import { createApiCredential, - decodeInvoice, formatError, getChainCurrency, getHexBuffer, @@ -22,6 +22,70 @@ import ReverseSwap, { NodeType } from './models/ReverseSwap'; import Swap from './models/Swap'; import DatabaseVersionRepository from './repositories/DatabaseVersionRepository'; +const coalesceInvoiceAmount = ( + decoded: bolt11.PaymentRequestObject, +): number => { + const decodedMsat = decoded.millisatoshis + ? Math.ceil(Number(decoded.millisatoshis) / 1000) + : undefined; + + return decoded.satoshis || decodedMsat || 0; +}; + +const decodeInvoice = ( + invoice: string, +): bolt11.PaymentRequestObject & { + satoshis: number; + timeExpireDate: number; + paymentHash: string | undefined; + description: string | undefined; + descriptionHash: string | undefined; + minFinalCltvExpiry: number | undefined; + routingInfo: bolt11.RoutingInfo | undefined; +} => { + const decoded = bolt11.decode(invoice); + + let paymentHash: string | undefined; + let routingInfo: bolt11.RoutingInfo | undefined; + let minFinalCltvExpiry: number | undefined; + let description: string | undefined; + let descriptionHash: string | undefined; + + for (const tag of decoded.tags) { + switch (tag.tagName) { + case 'payment_hash': + paymentHash = tag.data as string; + break; + case 'routing_info': + routingInfo = tag.data as RoutingInfo; + break; + + case 'min_final_cltv_expiry': + minFinalCltvExpiry = tag.data as number; + break; + + case 'description': + description = tag.data as string; + break; + + case 'purpose_commit_hash': + descriptionHash = tag.data as string; + break; + } + } + + return { + ...decoded, + routingInfo, + paymentHash, + description, + descriptionHash, + minFinalCltvExpiry, + satoshis: coalesceInvoiceAmount(decoded), + timeExpireDate: decoded.timeExpireDate || (decoded.timestamp || 0) + 3600, + }; +}; + // TODO: integration tests for actual migrations class Migration { private static latestSchemaVersion = 11; diff --git a/lib/lightning/ChannelUtils.ts b/lib/lightning/ChannelUtils.ts index 4c3afff9..7348f732 100644 --- a/lib/lightning/ChannelUtils.ts +++ b/lib/lightning/ChannelUtils.ts @@ -1,4 +1,4 @@ -const msatFactor = 1000; +const msatFactor = 1_000; export const scidLndToCln = (s: string): string => { const big = BigInt(s); diff --git a/lib/lightning/LightningClient.ts b/lib/lightning/LightningClient.ts index 5c6db0a0..e0d1eb18 100644 --- a/lib/lightning/LightningClient.ts +++ b/lib/lightning/LightningClient.ts @@ -1,9 +1,9 @@ import BaseClient from '../BaseClient'; -import { decodeInvoiceAmount } from '../Utils'; import { ClientStatus } from '../consts/Enums'; import { NodeType } from '../db/models/ReverseSwap'; import * as lndrpc from '../proto/lnd/rpc_pb'; import { BalancerFetcher } from '../wallet/providers/WalletProviderInterface'; +import { msatToSat } from './ChannelUtils'; enum InvoiceState { Open, @@ -68,6 +68,7 @@ enum InvoiceFeature { type DecodedInvoice = { value: number; cltvExpiry: number; + paymentHash: Buffer; destination: string; routingHints: HopHint[][]; features: Set; @@ -154,13 +155,10 @@ interface RoutingHintsProvider { } const calculatePaymentFee = ( - invoice: string, + amountMsat: number, maxRatio: number, minFee: number, -): number => { - const invoiceAmt = decodeInvoiceAmount(invoice); - return Math.ceil(Math.max(invoiceAmt * maxRatio, minFee)); -}; +): number => Math.ceil(Math.max(msatToSat(amountMsat) * maxRatio, minFee)); export { Htlc, diff --git a/lib/lightning/LndClient.ts b/lib/lightning/LndClient.ts index 7cf98fb4..c6237182 100644 --- a/lib/lightning/LndClient.ts +++ b/lib/lightning/LndClient.ts @@ -8,7 +8,6 @@ import fs from 'fs'; import BaseClient from '../BaseClient'; import Logger from '../Logger'; import { - decodeInvoiceAmount, formatError, getHexBuffer, getHexString, @@ -426,11 +425,13 @@ class LndClient extends BaseClient implements LightningClient { * @param cltvDelta CLTV delta limit for the payment * @param outgoingChannelId channel through which the invoice should be paid */ - public sendPayment = ( + public sendPayment = async ( invoice: string, cltvDelta?: number, outgoingChannelId?: string, ): Promise => { + const decoded = await this.decodeInvoice(invoice); + return new Promise((resolve, reject) => { const request = new routerrpc.SendPaymentRequest(); @@ -439,7 +440,7 @@ class LndClient extends BaseClient implements LightningClient { request.setTimePref(LndClient.paymentTimePreference); request.setFeeLimitSat( calculatePaymentFee( - invoice, + decoded.value, this.maxPaymentFeeRatio, LndClient.paymentMinFee, ), @@ -596,9 +597,10 @@ class LndClient extends BaseClient implements LightningClient { return { features, + value: res.numSatoshis, cltvExpiry: res.cltvExpiry, destination: res.destination, - value: decodeInvoiceAmount(invoice), + paymentHash: getHexBuffer(res.paymentHash), routingHints: LndClient.routingHintsFromGrpc(res.routeHintsList), }; }; diff --git a/lib/lightning/PendingPaymentTracker.ts b/lib/lightning/PendingPaymentTracker.ts index d04f45ce..c88e9005 100644 --- a/lib/lightning/PendingPaymentTracker.ts +++ b/lib/lightning/PendingPaymentTracker.ts @@ -1,12 +1,13 @@ import Logger from '../Logger'; import { racePromise } from '../PromiseUtils'; -import { decodeInvoice, getHexBuffer } from '../Utils'; +import { getHexBuffer, getHexString } from '../Utils'; import DefaultMap from '../consts/DefaultMap'; import LightningPayment, { LightningPaymentStatus, } from '../db/models/LightningPayment'; import { NodeType, nodeTypeToPrettyString } from '../db/models/ReverseSwap'; import LightningPaymentRepository from '../db/repositories/LightningPaymentRepository'; +import Sidecar from '../sidecar/Sidecar'; import { Currency } from '../wallet/WalletManager'; import { LightningClient, PaymentResponse } from './LightningClient'; import LndClient from './LndClient'; @@ -33,7 +34,10 @@ class PendingPaymentTracker { }), ); - constructor(private readonly logger: Logger) { + constructor( + private readonly logger: Logger, + private readonly sidecar: Sidecar, + ) { this.lightningTrackers = { [NodeType.LND]: new LndPendingPaymentTracker(this.logger), [NodeType.CLN]: new ClnPendingPaymentTracker(this.logger), @@ -79,10 +83,12 @@ class PendingPaymentTracker { cltvLimit?: number, outgoingChannelId?: string, ): Promise => { - const preimageHash = decodeInvoice(invoice).paymentHash!; + const paymentHash = getHexString( + (await this.sidecar.decodeInvoiceOrOffer(invoice)).paymentHash!, + ); const payments = - await LightningPaymentRepository.findByPreimageHash(preimageHash); + await LightningPaymentRepository.findByPreimageHash(paymentHash); for (const status of [ LightningPaymentStatus.Pending, @@ -97,7 +103,7 @@ class PendingPaymentTracker { switch (status) { case LightningPaymentStatus.Pending: this.logger.verbose( - `Invoice payment of ${swapId} (${preimageHash}) still pending with node ${nodeTypeToPrettyString(relevant.node)}`, + `Invoice payment of ${swapId} (${paymentHash}) still pending with node ${nodeTypeToPrettyString(relevant.node)}`, ); return undefined; @@ -106,7 +112,7 @@ class PendingPaymentTracker { swapId, relevant, lightningClient.symbol, - preimageHash, + paymentHash, invoice, ); @@ -122,7 +128,7 @@ class PendingPaymentTracker { return this.sendPaymentWithNode( swapId, lightningClient, - preimageHash, + paymentHash, invoice, cltvLimit, outgoingChannelId, diff --git a/lib/lightning/cln/ClnClient.ts b/lib/lightning/cln/ClnClient.ts index db9879aa..596b7784 100644 --- a/lib/lightning/cln/ClnClient.ts +++ b/lib/lightning/cln/ClnClient.ts @@ -3,20 +3,18 @@ import { ClientReadableStream, Metadata, } from '@grpc/grpc-js'; -import bolt11 from 'bolt11'; import BaseClient from '../../BaseClient'; import Logger from '../../Logger'; -import { - decodeInvoice, - formatError, - getHexBuffer, - getHexString, -} from '../../Utils'; +import { formatError, getHexBuffer, getHexString } from '../../Utils'; import { ClientStatus } from '../../consts/Enums'; import { NodeType } from '../../db/models/ReverseSwap'; import { NodeClient } from '../../proto/cln/node_grpc_pb'; import * as noderpc from '../../proto/cln/node_pb'; -import { ListfundsOutputs, ListpaysPays } from '../../proto/cln/node_pb'; +import { + DecodeResponse, + ListfundsOutputs, + ListpaysPays, +} from '../../proto/cln/node_pb'; import * as primitivesrpc from '../../proto/cln/primitives_pb'; import { HoldClient } from '../../proto/hold/hold_grpc_pb'; import * as holdrpc from '../../proto/hold/hold_pb'; @@ -47,6 +45,7 @@ import { getRoute } from './Router'; import { ClnConfig, createSsl } from './Types'; import ListpaysPaysStatus = ListpaysPays.ListpaysPaysStatus; +import DecodeType = DecodeResponse.DecodeType; class ClnClient extends BaseClient @@ -454,60 +453,42 @@ class ClnClient >('settle', req); }; - public decodeInvoice = async (invoice: string): Promise => { + public decodeInvoice = async ( + invoice: string, + ): Promise => { // Just to make sure CLN can parse the invoice const req = new noderpc.DecodeRequest(); req.setString(invoice); - const clnRes = await this.unaryNodeCall< + const dec = await this.unaryNodeCall< noderpc.DecodeRequest, noderpc.DecodeResponse.AsObject >('decode', req); + dec.itemType; const features = new Set(); - - const dec = bolt11.decode(invoice); - const featureBits = dec.tags.find((e) => e.tagName === 'feature_bits'); - if (featureBits && featureBits.data) { - const mpp = (featureBits.data as any)['basic_mpp']; - if (mpp.supported || mpp.required) { - features.add(InvoiceFeature.MPP); - } - } - - const routingHints: HopHint[][] = []; - - // TODO: routing hints with multiple hops? - const routingHintsTag = dec.tags.find((e) => e.tagName === 'routing_info'); - if (routingHintsTag && routingHintsTag.data) { - (routingHintsTag.data as any).forEach( - (route: { - pubkey: string; - fee_base_msat: number; - short_channel_id: string; - cltv_expiry_delta: number; - fee_proportional_millionths: number; - }) => { - const chanId = BigInt(`0x${route.short_channel_id}`).toString(); - routingHints.push([ - { - chanId, - nodeId: route.pubkey, - feeBaseMsat: route.fee_base_msat, - cltvExpiryDelta: route.cltv_expiry_delta, - feeProportionalMillionths: route.fee_proportional_millionths, - }, - ]); - }, - ); - } + // We can assume that everyone supports MPP now + features.add(InvoiceFeature.MPP); + + const routingHints: HopHint[][] = (dec.routes?.hintsList || []).map( + (route) => + route.hopsList.map((hint) => ({ + cltvExpiryDelta: hint.cltvExpiryDelta, + feeBaseMsat: hint.feeBaseMsat?.msat || 0, + chanId: scidClnToLnd(hint.shortChannelId), + nodeId: getHexString(Buffer.from(hint.pubkey)), + feeProportionalMillionths: hint.feeProportionalMillionths, + })), + ); return { features, routingHints, - value: dec.satoshis || 0, - destination: dec.payeeNodeKey!, - cltvExpiry: clnRes.minFinalCltvExpiry || 0, + type: dec.itemType, + cltvExpiry: dec.minFinalCltvExpiry || 0, + paymentHash: Buffer.from(dec.paymentHash), + value: msatToSat(dec.amountMsat?.msat || 0), + destination: getHexString(Buffer.from(dec.payee)), }; }; @@ -566,15 +547,18 @@ class ClnClient return payStatus; } + const decoded = await this.decodeInvoice(invoice); const maxFee = satToMsat( calculatePaymentFee( - invoice, + decoded.value, this.maxPaymentFeeRatio, ClnClient.paymentMinFee, ), ); - const useMpay = this.useMpay(); + // TODO: mpay support for bolt12 + const useMpay = + this.useMpay() && decoded.type !== DecodeType.BOLT12_INVOICE; this.logger.verbose( `Using ${useMpay ? 'mpay' : 'pay'} for ${ClnClient.serviceName} ${this.symbol} invoice payment`, ); @@ -752,7 +736,7 @@ class ClnClient noderpc.ListpeerchannelsResponse >('listPeerChannels', new noderpc.ListpeerchannelsRequest(), false); - const paymentHash = getHexBuffer(decodeInvoice(invoice).paymentHash!); + const paymentHash = (await this.decodeInvoice(invoice)).paymentHash; const hasPendingHtlc = channels .getChannelsList() diff --git a/lib/notifications/NotificationProvider.ts b/lib/notifications/NotificationProvider.ts index 22ba1722..28443c6d 100644 --- a/lib/notifications/NotificationProvider.ts +++ b/lib/notifications/NotificationProvider.ts @@ -2,7 +2,6 @@ import { BaseCurrencyConfig, NotificationConfig, TokenConfig } from '../Config'; import { satoshisToSatcomma } from '../DenominationConverter'; import Logger from '../Logger'; import { - decodeInvoice, formatError, getChainCurrency, getLightningCurrency, @@ -22,10 +21,12 @@ import ChainSwapData from '../db/models/ChainSwapData'; import ReverseSwap from '../db/models/ReverseSwap'; import Swap from '../db/models/Swap'; import { ChainSwapInfo } from '../db/repositories/ChainSwapRepository'; +import { msatToSat } from '../lightning/ChannelUtils'; import LndClient from '../lightning/LndClient'; import ClnClient from '../lightning/cln/ClnClient'; import { ChainInfo, LightningInfo } from '../proto/boltzrpc_pb'; import Service from '../service/Service'; +import Sidecar from '../sidecar/Sidecar'; import WalletManager from '../wallet/WalletManager'; import BalanceChecker from './BalanceChecker'; import CommandHandler from './CommandHandler'; @@ -45,6 +46,7 @@ class NotificationProvider { constructor( private readonly logger: Logger, + private readonly sidecar: Sidecar, private readonly service: Service, private readonly walletManager: WalletManager, private readonly backup: BackupScheduler, @@ -191,7 +193,7 @@ class NotificationProvider { return `${prefixLightning(type === SwapType.ReverseSubmarine, receiving)} -> ${prefixLightning(type === SwapType.Submarine, sending)}`; }; - const getBasicSwapInfo = ( + const getBasicSwapInfo = async ( type: SwapType, swap: ChainSwapInfo | Swap | ReverseSwap, base: string, @@ -219,7 +221,10 @@ class NotificationProvider { return message; } - const lightningAmount = decodeInvoice(submarineSwap.invoice).satoshis; + const lightningAmount = msatToSat( + (await this.sidecar.decodeInvoiceOrOffer(submarineSwap.invoice)) + .amountMsat, + ); return ( message + @@ -256,7 +261,7 @@ class NotificationProvider { `**Swap ${getSwapTitle(swap.type, sending, receiving)}${ hasChannelCreation ? ` ${Emojis.ConstructionSite}` : '' }**\n` + - `${getBasicSwapInfo(swap.type, swap, base, quote)}\n` + + `${await getBasicSwapInfo(swap.type, swap, base, quote)}\n` + `Fees earned: ${satoshisToSatcomma(swap.fee!)} ${sending}\n` + `Miner fees: ${this.getMinerFees(swap.type, swap)}`; @@ -298,7 +303,7 @@ class NotificationProvider { sending, receiving, )} failed: ${reason}**\n` + - `${getBasicSwapInfo(swap.type, swap, base, quote)}`; + `${await getBasicSwapInfo(swap.type, swap, base, quote)}`; if (swap.type === SwapType.Submarine) { const submarineSwap = swap as Swap; diff --git a/lib/proto/sidecar/boltzr_grpc_pb.d.ts b/lib/proto/sidecar/boltzr_grpc_pb.d.ts index d19119e9..dbf87859 100644 --- a/lib/proto/sidecar/boltzr_grpc_pb.d.ts +++ b/lib/proto/sidecar/boltzr_grpc_pb.d.ts @@ -16,6 +16,8 @@ interface IBoltzRService extends grpc.ServiceDefinition { @@ -90,6 +92,24 @@ interface IBoltzRService_ISignEvmRefund extends grpc.MethodDefinition; responseDeserialize: grpc.deserialize; } +interface IBoltzRService_IDecodeInvoiceOrOffer extends grpc.MethodDefinition { + path: "/boltzr.BoltzR/DecodeInvoiceOrOffer"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} +interface IBoltzRService_IFetchInvoice extends grpc.MethodDefinition { + path: "/boltzr.BoltzR/FetchInvoice"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} export const BoltzRService: IBoltzRService; @@ -102,6 +122,8 @@ export interface IBoltzRServer extends grpc.UntypedServiceImplementation { createWebHook: grpc.handleUnaryCall; sendWebHook: grpc.handleUnaryCall; signEvmRefund: grpc.handleUnaryCall; + decodeInvoiceOrOffer: grpc.handleUnaryCall; + fetchInvoice: grpc.handleUnaryCall; } export interface IBoltzRClient { @@ -128,6 +150,12 @@ export interface IBoltzRClient { signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; + decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; + fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; + fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; } export class BoltzRClient extends grpc.Client implements IBoltzRClient { @@ -154,4 +182,10 @@ export class BoltzRClient extends grpc.Client implements IBoltzRClient { public signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; public signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; public signEvmRefund(request: boltzr_pb.SignEvmRefundRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.SignEvmRefundResponse) => void): grpc.ClientUnaryCall; + public decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + public decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + public decodeInvoiceOrOffer(request: boltzr_pb.DecodeInvoiceOrOfferRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.DecodeInvoiceOrOfferResponse) => void): grpc.ClientUnaryCall; + public fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; + public fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; + public fetchInvoice(request: boltzr_pb.FetchInvoiceRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzr_pb.FetchInvoiceResponse) => void): grpc.ClientUnaryCall; } diff --git a/lib/proto/sidecar/boltzr_grpc_pb.js b/lib/proto/sidecar/boltzr_grpc_pb.js index 6cfdd692..f0c0a462 100644 --- a/lib/proto/sidecar/boltzr_grpc_pb.js +++ b/lib/proto/sidecar/boltzr_grpc_pb.js @@ -26,6 +26,50 @@ function deserialize_boltzr_CreateWebHookResponse(buffer_arg) { return boltzr_pb.CreateWebHookResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_boltzr_DecodeInvoiceOrOfferRequest(arg) { + if (!(arg instanceof boltzr_pb.DecodeInvoiceOrOfferRequest)) { + throw new Error('Expected argument of type boltzr.DecodeInvoiceOrOfferRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzr_DecodeInvoiceOrOfferRequest(buffer_arg) { + return boltzr_pb.DecodeInvoiceOrOfferRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_boltzr_DecodeInvoiceOrOfferResponse(arg) { + if (!(arg instanceof boltzr_pb.DecodeInvoiceOrOfferResponse)) { + throw new Error('Expected argument of type boltzr.DecodeInvoiceOrOfferResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzr_DecodeInvoiceOrOfferResponse(buffer_arg) { + return boltzr_pb.DecodeInvoiceOrOfferResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_boltzr_FetchInvoiceRequest(arg) { + if (!(arg instanceof boltzr_pb.FetchInvoiceRequest)) { + throw new Error('Expected argument of type boltzr.FetchInvoiceRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzr_FetchInvoiceRequest(buffer_arg) { + return boltzr_pb.FetchInvoiceRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_boltzr_FetchInvoiceResponse(arg) { + if (!(arg instanceof boltzr_pb.FetchInvoiceResponse)) { + throw new Error('Expected argument of type boltzr.FetchInvoiceResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzr_FetchInvoiceResponse(buffer_arg) { + return boltzr_pb.FetchInvoiceResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_boltzr_GetInfoRequest(arg) { if (!(arg instanceof boltzr_pb.GetInfoRequest)) { throw new Error('Expected argument of type boltzr.GetInfoRequest'); @@ -270,6 +314,28 @@ var BoltzRService = exports.BoltzRService = { responseSerialize: serialize_boltzr_SignEvmRefundResponse, responseDeserialize: deserialize_boltzr_SignEvmRefundResponse, }, + decodeInvoiceOrOffer: { + path: '/boltzr.BoltzR/DecodeInvoiceOrOffer', + requestStream: false, + responseStream: false, + requestType: boltzr_pb.DecodeInvoiceOrOfferRequest, + responseType: boltzr_pb.DecodeInvoiceOrOfferResponse, + requestSerialize: serialize_boltzr_DecodeInvoiceOrOfferRequest, + requestDeserialize: deserialize_boltzr_DecodeInvoiceOrOfferRequest, + responseSerialize: serialize_boltzr_DecodeInvoiceOrOfferResponse, + responseDeserialize: deserialize_boltzr_DecodeInvoiceOrOfferResponse, + }, + fetchInvoice: { + path: '/boltzr.BoltzR/FetchInvoice', + requestStream: false, + responseStream: false, + requestType: boltzr_pb.FetchInvoiceRequest, + responseType: boltzr_pb.FetchInvoiceResponse, + requestSerialize: serialize_boltzr_FetchInvoiceRequest, + requestDeserialize: deserialize_boltzr_FetchInvoiceRequest, + responseSerialize: serialize_boltzr_FetchInvoiceResponse, + responseDeserialize: deserialize_boltzr_FetchInvoiceResponse, + }, }; exports.BoltzRClient = grpc.makeGenericClientConstructor(BoltzRService); diff --git a/lib/proto/sidecar/boltzr_pb.d.ts b/lib/proto/sidecar/boltzr_pb.d.ts index 991183a4..9835c9e8 100644 --- a/lib/proto/sidecar/boltzr_pb.d.ts +++ b/lib/proto/sidecar/boltzr_pb.d.ts @@ -480,3 +480,401 @@ export namespace SignEvmRefundResponse { signature: Uint8Array | string, } } + +export class DecodeInvoiceOrOfferRequest extends jspb.Message { + getInvoiceOrOffer(): string; + setInvoiceOrOffer(value: string): DecodeInvoiceOrOfferRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DecodeInvoiceOrOfferRequest.AsObject; + static toObject(includeInstance: boolean, msg: DecodeInvoiceOrOfferRequest): DecodeInvoiceOrOfferRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DecodeInvoiceOrOfferRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DecodeInvoiceOrOfferRequest; + static deserializeBinaryFromReader(message: DecodeInvoiceOrOfferRequest, reader: jspb.BinaryReader): DecodeInvoiceOrOfferRequest; +} + +export namespace DecodeInvoiceOrOfferRequest { + export type AsObject = { + invoiceOrOffer: string, + } +} + +export class Bolt11Invoice extends jspb.Message { + getPayeePubkey(): Uint8Array | string; + getPayeePubkey_asU8(): Uint8Array; + getPayeePubkey_asB64(): string; + setPayeePubkey(value: Uint8Array | string): Bolt11Invoice; + + hasMsat(): boolean; + clearMsat(): void; + getMsat(): number | undefined; + setMsat(value: number): Bolt11Invoice; + getPaymentHash(): Uint8Array | string; + getPaymentHash_asU8(): Uint8Array; + getPaymentHash_asB64(): string; + setPaymentHash(value: Uint8Array | string): Bolt11Invoice; + + hasMemo(): boolean; + clearMemo(): void; + getMemo(): string; + setMemo(value: string): Bolt11Invoice; + + hasDescriptionHash(): boolean; + clearDescriptionHash(): void; + getDescriptionHash(): Uint8Array | string; + getDescriptionHash_asU8(): Uint8Array; + getDescriptionHash_asB64(): string; + setDescriptionHash(value: Uint8Array | string): Bolt11Invoice; + getCreatedAt(): number; + setCreatedAt(value: number): Bolt11Invoice; + getExpiry(): number; + setExpiry(value: number): Bolt11Invoice; + getMinFinalCltvExpiry(): number; + setMinFinalCltvExpiry(value: number): Bolt11Invoice; + clearHintsList(): void; + getHintsList(): Array; + setHintsList(value: Array): Bolt11Invoice; + addHints(value?: Bolt11Invoice.RoutingHints, index?: number): Bolt11Invoice.RoutingHints; + clearFeaturesList(): void; + getFeaturesList(): Array; + setFeaturesList(value: Array): Bolt11Invoice; + addFeatures(value: Feature, index?: number): Feature; + + getDescriptionCase(): Bolt11Invoice.DescriptionCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Bolt11Invoice.AsObject; + static toObject(includeInstance: boolean, msg: Bolt11Invoice): Bolt11Invoice.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Bolt11Invoice, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Bolt11Invoice; + static deserializeBinaryFromReader(message: Bolt11Invoice, reader: jspb.BinaryReader): Bolt11Invoice; +} + +export namespace Bolt11Invoice { + export type AsObject = { + payeePubkey: Uint8Array | string, + msat?: number, + paymentHash: Uint8Array | string, + memo: string, + descriptionHash: Uint8Array | string, + createdAt: number, + expiry: number, + minFinalCltvExpiry: number, + hintsList: Array, + featuresList: Array, + } + + + export class RoutingHints extends jspb.Message { + clearHopsList(): void; + getHopsList(): Array; + setHopsList(value: Array): RoutingHints; + addHops(value?: Bolt11Invoice.RoutingHints.RoutingHint, index?: number): Bolt11Invoice.RoutingHints.RoutingHint; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RoutingHints.AsObject; + static toObject(includeInstance: boolean, msg: RoutingHints): RoutingHints.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RoutingHints, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RoutingHints; + static deserializeBinaryFromReader(message: RoutingHints, reader: jspb.BinaryReader): RoutingHints; + } + + export namespace RoutingHints { + export type AsObject = { + hopsList: Array, + } + + + export class RoutingHint extends jspb.Message { + getNode(): Uint8Array | string; + getNode_asU8(): Uint8Array; + getNode_asB64(): string; + setNode(value: Uint8Array | string): RoutingHint; + getChannelId(): number; + setChannelId(value: number): RoutingHint; + getBaseFeeMsat(): number; + setBaseFeeMsat(value: number): RoutingHint; + getPpmFee(): number; + setPpmFee(value: number): RoutingHint; + getCltvExpiryDelta(): number; + setCltvExpiryDelta(value: number): RoutingHint; + + hasHtlcMinimumMsat(): boolean; + clearHtlcMinimumMsat(): void; + getHtlcMinimumMsat(): number | undefined; + setHtlcMinimumMsat(value: number): RoutingHint; + + hasHtlcMaximumMsat(): boolean; + clearHtlcMaximumMsat(): void; + getHtlcMaximumMsat(): number | undefined; + setHtlcMaximumMsat(value: number): RoutingHint; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RoutingHint.AsObject; + static toObject(includeInstance: boolean, msg: RoutingHint): RoutingHint.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RoutingHint, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RoutingHint; + static deserializeBinaryFromReader(message: RoutingHint, reader: jspb.BinaryReader): RoutingHint; + } + + export namespace RoutingHint { + export type AsObject = { + node: Uint8Array | string, + channelId: number, + baseFeeMsat: number, + ppmFee: number, + cltvExpiryDelta: number, + htlcMinimumMsat?: number, + htlcMaximumMsat?: number, + } + } + + } + + + export enum DescriptionCase { + DESCRIPTION_NOT_SET = 0, + MEMO = 4, + DESCRIPTION_HASH = 5, + } + +} + +export class Bolt12Offer extends jspb.Message { + getId(): Uint8Array | string; + getId_asU8(): Uint8Array; + getId_asB64(): string; + setId(value: Uint8Array | string): Bolt12Offer; + + hasSigningPubkey(): boolean; + clearSigningPubkey(): void; + getSigningPubkey(): Uint8Array | string; + getSigningPubkey_asU8(): Uint8Array; + getSigningPubkey_asB64(): string; + setSigningPubkey(value: Uint8Array | string): Bolt12Offer; + + hasDescription(): boolean; + clearDescription(): void; + getDescription(): string | undefined; + setDescription(value: string): Bolt12Offer; + + hasMinAmountMsat(): boolean; + clearMinAmountMsat(): void; + getMinAmountMsat(): number | undefined; + setMinAmountMsat(value: number): Bolt12Offer; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Bolt12Offer.AsObject; + static toObject(includeInstance: boolean, msg: Bolt12Offer): Bolt12Offer.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Bolt12Offer, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Bolt12Offer; + static deserializeBinaryFromReader(message: Bolt12Offer, reader: jspb.BinaryReader): Bolt12Offer; +} + +export namespace Bolt12Offer { + export type AsObject = { + id: Uint8Array | string, + signingPubkey: Uint8Array | string, + description?: string, + minAmountMsat?: number, + } +} + +export class Bolt12Invoice extends jspb.Message { + getSigningPubkey(): Uint8Array | string; + getSigningPubkey_asU8(): Uint8Array; + getSigningPubkey_asB64(): string; + setSigningPubkey(value: Uint8Array | string): Bolt12Invoice; + + hasMsat(): boolean; + clearMsat(): void; + getMsat(): number | undefined; + setMsat(value: number): Bolt12Invoice; + getPaymentHash(): Uint8Array | string; + getPaymentHash_asU8(): Uint8Array; + getPaymentHash_asB64(): string; + setPaymentHash(value: Uint8Array | string): Bolt12Invoice; + + hasDescription(): boolean; + clearDescription(): void; + getDescription(): string | undefined; + setDescription(value: string): Bolt12Invoice; + getCreatedAt(): number; + setCreatedAt(value: number): Bolt12Invoice; + getExpiry(): number; + setExpiry(value: number): Bolt12Invoice; + clearPathsList(): void; + getPathsList(): Array; + setPathsList(value: Array): Bolt12Invoice; + addPaths(value?: Bolt12Invoice.Path, index?: number): Bolt12Invoice.Path; + clearFeaturesList(): void; + getFeaturesList(): Array; + setFeaturesList(value: Array): Bolt12Invoice; + addFeatures(value: Feature, index?: number): Feature; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Bolt12Invoice.AsObject; + static toObject(includeInstance: boolean, msg: Bolt12Invoice): Bolt12Invoice.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Bolt12Invoice, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Bolt12Invoice; + static deserializeBinaryFromReader(message: Bolt12Invoice, reader: jspb.BinaryReader): Bolt12Invoice; +} + +export namespace Bolt12Invoice { + export type AsObject = { + signingPubkey: Uint8Array | string, + msat?: number, + paymentHash: Uint8Array | string, + description?: string, + createdAt: number, + expiry: number, + pathsList: Array, + featuresList: Array, + } + + + export class Path extends jspb.Message { + + hasFirstNodePubkey(): boolean; + clearFirstNodePubkey(): void; + getFirstNodePubkey(): Uint8Array | string; + getFirstNodePubkey_asU8(): Uint8Array; + getFirstNodePubkey_asB64(): string; + setFirstNodePubkey(value: Uint8Array | string): Path; + getBaseFeeMsat(): number; + setBaseFeeMsat(value: number): Path; + getPpmFee(): number; + setPpmFee(value: number): Path; + getCltvExpiryDelta(): number; + setCltvExpiryDelta(value: number): Path; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Path.AsObject; + static toObject(includeInstance: boolean, msg: Path): Path.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Path, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Path; + static deserializeBinaryFromReader(message: Path, reader: jspb.BinaryReader): Path; + } + + export namespace Path { + export type AsObject = { + firstNodePubkey: Uint8Array | string, + baseFeeMsat: number, + ppmFee: number, + cltvExpiryDelta: number, + } + } + +} + +export class DecodeInvoiceOrOfferResponse extends jspb.Message { + getIsExpired(): boolean; + setIsExpired(value: boolean): DecodeInvoiceOrOfferResponse; + + hasBolt11(): boolean; + clearBolt11(): void; + getBolt11(): Bolt11Invoice | undefined; + setBolt11(value?: Bolt11Invoice): DecodeInvoiceOrOfferResponse; + + hasOffer(): boolean; + clearOffer(): void; + getOffer(): Bolt12Offer | undefined; + setOffer(value?: Bolt12Offer): DecodeInvoiceOrOfferResponse; + + hasBolt12Invoice(): boolean; + clearBolt12Invoice(): void; + getBolt12Invoice(): Bolt12Invoice | undefined; + setBolt12Invoice(value?: Bolt12Invoice): DecodeInvoiceOrOfferResponse; + + getDecodedCase(): DecodeInvoiceOrOfferResponse.DecodedCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DecodeInvoiceOrOfferResponse.AsObject; + static toObject(includeInstance: boolean, msg: DecodeInvoiceOrOfferResponse): DecodeInvoiceOrOfferResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DecodeInvoiceOrOfferResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DecodeInvoiceOrOfferResponse; + static deserializeBinaryFromReader(message: DecodeInvoiceOrOfferResponse, reader: jspb.BinaryReader): DecodeInvoiceOrOfferResponse; +} + +export namespace DecodeInvoiceOrOfferResponse { + export type AsObject = { + isExpired: boolean, + bolt11?: Bolt11Invoice.AsObject, + offer?: Bolt12Offer.AsObject, + bolt12Invoice?: Bolt12Invoice.AsObject, + } + + export enum DecodedCase { + DECODED_NOT_SET = 0, + BOLT11 = 2, + OFFER = 3, + BOLT12_INVOICE = 4, + } + +} + +export class FetchInvoiceRequest extends jspb.Message { + getCurrency(): string; + setCurrency(value: string): FetchInvoiceRequest; + getOffer(): string; + setOffer(value: string): FetchInvoiceRequest; + getAmountMsat(): number; + setAmountMsat(value: number): FetchInvoiceRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FetchInvoiceRequest.AsObject; + static toObject(includeInstance: boolean, msg: FetchInvoiceRequest): FetchInvoiceRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: FetchInvoiceRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FetchInvoiceRequest; + static deserializeBinaryFromReader(message: FetchInvoiceRequest, reader: jspb.BinaryReader): FetchInvoiceRequest; +} + +export namespace FetchInvoiceRequest { + export type AsObject = { + currency: string, + offer: string, + amountMsat: number, + } +} + +export class FetchInvoiceResponse extends jspb.Message { + getInvoice(): string; + setInvoice(value: string): FetchInvoiceResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FetchInvoiceResponse.AsObject; + static toObject(includeInstance: boolean, msg: FetchInvoiceResponse): FetchInvoiceResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: FetchInvoiceResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FetchInvoiceResponse; + static deserializeBinaryFromReader(message: FetchInvoiceResponse, reader: jspb.BinaryReader): FetchInvoiceResponse; +} + +export namespace FetchInvoiceResponse { + export type AsObject = { + invoice: string, + } +} + +export enum Feature { + BASIC_MPP = 0, +} diff --git a/lib/proto/sidecar/boltzr_pb.js b/lib/proto/sidecar/boltzr_pb.js index a9916255..1c22518d 100644 --- a/lib/proto/sidecar/boltzr_pb.js +++ b/lib/proto/sidecar/boltzr_pb.js @@ -21,8 +21,21 @@ var global = (function() { return Function('return this')(); }.call(null)); +goog.exportSymbol('proto.boltzr.Bolt11Invoice', null, global); +goog.exportSymbol('proto.boltzr.Bolt11Invoice.DescriptionCase', null, global); +goog.exportSymbol('proto.boltzr.Bolt11Invoice.RoutingHints', null, global); +goog.exportSymbol('proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint', null, global); +goog.exportSymbol('proto.boltzr.Bolt12Invoice', null, global); +goog.exportSymbol('proto.boltzr.Bolt12Invoice.Path', null, global); +goog.exportSymbol('proto.boltzr.Bolt12Offer', null, global); goog.exportSymbol('proto.boltzr.CreateWebHookRequest', null, global); goog.exportSymbol('proto.boltzr.CreateWebHookResponse', null, global); +goog.exportSymbol('proto.boltzr.DecodeInvoiceOrOfferRequest', null, global); +goog.exportSymbol('proto.boltzr.DecodeInvoiceOrOfferResponse', null, global); +goog.exportSymbol('proto.boltzr.DecodeInvoiceOrOfferResponse.DecodedCase', null, global); +goog.exportSymbol('proto.boltzr.Feature', null, global); +goog.exportSymbol('proto.boltzr.FetchInvoiceRequest', null, global); +goog.exportSymbol('proto.boltzr.FetchInvoiceResponse', null, global); goog.exportSymbol('proto.boltzr.GetInfoRequest', null, global); goog.exportSymbol('proto.boltzr.GetInfoResponse', null, global); goog.exportSymbol('proto.boltzr.GetMessagesRequest', null, global); @@ -461,6 +474,216 @@ if (goog.DEBUG && !COMPILED) { */ proto.boltzr.SignEvmRefundResponse.displayName = 'proto.boltzr.SignEvmRefundResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.DecodeInvoiceOrOfferRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.DecodeInvoiceOrOfferRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.DecodeInvoiceOrOfferRequest.displayName = 'proto.boltzr.DecodeInvoiceOrOfferRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt11Invoice = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.boltzr.Bolt11Invoice.repeatedFields_, proto.boltzr.Bolt11Invoice.oneofGroups_); +}; +goog.inherits(proto.boltzr.Bolt11Invoice, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt11Invoice.displayName = 'proto.boltzr.Bolt11Invoice'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt11Invoice.RoutingHints = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.boltzr.Bolt11Invoice.RoutingHints.repeatedFields_, null); +}; +goog.inherits(proto.boltzr.Bolt11Invoice.RoutingHints, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt11Invoice.RoutingHints.displayName = 'proto.boltzr.Bolt11Invoice.RoutingHints'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.displayName = 'proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt12Offer = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.Bolt12Offer, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt12Offer.displayName = 'proto.boltzr.Bolt12Offer'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt12Invoice = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.boltzr.Bolt12Invoice.repeatedFields_, null); +}; +goog.inherits(proto.boltzr.Bolt12Invoice, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt12Invoice.displayName = 'proto.boltzr.Bolt12Invoice'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.Bolt12Invoice.Path = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.Bolt12Invoice.Path, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.Bolt12Invoice.Path.displayName = 'proto.boltzr.Bolt12Invoice.Path'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.DecodeInvoiceOrOfferResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_); +}; +goog.inherits(proto.boltzr.DecodeInvoiceOrOfferResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.DecodeInvoiceOrOfferResponse.displayName = 'proto.boltzr.DecodeInvoiceOrOfferResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.FetchInvoiceRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.FetchInvoiceRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.FetchInvoiceRequest.displayName = 'proto.boltzr.FetchInvoiceRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzr.FetchInvoiceResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzr.FetchInvoiceResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzr.FetchInvoiceResponse.displayName = 'proto.boltzr.FetchInvoiceResponse'; +} @@ -3728,4 +3951,2963 @@ proto.boltzr.SignEvmRefundResponse.prototype.setSignature = function(value) { }; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.DecodeInvoiceOrOfferRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.DecodeInvoiceOrOfferRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.toObject = function(includeInstance, msg) { + var f, obj = { + invoiceOrOffer: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.DecodeInvoiceOrOfferRequest} + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.DecodeInvoiceOrOfferRequest; + return proto.boltzr.DecodeInvoiceOrOfferRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.DecodeInvoiceOrOfferRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.DecodeInvoiceOrOfferRequest} + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setInvoiceOrOffer(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.DecodeInvoiceOrOfferRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.DecodeInvoiceOrOfferRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInvoiceOrOffer(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string invoice_or_offer = 1; + * @return {string} + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.prototype.getInvoiceOrOffer = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.DecodeInvoiceOrOfferRequest} returns this + */ +proto.boltzr.DecodeInvoiceOrOfferRequest.prototype.setInvoiceOrOffer = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.boltzr.Bolt11Invoice.repeatedFields_ = [9,10]; + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.boltzr.Bolt11Invoice.oneofGroups_ = [[4,5]]; + +/** + * @enum {number} + */ +proto.boltzr.Bolt11Invoice.DescriptionCase = { + DESCRIPTION_NOT_SET: 0, + MEMO: 4, + DESCRIPTION_HASH: 5 +}; + +/** + * @return {proto.boltzr.Bolt11Invoice.DescriptionCase} + */ +proto.boltzr.Bolt11Invoice.prototype.getDescriptionCase = function() { + return /** @type {proto.boltzr.Bolt11Invoice.DescriptionCase} */(jspb.Message.computeOneofCase(this, proto.boltzr.Bolt11Invoice.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt11Invoice.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt11Invoice.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt11Invoice} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.toObject = function(includeInstance, msg) { + var f, obj = { + payeePubkey: msg.getPayeePubkey_asB64(), + msat: jspb.Message.getFieldWithDefault(msg, 2, 0), + paymentHash: msg.getPaymentHash_asB64(), + memo: jspb.Message.getFieldWithDefault(msg, 4, ""), + descriptionHash: msg.getDescriptionHash_asB64(), + createdAt: jspb.Message.getFieldWithDefault(msg, 6, 0), + expiry: jspb.Message.getFieldWithDefault(msg, 7, 0), + minFinalCltvExpiry: jspb.Message.getFieldWithDefault(msg, 8, 0), + hintsList: jspb.Message.toObjectList(msg.getHintsList(), + proto.boltzr.Bolt11Invoice.RoutingHints.toObject, includeInstance), + featuresList: (f = jspb.Message.getRepeatedField(msg, 10)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt11Invoice} + */ +proto.boltzr.Bolt11Invoice.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt11Invoice; + return proto.boltzr.Bolt11Invoice.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt11Invoice} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt11Invoice} + */ +proto.boltzr.Bolt11Invoice.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setPayeePubkey(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMsat(value); + break; + case 3: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setPaymentHash(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setMemo(value); + break; + case 5: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setDescriptionHash(value); + break; + case 6: + var value = /** @type {number} */ (reader.readUint64()); + msg.setCreatedAt(value); + break; + case 7: + var value = /** @type {number} */ (reader.readUint64()); + msg.setExpiry(value); + break; + case 8: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinFinalCltvExpiry(value); + break; + case 9: + var value = new proto.boltzr.Bolt11Invoice.RoutingHints; + reader.readMessage(value,proto.boltzr.Bolt11Invoice.RoutingHints.deserializeBinaryFromReader); + msg.addHints(value); + break; + case 10: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedEnum() : [reader.readEnum()]); + for (var i = 0; i < values.length; i++) { + msg.addFeatures(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt11Invoice.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt11Invoice} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPayeePubkey_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = message.getPaymentHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBytes( + 5, + f + ); + } + f = message.getCreatedAt(); + if (f !== 0) { + writer.writeUint64( + 6, + f + ); + } + f = message.getExpiry(); + if (f !== 0) { + writer.writeUint64( + 7, + f + ); + } + f = message.getMinFinalCltvExpiry(); + if (f !== 0) { + writer.writeUint64( + 8, + f + ); + } + f = message.getHintsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 9, + f, + proto.boltzr.Bolt11Invoice.RoutingHints.serializeBinaryToWriter + ); + } + f = message.getFeaturesList(); + if (f.length > 0) { + writer.writePackedEnum( + 10, + f + ); + } +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.boltzr.Bolt11Invoice.RoutingHints.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt11Invoice.RoutingHints.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.RoutingHints.toObject = function(includeInstance, msg) { + var f, obj = { + hopsList: jspb.Message.toObjectList(msg.getHopsList(), + proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt11Invoice.RoutingHints; + return proto.boltzr.Bolt11Invoice.RoutingHints.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint; + reader.readMessage(value,proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.deserializeBinaryFromReader); + msg.addHops(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt11Invoice.RoutingHints.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.RoutingHints.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getHopsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.toObject = function(includeInstance, msg) { + var f, obj = { + node: msg.getNode_asB64(), + channelId: jspb.Message.getFieldWithDefault(msg, 2, 0), + baseFeeMsat: jspb.Message.getFieldWithDefault(msg, 3, 0), + ppmFee: jspb.Message.getFieldWithDefault(msg, 4, 0), + cltvExpiryDelta: jspb.Message.getFieldWithDefault(msg, 5, 0), + htlcMinimumMsat: jspb.Message.getFieldWithDefault(msg, 6, 0), + htlcMaximumMsat: jspb.Message.getFieldWithDefault(msg, 7, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint; + return proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setNode(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setChannelId(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setBaseFeeMsat(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint32()); + msg.setPpmFee(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint64()); + msg.setCltvExpiryDelta(value); + break; + case 6: + var value = /** @type {number} */ (reader.readUint64()); + msg.setHtlcMinimumMsat(value); + break; + case 7: + var value = /** @type {number} */ (reader.readUint64()); + msg.setHtlcMaximumMsat(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNode_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = message.getChannelId(); + if (f !== 0) { + writer.writeUint64( + 2, + f + ); + } + f = message.getBaseFeeMsat(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } + f = message.getPpmFee(); + if (f !== 0) { + writer.writeUint32( + 4, + f + ); + } + f = message.getCltvExpiryDelta(); + if (f !== 0) { + writer.writeUint64( + 5, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeUint64( + 6, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeUint64( + 7, + f + ); + } +}; + + +/** + * optional bytes node = 1; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getNode = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes node = 1; + * This is a type-conversion wrapper around `getNode()` + * @return {string} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getNode_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getNode())); +}; + + +/** + * optional bytes node = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getNode()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getNode_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getNode())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setNode = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional uint64 channel_id = 2; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getChannelId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setChannelId = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional uint32 base_fee_msat = 3; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getBaseFeeMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setBaseFeeMsat = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional uint32 ppm_fee = 4; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getPpmFee = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setPpmFee = function(value) { + return jspb.Message.setProto3IntField(this, 4, value); +}; + + +/** + * optional uint64 cltv_expiry_delta = 5; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getCltvExpiryDelta = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setCltvExpiryDelta = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * optional uint64 htlc_minimum_msat = 6; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getHtlcMinimumMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setHtlcMinimumMsat = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.clearHtlcMinimumMsat = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.hasHtlcMinimumMsat = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional uint64 htlc_maximum_msat = 7; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.getHtlcMaximumMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.setHtlcMaximumMsat = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.clearHtlcMaximumMsat = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint.prototype.hasHtlcMaximumMsat = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * repeated RoutingHint hops = 1; + * @return {!Array} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.getHopsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints} returns this +*/ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.setHopsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint=} opt_value + * @param {number=} opt_index + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint} + */ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.addHops = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.boltzr.Bolt11Invoice.RoutingHints.RoutingHint, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints} returns this + */ +proto.boltzr.Bolt11Invoice.RoutingHints.prototype.clearHopsList = function() { + return this.setHopsList([]); +}; + + +/** + * optional bytes payee_pubkey = 1; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt11Invoice.prototype.getPayeePubkey = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes payee_pubkey = 1; + * This is a type-conversion wrapper around `getPayeePubkey()` + * @return {string} + */ +proto.boltzr.Bolt11Invoice.prototype.getPayeePubkey_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getPayeePubkey())); +}; + + +/** + * optional bytes payee_pubkey = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getPayeePubkey()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.prototype.getPayeePubkey_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getPayeePubkey())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setPayeePubkey = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional uint64 msat = 2; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.prototype.getMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setMsat = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.clearMsat = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt11Invoice.prototype.hasMsat = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bytes payment_hash = 3; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt11Invoice.prototype.getPaymentHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * optional bytes payment_hash = 3; + * This is a type-conversion wrapper around `getPaymentHash()` + * @return {string} + */ +proto.boltzr.Bolt11Invoice.prototype.getPaymentHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getPaymentHash())); +}; + + +/** + * optional bytes payment_hash = 3; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getPaymentHash()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.prototype.getPaymentHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getPaymentHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setPaymentHash = function(value) { + return jspb.Message.setProto3BytesField(this, 3, value); +}; + + +/** + * optional string memo = 4; + * @return {string} + */ +proto.boltzr.Bolt11Invoice.prototype.getMemo = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setMemo = function(value) { + return jspb.Message.setOneofField(this, 4, proto.boltzr.Bolt11Invoice.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.clearMemo = function() { + return jspb.Message.setOneofField(this, 4, proto.boltzr.Bolt11Invoice.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt11Invoice.prototype.hasMemo = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional bytes description_hash = 5; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt11Invoice.prototype.getDescriptionHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * optional bytes description_hash = 5; + * This is a type-conversion wrapper around `getDescriptionHash()` + * @return {string} + */ +proto.boltzr.Bolt11Invoice.prototype.getDescriptionHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getDescriptionHash())); +}; + + +/** + * optional bytes description_hash = 5; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getDescriptionHash()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt11Invoice.prototype.getDescriptionHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getDescriptionHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setDescriptionHash = function(value) { + return jspb.Message.setOneofField(this, 5, proto.boltzr.Bolt11Invoice.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.clearDescriptionHash = function() { + return jspb.Message.setOneofField(this, 5, proto.boltzr.Bolt11Invoice.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt11Invoice.prototype.hasDescriptionHash = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional uint64 created_at = 6; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.prototype.getCreatedAt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setCreatedAt = function(value) { + return jspb.Message.setProto3IntField(this, 6, value); +}; + + +/** + * optional uint64 expiry = 7; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.prototype.getExpiry = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setExpiry = function(value) { + return jspb.Message.setProto3IntField(this, 7, value); +}; + + +/** + * optional uint64 min_final_cltv_expiry = 8; + * @return {number} + */ +proto.boltzr.Bolt11Invoice.prototype.getMinFinalCltvExpiry = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setMinFinalCltvExpiry = function(value) { + return jspb.Message.setProto3IntField(this, 8, value); +}; + + +/** + * repeated RoutingHints hints = 9; + * @return {!Array} + */ +proto.boltzr.Bolt11Invoice.prototype.getHintsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.boltzr.Bolt11Invoice.RoutingHints, 9)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzr.Bolt11Invoice} returns this +*/ +proto.boltzr.Bolt11Invoice.prototype.setHintsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 9, value); +}; + + +/** + * @param {!proto.boltzr.Bolt11Invoice.RoutingHints=} opt_value + * @param {number=} opt_index + * @return {!proto.boltzr.Bolt11Invoice.RoutingHints} + */ +proto.boltzr.Bolt11Invoice.prototype.addHints = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 9, opt_value, proto.boltzr.Bolt11Invoice.RoutingHints, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.clearHintsList = function() { + return this.setHintsList([]); +}; + + +/** + * repeated Feature features = 10; + * @return {!Array} + */ +proto.boltzr.Bolt11Invoice.prototype.getFeaturesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 10)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.setFeaturesList = function(value) { + return jspb.Message.setField(this, 10, value || []); +}; + + +/** + * @param {!proto.boltzr.Feature} value + * @param {number=} opt_index + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.addFeatures = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 10, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzr.Bolt11Invoice} returns this + */ +proto.boltzr.Bolt11Invoice.prototype.clearFeaturesList = function() { + return this.setFeaturesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt12Offer.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt12Offer.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt12Offer} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Offer.toObject = function(includeInstance, msg) { + var f, obj = { + id: msg.getId_asB64(), + signingPubkey: msg.getSigningPubkey_asB64(), + description: jspb.Message.getFieldWithDefault(msg, 3, ""), + minAmountMsat: jspb.Message.getFieldWithDefault(msg, 4, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt12Offer} + */ +proto.boltzr.Bolt12Offer.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt12Offer; + return proto.boltzr.Bolt12Offer.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt12Offer} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt12Offer} + */ +proto.boltzr.Bolt12Offer.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setId(value); + break; + case 2: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSigningPubkey(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinAmountMsat(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Offer.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt12Offer.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt12Offer} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Offer.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getId_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBytes( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeUint64( + 4, + f + ); + } +}; + + +/** + * optional bytes id = 1; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt12Offer.prototype.getId = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes id = 1; + * This is a type-conversion wrapper around `getId()` + * @return {string} + */ +proto.boltzr.Bolt12Offer.prototype.getId_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getId())); +}; + + +/** + * optional bytes id = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getId()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Offer.prototype.getId_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getId())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.setId = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional bytes signing_pubkey = 2; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt12Offer.prototype.getSigningPubkey = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * optional bytes signing_pubkey = 2; + * This is a type-conversion wrapper around `getSigningPubkey()` + * @return {string} + */ +proto.boltzr.Bolt12Offer.prototype.getSigningPubkey_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSigningPubkey())); +}; + + +/** + * optional bytes signing_pubkey = 2; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSigningPubkey()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Offer.prototype.getSigningPubkey_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSigningPubkey())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.setSigningPubkey = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.clearSigningPubkey = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Offer.prototype.hasSigningPubkey = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string description = 3; + * @return {string} + */ +proto.boltzr.Bolt12Offer.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.setDescription = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.clearDescription = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Offer.prototype.hasDescription = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional uint64 min_amount_msat = 4; + * @return {number} + */ +proto.boltzr.Bolt12Offer.prototype.getMinAmountMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.setMinAmountMsat = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Offer} returns this + */ +proto.boltzr.Bolt12Offer.prototype.clearMinAmountMsat = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Offer.prototype.hasMinAmountMsat = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.boltzr.Bolt12Invoice.repeatedFields_ = [7,8]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt12Invoice.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt12Invoice.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt12Invoice} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Invoice.toObject = function(includeInstance, msg) { + var f, obj = { + signingPubkey: msg.getSigningPubkey_asB64(), + msat: jspb.Message.getFieldWithDefault(msg, 2, 0), + paymentHash: msg.getPaymentHash_asB64(), + description: jspb.Message.getFieldWithDefault(msg, 4, ""), + createdAt: jspb.Message.getFieldWithDefault(msg, 5, 0), + expiry: jspb.Message.getFieldWithDefault(msg, 6, 0), + pathsList: jspb.Message.toObjectList(msg.getPathsList(), + proto.boltzr.Bolt12Invoice.Path.toObject, includeInstance), + featuresList: (f = jspb.Message.getRepeatedField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt12Invoice} + */ +proto.boltzr.Bolt12Invoice.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt12Invoice; + return proto.boltzr.Bolt12Invoice.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt12Invoice} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt12Invoice} + */ +proto.boltzr.Bolt12Invoice.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSigningPubkey(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMsat(value); + break; + case 3: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setPaymentHash(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint64()); + msg.setCreatedAt(value); + break; + case 6: + var value = /** @type {number} */ (reader.readUint64()); + msg.setExpiry(value); + break; + case 7: + var value = new proto.boltzr.Bolt12Invoice.Path; + reader.readMessage(value,proto.boltzr.Bolt12Invoice.Path.deserializeBinaryFromReader); + msg.addPaths(value); + break; + case 8: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedEnum() : [reader.readEnum()]); + for (var i = 0; i < values.length; i++) { + msg.addFeatures(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Invoice.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt12Invoice.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt12Invoice} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Invoice.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSigningPubkey_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = message.getPaymentHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = message.getCreatedAt(); + if (f !== 0) { + writer.writeUint64( + 5, + f + ); + } + f = message.getExpiry(); + if (f !== 0) { + writer.writeUint64( + 6, + f + ); + } + f = message.getPathsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 7, + f, + proto.boltzr.Bolt12Invoice.Path.serializeBinaryToWriter + ); + } + f = message.getFeaturesList(); + if (f.length > 0) { + writer.writePackedEnum( + 8, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.Bolt12Invoice.Path.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.Bolt12Invoice.Path} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Invoice.Path.toObject = function(includeInstance, msg) { + var f, obj = { + firstNodePubkey: msg.getFirstNodePubkey_asB64(), + baseFeeMsat: jspb.Message.getFieldWithDefault(msg, 2, 0), + ppmFee: jspb.Message.getFieldWithDefault(msg, 3, 0), + cltvExpiryDelta: jspb.Message.getFieldWithDefault(msg, 4, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.Bolt12Invoice.Path} + */ +proto.boltzr.Bolt12Invoice.Path.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.Bolt12Invoice.Path; + return proto.boltzr.Bolt12Invoice.Path.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.Bolt12Invoice.Path} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.Bolt12Invoice.Path} + */ +proto.boltzr.Bolt12Invoice.Path.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setFirstNodePubkey(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setBaseFeeMsat(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setPpmFee(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint64()); + msg.setCltvExpiryDelta(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.Bolt12Invoice.Path.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.Bolt12Invoice.Path} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.Bolt12Invoice.Path.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBytes( + 1, + f + ); + } + f = message.getBaseFeeMsat(); + if (f !== 0) { + writer.writeUint32( + 2, + f + ); + } + f = message.getPpmFee(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } + f = message.getCltvExpiryDelta(); + if (f !== 0) { + writer.writeUint64( + 4, + f + ); + } +}; + + +/** + * optional bytes first_node_pubkey = 1; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getFirstNodePubkey = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes first_node_pubkey = 1; + * This is a type-conversion wrapper around `getFirstNodePubkey()` + * @return {string} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getFirstNodePubkey_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getFirstNodePubkey())); +}; + + +/** + * optional bytes first_node_pubkey = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getFirstNodePubkey()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getFirstNodePubkey_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getFirstNodePubkey())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt12Invoice.Path} returns this + */ +proto.boltzr.Bolt12Invoice.Path.prototype.setFirstNodePubkey = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Invoice.Path} returns this + */ +proto.boltzr.Bolt12Invoice.Path.prototype.clearFirstNodePubkey = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.hasFirstNodePubkey = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint32 base_fee_msat = 2; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getBaseFeeMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice.Path} returns this + */ +proto.boltzr.Bolt12Invoice.Path.prototype.setBaseFeeMsat = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional uint32 ppm_fee = 3; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getPpmFee = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice.Path} returns this + */ +proto.boltzr.Bolt12Invoice.Path.prototype.setPpmFee = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional uint64 cltv_expiry_delta = 4; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.Path.prototype.getCltvExpiryDelta = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice.Path} returns this + */ +proto.boltzr.Bolt12Invoice.Path.prototype.setCltvExpiryDelta = function(value) { + return jspb.Message.setProto3IntField(this, 4, value); +}; + + +/** + * optional bytes signing_pubkey = 1; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt12Invoice.prototype.getSigningPubkey = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes signing_pubkey = 1; + * This is a type-conversion wrapper around `getSigningPubkey()` + * @return {string} + */ +proto.boltzr.Bolt12Invoice.prototype.getSigningPubkey_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSigningPubkey())); +}; + + +/** + * optional bytes signing_pubkey = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSigningPubkey()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Invoice.prototype.getSigningPubkey_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSigningPubkey())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setSigningPubkey = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional uint64 msat = 2; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.prototype.getMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setMsat = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.clearMsat = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Invoice.prototype.hasMsat = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bytes payment_hash = 3; + * @return {!(string|Uint8Array)} + */ +proto.boltzr.Bolt12Invoice.prototype.getPaymentHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * optional bytes payment_hash = 3; + * This is a type-conversion wrapper around `getPaymentHash()` + * @return {string} + */ +proto.boltzr.Bolt12Invoice.prototype.getPaymentHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getPaymentHash())); +}; + + +/** + * optional bytes payment_hash = 3; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getPaymentHash()` + * @return {!Uint8Array} + */ +proto.boltzr.Bolt12Invoice.prototype.getPaymentHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getPaymentHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setPaymentHash = function(value) { + return jspb.Message.setProto3BytesField(this, 3, value); +}; + + +/** + * optional string description = 4; + * @return {string} + */ +proto.boltzr.Bolt12Invoice.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setDescription = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.clearDescription = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.Bolt12Invoice.prototype.hasDescription = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional uint64 created_at = 5; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.prototype.getCreatedAt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setCreatedAt = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * optional uint64 expiry = 6; + * @return {number} + */ +proto.boltzr.Bolt12Invoice.prototype.getExpiry = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setExpiry = function(value) { + return jspb.Message.setProto3IntField(this, 6, value); +}; + + +/** + * repeated Path paths = 7; + * @return {!Array} + */ +proto.boltzr.Bolt12Invoice.prototype.getPathsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.boltzr.Bolt12Invoice.Path, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzr.Bolt12Invoice} returns this +*/ +proto.boltzr.Bolt12Invoice.prototype.setPathsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 7, value); +}; + + +/** + * @param {!proto.boltzr.Bolt12Invoice.Path=} opt_value + * @param {number=} opt_index + * @return {!proto.boltzr.Bolt12Invoice.Path} + */ +proto.boltzr.Bolt12Invoice.prototype.addPaths = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 7, opt_value, proto.boltzr.Bolt12Invoice.Path, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.clearPathsList = function() { + return this.setPathsList([]); +}; + + +/** + * repeated Feature features = 8; + * @return {!Array} + */ +proto.boltzr.Bolt12Invoice.prototype.getFeaturesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 8)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.setFeaturesList = function(value) { + return jspb.Message.setField(this, 8, value || []); +}; + + +/** + * @param {!proto.boltzr.Feature} value + * @param {number=} opt_index + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.addFeatures = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 8, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzr.Bolt12Invoice} returns this + */ +proto.boltzr.Bolt12Invoice.prototype.clearFeaturesList = function() { + return this.setFeaturesList([]); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_ = [[2,3,4]]; + +/** + * @enum {number} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.DecodedCase = { + DECODED_NOT_SET: 0, + BOLT11: 2, + OFFER: 3, + BOLT12_INVOICE: 4 +}; + +/** + * @return {proto.boltzr.DecodeInvoiceOrOfferResponse.DecodedCase} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.getDecodedCase = function() { + return /** @type {proto.boltzr.DecodeInvoiceOrOfferResponse.DecodedCase} */(jspb.Message.computeOneofCase(this, proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.DecodeInvoiceOrOfferResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.DecodeInvoiceOrOfferResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.toObject = function(includeInstance, msg) { + var f, obj = { + isExpired: jspb.Message.getBooleanFieldWithDefault(msg, 1, false), + bolt11: (f = msg.getBolt11()) && proto.boltzr.Bolt11Invoice.toObject(includeInstance, f), + offer: (f = msg.getOffer()) && proto.boltzr.Bolt12Offer.toObject(includeInstance, f), + bolt12Invoice: (f = msg.getBolt12Invoice()) && proto.boltzr.Bolt12Invoice.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.DecodeInvoiceOrOfferResponse; + return proto.boltzr.DecodeInvoiceOrOfferResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.DecodeInvoiceOrOfferResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIsExpired(value); + break; + case 2: + var value = new proto.boltzr.Bolt11Invoice; + reader.readMessage(value,proto.boltzr.Bolt11Invoice.deserializeBinaryFromReader); + msg.setBolt11(value); + break; + case 3: + var value = new proto.boltzr.Bolt12Offer; + reader.readMessage(value,proto.boltzr.Bolt12Offer.deserializeBinaryFromReader); + msg.setOffer(value); + break; + case 4: + var value = new proto.boltzr.Bolt12Invoice; + reader.readMessage(value,proto.boltzr.Bolt12Invoice.deserializeBinaryFromReader); + msg.setBolt12Invoice(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.DecodeInvoiceOrOfferResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.DecodeInvoiceOrOfferResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIsExpired(); + if (f) { + writer.writeBool( + 1, + f + ); + } + f = message.getBolt11(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.boltzr.Bolt11Invoice.serializeBinaryToWriter + ); + } + f = message.getOffer(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.boltzr.Bolt12Offer.serializeBinaryToWriter + ); + } + f = message.getBolt12Invoice(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.boltzr.Bolt12Invoice.serializeBinaryToWriter + ); + } +}; + + +/** + * optional bool is_expired = 1; + * @return {boolean} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.getIsExpired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.setIsExpired = function(value) { + return jspb.Message.setProto3BooleanField(this, 1, value); +}; + + +/** + * optional Bolt11Invoice bolt11 = 2; + * @return {?proto.boltzr.Bolt11Invoice} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.getBolt11 = function() { + return /** @type{?proto.boltzr.Bolt11Invoice} */ ( + jspb.Message.getWrapperField(this, proto.boltzr.Bolt11Invoice, 2)); +}; + + +/** + * @param {?proto.boltzr.Bolt11Invoice|undefined} value + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this +*/ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.setBolt11 = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.clearBolt11 = function() { + return this.setBolt11(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.hasBolt11 = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Bolt12Offer offer = 3; + * @return {?proto.boltzr.Bolt12Offer} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.getOffer = function() { + return /** @type{?proto.boltzr.Bolt12Offer} */ ( + jspb.Message.getWrapperField(this, proto.boltzr.Bolt12Offer, 3)); +}; + + +/** + * @param {?proto.boltzr.Bolt12Offer|undefined} value + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this +*/ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.setOffer = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.clearOffer = function() { + return this.setOffer(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.hasOffer = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional Bolt12Invoice bolt12_invoice = 4; + * @return {?proto.boltzr.Bolt12Invoice} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.getBolt12Invoice = function() { + return /** @type{?proto.boltzr.Bolt12Invoice} */ ( + jspb.Message.getWrapperField(this, proto.boltzr.Bolt12Invoice, 4)); +}; + + +/** + * @param {?proto.boltzr.Bolt12Invoice|undefined} value + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this +*/ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.setBolt12Invoice = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.boltzr.DecodeInvoiceOrOfferResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.boltzr.DecodeInvoiceOrOfferResponse} returns this + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.clearBolt12Invoice = function() { + return this.setBolt12Invoice(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzr.DecodeInvoiceOrOfferResponse.prototype.hasBolt12Invoice = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.FetchInvoiceRequest.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.FetchInvoiceRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.FetchInvoiceRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.FetchInvoiceRequest.toObject = function(includeInstance, msg) { + var f, obj = { + currency: jspb.Message.getFieldWithDefault(msg, 1, ""), + offer: jspb.Message.getFieldWithDefault(msg, 2, ""), + amountMsat: jspb.Message.getFieldWithDefault(msg, 3, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.FetchInvoiceRequest} + */ +proto.boltzr.FetchInvoiceRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.FetchInvoiceRequest; + return proto.boltzr.FetchInvoiceRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.FetchInvoiceRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.FetchInvoiceRequest} + */ +proto.boltzr.FetchInvoiceRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setCurrency(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setOffer(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint64()); + msg.setAmountMsat(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.FetchInvoiceRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.FetchInvoiceRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.FetchInvoiceRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.FetchInvoiceRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCurrency(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOffer(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getAmountMsat(); + if (f !== 0) { + writer.writeUint64( + 3, + f + ); + } +}; + + +/** + * optional string currency = 1; + * @return {string} + */ +proto.boltzr.FetchInvoiceRequest.prototype.getCurrency = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.FetchInvoiceRequest} returns this + */ +proto.boltzr.FetchInvoiceRequest.prototype.setCurrency = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string offer = 2; + * @return {string} + */ +proto.boltzr.FetchInvoiceRequest.prototype.getOffer = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.FetchInvoiceRequest} returns this + */ +proto.boltzr.FetchInvoiceRequest.prototype.setOffer = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional uint64 amount_msat = 3; + * @return {number} + */ +proto.boltzr.FetchInvoiceRequest.prototype.getAmountMsat = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzr.FetchInvoiceRequest} returns this + */ +proto.boltzr.FetchInvoiceRequest.prototype.setAmountMsat = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzr.FetchInvoiceResponse.prototype.toObject = function(opt_includeInstance) { + return proto.boltzr.FetchInvoiceResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzr.FetchInvoiceResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.FetchInvoiceResponse.toObject = function(includeInstance, msg) { + var f, obj = { + invoice: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzr.FetchInvoiceResponse} + */ +proto.boltzr.FetchInvoiceResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzr.FetchInvoiceResponse; + return proto.boltzr.FetchInvoiceResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzr.FetchInvoiceResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzr.FetchInvoiceResponse} + */ +proto.boltzr.FetchInvoiceResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setInvoice(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzr.FetchInvoiceResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzr.FetchInvoiceResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzr.FetchInvoiceResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzr.FetchInvoiceResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInvoice(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string invoice = 1; + * @return {string} + */ +proto.boltzr.FetchInvoiceResponse.prototype.getInvoice = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzr.FetchInvoiceResponse} returns this + */ +proto.boltzr.FetchInvoiceResponse.prototype.setInvoice = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * @enum {number} + */ +proto.boltzr.Feature = { + BASIC_MPP: 0 +}; + goog.object.extend(exports, proto.boltzr); diff --git a/lib/service/InvoiceExpiryHelper.ts b/lib/service/InvoiceExpiryHelper.ts index e5aab48d..00e60ddf 100644 --- a/lib/service/InvoiceExpiryHelper.ts +++ b/lib/service/InvoiceExpiryHelper.ts @@ -33,28 +33,6 @@ class InvoiceExpiryHelper { this.invoiceExpiry.get(pair) || InvoiceExpiryHelper.defaultInvoiceExpiry ); }; - - /** - * Calculates the expiry of an invoice - * Reference: https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md#tagged-fields - * - * @param timestamp creation timestamp of the invoice - * @param timeExpireDate expiry timestamp of the invoice - */ - public static getInvoiceExpiry = ( - timestamp?: number, - timeExpireDate?: number, - ): number => { - let invoiceExpiry = timestamp || 0; - - if (timeExpireDate) { - invoiceExpiry = timeExpireDate; - } else { - invoiceExpiry += InvoiceExpiryHelper.defaultInvoiceExpiry; - } - - return invoiceExpiry; - }; } export default InvoiceExpiryHelper; diff --git a/lib/service/Service.ts b/lib/service/Service.ts index 32d9645e..f1346de2 100644 --- a/lib/service/Service.ts +++ b/lib/service/Service.ts @@ -8,11 +8,8 @@ import Logger from '../Logger'; import { checkEvmAddress, createApiCredential, - decodeInvoice, - decodeInvoiceAmount, formatError, getChainCurrency, - getHexBuffer, getHexString, getLightningCurrency, getPairId, @@ -56,6 +53,7 @@ import ReferralRepository from '../db/repositories/ReferralRepository'; import ReverseRoutingHintRepository from '../db/repositories/ReverseRoutingHintRepository'; import ReverseSwapRepository from '../db/repositories/ReverseSwapRepository'; import SwapRepository from '../db/repositories/SwapRepository'; +import { msatToSat } from '../lightning/ChannelUtils'; import { HopHint, InvoiceFeature, @@ -81,6 +79,7 @@ import { ReversePairTypeTaproot, SubmarinePairTypeTaproot, } from '../rates/providers/RateProviderTaproot'; +import { InvoiceType } from '../sidecar/DecodedInvoice'; import Sidecar from '../sidecar/Sidecar'; import SwapErrors from '../swap/Errors'; import NodeSwitch from '../swap/NodeSwitch'; @@ -160,7 +159,7 @@ class Service { private nodeSwitch: NodeSwitch, public currencies: Map, blocks: Blocks, - private readonly sidecar: Sidecar, + public readonly sidecar: Sidecar, ) { this.prepayMinerFee = config.prepayminerfee; this.logger.debug( @@ -175,6 +174,7 @@ class Service { this.timeoutDeltaProvider = new TimeoutDeltaProvider( this.logger, config, + this.sidecar, currencies, this.nodeSwitch, ); @@ -1222,23 +1222,28 @@ class Service { false, ); - swap.invoiceAmount = decodeInvoiceAmount(invoice); - const lightningClient = this.nodeSwitch.getSwapNode( - this.currencies.get(lightningCurrency)!, - swap, - ); - const [cltvLimit, decodedInvoice] = await Promise.all([ this.timeoutDeltaProvider.getCltvLimit(swap), - lightningClient.decodeInvoice(invoice), + this.sidecar.decodeInvoiceOrOffer(invoice), ]); + swap.invoiceAmount = decodedInvoice.amountMsat; - const requiredTimeout = await this.timeoutDeltaProvider.checkRoutability( - lightningClient, - decodedInvoice, - cltvLimit, + const lightningClient = this.nodeSwitch.getSwapNode( + this.currencies.get(lightningCurrency)!, + decodedInvoice.type, + swap, ); + // TODO: fix this for bolt12 + const requiredTimeout = + decodedInvoice.type === InvoiceType.Bolt12Invoice + ? 144 + : await this.timeoutDeltaProvider.checkRoutability( + lightningClient, + decodedInvoice, + cltvLimit, + ); + if (requiredTimeout == TimeoutDeltaProvider.noRoutes) { throw SwapErrors.NO_ROUTE_FOUND(); } @@ -1287,17 +1292,27 @@ class Service { false, ); - const decodedInvoice = decodeInvoice(invoice); - swap.invoiceAmount = decodedInvoice.satoshis; + const decodedInvoice = await this.sidecar.decodeInvoiceOrOffer(invoice); + + if (decodedInvoice.type === InvoiceType.Offer) { + throw SwapErrors.NO_OFFERS_ALLOWED(); + } + + swap.invoiceAmount = msatToSat(decodedInvoice.amountMsat); const { destination, features } = await this.nodeSwitch - .getSwapNode(getCurrency(this.currencies, lightningCurrency)!, swap) + .getSwapNode( + getCurrency(this.currencies, lightningCurrency)!, + decodedInvoice.type, + swap, + ) .decodeInvoice(invoice); if (this.nodeInfo.isOurNode(destination)) { throw Errors.DESTINATION_BOLTZ_NODE(); } + // TODO: check this still works if (features.has(InvoiceFeature.AMP)) { throw Errors.AMP_INVOICES_NOT_SUPPORTED(); } @@ -1348,7 +1363,7 @@ class Service { ); const minutesUntilExpiry = - (decodedInvoice.timeExpireDate - getUnixTime()) / 60; + (decodedInvoice.expiryTimestamp - getUnixTime()) / 60; if (minutesUntilExpiry < 0) { throw SwapErrors.INVOICE_EXPIRED_ALREADY(); @@ -1432,8 +1447,12 @@ class Service { throw Errors.SWAP_WITH_INVOICE_EXISTS(); } - const preimageHash = getHexBuffer(decodeInvoice(invoice).paymentHash!); - checkPreimageHashLength(preimageHash); + const decodedInvoice = await this.sidecar.decodeInvoiceOrOffer(invoice); + if (decodedInvoice.type === InvoiceType.Offer) { + throw SwapErrors.NO_OFFERS_ALLOWED(); + } + + checkPreimageHashLength(decodedInvoice.paymentHash!); const createdSwap = await this.createSwap({ pairId, @@ -1443,8 +1462,8 @@ class Service { webHook, orderSide, referralId, - preimageHash, refundPublicKey, + preimageHash: decodedInvoice.paymentHash!, }); try { diff --git a/lib/service/TimeoutDeltaProvider.ts b/lib/service/TimeoutDeltaProvider.ts index ade34f2e..4140adb2 100644 --- a/lib/service/TimeoutDeltaProvider.ts +++ b/lib/service/TimeoutDeltaProvider.ts @@ -5,6 +5,7 @@ import Logger from '../Logger'; import { formatError, getChainCurrency, + getHexString, getLightningCurrency, getPairId, splitPairId, @@ -19,12 +20,11 @@ import { } from '../consts/Enums'; import { PairConfig } from '../consts/Types'; import Swap from '../db/models/Swap'; -import { - DecodedInvoice, - InvoiceFeature, - LightningClient, -} from '../lightning/LightningClient'; +import { msatToSat } from '../lightning/ChannelUtils'; +import { InvoiceFeature, LightningClient } from '../lightning/LightningClient'; import LndClient from '../lightning/LndClient'; +import DecodedInvoice, { InvoiceType } from '../sidecar/DecodedInvoice'; +import Sidecar from '../sidecar/Sidecar'; import NodeSwitch from '../swap/NodeSwitch'; import { Currency } from '../wallet/WalletManager'; import EthereumManager from '../wallet/ethereum/EthereumManager'; @@ -66,6 +66,7 @@ class TimeoutDeltaProvider { constructor( private readonly logger: Logger, private readonly config: ConfigType, + private readonly sidecar: Sidecar, private readonly currencies: Map, private readonly nodeSwitch: NodeSwitch, ) { @@ -233,24 +234,29 @@ class TimeoutDeltaProvider { cltvLimit: number, ) => { try { + // TODO: fix this for bolt12 + if (decodedInvoice.type === InvoiceType.Bolt12Invoice) { + return 144; + } + // Check whether the receiving side supports MPP and if so, // query a route for the number of sats of the invoice divided // by the max payment parts we tell to LND to use const supportsMpp = decodedInvoice.features.has(InvoiceFeature.MPP); - // TODO: CLN adjustments + const amountSat = decodedInvoice.amountMsat; const amountToQuery = Math.max( supportsMpp - ? Math.ceil(decodedInvoice.value / LndClient.paymentMaxParts) - : decodedInvoice.value, + ? Math.ceil(amountSat / LndClient.paymentMaxParts) + : amountSat, 1, ); const routes = await lightningClient.queryRoutes( - decodedInvoice.destination, + getHexString(decodedInvoice.payee!), amountToQuery, cltvLimit, - decodedInvoice.cltvExpiry, + decodedInvoice.minFinalCltv, decodedInvoice.routingHints, ); @@ -276,12 +282,17 @@ class TimeoutDeltaProvider { ): Promise<[number, boolean]> => { const currency = this.currencies.get(lightningCurrency)!; - const decodedInvoice = - await NodeSwitch.fallback(currency)!.decodeInvoice(invoice); - const lightningClient = this.nodeSwitch.getSwapNode(currency, { - referral: referralId, - invoiceAmount: decodedInvoice.value, - }); + const decodedInvoice = await this.sidecar.decodeInvoiceOrOffer(invoice); + const amountSat = msatToSat(decodedInvoice.amountMsat); + + const lightningClient = this.nodeSwitch.getSwapNode( + currency, + decodedInvoice.type, + { + referral: referralId, + invoiceAmount: amountSat, + }, + ); const lightningCltv = version === SwapVersion.Taproot @@ -324,9 +335,9 @@ class TimeoutDeltaProvider { const routingOffset = this.routingOffsets.getOffset( pair, - decodedInvoice.value, + amountSat, lightningCurrency, - [decodedInvoice.destination].concat( + [getHexString(decodedInvoice.payee!)].concat( decodedInvoice.routingHints.map((hints) => hints[0].nodeId), ), ); diff --git a/lib/sidecar/DecodedInvoice.ts b/lib/sidecar/DecodedInvoice.ts new file mode 100644 index 00000000..48676347 --- /dev/null +++ b/lib/sidecar/DecodedInvoice.ts @@ -0,0 +1,123 @@ +import { getHexString } from '../Utils'; +import { HopHint, InvoiceFeature } from '../lightning/LightningClient'; +import { + DecodeInvoiceOrOfferResponse, + Feature, +} from '../proto/sidecar/boltzr_pb'; + +enum InvoiceType { + Bolt11, + Offer, + Bolt12Invoice, +} + +class DecodedInvoice { + constructor(private readonly res: DecodeInvoiceOrOfferResponse.AsObject) {} + + public get payee(): Buffer | undefined { + const data = + this.res.bolt11?.payeePubkey || this.res.bolt12Invoice?.signingPubkey; + + if (data === undefined) { + return undefined; + } + + return Buffer.from(data as string, 'base64'); + } + + public get type(): InvoiceType { + if (this.res.bolt11 !== undefined) { + return InvoiceType.Bolt11; + } else if (this.res.offer !== undefined) { + return InvoiceType.Offer; + } else { + return InvoiceType.Bolt12Invoice; + } + } + + public get typePretty(): string { + switch (this.type) { + case InvoiceType.Bolt11: + return 'BOLT11'; + case InvoiceType.Offer: + return 'BOLT12 offer'; + case InvoiceType.Bolt12Invoice: + return 'BOLT12'; + } + } + + public get isExpired(): boolean { + return this.res.isExpired; + } + + public get amountMsat(): number { + return this.res.bolt11?.msat || this.res.bolt12Invoice?.msat || 0; + } + + public get paymentHash(): Buffer | undefined { + const data = + this.res.bolt11?.paymentHash || this.res.bolt12Invoice?.paymentHash; + + if (data === undefined) { + return undefined; + } + + return Buffer.from(data as string, 'base64'); + } + + public get expiryTimestamp(): number { + if (this.res.bolt11) { + return this.res.bolt11.createdAt + this.res.bolt11.createdAt; + } else if (this.res.bolt12Invoice) { + return this.res.bolt12Invoice.createdAt + this.res.bolt12Invoice.expiry; + } + + return 0; + } + + public get routingHints(): HopHint[][] { + if (this.res.bolt11) { + return this.res.bolt11.hintsList.map((route) => + route.hopsList.map((hop) => ({ + feeBaseMsat: hop.baseFeeMsat, + chanId: hop.channelId.toString(), + cltvExpiryDelta: hop.cltvExpiryDelta, + feeProportionalMillionths: hop.ppmFee, + nodeId: getHexString(Buffer.from(hop.node as string, 'base64')), + })), + ); + } + + return []; + } + + public get features() { + return new Set( + ( + this.res.bolt11?.featuresList || + this.res.bolt12Invoice?.featuresList || + [] + ).map((feature) => { + switch (feature) { + case Feature.BASIC_MPP: + return InvoiceFeature.MPP; + } + }), + ); + } + + public get minFinalCltv() { + return ( + this.res.bolt11?.minFinalCltvExpiry || + this.res.bolt12Invoice?.pathsList.reduce( + (max, current) => + current.cltvExpiryDelta > max ? current.cltvExpiryDelta : max, + 0, + ) || + 0 + ); + } +} + +export default DecodedInvoice; +export { InvoiceType }; diff --git a/lib/sidecar/Sidecar.ts b/lib/sidecar/Sidecar.ts index 1c63e802..19392b6c 100644 --- a/lib/sidecar/Sidecar.ts +++ b/lib/sidecar/Sidecar.ts @@ -9,11 +9,13 @@ import { sleep } from '../PromiseUtils'; import { formatError, getVersion } from '../Utils'; import SwapInfos from '../api/SwapInfos'; import { ClientStatus, SwapUpdateEvent } from '../consts/Enums'; +import { satToMsat } from '../lightning/ChannelUtils'; import { grpcOptions, unaryCall } from '../lightning/GrpcUtils'; import { createSsl } from '../lightning/cln/Types'; import { BoltzRClient } from '../proto/sidecar/boltzr_grpc_pb'; import * as sidecarrpc from '../proto/sidecar/boltzr_pb'; import EventHandler, { SwapUpdate } from '../service/EventHandler'; +import DecodedInvoice from './DecodedInvoice'; type Update = { id: string; status: SwapUpdate }; @@ -214,6 +216,35 @@ class Sidecar extends BaseClient { return Buffer.from(res.signature as string, 'base64'); }; + public decodeInvoiceOrOffer = async (invoiceOrOffer: string) => { + const req = new sidecarrpc.DecodeInvoiceOrOfferRequest(); + req.setInvoiceOrOffer(invoiceOrOffer); + + return new DecodedInvoice( + await this.unaryNodeCall< + sidecarrpc.DecodeInvoiceOrOfferRequest, + sidecarrpc.DecodeInvoiceOrOfferResponse.AsObject + >('decodeInvoiceOrOffer', req, true), + ); + }; + + public fetchOffer = async ( + currency: string, + offer: string, + amountSat: number, + ) => { + const req = new sidecarrpc.FetchInvoiceRequest(); + req.setCurrency(currency); + req.setOffer(offer); + req.setAmountMsat(satToMsat(amountSat)); + + const res = await this.unaryNodeCall< + sidecarrpc.FetchInvoiceRequest, + sidecarrpc.FetchInvoiceResponse.AsObject + >('fetchInvoice', req); + return res.invoice; + }; + private subscribeSwapUpdates = () => { const serializeSwapUpdate = (updates: Update[]) => { const req = new sidecarrpc.SwapUpdateRequest(); diff --git a/lib/swap/Errors.ts b/lib/swap/Errors.ts index 139d3b5f..3dedb06e 100644 --- a/lib/swap/Errors.ts +++ b/lib/swap/Errors.ts @@ -118,4 +118,8 @@ export default { message: 'invalid description hash', code: concatErrorCode(ErrorCodePrefix.Swap, 24), }), + NO_OFFERS_ALLOWED: (): Error => ({ + message: 'no offers allowed', + code: concatErrorCode(ErrorCodePrefix.Swap, 25), + }), }; diff --git a/lib/swap/InvoiceNursery.ts b/lib/swap/InvoiceNursery.ts index 3c064d6a..da0a2e80 100644 --- a/lib/swap/InvoiceNursery.ts +++ b/lib/swap/InvoiceNursery.ts @@ -1,11 +1,10 @@ import { Op } from 'sequelize'; import Logger from '../Logger'; -import { decodeInvoice, getUnixTime } from '../Utils'; import { SwapUpdateEvent } from '../consts/Enums'; import TypedEventEmitter from '../consts/TypedEventEmitter'; import ReverseSwap from '../db/models/ReverseSwap'; import ReverseSwapRepository from '../db/repositories/ReverseSwapRepository'; -import InvoiceExpiryHelper from '../service/InvoiceExpiryHelper'; +import Sidecar from '../sidecar/Sidecar'; /** * InvoiceNursery takes care of cancelling pending HTLCs of Reverse Swaps with prepay miner fee @@ -19,7 +18,10 @@ class InvoiceNursery extends TypedEventEmitter<{ private interval: any; - constructor(private logger: Logger) { + constructor( + private readonly logger: Logger, + private readonly sidecar: Sidecar, + ) { super(); } @@ -57,16 +59,12 @@ class InvoiceNursery extends TypedEventEmitter<{ `Checking ${pendingSwaps.length} Reverse Swaps for expired invoices`, ); - const currentTime = getUnixTime(); - for (const reverseSwap of pendingSwaps) { - const { timestamp, timeExpireDate } = decodeInvoice(reverseSwap.invoice); - const invoiceExpiry = InvoiceExpiryHelper.getInvoiceExpiry( - timestamp, - timeExpireDate, + const decoded = await this.sidecar.decodeInvoiceOrOffer( + reverseSwap.invoice, ); - if (currentTime > invoiceExpiry) { + if (decoded.isExpired) { this.emit('invoice.expired', reverseSwap); } } diff --git a/lib/swap/LightningNursery.ts b/lib/swap/LightningNursery.ts index c78da998..02398850 100644 --- a/lib/swap/LightningNursery.ts +++ b/lib/swap/LightningNursery.ts @@ -2,7 +2,7 @@ import AsyncLock from 'async-lock'; import { crypto } from 'bitcoinjs-lib'; import { Op } from 'sequelize'; import Logger from '../Logger'; -import { decodeInvoice, formatError, getHexBuffer } from '../Utils'; +import { formatError, getHexBuffer } from '../Utils'; import { SwapUpdateEvent } from '../consts/Enums'; import TypedEventEmitter from '../consts/TypedEventEmitter'; import ReverseSwap from '../db/models/ReverseSwap'; @@ -11,6 +11,7 @@ import WrappedSwapRepository from '../db/repositories/WrappedSwapRepository'; import { InvoiceState, LightningClient } from '../lightning/LightningClient'; import LndClient from '../lightning/LndClient'; import ClnClient from '../lightning/cln/ClnClient'; +import Sidecar from '../sidecar/Sidecar'; import { Currency } from '../wallet/WalletManager'; class LightningNursery extends TypedEventEmitter<{ @@ -23,7 +24,10 @@ class LightningNursery extends TypedEventEmitter<{ private static invoiceLock = 'invoice'; - constructor(private logger: Logger) { + constructor( + private readonly logger: Logger, + private readonly sidecar: Sidecar, + ) { super(); } @@ -167,7 +171,8 @@ class LightningNursery extends TypedEventEmitter<{ // Settle the prepay invoice and emit the "invoice.paid" event in case the hold invoice was paid first const holdInvoice = await lightningClient.lookupHoldInvoice( - getHexBuffer(decodeInvoice(reverseSwap.invoice).paymentHash!), + (await this.sidecar.decodeInvoiceOrOffer(reverseSwap.invoice)) + .paymentHash!, ); if (holdInvoice.state === InvoiceState.Accepted) { diff --git a/lib/swap/NodeSwitch.ts b/lib/swap/NodeSwitch.ts index a48fa333..669f92f6 100644 --- a/lib/swap/NodeSwitch.ts +++ b/lib/swap/NodeSwitch.ts @@ -1,6 +1,7 @@ import Logger from '../Logger'; import ReverseSwap, { NodeType } from '../db/models/ReverseSwap'; import { LightningClient } from '../lightning/LightningClient'; +import { InvoiceType } from '../sidecar/DecodedInvoice'; import { Currency } from '../wallet/WalletManager'; import Errors from './Errors'; @@ -65,13 +66,16 @@ class NodeSwitch { public getSwapNode = ( currency: Currency, + invoiceType: InvoiceType, swap: { id?: string; invoiceAmount?: number; referral?: string }, ): LightningClient => { const client = NodeSwitch.fallback( currency, - this.swapNode !== undefined - ? NodeSwitch.switchOnNodeType(currency, this.swapNode) - : this.switch(currency, swap.invoiceAmount, swap.referral), + invoiceType === InvoiceType.Bolt11 + ? this.swapNode !== undefined + ? NodeSwitch.switchOnNodeType(currency, this.swapNode) + : this.switch(currency, swap.invoiceAmount, swap.referral) + : currency.clnClient, ); if (swap.id !== undefined) { diff --git a/lib/swap/PaymentHandler.ts b/lib/swap/PaymentHandler.ts index a064c99a..7b1ba3c0 100644 --- a/lib/swap/PaymentHandler.ts +++ b/lib/swap/PaymentHandler.ts @@ -22,6 +22,7 @@ import PendingPaymentTracker from '../lightning/PendingPaymentTracker'; import ClnClient from '../lightning/cln/ClnClient'; import { Payment, PaymentFailureReason } from '../proto/lnd/rpc_pb'; import TimeoutDeltaProvider from '../service/TimeoutDeltaProvider'; +import Sidecar from '../sidecar/Sidecar'; import { Currency } from '../wallet/WalletManager'; import ChannelNursery from './ChannelNursery'; import Errors from './Errors'; @@ -77,6 +78,7 @@ class PaymentHandler { constructor( private readonly logger: Logger, + private readonly sidecar: Sidecar, private readonly nodeSwitch: NodeSwitch, private readonly currencies: Map, public readonly channelNursery: ChannelNursery, @@ -119,6 +121,7 @@ class PaymentHandler { const lightningCurrency = this.currencies.get(lightningSymbol)!; const lightningClient = this.nodeSwitch.getSwapNode( lightningCurrency, + (await this.sidecar.decodeInvoiceOrOffer(swap.invoice!)).type, swap, ); diff --git a/lib/swap/SwapManager.ts b/lib/swap/SwapManager.ts index 356c066e..7f7c67e5 100644 --- a/lib/swap/SwapManager.ts +++ b/lib/swap/SwapManager.ts @@ -19,7 +19,6 @@ import { SwapConfig } from '../Config'; import { createMusig, tweakMusig } from '../Core'; import Logger from '../Logger'; import { - decodeInvoice, formatError, generateSwapId, getChainCurrency, @@ -69,6 +68,7 @@ import TimeoutDeltaProvider from '../service/TimeoutDeltaProvider'; import ChainSwapSigner from '../service/cooperative/ChainSwapSigner'; import DeferredClaimer from '../service/cooperative/DeferredClaimer'; import EipSigner from '../service/cooperative/EipSigner'; +import { InvoiceType } from '../sidecar/DecodedInvoice'; import Sidecar from '../sidecar/Sidecar'; import WalletLiquid from '../wallet/WalletLiquid'; import WalletManager, { Currency } from '../wallet/WalletManager'; @@ -181,7 +181,7 @@ class SwapManager { private readonly blocks: Blocks, swapConfig: SwapConfig, lockupTransactionTracker: LockupTransactionTracker, - sidecar: Sidecar, + private readonly sidecar: Sidecar, balanceCheck: BalanceCheck, ) { this.deferredClaimer = new DeferredClaimer( @@ -207,6 +207,7 @@ class SwapManager { this.nursery = new SwapNursery( this.logger, + sidecar, notifications, this.nodeSwitch, rateProvider, @@ -278,8 +279,8 @@ class SwapManager { }), ]); - this.recreateFilters(pendingSwaps, false); - this.recreateFilters(pendingReverseSwaps, true); + await this.recreateFilters(pendingSwaps, false); + await this.recreateFilters(pendingReverseSwaps, true); this.recreateChainSwapFilters(pendingChainSwaps); await this.chainSwapSigner.init(); @@ -510,18 +511,16 @@ class SwapManager { swap.orderSide, ); - const decodedInvoice = decodeInvoice(invoice); + const decodedInvoice = await this.sidecar.decodeInvoiceOrOffer(invoice); + if (decodedInvoice.type === InvoiceType.Offer) { + throw Errors.NO_OFFERS_ALLOWED(); + } - if (decodedInvoice.paymentHash !== swap.preimageHash) { + if (getHexString(decodedInvoice.paymentHash!) !== swap.preimageHash) { throw Errors.INVOICE_INVALID_PREIMAGE_HASH(swap.preimageHash); } - const invoiceExpiry = InvoiceExpiryHelper.getInvoiceExpiry( - decodedInvoice.timestamp, - decodedInvoice.timeExpireDate, - ); - - if (getUnixTime() >= invoiceExpiry) { + if (decodedInvoice.isExpired) { throw Errors.INVOICE_EXPIRED_ALREADY(); } @@ -563,9 +562,9 @@ class SwapManager { const timeoutTimestamp = getUnixTime() + blocksUntilExpiry * blockTime * 60; - if (timeoutTimestamp > invoiceExpiry) { + if (timeoutTimestamp > decodedInvoice.expiryTimestamp) { const invoiceError = Errors.INVOICE_EXPIRES_TOO_EARLY( - invoiceExpiry, + decodedInvoice.expiryTimestamp, timeoutTimestamp, ); @@ -591,21 +590,23 @@ class SwapManager { await ChannelCreationRepository.setNodePublicKey( channelCreation, - decodedInvoice.payeeNodeKey!, + getHexString(decodedInvoice.payee!), ); } else if ( - !decodedInvoice.routingInfo || - (decodedInvoice.routingInfo && decodedInvoice.routingInfo.length === 0) + !decodedInvoice.routingHints || + (decodedInvoice.routingHints && decodedInvoice.routingHints.length === 0) ) { if (!canBeRouted) { throw Errors.NO_ROUTE_FOUND(); } } - this.logger.debug(`Setting invoice of Swap ${swap.id}: ${invoice}`); + this.logger.debug( + `Setting ${decodedInvoice.typePretty} invoice of Swap ${swap.id}: ${invoice}`, + ); await this.nursery.lock.acquire(SwapNursery.swapLock, async () => { - // Fetch the status again to make sure it is latest from the database + // Fetch the status again to make sure it is the latest from the database const previousStatus = (await swap.reload()).status; await SwapRepository.setInvoice( @@ -620,7 +621,7 @@ class SwapManager { // Fetch the swap const updatedSwap = (await SwapRepository.getSwap({ id: swap.id }))!; - // Not the most elegant way to emit this event but the only option + // Not the most elegant way to emit this event, but the only option // to emit it before trying to claim the swap emitSwapInvoiceSet(updatedSwap.id); @@ -1152,11 +1153,11 @@ class SwapManager { }; // TODO: check current status of invoices or do the streams handle that already? - private recreateFilters = ( + private recreateFilters = async ( swaps: Swap[] | ReverseSwap[], isReverse: boolean, ) => { - swaps.forEach((swap: Swap | ReverseSwap) => { + for (const swap of swaps) { const { base, quote } = splitPairId(swap.pair); const chainCurrency = getChainCurrency( base, @@ -1185,16 +1186,16 @@ class SwapManager { reverseSwap.minerFeeInvoice && swap.status !== SwapUpdateEvent.MinerFeePaid ) { - lndClient?.subscribeSingleInvoice( - getHexBuffer( - decodeInvoice(reverseSwap.minerFeeInvoice).paymentHash!, - ), + const decoded = await this.sidecar.decodeInvoiceOrOffer( + reverseSwap.minerFeeInvoice, ); + lndClient?.subscribeSingleInvoice(decoded.paymentHash!); } - lndClient?.subscribeSingleInvoice( - getHexBuffer(decodeInvoice(reverseSwap.invoice).paymentHash!), + const decoded = await this.sidecar.decodeInvoiceOrOffer( + reverseSwap.invoice, ); + lndClient?.subscribeSingleInvoice(decoded.paymentHash!); } else if ( (swap.status === SwapUpdateEvent.TransactionMempool || swap.status === SwapUpdateEvent.TransactionConfirmed) && @@ -1226,7 +1227,7 @@ class SwapManager { chainClient.addOutputFilter(outputScript); } } - }); + } }; private recreateChainSwapFilters = (swaps: ChainSwapInfo[]) => { diff --git a/lib/swap/SwapNursery.ts b/lib/swap/SwapNursery.ts index 1ceef9d5..3d5a98aa 100644 --- a/lib/swap/SwapNursery.ts +++ b/lib/swap/SwapNursery.ts @@ -20,7 +20,6 @@ import { import Logger from '../Logger'; import { calculateEthereumTransactionFee, - decodeInvoice, formatError, getChainCurrency, getHexBuffer, @@ -52,6 +51,7 @@ import ReverseSwapRepository from '../db/repositories/ReverseSwapRepository'; import SwapRepository from '../db/repositories/SwapRepository'; import TransactionLabelRepository from '../db/repositories/TransactionLabelRepository'; import WrappedSwapRepository from '../db/repositories/WrappedSwapRepository'; +import { msatToSat } from '../lightning/ChannelUtils'; import { HtlcState, InvoiceState, @@ -66,6 +66,7 @@ import Blocks from '../service/Blocks'; import TimeoutDeltaProvider from '../service/TimeoutDeltaProvider'; import ChainSwapSigner from '../service/cooperative/ChainSwapSigner'; import DeferredClaimer from '../service/cooperative/DeferredClaimer'; +import Sidecar from '../sidecar/Sidecar'; import Wallet from '../wallet/Wallet'; import WalletManager, { Currency } from '../wallet/WalletManager'; import ContractHandler from '../wallet/ethereum/ContractHandler'; @@ -121,6 +122,7 @@ class SwapNursery extends TypedEventEmitter { constructor( private logger: Logger, + private readonly sidecar: Sidecar, private readonly notifications: NotificationClient | undefined, private nodeSwitch: NodeSwitch, private rateProvider: RateProvider, @@ -149,8 +151,8 @@ class SwapNursery extends TypedEventEmitter { lockupTransactionTracker, overpaymentProtector, ); - this.lightningNursery = new LightningNursery(this.logger); - this.invoiceNursery = new InvoiceNursery(this.logger); + this.lightningNursery = new LightningNursery(this.logger, this.sidecar); + this.invoiceNursery = new InvoiceNursery(this.logger, this.sidecar); this.channelNursery = new ChannelNursery( this.logger, this.attemptSettleSwap, @@ -167,9 +169,13 @@ class SwapNursery extends TypedEventEmitter { ), ); - this.pendingPaymentTracker = new PendingPaymentTracker(this.logger); + this.pendingPaymentTracker = new PendingPaymentTracker( + this.logger, + this.sidecar, + ); this.paymentHandler = new PaymentHandler( this.logger, + this.sidecar, this.nodeSwitch, this.currencies, this.channelNursery, @@ -894,9 +900,14 @@ class SwapNursery extends TypedEventEmitter { swap.type === SwapType.ReverseSubmarine && (swap as ReverseSwap).minerFeeInvoice ) { + const decoded = await this.sidecar.decodeInvoiceOrOffer( + (swap as ReverseSwap).minerFeeInvoice!, + ); + const minerFeeAmountSat = msatToSat(decoded.amountMsat); + // TODO: how does this behave cross chain feePerVbyte = Math.round( - decodeInvoice((swap as ReverseSwap).minerFeeInvoice!).satoshis / + minerFeeAmountSat / FeeProvider.transactionSizes[CurrencyType.BitcoinLike][ SwapVersion.Legacy ].reverseLockup, diff --git a/package-lock.json b/package-lock.json index fa7ab11e..aaeb3d64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,6 @@ "bip32": "^4.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.6", - "bolt11": "^1.4.1", "boltz-core": "^2.1.2", "colors": "^1.4.0", "cors": "^2.8.5", @@ -102,13 +101,10 @@ }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + "license": "MIT" }, "node_modules/@aminya/node-gyp-build": { "version": "4.8.1-aminya.1", - "resolved": "https://registry.npmjs.org/@aminya/node-gyp-build/-/node-gyp-build-4.8.1-aminya.1.tgz", - "integrity": "sha512-r5eD8cvhlXpr5H2TKKsDBlPUzmK8FaWQG4QQ0+AbHyGra2a1uZBa7r9DXCe4FSADw1sU9RAMRJH5/POm4lojFQ==", "license": "MIT", "bin": { "aminya-node-gyp-build": "bin.js", @@ -773,8 +769,6 @@ }, "node_modules/@colors/colors": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "license": "MIT", "engines": { "node": ">=0.1.90" @@ -811,8 +805,6 @@ }, "node_modules/@datadog/pprof": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-5.3.0.tgz", - "integrity": "sha512-53z2Q3K92T6Pf4vz4Ezh8kfkVEvLzbnVqacZGgcbkP//q0joFzO8q00Etw1S6NdnCX0XmX08ULaF4rUI5r14mw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -828,8 +820,6 @@ }, "node_modules/@datadog/pprof/node_modules/node-gyp-build": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", "license": "MIT", "bin": { "node-gyp-build": "bin.js", @@ -839,8 +829,6 @@ }, "node_modules/@datadog/pprof/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "license": "BSD-3-Clause", "engines": { "node": ">= 8" @@ -862,8 +850,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "license": "MIT", "engines": { @@ -872,9 +858,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -895,25 +880,20 @@ }, "node_modules/@eslint/js": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@gar/promisify": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true, "license": "MIT", "optional": true }, "node_modules/@grpc/grpc-js": { "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz", - "integrity": "sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", @@ -925,8 +905,6 @@ }, "node_modules/@grpc/proto-loader": { "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", @@ -943,15 +921,12 @@ }, "node_modules/@grpc/proto-loader/node_modules/long": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "license": "Apache-2.0" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -975,9 +950,8 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@iarna/toml": { "version": "2.2.5", @@ -985,8 +959,6 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1002,8 +974,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "license": "MIT", "engines": { "node": ">=12" @@ -1014,8 +984,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", "engines": { "node": ">=12" @@ -1026,14 +994,10 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -1049,8 +1013,6 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -1064,8 +1026,6 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -1835,8 +1795,7 @@ }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -1970,8 +1929,6 @@ }, "node_modules/@npmcli/agent": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "license": "ISC", "dependencies": { "agent-base": "^7.1.0", @@ -1986,8 +1943,6 @@ }, "node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -1998,8 +1953,6 @@ }, "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "dependencies": { "agent-base": "^7.1.0", @@ -2011,8 +1964,6 @@ }, "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "license": "MIT", "dependencies": { "agent-base": "^7.0.2", @@ -2024,14 +1975,10 @@ }, "node_modules/@npmcli/agent/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.1", @@ -2044,8 +1991,6 @@ }, "node_modules/@npmcli/fs": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "license": "ISC", "optional": true, @@ -2056,8 +2001,6 @@ }, "node_modules/@npmcli/fs/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "optional": true, @@ -2070,9 +2013,6 @@ }, "node_modules/@npmcli/move-file": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "license": "MIT", "optional": true, @@ -2086,8 +2026,6 @@ }, "node_modules/@opentelemetry/api": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" @@ -2095,8 +2033,6 @@ }, "node_modules/@opentelemetry/api-logs": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", - "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.0.0" @@ -2107,8 +2043,6 @@ }, "node_modules/@opentelemetry/context-async-hooks": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz", - "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -2119,8 +2053,6 @@ }, "node_modules/@opentelemetry/core": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", - "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.27.0" @@ -2134,8 +2066,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.53.0.tgz", - "integrity": "sha512-x5ygAQgWAQOI+UOhyV3z9eW7QU2dCfnfOuIBiyYmC2AWr74f6x/3JBnP27IAcEx6aihpqBYWKnpoUTztkVPAZw==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", @@ -2153,8 +2083,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.53.0.tgz", - "integrity": "sha512-cSRKgD/n8rb+Yd+Cif6EnHEL/VZg1o8lEcEwFji1lwene6BdH51Zh3feAD9p2TyVoBKrl6Q9Zm2WltSp2k9gWQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2172,8 +2100,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-proto": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.53.0.tgz", - "integrity": "sha512-jhEcVL1deeWNmTUP05UZMriZPSWUBcfg94ng7JuBb1q2NExgnADQFl1VQQ+xo62/JepK+MxQe4xAwlsDQFbISA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2193,8 +2119,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.53.0.tgz", - "integrity": "sha512-m6KSh6OBDwfDjpzPVbuJbMgMbkoZfpxYH2r262KckgX9cMYvooWXEKzlJYsNDC6ADr28A1rtRoUVRwNfIN4tUg==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", @@ -2213,8 +2137,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-http": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.53.0.tgz", - "integrity": "sha512-m7F5ZTq+V9mKGWYpX8EnZ7NjoqAU7VemQ1E2HAG+W/u0wpY1x0OmbxAXfGKFHCspdJk8UKlwPGrpcB8nay3P8A==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2232,8 +2154,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-proto": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.53.0.tgz", - "integrity": "sha512-T/bdXslwRKj23S96qbvGtaYOdfyew3TjPEKOk5mHjkCmkVl1O9C/YMdejwSsdLdOq2YW30KjR9kVi0YMxZushQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2251,8 +2171,6 @@ }, "node_modules/@opentelemetry/exporter-zipkin": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.26.0.tgz", - "integrity": "sha512-PW5R34n3SJHO4t0UetyHKiXL6LixIqWN6lWncg3eRXhKuT30x+b7m5sDJS0kEWRfHeS+kG7uCw2vBzmB2lk3Dw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2269,8 +2187,6 @@ }, "node_modules/@opentelemetry/instrumentation": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", - "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2289,8 +2205,6 @@ }, "node_modules/@opentelemetry/instrumentation-express": { "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz", - "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", @@ -2306,8 +2220,6 @@ }, "node_modules/@opentelemetry/instrumentation-grpc": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.53.0.tgz", - "integrity": "sha512-Ss338T92yE1UCgr9zXSY3cPuaAy27uQw+wAC5IwsQKCXL5wwkiOgkd+2Ngksa9EGsgUEMwGeHi76bDdHFJ5Rrw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "0.53.0", @@ -2322,8 +2234,6 @@ }, "node_modules/@opentelemetry/instrumentation-http": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz", - "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2340,8 +2250,6 @@ }, "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2352,8 +2260,6 @@ }, "node_modules/@opentelemetry/instrumentation-pg": { "version": "0.44.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz", - "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.53.0", @@ -2371,8 +2277,6 @@ }, "node_modules/@opentelemetry/instrumentation-pg/node_modules/@types/pg": { "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", - "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -2382,8 +2286,6 @@ }, "node_modules/@opentelemetry/instrumentation-winston": { "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.40.0.tgz", - "integrity": "sha512-eMk2tKl86YJ8/yHvtDbyhrE35/R0InhO9zuHTflPx8T0+IvKVUhPV71MsJr32sImftqeOww92QHt4Jd+a5db4g==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "^0.53.0", @@ -2398,8 +2300,6 @@ }, "node_modules/@opentelemetry/instrumentation/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2410,8 +2310,6 @@ }, "node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.53.0.tgz", - "integrity": "sha512-UCWPreGQEhD6FjBaeDuXhiMf6kkBODF0ZQzrk/tuQcaVDJ+dDQ/xhJp192H9yWnKxVpEjFrSSLnpqmX4VwX+eA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2426,8 +2324,6 @@ }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.53.0.tgz", - "integrity": "sha512-F7RCN8VN+lzSa4fGjewit8Z5fEUpY/lmMVy5EWn2ZpbAabg3EE3sCLuTNfOiooNGnmvzimUPruoeqeko/5/TzQ==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", @@ -2444,8 +2340,6 @@ }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.53.0.tgz", - "integrity": "sha512-rM0sDA9HD8dluwuBxLetUmoqGJKSAbWenwD65KY9iZhUxdBHRLrIdrABfNDP7aiTjcgK8XFyTn5fhDz7N+W6DA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2465,8 +2359,6 @@ }, "node_modules/@opentelemetry/propagator-b3": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.26.0.tgz", - "integrity": "sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0" @@ -2480,8 +2372,6 @@ }, "node_modules/@opentelemetry/propagator-jaeger": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.26.0.tgz", - "integrity": "sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0" @@ -2495,8 +2385,6 @@ }, "node_modules/@opentelemetry/resources": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz", - "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2511,8 +2399,6 @@ }, "node_modules/@opentelemetry/sdk-logs": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.53.0.tgz", - "integrity": "sha512-dhSisnEgIj/vJZXZV6f6KcTnyLDx/VuQ6l3ejuZpMpPlh9S1qMHiZU9NMmOkVkwwHkMy3G6mEBwdP23vUZVr4g==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2528,8 +2414,6 @@ }, "node_modules/@opentelemetry/sdk-metrics": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz", - "integrity": "sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2544,8 +2428,6 @@ }, "node_modules/@opentelemetry/sdk-node": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.53.0.tgz", - "integrity": "sha512-0hsxfq3BKy05xGktwG8YdGdxV978++x40EAKyKr1CaHZRh8uqVlXnclnl7OMi9xLMJEcXUw7lGhiRlArFcovyg==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.53.0", @@ -2574,8 +2456,6 @@ }, "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz", - "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.26.0", @@ -2591,8 +2471,6 @@ }, "node_modules/@opentelemetry/sdk-trace-node": { "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.26.0.tgz", - "integrity": "sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/context-async-hooks": "1.26.0", @@ -2611,8 +2489,6 @@ }, "node_modules/@opentelemetry/sdk-trace-node/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2623,8 +2499,6 @@ }, "node_modules/@opentelemetry/semantic-conventions": { "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -2632,8 +2506,6 @@ }, "node_modules/@opentelemetry/sql-common": { "version": "0.40.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", - "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.1.0" @@ -2647,8 +2519,7 @@ }, "node_modules/@openzeppelin/contracts": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.2.tgz", - "integrity": "sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==" + "license": "MIT" }, "node_modules/@otplib/core": { "version": "12.0.1", @@ -2689,8 +2560,6 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, "engines": { @@ -2743,8 +2612,6 @@ }, "node_modules/@pyroscope/nodejs": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.4.0.tgz", - "integrity": "sha512-To75AyiEr7eS74fLXZUDlSHAWuOfBh/euL3JvYK376WoubtoaafPLzSgK/7XtWxYk+7ogjYQYpnuFk9/w+cgXA==", "license": "Apache-2.0", "dependencies": { "@datadog/pprof": "^5.3.0", @@ -2760,8 +2627,6 @@ }, "node_modules/@pyroscope/nodejs/node_modules/axios": { "version": "0.28.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", - "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.0", @@ -2771,8 +2636,6 @@ }, "node_modules/@pyroscope/nodejs/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "license": "BSD-3-Clause", "engines": { "node": ">= 8" @@ -2780,8 +2643,6 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, @@ -2818,8 +2679,6 @@ }, "node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "license": "MIT", "optional": true, @@ -2962,8 +2821,6 @@ }, "node_modules/@types/connect": { "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "license": "MIT", "dependencies": { @@ -3037,8 +2894,6 @@ }, "node_modules/@types/jest": { "version": "29.5.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", - "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, "license": "MIT", "dependencies": { @@ -3079,17 +2934,14 @@ }, "node_modules/@types/node-schedule": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/node-schedule/-/node-schedule-2.1.7.tgz", - "integrity": "sha512-G7Z3R9H7r3TowoH6D2pkzUHPhcJrDF4Jz1JOQ80AX0K2DWTHoN9VC94XzFAPNMdbW9TBzMZ3LjpFi7RYdbxtXA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/pg": { "version": "8.11.9", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", - "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -3099,8 +2951,6 @@ }, "node_modules/@types/pg-pool": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", - "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", "license": "MIT", "dependencies": { "@types/pg": "*" @@ -3108,8 +2958,6 @@ }, "node_modules/@types/pg/node_modules/pg-types": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", - "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", "license": "MIT", "dependencies": { "pg-int8": "1.0.1", @@ -3126,8 +2974,6 @@ }, "node_modules/@types/pg/node_modules/postgres-array": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", - "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", "license": "MIT", "engines": { "node": ">=12" @@ -3135,8 +2981,6 @@ }, "node_modules/@types/pg/node_modules/postgres-bytea": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", - "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", "license": "MIT", "dependencies": { "obuf": "~1.1.2" @@ -3147,8 +2991,6 @@ }, "node_modules/@types/pg/node_modules/postgres-date": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", - "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", "license": "MIT", "engines": { "node": ">=12" @@ -3156,8 +2998,6 @@ }, "node_modules/@types/pg/node_modules/postgres-interval": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", - "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", "license": "MIT", "engines": { "node": ">=12" @@ -3191,8 +3031,6 @@ }, "node_modules/@types/shimmer": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", "license": "MIT" }, "node_modules/@types/stack-utils": { @@ -3210,8 +3048,6 @@ }, "node_modules/@types/yargs": { "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { @@ -3225,8 +3061,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", - "integrity": "sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -3259,8 +3093,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.5.0.tgz", - "integrity": "sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3288,8 +3120,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", - "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", "dev": true, "license": "MIT", "dependencies": { @@ -3306,8 +3136,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", - "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==", "dev": true, "license": "MIT", "dependencies": { @@ -3331,8 +3159,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", - "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", "dev": true, "license": "MIT", "engines": { @@ -3345,8 +3171,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", - "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3374,8 +3198,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -3384,8 +3206,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3400,8 +3220,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -3413,8 +3231,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", - "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", "dev": true, "license": "MIT", "dependencies": { @@ -3436,8 +3252,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", - "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", "dev": true, "license": "MIT", "dependencies": { @@ -3454,9 +3268,8 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vulpemventures/secp256k1-zkp": { "version": "3.2.1", @@ -3474,8 +3287,6 @@ }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", "license": "(Unlicense OR Apache-2.0)", "optional": true }, @@ -3497,8 +3308,7 @@ }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3508,8 +3318,6 @@ }, "node_modules/acorn-import-attributes": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "license": "MIT", "peerDependencies": { "acorn": "^8" @@ -3517,9 +3325,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3549,8 +3356,6 @@ }, "node_modules/agentkeepalive": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "license": "MIT", "optional": true, @@ -3563,8 +3368,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -3576,9 +3379,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3674,8 +3476,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "license": "MIT", "dependencies": { @@ -3695,8 +3495,6 @@ }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3716,8 +3514,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3771,8 +3567,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "license": "MIT", "dependencies": { @@ -3794,8 +3588,6 @@ }, "node_modules/async": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "license": "MIT" }, "node_modules/async-exit-hook": { @@ -3815,8 +3607,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -3830,8 +3620,6 @@ }, "node_modules/axios": { "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -4002,8 +3790,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -4093,8 +3879,6 @@ }, "node_modules/bitcoinjs-lib": { "version": "6.1.6", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz", - "integrity": "sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.2.0", @@ -4140,8 +3924,6 @@ }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -4162,8 +3944,6 @@ }, "node_modules/block-stream2": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", "license": "MIT", "dependencies": { "readable-stream": "^3.4.0" @@ -4175,8 +3955,6 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4199,8 +3977,6 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4208,41 +3984,11 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/bolt11": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bech32": "^1.1.2", - "bitcoinjs-lib": "^6.0.0", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "lodash": "^4.17.11", - "safe-buffer": "^5.1.1", - "secp256k1": "^4.0.2" - } - }, - "node_modules/bolt11/node_modules/secp256k1": { - "version": "4.0.3", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/boltz-core": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/boltz-core/-/boltz-core-2.1.2.tgz", - "integrity": "sha512-b19P5dFIWl/bf/sqBlSRbTj7+/48hWaTUfR1qVkWaPr+OR1T0gNuYP86EOi3yQwR689GxXk0adeV5rKc9ue3Xw==", + "license": "AGPL-3.0", "dependencies": { "@boltz/bitcoin-ops": "^2.0.0", "@openzeppelin/contracts": "^5.0.2", @@ -4276,9 +4022,8 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4292,8 +4037,6 @@ }, "node_modules/browser-or-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", "license": "MIT" }, "node_modules/browserify-aes": { @@ -4386,8 +4129,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -4411,8 +4152,6 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -4429,8 +4168,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -4438,8 +4175,6 @@ }, "node_modules/cacache": { "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "license": "ISC", "optional": true, @@ -4469,8 +4204,6 @@ }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -4582,8 +4315,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "license": "MIT", "engines": { "node": ">=6" @@ -4704,8 +4435,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -4718,8 +4447,7 @@ }, "node_modules/cookie": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4863,8 +4591,6 @@ }, "node_modules/cross-env": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.1" @@ -4881,8 +4607,6 @@ }, "node_modules/cross-os": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cross-os/-/cross-os-1.5.0.tgz", - "integrity": "sha512-zjiZPGuzghQzjcymlI7oUh5iDCRlhfi9UBqkCmqxnnx/5B+K1+BgIm0YU+fua7GC+RoeywS0qsoEavRM+Kahxw==", "dev": true, "license": "MIT", "bin": { @@ -4903,14 +4627,10 @@ }, "node_modules/csv-parse": { "version": "5.5.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", - "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==", "license": "MIT" }, "node_modules/data-view-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4927,8 +4647,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4945,8 +4663,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "license": "MIT", "dependencies": { @@ -4963,8 +4679,6 @@ }, "node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4980,8 +4694,6 @@ }, "node_modules/decode-uri-component": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", "engines": { "node": ">=0.10" @@ -4989,8 +4701,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5018,8 +4728,6 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", "engines": { @@ -5041,8 +4749,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5074,8 +4780,6 @@ }, "node_modules/delay": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", "license": "MIT", "engines": { "node": ">=10" @@ -5098,8 +4802,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5107,8 +4809,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -5168,8 +4868,6 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "node_modules/ecpair": { @@ -5198,8 +4896,6 @@ }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5219,8 +4915,7 @@ }, "node_modules/elliptic": { "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5278,8 +4973,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5288,8 +4981,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -5297,8 +4988,6 @@ }, "node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, "node_modules/error-ex": { @@ -5311,8 +5000,6 @@ }, "node_modules/es-abstract": { "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "license": "MIT", "dependencies": { @@ -5372,8 +5059,6 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -5384,8 +5069,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -5393,8 +5076,6 @@ }, "node_modules/es-object-atoms": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "license": "MIT", "dependencies": { @@ -5406,8 +5087,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5464,9 +5143,8 @@ }, "node_modules/eslint": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -5537,8 +5215,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5555,8 +5231,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5605,8 +5279,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, "license": "MIT", "dependencies": { @@ -5657,8 +5329,6 @@ }, "node_modules/eslint-plugin-jest": { "version": "28.8.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", - "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5724,9 +5394,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5826,9 +5495,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5866,9 +5534,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5878,9 +5545,8 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -5895,8 +5561,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5904,8 +5568,6 @@ }, "node_modules/ethers": { "version": "6.13.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", - "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", "funding": [ { "type": "individual", @@ -5936,8 +5598,6 @@ }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, "node_modules/evp_bytestokey": { @@ -5979,8 +5639,6 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, "license": "(MIT OR WTFPL)", "engines": { @@ -6004,14 +5662,10 @@ }, "node_modules/exponential-backoff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", "license": "Apache-2.0" }, "node_modules/express": { "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6059,8 +5713,6 @@ }, "node_modules/express/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6077,8 +5729,6 @@ }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -6094,8 +5744,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -6117,8 +5765,6 @@ }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -6129,6 +5775,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -6158,9 +5805,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6174,8 +5820,6 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6184,8 +5828,6 @@ }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -6194,8 +5836,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -6207,9 +5847,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6219,8 +5858,6 @@ }, "node_modules/filter-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6228,8 +5865,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -6246,8 +5881,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6255,8 +5888,6 @@ }, "node_modules/finalhandler/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6264,8 +5895,6 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-up": { @@ -6285,9 +5914,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6299,9 +5927,8 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", @@ -6309,14 +5936,13 @@ }, "node_modules/follow-redirects": { "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -6335,8 +5961,6 @@ }, "node_modules/foreground-child": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -6351,8 +5975,6 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -6382,8 +6004,6 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6391,8 +6011,6 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT" }, @@ -6410,21 +6028,6 @@ "version": "1.0.0", "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -6493,8 +6096,6 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6531,8 +6132,6 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "license": "MIT", "dependencies": { @@ -6549,8 +6148,6 @@ }, "node_modules/git-cliff": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff/-/git-cliff-2.5.0.tgz", - "integrity": "sha512-HOWY+f5YyK3fYylYY7N8tdd+qPPK7cuInkyY1PVMRsU4c2JT8TM2rvxpVDa6p5uD5MlZ/4mZ7E8RLux99TapQQ==", "dev": true, "license": "MIT OR Apache-2.0", "dependencies": { @@ -6571,52 +6168,8 @@ "git-cliff-windows-x64": "2.5.0" } }, - "node_modules/git-cliff-darwin-arm64": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-darwin-arm64/-/git-cliff-darwin-arm64-2.5.0.tgz", - "integrity": "sha512-mIw8CZRRRVFB7HWLYESAlvLjXSoqMThyhbdCbVJYEZw2Qxx2UhldEkGv62+qLAhjYwG7GfoeByDqwXGS9rWe7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/git-cliff-darwin-x64": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-darwin-x64/-/git-cliff-darwin-x64-2.5.0.tgz", - "integrity": "sha512-YPoE+rAgdRea4apauK25yDqNDJYvZtoqE8FBKuKRo9AY+btqZMVgxN6UNf9Ea4jQtDQOTqhpYUpM0czk9z4GgQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/git-cliff-linux-arm64": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-linux-arm64/-/git-cliff-linux-arm64-2.5.0.tgz", - "integrity": "sha512-KJCD7tpH+LJw7XrKhi+jPWFxEGqsxUDUmNLeSjGGptkbXx+LXNFTqTdvQHCeFWSybKMuBnEcou8qEfYTDIcrIg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/git-cliff-linux-x64": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-linux-x64/-/git-cliff-linux-x64-2.5.0.tgz", - "integrity": "sha512-jvyfCRy758iHRvbsM6VmGWqOm0OczQLDI/r6w/OdAoRIt5vQiZJbJFJaMLqzEJRtN8g4hTrEZ+5EYbFY1BMVDQ==", "cpu": [ "x64" ], @@ -6627,39 +6180,10 @@ "linux" ] }, - "node_modules/git-cliff-windows-arm64": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-windows-arm64/-/git-cliff-windows-arm64-2.5.0.tgz", - "integrity": "sha512-t+5ikWPEJuVbDfVWU/Ckbno9qKA6FOQuM9gnRi7tjnXXDoEwdgwZVvCHB3p3dmcgzzmRA1RRAhS27CNJMTB42Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/git-cliff-windows-x64": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/git-cliff-windows-x64/-/git-cliff-windows-x64-2.5.0.tgz", - "integrity": "sha512-rKCowa6k79bdujEa9/s+PSk3M5ViNZISFp4NK+0Ac6yoCDN0ylgvhHRUhSoxLjJ73an40Rg+I83Q92HPKklVGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/git-cliff/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -6680,9 +6204,8 @@ }, "node_modules/git-cliff/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -6692,18 +6215,16 @@ }, "node_modules/git-cliff/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/git-cliff/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -6713,9 +6234,8 @@ }, "node_modules/git-cliff/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6725,9 +6245,8 @@ }, "node_modules/git-cliff/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -6740,9 +6259,8 @@ }, "node_modules/git-cliff/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -6755,9 +6273,8 @@ }, "node_modules/git-cliff/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6767,9 +6284,8 @@ }, "node_modules/git-cliff/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6779,9 +6295,8 @@ }, "node_modules/git-cliff/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6791,8 +6306,6 @@ }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, "license": "MIT" }, @@ -6827,9 +6340,8 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6856,8 +6368,6 @@ }, "node_modules/google-protobuf": { "version": "3.21.4", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", - "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", "license": "(BSD-3-Clause AND Apache-2.0)" }, "node_modules/gopd": { @@ -6946,8 +6456,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -6958,8 +6466,6 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6980,8 +6486,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -7020,8 +6524,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7046,14 +6548,10 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -7068,8 +6566,6 @@ }, "node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "license": "MIT", "optional": true, @@ -7104,8 +6600,6 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "license": "MIT", "optional": true, @@ -7115,8 +6609,6 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -7127,8 +6619,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -7148,8 +6638,6 @@ }, "node_modules/ignore": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "license": "MIT", "engines": { @@ -7158,9 +6646,8 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7174,8 +6661,6 @@ }, "node_modules/import-in-the-middle": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz", - "integrity": "sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.8.2", @@ -7211,8 +6696,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -7220,8 +6703,6 @@ }, "node_modules/infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true, "license": "ISC", "optional": true @@ -7247,15 +6728,11 @@ }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "license": "MIT", "dependencies": { @@ -7269,8 +6746,6 @@ }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -7278,8 +6753,7 @@ }, "node_modules/ip-address": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -7290,8 +6764,7 @@ }, "node_modules/ip-address/node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + "license": "BSD-3-Clause" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -7302,8 +6775,6 @@ }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -7318,8 +6789,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "license": "MIT", "dependencies": { @@ -7376,8 +6845,6 @@ }, "node_modules/is-core-module": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7391,8 +6858,6 @@ }, "node_modules/is-data-view": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "license": "MIT", "dependencies": { @@ -7429,8 +6894,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -7446,8 +6909,6 @@ }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -7472,14 +6933,10 @@ }, "node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -7491,9 +6948,8 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -7522,8 +6978,6 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "license": "MIT", "dependencies": { @@ -7539,8 +6993,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "license": "MIT", "dependencies": { @@ -7593,8 +7045,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" @@ -7619,8 +7069,6 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, @@ -7738,8 +7186,6 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -7753,8 +7199,6 @@ }, "node_modules/jake": { "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7772,8 +7216,6 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -7788,8 +7230,6 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -7805,8 +7245,6 @@ }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7818,15 +7256,11 @@ }, "node_modules/jake/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -7835,8 +7269,6 @@ }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -9314,8 +8746,7 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", @@ -9330,9 +8761,8 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -9341,9 +8771,8 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -9363,9 +8792,8 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -9409,8 +8837,7 @@ }, "node_modules/liquidjs-lib": { "version": "6.0.2-liquid.35", - "resolved": "https://registry.npmjs.org/liquidjs-lib/-/liquidjs-lib-6.0.2-liquid.35.tgz", - "integrity": "sha512-Q5ZNWu4zqtkvWShrZOBusLJcNgsr4iF8xEDor/zUG4mOabl2vw7YGvwNeQaGJ8JQA9InlzU1Q9NJi/h07HkI8Q==", + "license": "MIT", "dependencies": { "@types/randombytes": "^2.0.0", "bech32": "^2.0.0", @@ -9454,8 +8881,6 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, "node_modules/lodash.get": { @@ -9485,8 +8910,6 @@ }, "node_modules/logform": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", - "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", @@ -9546,8 +8969,6 @@ }, "node_modules/make-fetch-happen": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "license": "ISC", "optional": true, @@ -9592,8 +9013,6 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9601,8 +9020,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9615,8 +9032,6 @@ }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -9636,8 +9051,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -9650,8 +9063,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -9687,8 +9098,6 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", "engines": { @@ -9726,8 +9135,6 @@ }, "node_modules/minio": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/minio/-/minio-8.0.1.tgz", - "integrity": "sha512-FzDO6yGnqLtm8sp3mXafWtiRUOslJSSg/aI0v9YbN5vjw5KLoODKAROCyi766NIvTSxcfHBrbhCSGk1A+MOzDg==", "license": "Apache-2.0", "dependencies": { "async": "^3.2.4", @@ -9751,8 +9158,6 @@ }, "node_modules/minio/node_modules/ipaddr.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "license": "MIT", "engines": { "node": ">= 10" @@ -9770,8 +9175,6 @@ }, "node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "license": "ISC", "optional": true, @@ -9784,8 +9187,6 @@ }, "node_modules/minipass-fetch": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "license": "MIT", "optional": true, @@ -9803,8 +9204,6 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -9815,8 +9214,6 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -9827,8 +9224,6 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -9850,8 +9245,6 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -9862,15 +9255,11 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, "license": "MIT" }, "node_modules/module-details-from-path": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", "license": "MIT" }, "node_modules/moment": { @@ -9892,8 +9281,6 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/nan": { @@ -9902,8 +9289,6 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true, "license": "MIT" }, @@ -9926,8 +9311,6 @@ }, "node_modules/node-abi": { "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", "dev": true, "license": "MIT", "dependencies": { @@ -9939,8 +9322,6 @@ }, "node_modules/node-abi/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -9950,10 +9331,6 @@ "node": ">=10" } }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, "node_modules/node-fetch": { "version": "2.6.9", "dev": true, @@ -9982,8 +9359,6 @@ }, "node_modules/node-gyp": { "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "license": "MIT", "optional": true, @@ -10006,20 +9381,8 @@ "node": ">= 10.12.0" } }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-gyp/node_modules/are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "optional": true, @@ -10033,9 +9396,6 @@ }, "node_modules/node-gyp/node_modules/gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "optional": true, @@ -10055,9 +9415,6 @@ }, "node_modules/node-gyp/node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "optional": true, @@ -10073,8 +9430,6 @@ }, "node_modules/node-gyp/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "optional": true, @@ -10175,8 +9530,6 @@ }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10194,8 +9547,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10213,8 +9564,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10228,8 +9577,6 @@ }, "node_modules/object.values": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10246,8 +9593,6 @@ }, "node_modules/obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "license": "MIT" }, "node_modules/on-finished": { @@ -10348,8 +9693,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -10371,15 +9714,12 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10406,8 +9746,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10441,8 +9779,6 @@ }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -10457,14 +9793,10 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -10472,14 +9804,10 @@ }, "node_modules/path-to-regexp": { "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "license": "MIT" }, "node_modules/pg": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", "license": "MIT", "dependencies": { "pg-connection-string": "^2.6.4", @@ -10510,8 +9838,7 @@ }, "node_modules/pg-connection-string": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + "license": "MIT" }, "node_modules/pg-hstore": { "version": "2.3.4", @@ -10532,8 +9859,6 @@ }, "node_modules/pg-numeric": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", - "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", "license": "ISC", "engines": { "node": ">=4" @@ -10541,16 +9866,14 @@ }, "node_modules/pg-pool": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", @@ -10658,8 +9981,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10698,20 +10019,14 @@ }, "node_modules/postgres-range": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", - "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", "license": "MIT" }, "node_modules/pprof-format": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.1.0.tgz", - "integrity": "sha512-0+G5bHH0RNr8E5hoZo/zJYsL92MhkZjwrHp3O2IxmY8RJL9ooKeuZ8Tm0ZNBw5sGZ9TiM71sthTjWoR2Vf5/xw==", "license": "MIT" }, "node_modules/prebuild-install": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10745,8 +10060,6 @@ }, "node_modules/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -10785,8 +10098,6 @@ }, "node_modules/proc-log": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -10794,8 +10105,6 @@ }, "node_modules/prom-client": { "version": "15.1.3", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", - "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.4.0", @@ -10807,16 +10116,12 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true, "license": "ISC", "optional": true }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "license": "MIT", "dependencies": { "err-code": "^2.0.2", @@ -10840,8 +10145,6 @@ }, "node_modules/protobufjs": { "version": "7.3.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", - "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -10883,8 +10186,6 @@ }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "license": "MIT", "dependencies": { @@ -10894,9 +10195,8 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -10925,8 +10225,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -10940,8 +10238,6 @@ }, "node_modules/query-string": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.2", @@ -10984,8 +10280,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10993,8 +10287,6 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -11008,8 +10300,6 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -11024,8 +10314,6 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { @@ -11051,8 +10339,6 @@ }, "node_modules/rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { "resolve": "^1.1.6" }, @@ -11062,14 +10348,10 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "license": "MIT", "dependencies": { @@ -11105,8 +10387,6 @@ }, "node_modules/require-in-the-middle": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", - "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -11153,9 +10433,8 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11170,8 +10449,6 @@ }, "node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "license": "MIT", "engines": { "node": ">= 4" @@ -11236,8 +10513,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11273,8 +10548,6 @@ }, "node_modules/safe-regex-test": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "license": "MIT", "dependencies": { @@ -11302,8 +10575,6 @@ }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "license": "ISC" }, "node_modules/secp256k1": { @@ -11334,8 +10605,6 @@ }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -11358,8 +10627,6 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -11367,14 +10634,10 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/sequelize": { "version": "6.37.3", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.3.tgz", - "integrity": "sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==", "funding": [ { "type": "opencollective", @@ -11455,8 +10718,6 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -11470,8 +10731,6 @@ }, "node_modules/serve-static/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11484,8 +10743,6 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -11501,8 +10758,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11517,8 +10772,6 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sha.js": { @@ -11551,8 +10804,6 @@ }, "node_modules/shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", @@ -11568,14 +10819,10 @@ }, "node_modules/shimmer": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "license": "BSD-2-Clause" }, "node_modules/side-channel": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -11597,8 +10844,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -11618,8 +10863,6 @@ }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -11684,8 +10927,6 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -11721,8 +10962,6 @@ }, "node_modules/socks": { "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -11735,8 +10974,6 @@ }, "node_modules/socks-proxy-agent": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, "license": "MIT", "optional": true, @@ -11772,8 +11009,6 @@ }, "node_modules/split-on-first": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "license": "MIT", "engines": { "node": ">=6" @@ -11793,8 +11028,6 @@ }, "node_modules/sqlite3": { "version": "5.1.7", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", - "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", @@ -11818,15 +11051,11 @@ }, "node_modules/sqlite3/node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, "license": "MIT" }, "node_modules/ssri": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "license": "ISC", "optional": true, @@ -11872,14 +11101,10 @@ }, "node_modules/stream-chain": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", "license": "BSD-3-Clause" }, "node_modules/stream-json": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" @@ -11887,8 +11112,6 @@ }, "node_modules/strict-uri-encode": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "license": "MIT", "engines": { "node": ">=4" @@ -11915,8 +11138,6 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11930,8 +11151,6 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11944,8 +11163,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "license": "MIT", "dependencies": { @@ -11963,8 +11180,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11978,8 +11193,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12007,8 +11220,6 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12120,8 +11331,7 @@ }, "node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -12136,8 +11346,6 @@ }, "node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "license": "MIT", "dependencies": { @@ -12149,15 +11357,11 @@ }, "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, "license": "ISC" }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12173,8 +11377,7 @@ }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", "engines": { "node": ">=8" } @@ -12216,8 +11419,6 @@ }, "node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "license": "MIT", "dependencies": { "readable-stream": "3" @@ -12248,9 +11449,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -12260,8 +11460,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -12282,8 +11480,6 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "license": "MIT", "engines": { @@ -12295,8 +11491,6 @@ }, "node_modules/ts-jest": { "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "license": "MIT", "dependencies": { @@ -12344,8 +11538,6 @@ }, "node_modules/ts-jest/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -12445,8 +11637,6 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12477,9 +11667,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -12489,8 +11678,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -12502,8 +11689,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12517,8 +11702,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "license": "MIT", "dependencies": { @@ -12537,8 +11720,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "license": "MIT", "dependencies": { @@ -12558,8 +11739,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "license": "MIT", "dependencies": { @@ -12583,8 +11762,6 @@ }, "node_modules/typescript": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12634,8 +11811,6 @@ }, "node_modules/unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "license": "ISC", "optional": true, @@ -12645,8 +11820,6 @@ }, "node_modules/unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "license": "ISC", "optional": true, @@ -12692,9 +11865,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -12705,8 +11877,6 @@ }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -12788,8 +11958,6 @@ }, "node_modules/web-encoding": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "license": "MIT", "dependencies": { "util": "^0.12.3" @@ -12842,8 +12010,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -12876,8 +12042,6 @@ }, "node_modules/winston": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", - "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", @@ -12898,8 +12062,6 @@ }, "node_modules/winston-loki": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.1.2.tgz", - "integrity": "sha512-l1iqDDaEUt63Q8arDsiVCXIrK3jLjPOEc5UTs+WMVnWf8D+A8ZRErAAXKDOduT240aNGzpTbCwe5zfdqqLlzMg==", "license": "MIT", "dependencies": { "async-exit-hook": "2.0.1", @@ -12914,8 +12076,7 @@ }, "node_modules/winston-transport": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "license": "MIT", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -12955,8 +12116,6 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -12972,8 +12131,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12987,8 +12144,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -12999,8 +12154,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -13048,8 +12201,7 @@ }, "node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -13068,8 +12220,6 @@ }, "node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "license": "MIT", "dependencies": { "sax": ">=0.6.0", @@ -13081,8 +12231,6 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "license": "MIT", "engines": { "node": ">=4.0" @@ -13185,8 +12333,6 @@ }, "node_modules/zeromq": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/zeromq/-/zeromq-6.0.4.tgz", - "integrity": "sha512-VEkrYixtqrFmkV2YTJDUmOR3qNJoG/9U+ETxw4LcUNqoJ22AdIo/Wv5asgP1oaV1PIziimaOitVqWz4+j9YJsQ==", "hasInstallScript": true, "license": "MIT AND MPL-2.0", "dependencies": { @@ -13203,8 +12349,6 @@ }, "node_modules/zeromq/node_modules/@npmcli/fs": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "license": "ISC", "dependencies": { "semver": "^7.3.5" @@ -13215,8 +12359,6 @@ }, "node_modules/zeromq/node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -13224,8 +12366,6 @@ }, "node_modules/zeromq/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -13233,8 +12373,6 @@ }, "node_modules/zeromq/node_modules/cacache": { "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", @@ -13256,8 +12394,6 @@ }, "node_modules/zeromq/node_modules/fs-minipass": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "license": "ISC", "dependencies": { "minipass": "^7.0.3" @@ -13268,8 +12404,6 @@ }, "node_modules/zeromq/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -13288,8 +12422,6 @@ }, "node_modules/zeromq/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "license": "ISC", "engines": { "node": ">=16" @@ -13297,14 +12429,10 @@ }, "node_modules/zeromq/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/zeromq/node_modules/make-fetch-happen": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "license": "ISC", "dependencies": { "@npmcli/agent": "^2.0.0", @@ -13326,8 +12454,6 @@ }, "node_modules/zeromq/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -13341,8 +12467,6 @@ }, "node_modules/zeromq/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -13350,8 +12474,6 @@ }, "node_modules/zeromq/node_modules/minipass-collect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "license": "ISC", "dependencies": { "minipass": "^7.0.3" @@ -13362,8 +12484,6 @@ }, "node_modules/zeromq/node_modules/minipass-fetch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "license": "MIT", "dependencies": { "minipass": "^7.0.3", @@ -13379,14 +12499,10 @@ }, "node_modules/zeromq/node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/zeromq/node_modules/node-gyp": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", @@ -13409,8 +12525,6 @@ }, "node_modules/zeromq/node_modules/nopt": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "license": "ISC", "dependencies": { "abbrev": "^2.0.0" @@ -13424,8 +12538,6 @@ }, "node_modules/zeromq/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13436,8 +12548,6 @@ }, "node_modules/zeromq/node_modules/ssri": { "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "license": "ISC", "dependencies": { "minipass": "^7.0.3" @@ -13448,8 +12558,6 @@ }, "node_modules/zeromq/node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" @@ -13460,8 +12568,6 @@ }, "node_modules/zeromq/node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" @@ -13472,8 +12578,6 @@ }, "node_modules/zeromq/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "license": "ISC", "dependencies": { "isexe": "^3.1.1" diff --git a/package.json b/package.json index 982c2b51..307ad4ee 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,6 @@ "bip32": "^4.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.6", - "bolt11": "^1.4.1", "boltz-core": "^2.1.2", "colors": "^1.4.0", "cors": "^2.8.5", diff --git a/swagger-spec.json b/swagger-spec.json index 7c2c57f1..d321e6fe 100644 --- a/swagger-spec.json +++ b/swagger-spec.json @@ -444,6 +444,76 @@ } } }, + "/lightning/{currency}/bolt12/fetch": { + "post": { + "tags": [ + "Lightning" + ], + "description": "Fetches an invoice for a BOLT12 offer", + "parameters": [ + { + "in": "path", + "name": "currency", + "required": true, + "schema": { + "type": "string" + }, + "description": "Currency of the lightning network to use" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "offer": { + "type": "string", + "required": true, + "description": "A BOLT12 offer" + }, + "amount": { + "type": "number", + "required": true, + "description": "Amount of the invoice that should be fetched in satoshis" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "BOLT12 invoice fetched from the offer", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invoice": { + "type": "string", + "required": true, + "description": "A BOLT12 invoice" + } + } + } + } + } + }, + "400": { + "description": "Error that caused the broadcast of the transaction to fail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, "/nodes": { "get": { "description": "Information about the Lightning nodes the backend is connected to", @@ -2783,6 +2853,10 @@ "name": "Info", "description": "General information" }, + { + "name": "Lightning", + "description": "Lightning related endpoints" + }, { "name": "Nodes", "description": "Lightning nodes"