diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 164faa1..e521b1d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,6 +33,19 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + + - uses: Swatinem/rust-cache@v2 + with: + workspaces: | + lib -> target + cli -> target + + - name: Install Protoc + uses: arduino/setup-protoc@v2 + with: + version: "23.4" + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Check Rust Clippy run: | cd lib @@ -46,6 +59,18 @@ jobs: steps: - uses: actions/checkout@v4 + - uses: Swatinem/rust-cache@v2 + with: + workspaces: | + lib -> target + cli -> target + + - name: Install Protoc + uses: arduino/setup-protoc@v2 + with: + version: "23.4" + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Run sdk-core tests working-directory: lib/core run: cargo test @@ -57,6 +82,18 @@ jobs: - name: Checkout repo uses: actions/checkout@v4 + - uses: Swatinem/rust-cache@v2 + with: + workspaces: | + lib -> target + cli -> target + + - name: Install Protoc + uses: arduino/setup-protoc@v2 + with: + version: "23.4" + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build bindings working-directory: lib/bindings run: cargo build diff --git a/cli/Cargo.lock b/cli/Cargo.lock index 5c9cb37..8b4c3c3 100644 --- a/cli/Cargo.lock +++ b/cli/Cargo.lock @@ -33,11 +33,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug", ] +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "aes-gcm-siv" version = "0.10.1" @@ -45,8 +56,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfde8146762f3c5f3c5cd41aa17a71f3188df09d5857192b658510d850e16068" dependencies = [ "aead", - "aes", - "cipher", + "aes 0.7.5", + "cipher 0.3.0", "ctr", "polyval", "subtle", @@ -86,12 +97,6 @@ dependencies = [ "chrono", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -183,6 +188,28 @@ dependencies = [ "backtrace", ] +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + [[package]] name = "async-trait" version = "0.1.80" @@ -191,7 +218,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -223,6 +250,51 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.71" @@ -268,6 +340,16 @@ version = "0.10.0-beta" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98f7eed2b2781a6f0b5c903471d48e15f56fb4e1165df8a9a2337fd1a59d45ea" +[[package]] +name = "bip21" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1998475af29ccfb7c761bb624a16e501fc321510366012bc9cce267bc134aedc" +dependencies = [ + "bitcoin 0.29.2", + "percent-encoding-rfc3986", +] + [[package]] name = "bip39" version = "2.0.0" @@ -281,6 +363,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "bitcoin" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0694ea59225b0c5f3cb405ff3f670e4828358ed26aec49dc352f730f0cb1a8a3" +dependencies = [ + "bech32 0.9.1", + "bitcoin_hashes 0.11.0", + "secp256k1 0.24.3", +] + [[package]] name = "bitcoin" version = "0.30.2" @@ -372,6 +465,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "bmp-monochrome" version = "1.1.0" @@ -388,7 +490,7 @@ dependencies = [ "electrum-client", "elements", "env_logger 0.7.1", - "lightning-invoice", + "lightning-invoice 0.30.0", "log", "native-tls", "serde", @@ -437,6 +539,7 @@ dependencies = [ "reqwest 0.11.20", "rusqlite", "rusqlite_migration", + "sdk-common", "security-framework", "security-framework-sys", "serde", @@ -478,6 +581,15 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "cc" version = "1.0.97" @@ -513,6 +625,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clap" version = "4.5.4" @@ -541,10 +663,10 @@ version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -628,7 +750,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] @@ -664,7 +786,7 @@ checksum = "51aac4c99b2e6775164b412ea33ae8441b2fde2dbf05a20bc0052a63d08c475b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -677,6 +799,12 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + [[package]] name = "electrum-client" version = "0.19.0" @@ -830,6 +958,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.0.30" @@ -878,7 +1012,7 @@ dependencies = [ "md-5", "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -967,7 +1101,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -1056,7 +1190,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -1075,7 +1209,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -1088,6 +1222,12 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.5" @@ -1095,18 +1235,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", - "allocator-api2", ] [[package]] name = "hashlink" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692eaaf7f7607518dd3cef090f1474b61edc5301d8012f09579920df68b725ee" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ - "hashbrown", + "hashbrown 0.14.5", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "heck" version = "0.5.0" @@ -1299,6 +1444,18 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.29", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1375,6 +1532,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + [[package]] name = "indexmap" version = "2.2.6" @@ -1382,7 +1549,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", ] [[package]] @@ -1406,6 +1583,15 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -1444,6 +1630,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "lightning" +version = "0.0.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90a0f2155316f1570446a0447c993480673f840748c8ed25bbc59dfc442ac770" +dependencies = [ + "bitcoin 0.29.2", +] + [[package]] name = "lightning" version = "0.0.122" @@ -1454,6 +1649,20 @@ dependencies = [ "hex-conservative", ] +[[package]] +name = "lightning-invoice" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788c0158526ec27a502043c2911ea6ea58fdc656bdf8749484942c07b790d23" +dependencies = [ + "bech32 0.9.1", + "bitcoin 0.29.2", + "bitcoin_hashes 0.11.0", + "lightning 0.0.116", + "num-traits", + "secp256k1 0.24.3", +] + [[package]] name = "lightning-invoice" version = "0.30.0" @@ -1462,7 +1671,7 @@ checksum = "106fdb897e69df697480f45bf0a564b425af488fb0f7407e770a770c39b19a21" dependencies = [ "bech32 0.9.1", "bitcoin 0.30.2", - "lightning", + "lightning 0.0.122", "num-traits", "secp256k1 0.27.0", ] @@ -1563,6 +1772,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "md-5" version = "0.10.6" @@ -1616,6 +1831,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "native-tls" version = "0.2.11" @@ -1717,7 +1938,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -1790,6 +2011,22 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "percent-encoding-rfc3986" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3637c05577168127568a64e9dc5a6887da720efef07b3d9472d45f63ab191166" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.2.6", +] + [[package]] name = "pin-project" version = "1.1.5" @@ -1807,7 +2044,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -1846,6 +2083,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + [[package]] name = "proc-macro2" version = "1.0.82" @@ -1855,6 +2102,60 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck 0.4.1", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + [[package]] name = "qr_code" version = "2.0.0" @@ -1870,6 +2171,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4680be54420a86f28b3e662bd8f76fd270c1eed5b2e3ebe9e404c12c4ec2b066" +[[package]] +name = "querystring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9318ead08c799aad12a55a3e78b82e0b6167271ffd1f627b758891282f739187" + [[package]] name = "quick-error" version = "1.2.3" @@ -2172,6 +2479,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + [[package]] name = "rustyline" version = "13.0.0" @@ -2203,7 +2516,7 @@ checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -2237,6 +2550,43 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdk-common" +version = "0.4.1" +source = "git+https://github.com/breez/breez-sdk?branch=main#7c48c1e5a6f0450ae6f6150b8e40235ee31fd330" +dependencies = [ + "aes 0.8.4", + "anyhow", + "base64 0.13.1", + "bip21", + "bitcoin 0.29.2", + "cbc", + "hex", + "lightning 0.0.116", + "lightning-invoice 0.24.0", + "log", + "prost", + "querystring", + "regex", + "reqwest 0.11.20", + "serde", + "serde_json", + "strum_macros", + "thiserror", + "tonic", + "tonic-build", +] + +[[package]] +name = "secp256k1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "bitcoin_hashes 0.11.0", + "secp256k1-sys 0.6.1", +] + [[package]] name = "secp256k1" version = "0.27.0" @@ -2259,6 +2609,15 @@ dependencies = [ "serde", ] +[[package]] +name = "secp256k1-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +dependencies = [ + "cc", +] + [[package]] name = "secp256k1-sys" version = "0.8.1" @@ -2357,7 +2716,7 @@ checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -2431,12 +2790,36 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.61", +] + [[package]] name = "subtle" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.61" @@ -2513,7 +2896,7 @@ checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -2557,6 +2940,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.2.0" @@ -2565,7 +2958,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -2628,6 +3021,51 @@ dependencies = [ "tokio", ] +[[package]] +name = "tonic" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "prost-derive", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tonic-build" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + [[package]] name = "tower" version = "0.4.13" @@ -2636,9 +3074,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand", + "slab", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -2676,7 +3118,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] @@ -2688,6 +3130,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -2860,7 +3312,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.61", "wasm-bindgen-shared", ] @@ -2894,7 +3346,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2945,6 +3397,18 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3161,7 +3625,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.61", ] [[package]] diff --git a/cli/src/commands.rs b/cli/src/commands.rs index 08649cf..f460c0b 100644 --- a/cli/src/commands.rs +++ b/cli/src/commands.rs @@ -7,6 +7,7 @@ use std::time::Duration; use anyhow::Result; use breez_liquid_sdk::model::*; use breez_liquid_sdk::sdk::LiquidSdk; +use breez_liquid_sdk::*; use clap::{arg, Parser}; use qrcode_rs::render::unicode; use qrcode_rs::{EcLevel, QrCode}; @@ -62,6 +63,24 @@ pub(crate) enum Command { }, /// Shuts down all background threads of this SDK instance Disconnect, + /// Parse a generic string to get its type and relevant metadata + Parse { + /// Generic input (URL, LNURL, BIP-21 BTC Address, LN invoice, etc) + input: String, + }, + /// Pay using LNURL + LnurlPay { + /// LN Address or LNURL-pay endpoint + lnurl: String, + }, + LnurlWithdraw { + /// LNURL-withdraw endpoint + lnurl: String, + }, + LnurlAuth { + /// LNURL-auth endpoint + lnurl: String, + }, } #[derive(Helper, Completer, Hinter, Validator)] @@ -105,7 +124,7 @@ macro_rules! wait_confirmation { } pub(crate) async fn handle_command( - _rl: &mut Editor, + rl: &mut Editor, sdk: &Arc, command: Command, ) -> Result { @@ -209,6 +228,72 @@ pub(crate) async fn handle_command( sdk.disconnect().await?; command_result!("Liquid SDK instance disconnected") } + Command::Parse { input } => { + let res = LiquidSdk::parse(&input).await?; + command_result!(res) + } + Command::LnurlPay { lnurl } => { + let input = LiquidSdk::parse(&lnurl).await?; + let res = match input { + InputType::LnUrlPay { data: pd } => { + let prompt = format!( + "Amount to pay in millisatoshi (min {} msat, max {} msat): ", + pd.min_sendable, pd.max_sendable + ); + + let amount_msat = rl.readline(&prompt)?; + let pay_res = sdk + .lnurl_pay(LnUrlPayRequest { + data: pd, + amount_msat: amount_msat.parse::()?, + comment: None, + payment_label: None, + }) + .await?; + Ok(pay_res) + } + _ => Err(anyhow::anyhow!("Invalid input")), + }?; + + command_result!(res) + } + Command::LnurlWithdraw { lnurl } => { + let input = LiquidSdk::parse(&lnurl).await?; + let res = match input { + InputType::LnUrlWithdraw { data: pd } => { + let prompt = format!( + "Amount to withdraw in millisatoshi (min {} msat, max {} msat): ", + pd.min_withdrawable, pd.max_withdrawable + ); + + let amount_msat = rl.readline(&prompt)?; + let withdraw_res = sdk + .lnurl_withdraw(LnUrlWithdrawRequest { + data: pd, + amount_msat: amount_msat.parse()?, + description: Some("LNURL-withdraw".to_string()), + }) + .await?; + Ok(withdraw_res) + } + _ => Err(anyhow::anyhow!("Invalid input")), + }?; + + command_result!(res) + } + Command::LnurlAuth { lnurl } => { + let lnurl_endpoint = lnurl.trim(); + + let res = match parse(lnurl_endpoint).await? { + InputType::LnUrlAuth { data: ad } => { + let auth_res = sdk.lnurl_auth(ad).await?; + serde_json::to_string_pretty(&auth_res).map_err(|e| e.into()) + } + _ => Err(anyhow::anyhow!("Unexpected result type")), + }?; + + command_result!(res) + } }) } diff --git a/cli/src/main.rs b/cli/src/main.rs index 4c855ea..3065722 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -23,11 +23,11 @@ pub(crate) struct Args { pub(crate) log_file: Option, #[clap(short, long, value_parser = parse_network_arg)] - pub(crate) network: Option, + pub(crate) network: Option, } -fn parse_network_arg(s: &str) -> Result { - Network::try_from(s).map_err(|e| e.to_string()) +fn parse_network_arg(s: &str) -> Result { + LiquidNetwork::try_from(s).map_err(|e| e.to_string()) } fn show_results(result: Result) -> Result<()> { @@ -73,7 +73,7 @@ async fn main() -> Result<()> { } let mnemonic = persistence.get_or_create_mnemonic()?; - let network = args.network.unwrap_or(Network::Testnet); + let network = args.network.unwrap_or(LiquidNetwork::Testnet); let mut config = LiquidSdk::default_config(network); config.working_dir = data_dir_str; let sdk = LiquidSdk::connect(ConnectRequest { @@ -86,8 +86,8 @@ async fn main() -> Result<()> { .await?; let cli_prompt = match network { - Network::Mainnet => "breez-liquid-cli [mainnet]> ", - Network::Testnet => "breez-liquid-cli [testnet]> ", + LiquidNetwork::Mainnet => "breez-liquid-cli [mainnet]> ", + LiquidNetwork::Testnet => "breez-liquid-cli [testnet]> ", }; loop { diff --git a/lib/Cargo.lock b/lib/Cargo.lock index f253bfe..e2cbfa4 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -33,11 +33,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug", ] +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "aes-gcm-siv" version = "0.10.1" @@ -45,8 +56,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfde8146762f3c5f3c5cd41aa17a71f3188df09d5857192b658510d850e16068" dependencies = [ "aead", - "aes", - "cipher", + "aes 0.7.5", + "cipher 0.3.0", "ctr", "polyval", "subtle", @@ -86,12 +97,6 @@ dependencies = [ "chrono", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -263,6 +268,28 @@ dependencies = [ "toml", ] +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + [[package]] name = "async-trait" version = "0.1.80" @@ -303,6 +330,51 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.71" @@ -388,6 +460,16 @@ dependencies = [ "uniffi_macros 0.23.0", ] +[[package]] +name = "bip21" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1998475af29ccfb7c761bb624a16e501fc321510366012bc9cce267bc134aedc" +dependencies = [ + "bitcoin 0.29.2", + "percent-encoding-rfc3986", +] + [[package]] name = "bip39" version = "2.0.0" @@ -401,6 +483,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "bitcoin" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0694ea59225b0c5f3cb405ff3f670e4828358ed26aec49dc352f730f0cb1a8a3" +dependencies = [ + "bech32 0.9.1", + "bitcoin_hashes 0.11.0", + "secp256k1 0.24.3", +] + [[package]] name = "bitcoin" version = "0.30.2" @@ -492,6 +585,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "bmp-monochrome" version = "1.1.0" @@ -508,7 +610,7 @@ dependencies = [ "electrum-client", "elements", "env_logger 0.7.1", - "lightning-invoice", + "lightning-invoice 0.30.0", "log", "native-tls", "serde", @@ -541,6 +643,7 @@ dependencies = [ "reqwest 0.11.20", "rusqlite", "rusqlite_migration", + "sdk-common", "security-framework", "security-framework-sys", "serde", @@ -633,6 +736,15 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "cc" version = "1.0.97" @@ -668,6 +780,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clap" version = "3.2.25" @@ -813,7 +935,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] @@ -862,6 +984,12 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + [[package]] name = "electrum-client" version = "0.19.0" @@ -992,6 +1120,12 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.0.30" @@ -1300,14 +1434,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", - "allocator-api2", ] [[package]] name = "hashlink" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692eaaf7f7607518dd3cef090f1474b61edc5301d8012f09579920df68b725ee" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown 0.14.5", ] @@ -1357,6 +1490,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "0.2.12" @@ -1501,6 +1643,18 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.29", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1616,6 +1770,16 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -1637,6 +1801,15 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -1675,6 +1848,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "lightning" +version = "0.0.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90a0f2155316f1570446a0447c993480673f840748c8ed25bbc59dfc442ac770" +dependencies = [ + "bitcoin 0.29.2", +] + [[package]] name = "lightning" version = "0.0.122" @@ -1685,6 +1867,20 @@ dependencies = [ "hex-conservative", ] +[[package]] +name = "lightning-invoice" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788c0158526ec27a502043c2911ea6ea58fdc656bdf8749484942c07b790d23" +dependencies = [ + "bech32 0.9.1", + "bitcoin 0.29.2", + "bitcoin_hashes 0.11.0", + "lightning 0.0.116", + "num-traits", + "secp256k1 0.24.3", +] + [[package]] name = "lightning-invoice" version = "0.30.0" @@ -1693,7 +1889,7 @@ checksum = "106fdb897e69df697480f45bf0a564b425af488fb0f7407e770a770c39b19a21" dependencies = [ "bech32 0.9.1", "bitcoin 0.30.2", - "lightning", + "lightning 0.0.122", "num-traits", "secp256k1 0.27.0", ] @@ -1794,6 +1990,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "md-5" version = "0.10.6" @@ -1863,6 +2065,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "native-tls" version = "0.2.11" @@ -2068,6 +2276,22 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "percent-encoding-rfc3986" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3637c05577168127568a64e9dc5a6887da720efef07b3d9472d45f63ab191166" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.2.6", +] + [[package]] name = "pin-project" version = "1.1.5" @@ -2130,6 +2354,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2163,6 +2397,60 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck 0.4.1", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + [[package]] name = "qr_code" version = "2.0.0" @@ -2172,6 +2460,12 @@ dependencies = [ "bmp-monochrome", ] +[[package]] +name = "querystring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9318ead08c799aad12a55a3e78b82e0b6167271ffd1f627b758891282f739187" + [[package]] name = "quick-error" version = "1.2.3" @@ -2519,6 +2813,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + [[package]] name = "ryu" version = "1.0.18" @@ -2590,6 +2890,43 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdk-common" +version = "0.4.1" +source = "git+https://github.com/breez/breez-sdk?branch=main#7c48c1e5a6f0450ae6f6150b8e40235ee31fd330" +dependencies = [ + "aes 0.8.4", + "anyhow", + "base64 0.13.1", + "bip21", + "bitcoin 0.29.2", + "cbc", + "hex", + "lightning 0.0.116", + "lightning-invoice 0.24.0", + "log", + "prost", + "querystring", + "regex", + "reqwest 0.11.20", + "serde", + "serde_json", + "strum_macros", + "thiserror", + "tonic", + "tonic-build", +] + +[[package]] +name = "secp256k1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "bitcoin_hashes 0.11.0", + "secp256k1-sys 0.6.1", +] + [[package]] name = "secp256k1" version = "0.27.0" @@ -2612,6 +2949,15 @@ dependencies = [ "serde", ] +[[package]] +name = "secp256k1-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +dependencies = [ + "cc", +] + [[package]] name = "secp256k1-sys" version = "0.8.1" @@ -2826,6 +3172,19 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.61", +] + [[package]] name = "subtle" version = "2.5.0" @@ -2986,6 +3345,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.2.0" @@ -3066,6 +3435,51 @@ dependencies = [ "serde", ] +[[package]] +name = "tonic" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "prost-derive", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tonic-build" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + [[package]] name = "tower" version = "0.4.13" @@ -3074,9 +3488,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand 0.8.5", + "slab", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -3126,6 +3544,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -3759,6 +4187,18 @@ dependencies = [ "nom", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/lib/bindings/langs/flutter/breez_liquid_sdk/include/breez_liquid_sdk.h b/lib/bindings/langs/flutter/breez_liquid_sdk/include/breez_liquid_sdk.h index a8ebb19..9bf4824 100644 --- a/lib/bindings/langs/flutter/breez_liquid_sdk/include/breez_liquid_sdk.h +++ b/lib/bindings/langs/flutter/breez_liquid_sdk/include/breez_liquid_sdk.h @@ -35,6 +35,46 @@ typedef struct wire_cst_backup_request { struct wire_cst_list_prim_u_8_strict *backup_path; } wire_cst_backup_request; +typedef struct wire_cst_ln_url_auth_request_data { + struct wire_cst_list_prim_u_8_strict *k1; + struct wire_cst_list_prim_u_8_strict *action; + struct wire_cst_list_prim_u_8_strict *domain; + struct wire_cst_list_prim_u_8_strict *url; +} wire_cst_ln_url_auth_request_data; + +typedef struct wire_cst_ln_url_pay_request_data { + struct wire_cst_list_prim_u_8_strict *callback; + uint64_t min_sendable; + uint64_t max_sendable; + struct wire_cst_list_prim_u_8_strict *metadata_str; + uint16_t comment_allowed; + struct wire_cst_list_prim_u_8_strict *domain; + bool allows_nostr; + struct wire_cst_list_prim_u_8_strict *nostr_pubkey; + struct wire_cst_list_prim_u_8_strict *ln_address; +} wire_cst_ln_url_pay_request_data; + +typedef struct wire_cst_ln_url_pay_request { + struct wire_cst_ln_url_pay_request_data data; + uint64_t amount_msat; + struct wire_cst_list_prim_u_8_strict *comment; + struct wire_cst_list_prim_u_8_strict *payment_label; +} wire_cst_ln_url_pay_request; + +typedef struct wire_cst_ln_url_withdraw_request_data { + struct wire_cst_list_prim_u_8_strict *callback; + struct wire_cst_list_prim_u_8_strict *k1; + struct wire_cst_list_prim_u_8_strict *default_description; + uint64_t min_withdrawable; + uint64_t max_withdrawable; +} wire_cst_ln_url_withdraw_request_data; + +typedef struct wire_cst_ln_url_withdraw_request { + struct wire_cst_ln_url_withdraw_request_data data; + uint64_t amount_msat; + struct wire_cst_list_prim_u_8_strict *description; +} wire_cst_ln_url_withdraw_request; + typedef struct wire_cst_prepare_pay_onchain_response { uint64_t amount_sat; uint64_t fees_sat; @@ -143,10 +183,36 @@ typedef struct wire_cst_connect_request { struct wire_cst_config config; } wire_cst_connect_request; -typedef struct wire_cst_list_payment { - struct wire_cst_payment *ptr; - int32_t len; -} wire_cst_list_payment; +typedef struct wire_cst_aes_success_action_data_decrypted { + struct wire_cst_list_prim_u_8_strict *description; + struct wire_cst_list_prim_u_8_strict *plaintext; +} wire_cst_aes_success_action_data_decrypted; + +typedef struct wire_cst_AesSuccessActionDataResult_Decrypted { + struct wire_cst_aes_success_action_data_decrypted *data; +} wire_cst_AesSuccessActionDataResult_Decrypted; + +typedef struct wire_cst_AesSuccessActionDataResult_ErrorStatus { + struct wire_cst_list_prim_u_8_strict *reason; +} wire_cst_AesSuccessActionDataResult_ErrorStatus; + +typedef union AesSuccessActionDataResultKind { + struct wire_cst_AesSuccessActionDataResult_Decrypted Decrypted; + struct wire_cst_AesSuccessActionDataResult_ErrorStatus ErrorStatus; +} AesSuccessActionDataResultKind; + +typedef struct wire_cst_aes_success_action_data_result { + int32_t tag; + union AesSuccessActionDataResultKind kind; +} wire_cst_aes_success_action_data_result; + +typedef struct wire_cst_bitcoin_address_data { + struct wire_cst_list_prim_u_8_strict *address; + int32_t network; + uint64_t *amount_sat; + struct wire_cst_list_prim_u_8_strict *label; + struct wire_cst_list_prim_u_8_strict *message; +} wire_cst_bitcoin_address_data; typedef struct wire_cst_route_hint_hop { struct wire_cst_list_prim_u_8_strict *src_node_id; @@ -172,6 +238,76 @@ typedef struct wire_cst_list_route_hint { int32_t len; } wire_cst_list_route_hint; +typedef struct wire_cst_ln_invoice { + struct wire_cst_list_prim_u_8_strict *bolt11; + int32_t network; + struct wire_cst_list_prim_u_8_strict *payee_pubkey; + struct wire_cst_list_prim_u_8_strict *payment_hash; + struct wire_cst_list_prim_u_8_strict *description; + struct wire_cst_list_prim_u_8_strict *description_hash; + uint64_t *amount_msat; + uint64_t timestamp; + uint64_t expiry; + struct wire_cst_list_route_hint *routing_hints; + struct wire_cst_list_prim_u_8_strict *payment_secret; + uint64_t min_final_cltv_expiry_delta; +} wire_cst_ln_invoice; + +typedef struct wire_cst_ln_url_error_data { + struct wire_cst_list_prim_u_8_strict *reason; +} wire_cst_ln_url_error_data; + +typedef struct wire_cst_ln_url_pay_error_data { + struct wire_cst_list_prim_u_8_strict *payment_hash; + struct wire_cst_list_prim_u_8_strict *reason; +} wire_cst_ln_url_pay_error_data; + +typedef struct wire_cst_SuccessActionProcessed_Aes { + struct wire_cst_aes_success_action_data_result *result; +} wire_cst_SuccessActionProcessed_Aes; + +typedef struct wire_cst_message_success_action_data { + struct wire_cst_list_prim_u_8_strict *message; +} wire_cst_message_success_action_data; + +typedef struct wire_cst_SuccessActionProcessed_Message { + struct wire_cst_message_success_action_data *data; +} wire_cst_SuccessActionProcessed_Message; + +typedef struct wire_cst_url_success_action_data { + struct wire_cst_list_prim_u_8_strict *description; + struct wire_cst_list_prim_u_8_strict *url; +} wire_cst_url_success_action_data; + +typedef struct wire_cst_SuccessActionProcessed_Url { + struct wire_cst_url_success_action_data *data; +} wire_cst_SuccessActionProcessed_Url; + +typedef union SuccessActionProcessedKind { + struct wire_cst_SuccessActionProcessed_Aes Aes; + struct wire_cst_SuccessActionProcessed_Message Message; + struct wire_cst_SuccessActionProcessed_Url Url; +} SuccessActionProcessedKind; + +typedef struct wire_cst_success_action_processed { + int32_t tag; + union SuccessActionProcessedKind kind; +} wire_cst_success_action_processed; + +typedef struct wire_cst_ln_url_pay_success_data { + struct wire_cst_payment payment; + struct wire_cst_success_action_processed *success_action; +} wire_cst_ln_url_pay_success_data; + +typedef struct wire_cst_ln_url_withdraw_success_data { + struct wire_cst_ln_invoice invoice; +} wire_cst_ln_url_withdraw_success_data; + +typedef struct wire_cst_list_payment { + struct wire_cst_payment *ptr; + int32_t len; +} wire_cst_list_payment; + typedef struct wire_cst_get_info_response { uint64_t balance_sat; uint64_t pending_send_sat; @@ -179,6 +315,54 @@ typedef struct wire_cst_get_info_response { struct wire_cst_list_prim_u_8_strict *pubkey; } wire_cst_get_info_response; +typedef struct wire_cst_InputType_BitcoinAddress { + struct wire_cst_bitcoin_address_data *address; +} wire_cst_InputType_BitcoinAddress; + +typedef struct wire_cst_InputType_Bolt11 { + struct wire_cst_ln_invoice *invoice; +} wire_cst_InputType_Bolt11; + +typedef struct wire_cst_InputType_NodeId { + struct wire_cst_list_prim_u_8_strict *node_id; +} wire_cst_InputType_NodeId; + +typedef struct wire_cst_InputType_Url { + struct wire_cst_list_prim_u_8_strict *url; +} wire_cst_InputType_Url; + +typedef struct wire_cst_InputType_LnUrlPay { + struct wire_cst_ln_url_pay_request_data *data; +} wire_cst_InputType_LnUrlPay; + +typedef struct wire_cst_InputType_LnUrlWithdraw { + struct wire_cst_ln_url_withdraw_request_data *data; +} wire_cst_InputType_LnUrlWithdraw; + +typedef struct wire_cst_InputType_LnUrlAuth { + struct wire_cst_ln_url_auth_request_data *data; +} wire_cst_InputType_LnUrlAuth; + +typedef struct wire_cst_InputType_LnUrlError { + struct wire_cst_ln_url_error_data *data; +} wire_cst_InputType_LnUrlError; + +typedef union InputTypeKind { + struct wire_cst_InputType_BitcoinAddress BitcoinAddress; + struct wire_cst_InputType_Bolt11 Bolt11; + struct wire_cst_InputType_NodeId NodeId; + struct wire_cst_InputType_Url Url; + struct wire_cst_InputType_LnUrlPay LnUrlPay; + struct wire_cst_InputType_LnUrlWithdraw LnUrlWithdraw; + struct wire_cst_InputType_LnUrlAuth LnUrlAuth; + struct wire_cst_InputType_LnUrlError LnUrlError; +} InputTypeKind; + +typedef struct wire_cst_input_type { + int32_t tag; + union InputTypeKind kind; +} wire_cst_input_type; + typedef struct wire_cst_LiquidSdkError_Generic { struct wire_cst_list_prim_u_8_strict *err; } wire_cst_LiquidSdkError_Generic; @@ -197,20 +381,183 @@ typedef struct wire_cst_liquid_sdk_error { union LiquidSdkErrorKind kind; } wire_cst_liquid_sdk_error; -typedef struct wire_cst_ln_invoice { - struct wire_cst_list_prim_u_8_strict *bolt11; - int32_t network; - struct wire_cst_list_prim_u_8_strict *payee_pubkey; - struct wire_cst_list_prim_u_8_strict *payment_hash; - struct wire_cst_list_prim_u_8_strict *description; - struct wire_cst_list_prim_u_8_strict *description_hash; - uint64_t *amount_msat; - uint64_t timestamp; - uint64_t expiry; - struct wire_cst_list_route_hint *routing_hints; - struct wire_cst_list_prim_u_8_strict *payment_secret; - uint64_t min_final_cltv_expiry_delta; -} wire_cst_ln_invoice; +typedef struct wire_cst_LnUrlAuthError_Generic { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlAuthError_Generic; + +typedef struct wire_cst_LnUrlAuthError_InvalidUri { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlAuthError_InvalidUri; + +typedef struct wire_cst_LnUrlAuthError_ServiceConnectivity { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlAuthError_ServiceConnectivity; + +typedef union LnUrlAuthErrorKind { + struct wire_cst_LnUrlAuthError_Generic Generic; + struct wire_cst_LnUrlAuthError_InvalidUri InvalidUri; + struct wire_cst_LnUrlAuthError_ServiceConnectivity ServiceConnectivity; +} LnUrlAuthErrorKind; + +typedef struct wire_cst_ln_url_auth_error { + int32_t tag; + union LnUrlAuthErrorKind kind; +} wire_cst_ln_url_auth_error; + +typedef struct wire_cst_LnUrlCallbackStatus_ErrorStatus { + struct wire_cst_ln_url_error_data *data; +} wire_cst_LnUrlCallbackStatus_ErrorStatus; + +typedef union LnUrlCallbackStatusKind { + struct wire_cst_LnUrlCallbackStatus_ErrorStatus ErrorStatus; +} LnUrlCallbackStatusKind; + +typedef struct wire_cst_ln_url_callback_status { + int32_t tag; + union LnUrlCallbackStatusKind kind; +} wire_cst_ln_url_callback_status; + +typedef struct wire_cst_LnUrlPayError_Generic { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_Generic; + +typedef struct wire_cst_LnUrlPayError_InvalidAmount { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_InvalidAmount; + +typedef struct wire_cst_LnUrlPayError_InvalidInvoice { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_InvalidInvoice; + +typedef struct wire_cst_LnUrlPayError_InvalidNetwork { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_InvalidNetwork; + +typedef struct wire_cst_LnUrlPayError_InvalidUri { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_InvalidUri; + +typedef struct wire_cst_LnUrlPayError_InvoiceExpired { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_InvoiceExpired; + +typedef struct wire_cst_LnUrlPayError_PaymentFailed { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_PaymentFailed; + +typedef struct wire_cst_LnUrlPayError_PaymentTimeout { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_PaymentTimeout; + +typedef struct wire_cst_LnUrlPayError_RouteNotFound { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_RouteNotFound; + +typedef struct wire_cst_LnUrlPayError_RouteTooExpensive { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_RouteTooExpensive; + +typedef struct wire_cst_LnUrlPayError_ServiceConnectivity { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlPayError_ServiceConnectivity; + +typedef union LnUrlPayErrorKind { + struct wire_cst_LnUrlPayError_Generic Generic; + struct wire_cst_LnUrlPayError_InvalidAmount InvalidAmount; + struct wire_cst_LnUrlPayError_InvalidInvoice InvalidInvoice; + struct wire_cst_LnUrlPayError_InvalidNetwork InvalidNetwork; + struct wire_cst_LnUrlPayError_InvalidUri InvalidUri; + struct wire_cst_LnUrlPayError_InvoiceExpired InvoiceExpired; + struct wire_cst_LnUrlPayError_PaymentFailed PaymentFailed; + struct wire_cst_LnUrlPayError_PaymentTimeout PaymentTimeout; + struct wire_cst_LnUrlPayError_RouteNotFound RouteNotFound; + struct wire_cst_LnUrlPayError_RouteTooExpensive RouteTooExpensive; + struct wire_cst_LnUrlPayError_ServiceConnectivity ServiceConnectivity; +} LnUrlPayErrorKind; + +typedef struct wire_cst_ln_url_pay_error { + int32_t tag; + union LnUrlPayErrorKind kind; +} wire_cst_ln_url_pay_error; + +typedef struct wire_cst_LnUrlPayResult_EndpointSuccess { + struct wire_cst_ln_url_pay_success_data *data; +} wire_cst_LnUrlPayResult_EndpointSuccess; + +typedef struct wire_cst_LnUrlPayResult_EndpointError { + struct wire_cst_ln_url_error_data *data; +} wire_cst_LnUrlPayResult_EndpointError; + +typedef struct wire_cst_LnUrlPayResult_PayError { + struct wire_cst_ln_url_pay_error_data *data; +} wire_cst_LnUrlPayResult_PayError; + +typedef union LnUrlPayResultKind { + struct wire_cst_LnUrlPayResult_EndpointSuccess EndpointSuccess; + struct wire_cst_LnUrlPayResult_EndpointError EndpointError; + struct wire_cst_LnUrlPayResult_PayError PayError; +} LnUrlPayResultKind; + +typedef struct wire_cst_ln_url_pay_result { + int32_t tag; + union LnUrlPayResultKind kind; +} wire_cst_ln_url_pay_result; + +typedef struct wire_cst_LnUrlWithdrawError_Generic { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_Generic; + +typedef struct wire_cst_LnUrlWithdrawError_InvalidAmount { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_InvalidAmount; + +typedef struct wire_cst_LnUrlWithdrawError_InvalidInvoice { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_InvalidInvoice; + +typedef struct wire_cst_LnUrlWithdrawError_InvalidUri { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_InvalidUri; + +typedef struct wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints; + +typedef struct wire_cst_LnUrlWithdrawError_ServiceConnectivity { + struct wire_cst_list_prim_u_8_strict *err; +} wire_cst_LnUrlWithdrawError_ServiceConnectivity; + +typedef union LnUrlWithdrawErrorKind { + struct wire_cst_LnUrlWithdrawError_Generic Generic; + struct wire_cst_LnUrlWithdrawError_InvalidAmount InvalidAmount; + struct wire_cst_LnUrlWithdrawError_InvalidInvoice InvalidInvoice; + struct wire_cst_LnUrlWithdrawError_InvalidUri InvalidUri; + struct wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints InvoiceNoRoutingHints; + struct wire_cst_LnUrlWithdrawError_ServiceConnectivity ServiceConnectivity; +} LnUrlWithdrawErrorKind; + +typedef struct wire_cst_ln_url_withdraw_error { + int32_t tag; + union LnUrlWithdrawErrorKind kind; +} wire_cst_ln_url_withdraw_error; + +typedef struct wire_cst_LnUrlWithdrawResult_Ok { + struct wire_cst_ln_url_withdraw_success_data *data; +} wire_cst_LnUrlWithdrawResult_Ok; + +typedef struct wire_cst_LnUrlWithdrawResult_ErrorStatus { + struct wire_cst_ln_url_error_data *data; +} wire_cst_LnUrlWithdrawResult_ErrorStatus; + +typedef union LnUrlWithdrawResultKind { + struct wire_cst_LnUrlWithdrawResult_Ok Ok; + struct wire_cst_LnUrlWithdrawResult_ErrorStatus ErrorStatus; +} LnUrlWithdrawResultKind; + +typedef struct wire_cst_ln_url_withdraw_result { + int32_t tag; + union LnUrlWithdrawResultKind kind; +} wire_cst_ln_url_withdraw_result; typedef struct wire_cst_log_entry { struct wire_cst_list_prim_u_8_strict *line; @@ -288,6 +635,18 @@ void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_get_info(int64_ void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_list_payments(int64_t port_, uintptr_t that); +void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth(int64_t port_, + uintptr_t that, + struct wire_cst_ln_url_auth_request_data *req_data); + +void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay(int64_t port_, + uintptr_t that, + struct wire_cst_ln_url_pay_request *req); + +void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw(int64_t port_, + uintptr_t that, + struct wire_cst_ln_url_withdraw_request *req); + void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_pay_onchain(int64_t port_, uintptr_t that, struct wire_cst_pay_onchain_request *req); @@ -330,20 +689,51 @@ void frbgen_breez_liquid_wire__crate__bindings__connect(int64_t port_, WireSyncRust2DartDco frbgen_breez_liquid_wire__crate__bindings__default_config(int32_t network); +void frbgen_breez_liquid_wire__crate__bindings__parse(int64_t port_, + struct wire_cst_list_prim_u_8_strict *input); + WireSyncRust2DartDco frbgen_breez_liquid_wire__crate__bindings__parse_invoice(struct wire_cst_list_prim_u_8_strict *input); void frbgen_breez_liquid_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk(const void *ptr); void frbgen_breez_liquid_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk(const void *ptr); +struct wire_cst_aes_success_action_data_decrypted *frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted(void); + +struct wire_cst_aes_success_action_data_result *frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result(void); + struct wire_cst_backup_request *frbgen_breez_liquid_cst_new_box_autoadd_backup_request(void); struct wire_cst_binding_event_listener *frbgen_breez_liquid_cst_new_box_autoadd_binding_event_listener(void); +struct wire_cst_bitcoin_address_data *frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data(void); + struct wire_cst_connect_request *frbgen_breez_liquid_cst_new_box_autoadd_connect_request(void); struct wire_cst_liquid_sdk_event *frbgen_breez_liquid_cst_new_box_autoadd_liquid_sdk_event(void); +struct wire_cst_ln_invoice *frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice(void); + +struct wire_cst_ln_url_auth_request_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data(void); + +struct wire_cst_ln_url_error_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data(void); + +struct wire_cst_ln_url_pay_error_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data(void); + +struct wire_cst_ln_url_pay_request *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request(void); + +struct wire_cst_ln_url_pay_request_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data(void); + +struct wire_cst_ln_url_pay_success_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data(void); + +struct wire_cst_ln_url_withdraw_request *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request(void); + +struct wire_cst_ln_url_withdraw_request_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data(void); + +struct wire_cst_ln_url_withdraw_success_data *frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data(void); + +struct wire_cst_message_success_action_data *frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data(void); + struct wire_cst_pay_onchain_request *frbgen_breez_liquid_cst_new_box_autoadd_pay_onchain_request(void); struct wire_cst_payment *frbgen_breez_liquid_cst_new_box_autoadd_payment(void); @@ -360,8 +750,12 @@ struct wire_cst_prepare_send_response *frbgen_breez_liquid_cst_new_box_autoadd_p struct wire_cst_restore_request *frbgen_breez_liquid_cst_new_box_autoadd_restore_request(void); +struct wire_cst_success_action_processed *frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed(void); + uint64_t *frbgen_breez_liquid_cst_new_box_autoadd_u_64(uint64_t value); +struct wire_cst_url_success_action_data *frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data(void); + struct wire_cst_list_payment *frbgen_breez_liquid_cst_new_list_payment(int32_t len); struct wire_cst_list_prim_u_8_strict *frbgen_breez_liquid_cst_new_list_prim_u_8_strict(int32_t len); @@ -371,10 +765,24 @@ struct wire_cst_list_route_hint *frbgen_breez_liquid_cst_new_list_route_hint(int struct wire_cst_list_route_hint_hop *frbgen_breez_liquid_cst_new_list_route_hint_hop(int32_t len); static int64_t dummy_method_to_enforce_bundling(void) { int64_t dummy_var = 0; + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_backup_request); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_binding_event_listener); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_connect_request); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_liquid_sdk_event); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_pay_onchain_request); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_payment); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_pay_onchain_request); @@ -383,7 +791,9 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_request); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_response); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_restore_request); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_u_64); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_list_payment); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_list_prim_u_8_strict); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_list_route_hint); @@ -396,6 +806,9 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_empty_wallet_cache); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_get_info); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_list_payments); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_pay_onchain); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_prepare_pay_onchain); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_prepare_receive_payment); @@ -408,6 +821,7 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__breez_log_stream); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__connect); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__default_config); + dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__parse); dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire__crate__bindings__parse_invoice); dummy_var ^= ((int64_t) (void*) store_dart_post_cobject); return dummy_var; diff --git a/lib/bindings/src/breez_liquid_sdk.udl b/lib/bindings/src/breez_liquid_sdk.udl index 5c609db..4ccfd0a 100644 --- a/lib/bindings/src/breez_liquid_sdk.udl +++ b/lib/bindings/src/breez_liquid_sdk.udl @@ -1,3 +1,218 @@ +////////////////////////////////// +// BEGIN sdk-common mirror imports +// These are structs defined in sdk-common, which we want to make available in this project's UDL bindings + +dictionary LNInvoice { + string bolt11; + Network network; + string payee_pubkey; + string payment_hash; + string? description; + string? description_hash; + u64? amount_msat; + u64 timestamp; + u64 expiry; + sequence routing_hints; + sequence payment_secret; + u64 min_final_cltv_expiry_delta; +}; + +enum Network { + "Bitcoin", + "Testnet", + "Signet", + "Regtest", +}; + +dictionary RouteHint { + sequence hops; +}; + +dictionary RouteHintHop { + string src_node_id; + u64 short_channel_id; + u32 fees_base_msat; + u32 fees_proportional_millionths; + u64 cltv_expiry_delta; + u64? htlc_minimum_msat; + u64? htlc_maximum_msat; +}; + +[Enum] +interface InputType { + BitcoinAddress(BitcoinAddressData address); + Bolt11(LNInvoice invoice); + NodeId(string node_id); + Url(string url); + LnUrlPay(LnUrlPayRequestData data); + LnUrlWithdraw(LnUrlWithdrawRequestData data); + LnUrlAuth(LnUrlAuthRequestData data); + LnUrlError(LnUrlErrorData data); +}; + +dictionary BitcoinAddressData { + string address; + Network network; + u64? amount_sat; + string? label; + string? message; +}; + +dictionary LnUrlPayRequestData { + string callback; + u64 min_sendable; + u64 max_sendable; + string metadata_str; + u16 comment_allowed; + string domain; + boolean allows_nostr; + string? nostr_pubkey; + string? ln_address; +}; + +dictionary LnUrlWithdrawRequestData { + string callback; + string k1; + string default_description; + u64 min_withdrawable; + u64 max_withdrawable; +}; + +dictionary LnUrlAuthRequestData { + string k1; + string domain; + string url; + string? action = null; +}; + +dictionary LnUrlErrorData { + string reason; +}; + +[Enum] +interface SuccessActionProcessed { + Aes(AesSuccessActionDataResult result); + Message(MessageSuccessActionData data); + Url(UrlSuccessActionData data); +}; + +[Enum] +interface AesSuccessActionDataResult { + Decrypted(AesSuccessActionDataDecrypted data); + ErrorStatus(string reason); +}; + +dictionary AesSuccessActionDataDecrypted { + string description; + string plaintext; +}; + +dictionary MessageSuccessActionData { + string message; +}; + +dictionary UrlSuccessActionData { + string description; + string url; +}; + +dictionary LnUrlPayErrorData { + string payment_hash; + string reason; +}; + +dictionary LnUrlPayRequest { + LnUrlPayRequestData data; + u64 amount_msat; + string? comment = null; + string? payment_label = null; +}; + +[Error] +interface LnUrlPayError { + AlreadyPaid(); + Generic(string err); + InvalidAmount(string err); + InvalidInvoice(string err); + InvalidNetwork(string err); + InvalidUri(string err); + InvoiceExpired(string err); + PaymentFailed(string err); + PaymentTimeout(string err); + RouteNotFound(string err); + RouteTooExpensive(string err); + ServiceConnectivity(string err); +}; + +[Error] +interface LnUrlWithdrawError { + Generic(string err); + InvalidAmount(string err); + InvalidInvoice(string err); + InvalidUri(string err); + ServiceConnectivity(string err); + InvoiceNoRoutingHints(string err); +}; + +[Enum] +interface LnUrlWithdrawResult { + Ok(LnUrlWithdrawSuccessData data); + ErrorStatus(LnUrlErrorData data); +}; + +dictionary LnUrlWithdrawSuccessData { + LNInvoice invoice; +}; + +dictionary LnUrlWithdrawRequestData { + string callback; + string k1; + string default_description; + u64 min_withdrawable; + u64 max_withdrawable; +}; + +dictionary LnUrlWithdrawRequest { + LnUrlWithdrawRequestData data; + u64 amount_msat; + string? description = null; +}; + +[Enum] +interface LnUrlCallbackStatus { + Ok(); + ErrorStatus(LnUrlErrorData data); +}; + +[Error] +interface LnUrlAuthError { + Generic(string err); + InvalidUri(string err); + ServiceConnectivity(string err); +}; + +// END sdk-common mirror imports +//////////////////////////////// + +////////////////////////////////// +// BEGIN sdk-common wrappers +// These are connecting structures that glue relevant sdk-common structs to the SDK + +[Enum] +interface LnUrlPayResult { + EndpointSuccess(LnUrlPaySuccessData data); + EndpointError(LnUrlErrorData data); + PayError(LnUrlPayErrorData data); +}; + +dictionary LnUrlPaySuccessData { + SuccessActionProcessed? success_action; + Payment payment; +}; + +// END sdk-common wrappers +//////////////////////////////// + [Error] enum LiquidSdkError { "AlreadyStarted", @@ -33,13 +248,13 @@ dictionary Config { string liquid_electrum_url; string bitcoin_electrum_url; string working_dir; - Network network; + LiquidNetwork network; u64 payment_timeout_sec; f32 zero_conf_min_fee_rate; u64? zero_conf_max_amount_sat; }; -enum Network { +enum LiquidNetwork { "Mainnet", "Testnet", }; @@ -105,35 +320,6 @@ dictionary RestoreRequest { string? backup_path = null; }; -dictionary RouteHint { - sequence hops; -}; - -dictionary RouteHintHop { - string src_node_id; - u64 short_channel_id; - u32 fees_base_msat; - u32 fees_proportional_millionths; - u64 cltv_expiry_delta; - u64? htlc_minimum_msat; - u64? htlc_maximum_msat; - }; - -dictionary LNInvoice { - string bolt11; - Network network; - string payee_pubkey; - string payment_hash; - string? description; - string? description_hash; - u64? amount_msat; - u64 timestamp; - u64 expiry; - sequence routing_hints; - sequence payment_secret; - u64 min_final_cltv_expiry_delta; -}; - dictionary Payment { string? tx_id = null; string? swap_id = null; @@ -192,10 +378,13 @@ namespace breez_liquid_sdk { [Throws=LiquidSdkError] void set_logger(Logger logger); - Config default_config(Network network); + Config default_config(LiquidNetwork network); [Throws=PaymentError] - LNInvoice parse_invoice(string invoice); + InputType parse(string input); + + [Throws=PaymentError] + LNInvoice parse_invoice(string input); }; interface BindingLiquidSdk { @@ -240,4 +429,13 @@ interface BindingLiquidSdk { [Throws=LiquidSdkError] void disconnect(); + + [Throws=LnUrlPayError] + LnUrlPayResult lnurl_pay(LnUrlPayRequest req); + + [Throws=LnUrlWithdrawError] + LnUrlWithdrawResult lnurl_withdraw(LnUrlWithdrawRequest req); + + [Throws=LnUrlAuthError] + LnUrlCallbackStatus lnurl_auth(LnUrlAuthRequestData req_data); }; diff --git a/lib/bindings/src/lib.rs b/lib/bindings/src/lib.rs index 94e8a9a..6eba35c 100644 --- a/lib/bindings/src/lib.rs +++ b/lib/bindings/src/lib.rs @@ -4,7 +4,14 @@ use std::sync::Arc; use anyhow::Result; use breez_liquid_sdk::logger::Logger; -use breez_liquid_sdk::{error::*, model::*, sdk::LiquidSdk}; +use breez_liquid_sdk::{ + error::*, model::*, sdk::LiquidSdk, AesSuccessActionDataDecrypted, AesSuccessActionDataResult, + BitcoinAddressData, InputType, LNInvoice, LnUrlAuthError, LnUrlAuthRequestData, + LnUrlCallbackStatus, LnUrlErrorData, LnUrlPayError, LnUrlPayErrorData, LnUrlPayRequest, + LnUrlPayRequestData, LnUrlWithdrawError, LnUrlWithdrawRequest, LnUrlWithdrawRequestData, + LnUrlWithdrawResult, LnUrlWithdrawSuccessData, MessageSuccessActionData, Network, RouteHint, + RouteHintHop, SuccessActionProcessed, UrlSuccessActionData, +}; use log::{Metadata, Record, SetLoggerError}; use once_cell::sync::Lazy; use tokio::runtime::Runtime; @@ -58,10 +65,13 @@ pub fn connect(req: ConnectRequest) -> Result, LiquidSdkEr }) } -pub fn default_config(network: Network) -> Config { +pub fn default_config(network: LiquidNetwork) -> Config { LiquidSdk::default_config(network) } +pub fn parse(input: String) -> Result { + rt().block_on(async { LiquidSdk::parse(&input).await }) +} pub fn parse_invoice(input: String) -> Result { LiquidSdk::parse_invoice(&input) } @@ -126,6 +136,25 @@ impl BindingLiquidSdk { rt().block_on(self.sdk.list_payments()) } + pub fn lnurl_pay(&self, req: LnUrlPayRequest) -> Result { + rt().block_on(self.sdk.lnurl_pay(req)).map_err(Into::into) + } + + pub fn lnurl_withdraw( + &self, + req: LnUrlWithdrawRequest, + ) -> Result { + rt().block_on(self.sdk.lnurl_withdraw(req)) + .map_err(Into::into) + } + + pub fn lnurl_auth( + &self, + req_data: LnUrlAuthRequestData, + ) -> Result { + rt().block_on(self.sdk.lnurl_auth(req_data)) + } + pub fn sync(&self) -> LiquidSdkResult<()> { rt().block_on(self.sdk.sync()).map_err(Into::into) } diff --git a/lib/bindings/tests/bindings/test_breez_liquid_sdk.kts b/lib/bindings/tests/bindings/test_breez_liquid_sdk.kts index 904f148..372e4b0 100644 --- a/lib/bindings/tests/bindings/test_breez_liquid_sdk.kts +++ b/lib/bindings/tests/bindings/test_breez_liquid_sdk.kts @@ -7,7 +7,7 @@ class SDKListener: breez_liquid_sdk.EventListener { try { var mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" - var config = breez_liquid_sdk.defaultConfig(breez_liquid_sdk.Network.TESTNET) + var config = breez_liquid_sdk.defaultConfig(breez_liquid_sdk.LiquidNetwork.TESTNET) var connectRequest = breez_liquid_sdk.ConnectRequest(config, mnemonic) var sdk = breez_liquid_sdk.connect(connectRequest) diff --git a/lib/bindings/tests/bindings/test_breez_liquid_sdk.py b/lib/bindings/tests/bindings/test_breez_liquid_sdk.py index 3442172..7cfff65 100644 --- a/lib/bindings/tests/bindings/test_breez_liquid_sdk.py +++ b/lib/bindings/tests/bindings/test_breez_liquid_sdk.py @@ -8,7 +8,7 @@ class SDKListener(breez_liquid_sdk.EventListener): def test(): mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" - config = breez_liquid_sdk.default_config(breez_liquid_sdk.Network.TESTNET) + config = breez_liquid_sdk.default_config(breez_liquid_sdk.LiquidNetwork.TESTNET) connect_request = breez_liquid_sdk.ConnectRequest(config=config, mnemonic=mnemonic) sdk = breez_liquid_sdk.connect(connect_request) diff --git a/lib/core/Cargo.toml b/lib/core/Cargo.toml index 7b77784..216744e 100644 --- a/lib/core/Cargo.toml +++ b/lib/core/Cargo.toml @@ -27,6 +27,7 @@ lwk_wollet = { git = "https://github.com/Blockstream/lwk", rev = "ffd793d0a1b112 #lwk_wollet = "0.5.1" rusqlite = { version = "0.31", features = ["backup", "bundled"] } rusqlite_migration = "1.0" +sdk-common = { git = "https://github.com/breez/breez-sdk", branch = "main" } serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.116" thiserror = { workspace = true } diff --git a/lib/core/src/bindings.rs b/lib/core/src/bindings.rs index 0fa35ee..598f79c 100644 --- a/lib/core/src/bindings.rs +++ b/lib/core/src/bindings.rs @@ -5,6 +5,12 @@ use std::sync::Arc; use anyhow::Result; use flutter_rust_bridge::frb; use log::{Level, LevelFilter, Metadata, Record, SetLoggerError}; +pub use sdk_common::prelude::{ + AesSuccessActionDataDecrypted, AesSuccessActionDataResult, BitcoinAddressData, InputType, + LNInvoice, LnUrlAuthRequestData, LnUrlErrorData, LnUrlPayErrorData, LnUrlPayRequest, + LnUrlPayRequestData, LnUrlWithdrawRequest, LnUrlWithdrawRequestData, MessageSuccessActionData, + Network, RouteHint, RouteHintHop, SuccessActionProcessed, UrlSuccessActionData, +}; use crate::{error::*, frb_generated::StreamSink, model::*, sdk::LiquidSdk}; @@ -60,10 +66,14 @@ pub fn breez_log_stream(s: StreamSink) -> Result<()> { } #[frb(sync)] -pub fn default_config(network: Network) -> Config { +pub fn default_config(network: LiquidNetwork) -> Config { LiquidSdk::default_config(network) } +pub async fn parse(input: String) -> Result { + LiquidSdk::parse(&input).await +} + #[frb(sync)] pub fn parse_invoice(input: String) -> Result { LiquidSdk::parse_invoice(&input) @@ -133,6 +143,35 @@ impl BindingLiquidSdk { self.sdk.list_payments().await } + pub async fn lnurl_pay( + &self, + req: LnUrlPayRequest, + ) -> Result { + self.sdk.lnurl_pay(req).await.map_err(Into::into) + } + + pub async fn lnurl_withdraw( + &self, + req: LnUrlWithdrawRequest, + ) -> Result { + self.sdk + .lnurl_withdraw(req) + .await + .map(Into::into) + .map_err(Into::into) + } + + pub async fn lnurl_auth( + &self, + req_data: LnUrlAuthRequestData, + ) -> Result { + self.sdk + .lnurl_auth(req_data) + .await + .map(Into::into) + .map_err(Into::into) + } + pub async fn sync(&self) -> Result<(), LiquidSdkError> { self.sdk.sync().await.map_err(Into::into) } @@ -156,3 +195,413 @@ impl BindingLiquidSdk { self.sdk.disconnect().await } } + +// === FRB mirroring +// +// This section contains frb "mirroring" structs and enums. +// These are needed by the flutter bridge in order to use structs defined in an external crate. +// See + +#[frb(mirror(Network))] +pub enum _Network { + Bitcoin, + Testnet, + Signet, + Regtest, +} + +#[frb(mirror(LNInvoice))] +pub struct _LNInvoice { + pub bolt11: String, + pub network: Network, + pub payee_pubkey: String, + pub payment_hash: String, + pub description: Option, + pub description_hash: Option, + pub amount_msat: Option, + pub timestamp: u64, + pub expiry: u64, + pub routing_hints: Vec, + pub payment_secret: Vec, + pub min_final_cltv_expiry_delta: u64, +} + +#[frb(mirror(RouteHint))] +pub struct _RouteHint { + pub hops: Vec, +} + +#[frb(mirror(RouteHintHop))] +pub struct _RouteHintHop { + pub src_node_id: String, + pub short_channel_id: u64, + pub fees_base_msat: u32, + pub fees_proportional_millionths: u32, + pub cltv_expiry_delta: u64, + pub htlc_minimum_msat: Option, + pub htlc_maximum_msat: Option, +} + +#[frb(mirror(InputType))] +pub enum _InputType { + BitcoinAddress { address: BitcoinAddressData }, + Bolt11 { invoice: LNInvoice }, + NodeId { node_id: String }, + Url { url: String }, + LnUrlPay { data: LnUrlPayRequestData }, + LnUrlWithdraw { data: LnUrlWithdrawRequestData }, + LnUrlAuth { data: LnUrlAuthRequestData }, + LnUrlError { data: LnUrlErrorData }, +} + +#[frb(mirror(BitcoinAddressData))] +pub struct _BitcoinAddressData { + pub address: String, + pub network: sdk_common::prelude::Network, + pub amount_sat: Option, + pub label: Option, + pub message: Option, +} + +#[frb(mirror(LnUrlPayRequestData))] +pub struct _LnUrlPayRequestData { + pub callback: String, + pub min_sendable: u64, + pub max_sendable: u64, + pub metadata_str: String, + pub comment_allowed: u16, + pub domain: String, + pub allows_nostr: bool, + pub nostr_pubkey: Option, + pub ln_address: Option, +} + +#[frb(mirror(LnUrlPayRequest))] +pub struct _LnUrlPayRequest { + pub data: LnUrlPayRequestData, + pub amount_msat: u64, + pub comment: Option, + pub payment_label: Option, +} + +#[frb(mirror(SuccessActionProcessed))] +pub enum _SuccessActionProcessed { + Aes { result: AesSuccessActionDataResult }, + Message { data: MessageSuccessActionData }, + Url { data: UrlSuccessActionData }, +} + +#[frb(mirror(AesSuccessActionDataResult))] +pub enum _AesSuccessActionDataResult { + Decrypted { data: AesSuccessActionDataDecrypted }, + ErrorStatus { reason: String }, +} + +#[frb(mirror(AesSuccessActionDataDecrypted))] +pub struct _AesSuccessActionDataDecrypted { + pub description: String, + pub plaintext: String, +} + +#[frb(mirror(MessageSuccessActionData))] +pub struct _MessageSuccessActionData { + pub message: String, +} + +#[frb(mirror(UrlSuccessActionData))] +pub struct _UrlSuccessActionData { + pub description: String, + pub url: String, +} + +#[frb(mirror(LnUrlPayErrorData))] +pub struct _LnUrlPayErrorData { + pub payment_hash: String, + pub reason: String, +} + +#[frb(mirror(LnUrlWithdrawRequestData))] +pub struct _LnUrlWithdrawRequestData { + pub callback: String, + pub k1: String, + pub default_description: String, + pub min_withdrawable: u64, + pub max_withdrawable: u64, +} + +#[frb(mirror(LnUrlAuthRequestData))] +pub struct _LnUrlAuthRequestData { + pub k1: String, + pub action: Option, + pub domain: String, + pub url: String, +} + +#[frb(mirror(LnUrlErrorData))] +pub struct _LnUrlErrorData { + pub reason: String, +} + +#[frb(mirror(LnUrlWithdrawRequest))] +pub struct _LnUrlWithdrawRequest { + pub data: LnUrlWithdrawRequestData, + pub amount_msat: u64, + pub description: Option, +} + +/// External structs that cannot be mirrored for FRB, so are therefore duplicated instead +pub mod duplicates { + use sdk_common::prelude::*; + use serde::{Deserialize, Serialize}; + use thiserror::Error; + + use crate::error::PaymentError; + + #[derive(Clone, Debug, Error)] + pub enum LnUrlPayError { + /// This error is raised when attempting to pay an invoice that has already being paid. + #[error("Invoice already paid")] + AlreadyPaid, + + /// This error is raised when a general error occurs not specific to other error variants + /// in this enum. + #[error("Generic: {err}")] + Generic { err: String }, + + /// This error is raised when the amount from the parsed invoice is not set. + #[error("Invalid amount: {err}")] + InvalidAmount { err: String }, + + /// This error is raised when the lightning invoice cannot be parsed. + #[error("Invalid invoice: {err}")] + InvalidInvoice { err: String }, + + /// This error is raised when the lightning invoice is for a different Bitcoin network. + #[error("Invalid network: {err}")] + InvalidNetwork { err: String }, + + /// This error is raised when the decoded LNURL URI is not compliant to the specification. + #[error("Invalid uri: {err}")] + InvalidUri { err: String }, + + /// This error is raised when the lightning invoice has passed it's expiry time. + #[error("Invoice expired: {err}")] + InvoiceExpired { err: String }, + + /// This error is raised when attempting to make a payment by the node fails. + #[error("Payment failed: {err}")] + PaymentFailed { err: String }, + + /// This error is raised when attempting to make a payment takes too long. + #[error("Payment timeout: {err}")] + PaymentTimeout { err: String }, + + /// This error is raised when no route can be found when attempting to make a + /// payment by the node. + #[error("Route not found: {err}")] + RouteNotFound { err: String }, + + /// This error is raised when the route is considered too expensive when + /// attempting to make a payment by the node. + #[error("Route too expensive: {err}")] + RouteTooExpensive { err: String }, + + /// This error is raised when a connection to an external service fails. + #[error("Service connectivity: {err}")] + ServiceConnectivity { err: String }, + } + impl From for LnUrlPayError { + fn from(value: sdk_common::prelude::LnUrlPayError) -> Self { + match value { + sdk_common::prelude::LnUrlPayError::AlreadyPaid => Self::AlreadyPaid, + sdk_common::prelude::LnUrlPayError::Generic { err } => Self::Generic { err }, + sdk_common::prelude::LnUrlPayError::InvalidAmount { err } => { + Self::InvalidAmount { err } + } + sdk_common::prelude::LnUrlPayError::InvalidInvoice { err } => { + Self::InvalidInvoice { err } + } + sdk_common::prelude::LnUrlPayError::InvalidNetwork { err } => { + Self::InvalidNetwork { err } + } + sdk_common::prelude::LnUrlPayError::InvalidUri { err } => Self::InvalidUri { err }, + sdk_common::prelude::LnUrlPayError::InvoiceExpired { err } => { + Self::InvoiceExpired { err } + } + sdk_common::prelude::LnUrlPayError::PaymentFailed { err } => { + Self::PaymentFailed { err } + } + sdk_common::prelude::LnUrlPayError::PaymentTimeout { err } => { + Self::PaymentTimeout { err } + } + sdk_common::prelude::LnUrlPayError::RouteNotFound { err } => { + Self::RouteNotFound { err } + } + sdk_common::prelude::LnUrlPayError::RouteTooExpensive { err } => { + Self::RouteTooExpensive { err } + } + sdk_common::prelude::LnUrlPayError::ServiceConnectivity { err } => { + Self::ServiceConnectivity { err } + } + } + } + } + + impl From for sdk_common::prelude::LnUrlPayError { + fn from(value: PaymentError) -> Self { + Self::Generic { + err: format!("{value}"), + } + } + } + + #[derive(Debug, Error)] + pub enum LnUrlWithdrawError { + /// This error is raised when a general error occurs not specific to other error variants + /// in this enum. + #[error("Generic: {err}")] + Generic { err: String }, + + /// This error is raised when the amount is zero or the amount does not cover + /// the cost to open a new channel. + #[error("Invalid amount: {err}")] + InvalidAmount { err: String }, + + /// This error is raised when the lightning invoice cannot be parsed. + #[error("Invalid invoice: {err}")] + InvalidInvoice { err: String }, + + /// This error is raised when the decoded LNURL URI is not compliant to the specification. + #[error("Invalid uri: {err}")] + InvalidUri { err: String }, + + /// This error is raised when no routing hints were able to be added to the invoice + /// while trying to receive a payment. + #[error("No routing hints: {err}")] + InvoiceNoRoutingHints { err: String }, + + /// This error is raised when a connection to an external service fails. + #[error("Service connectivity: {err}")] + ServiceConnectivity { err: String }, + } + + impl From for LnUrlWithdrawError { + fn from(value: sdk_common::prelude::LnUrlWithdrawError) -> Self { + match value { + sdk_common::prelude::LnUrlWithdrawError::Generic { err } => Self::Generic { err }, + sdk_common::prelude::LnUrlWithdrawError::InvalidAmount { err } => { + Self::InvalidAmount { err } + } + sdk_common::prelude::LnUrlWithdrawError::InvalidInvoice { err } => { + Self::InvalidInvoice { err } + } + sdk_common::prelude::LnUrlWithdrawError::InvalidUri { err } => { + Self::InvalidUri { err } + } + sdk_common::prelude::LnUrlWithdrawError::InvoiceNoRoutingHints { err } => { + Self::InvoiceNoRoutingHints { err } + } + sdk_common::prelude::LnUrlWithdrawError::ServiceConnectivity { err } => { + Self::ServiceConnectivity { err } + } + } + } + } + + impl From for sdk_common::prelude::LnUrlWithdrawError { + fn from(value: PaymentError) -> Self { + Self::Generic { + err: format!("{value}"), + } + } + } + + #[derive(Clone, Serialize)] + pub enum LnUrlWithdrawResult { + Ok { data: LnUrlWithdrawSuccessData }, + ErrorStatus { data: LnUrlErrorData }, + } + impl From for LnUrlWithdrawResult { + fn from(value: sdk_common::prelude::LnUrlWithdrawResult) -> Self { + match value { + sdk_common::prelude::LnUrlWithdrawResult::Ok { data } => { + Self::Ok { data: data.into() } + } + sdk_common::prelude::LnUrlWithdrawResult::ErrorStatus { data } => { + Self::ErrorStatus { data } + } + } + } + } + + #[derive(Clone, Deserialize, Debug, Serialize)] + pub struct LnUrlWithdrawSuccessData { + pub invoice: LNInvoice, + } + impl From for LnUrlWithdrawSuccessData { + fn from(value: sdk_common::prelude::LnUrlWithdrawSuccessData) -> Self { + Self { + invoice: value.invoice, + } + } + } + + #[derive(Debug, Error)] + pub enum LnUrlAuthError { + /// This error is raised when a general error occurs not specific to other error variants + /// in this enum. + #[error("Generic: {err}")] + Generic { err: String }, + + /// This error is raised when the decoded LNURL URI is not compliant to the specification. + #[error("Invalid uri: {err}")] + InvalidUri { err: String }, + + /// This error is raised when a connection to an external service fails. + #[error("Service connectivity: {err}")] + ServiceConnectivity { err: String }, + } + impl From for LnUrlAuthError { + fn from(value: prelude::LnUrlAuthError) -> Self { + match value { + sdk_common::prelude::LnUrlAuthError::Generic { err } => Self::Generic { err }, + sdk_common::prelude::LnUrlAuthError::InvalidUri { err } => Self::InvalidUri { err }, + sdk_common::prelude::LnUrlAuthError::ServiceConnectivity { err } => { + Self::ServiceConnectivity { err } + } + } + } + } + + /// Contains the result of the entire LNURL interaction, as reported by the LNURL endpoint. + /// + /// * `Ok` indicates the interaction with the endpoint was valid, and the endpoint + /// - started to pay the invoice asynchronously in the case of LNURL-withdraw, + /// - verified the client signature in the case of LNURL-auth,////// * `Error` indicates a generic issue the LNURL endpoint encountered, including a freetext + /// description of the reason. + /// + /// Both cases are described in LUD-03 & LUD-04: + #[derive(Clone, Deserialize, Debug, Serialize)] + #[serde(rename_all = "UPPERCASE")] + #[serde(tag = "status")] + pub enum LnUrlCallbackStatus { + /// On-wire format is: `{"status": "OK"}` + Ok, + /// On-wire format is: `{"status": "ERROR", "reason": "error details..."}` + #[serde(rename = "ERROR")] + ErrorStatus { + #[serde(flatten)] + data: LnUrlErrorData, + }, + } + impl From for LnUrlCallbackStatus { + fn from(value: prelude::LnUrlCallbackStatus) -> Self { + match value { + sdk_common::prelude::LnUrlCallbackStatus::Ok => Self::Ok, + sdk_common::prelude::LnUrlCallbackStatus::ErrorStatus { data } => { + Self::ErrorStatus { data } + } + } + } + } +} diff --git a/lib/core/src/error.rs b/lib/core/src/error.rs index d570ac9..0ce836c 100644 --- a/lib/core/src/error.rs +++ b/lib/core/src/error.rs @@ -1,4 +1,5 @@ use anyhow::Error; +use sdk_common::prelude::LnUrlAuthError; pub type LiquidSdkResult = Result; @@ -149,3 +150,19 @@ impl From for PaymentError { } } } + +impl From for PaymentError { + fn from(err: crate::bitcoin::util::bip32::Error) -> Self { + Self::SignerError { + err: err.to_string(), + } + } +} + +impl From for LnUrlAuthError { + fn from(value: PaymentError) -> Self { + Self::Generic { + err: format!("Failed to perform LNURL-auth: {value:?}"), + } + } +} diff --git a/lib/core/src/frb_generated.io.rs b/lib/core/src/frb_generated.io.rs index 5547fe7..94d7fc8 100644 --- a/lib/core/src/frb_generated.io.rs +++ b/lib/core/src/frb_generated.io.rs @@ -81,6 +81,39 @@ impl CstDecode for *mut wire_cst_list_prim_u_8_strict { String::from_utf8(vec).unwrap() } } +impl CstDecode + for wire_cst_aes_success_action_data_decrypted +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::AesSuccessActionDataDecrypted { + crate::bindings::AesSuccessActionDataDecrypted { + description: self.description.cst_decode(), + plaintext: self.plaintext.cst_decode(), + } + } +} +impl CstDecode + for wire_cst_aes_success_action_data_result +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::AesSuccessActionDataResult { + match self.tag { + 0 => { + let ans = unsafe { self.kind.Decrypted }; + crate::bindings::AesSuccessActionDataResult::Decrypted { + data: ans.data.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.ErrorStatus }; + crate::bindings::AesSuccessActionDataResult::ErrorStatus { + reason: ans.reason.cst_decode(), + } + } + _ => unreachable!(), + } + } +} impl CstDecode for wire_cst_backup_request { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::BackupRequest { @@ -97,6 +130,36 @@ impl CstDecode for wire_cst_binding_event } } } +impl CstDecode for wire_cst_bitcoin_address_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::BitcoinAddressData { + crate::bindings::BitcoinAddressData { + address: self.address.cst_decode(), + network: self.network.cst_decode(), + amount_sat: self.amount_sat.cst_decode(), + label: self.label.cst_decode(), + message: self.message.cst_decode(), + } + } +} +impl CstDecode + for *mut wire_cst_aes_success_action_data_decrypted +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::AesSuccessActionDataDecrypted { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode + for *mut wire_cst_aes_success_action_data_result +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::AesSuccessActionDataResult { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for *mut wire_cst_backup_request { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::BackupRequest { @@ -111,6 +174,13 @@ impl CstDecode for *mut wire_cst_binding_ CstDecode::::cst_decode(*wrap).into() } } +impl CstDecode for *mut wire_cst_bitcoin_address_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::BitcoinAddressData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for *mut wire_cst_connect_request { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::ConnectRequest { @@ -125,6 +195,89 @@ impl CstDecode for *mut wire_cst_liquid_sdk_event CstDecode::::cst_decode(*wrap).into() } } +impl CstDecode for *mut wire_cst_ln_invoice { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LNInvoice { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_auth_request_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlAuthRequestData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_error_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlErrorData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_pay_error_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayErrorData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_pay_request { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayRequest { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_pay_request_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayRequestData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_pay_success_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::model::LnUrlPaySuccessData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode for *mut wire_cst_ln_url_withdraw_request { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlWithdrawRequest { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode + for *mut wire_cst_ln_url_withdraw_request_data +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlWithdrawRequestData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode + for *mut wire_cst_ln_url_withdraw_success_data +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlWithdrawSuccessData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} +impl CstDecode + for *mut wire_cst_message_success_action_data +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::MessageSuccessActionData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for *mut wire_cst_pay_onchain_request { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::PayOnchainRequest { @@ -183,12 +336,26 @@ impl CstDecode for *mut wire_cst_restore_request { CstDecode::::cst_decode(*wrap).into() } } +impl CstDecode for *mut wire_cst_success_action_processed { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::SuccessActionProcessed { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for *mut u64 { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> u64 { unsafe { *flutter_rust_bridge::for_generated::box_from_leak_ptr(self) } } } +impl CstDecode for *mut wire_cst_url_success_action_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::UrlSuccessActionData { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for wire_cst_config { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::Config { @@ -224,6 +391,62 @@ impl CstDecode for wire_cst_get_info_response { } } } +impl CstDecode for wire_cst_input_type { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::InputType { + match self.tag { + 0 => { + let ans = unsafe { self.kind.BitcoinAddress }; + crate::bindings::InputType::BitcoinAddress { + address: ans.address.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.Bolt11 }; + crate::bindings::InputType::Bolt11 { + invoice: ans.invoice.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.NodeId }; + crate::bindings::InputType::NodeId { + node_id: ans.node_id.cst_decode(), + } + } + 3 => { + let ans = unsafe { self.kind.Url }; + crate::bindings::InputType::Url { + url: ans.url.cst_decode(), + } + } + 4 => { + let ans = unsafe { self.kind.LnUrlPay }; + crate::bindings::InputType::LnUrlPay { + data: ans.data.cst_decode(), + } + } + 5 => { + let ans = unsafe { self.kind.LnUrlWithdraw }; + crate::bindings::InputType::LnUrlWithdraw { + data: ans.data.cst_decode(), + } + } + 6 => { + let ans = unsafe { self.kind.LnUrlAuth }; + crate::bindings::InputType::LnUrlAuth { + data: ans.data.cst_decode(), + } + } + 7 => { + let ans = unsafe { self.kind.LnUrlError }; + crate::bindings::InputType::LnUrlError { + data: ans.data.cst_decode(), + } + } + _ => unreachable!(), + } + } +} impl CstDecode for wire_cst_liquid_sdk_error { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::error::LiquidSdkError { @@ -310,9 +533,9 @@ impl CstDecode> for *mut wire_cst_list_prim_u_8_strict { } } } -impl CstDecode> for *mut wire_cst_list_route_hint { +impl CstDecode> for *mut wire_cst_list_route_hint { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> Vec { + fn cst_decode(self) -> Vec { let vec = unsafe { let wrap = flutter_rust_bridge::for_generated::box_from_leak_ptr(self); flutter_rust_bridge::for_generated::vec_from_leak_ptr(wrap.ptr, wrap.len) @@ -320,9 +543,9 @@ impl CstDecode> for *mut wire_cst_list_route_hint { vec.into_iter().map(CstDecode::cst_decode).collect() } } -impl CstDecode> for *mut wire_cst_list_route_hint_hop { +impl CstDecode> for *mut wire_cst_list_route_hint_hop { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> Vec { + fn cst_decode(self) -> Vec { let vec = unsafe { let wrap = flutter_rust_bridge::for_generated::box_from_leak_ptr(self); flutter_rust_bridge::for_generated::vec_from_leak_ptr(wrap.ptr, wrap.len) @@ -330,10 +553,10 @@ impl CstDecode> for *mut wire_cst_list_route_hin vec.into_iter().map(CstDecode::cst_decode).collect() } } -impl CstDecode for wire_cst_ln_invoice { +impl CstDecode for wire_cst_ln_invoice { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> crate::model::LNInvoice { - crate::model::LNInvoice { + fn cst_decode(self) -> crate::bindings::LNInvoice { + crate::bindings::LNInvoice { bolt11: self.bolt11.cst_decode(), network: self.network.cst_decode(), payee_pubkey: self.payee_pubkey.cst_decode(), @@ -349,6 +572,314 @@ impl CstDecode for wire_cst_ln_invoice { } } } +impl CstDecode for wire_cst_ln_url_auth_error { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlAuthError { + match self.tag { + 0 => { + let ans = unsafe { self.kind.Generic }; + crate::bindings::duplicates::LnUrlAuthError::Generic { + err: ans.err.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.InvalidUri }; + crate::bindings::duplicates::LnUrlAuthError::InvalidUri { + err: ans.err.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.ServiceConnectivity }; + crate::bindings::duplicates::LnUrlAuthError::ServiceConnectivity { + err: ans.err.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_ln_url_auth_request_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlAuthRequestData { + crate::bindings::LnUrlAuthRequestData { + k1: self.k1.cst_decode(), + action: self.action.cst_decode(), + domain: self.domain.cst_decode(), + url: self.url.cst_decode(), + } + } +} +impl CstDecode + for wire_cst_ln_url_callback_status +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlCallbackStatus { + match self.tag { + 0 => crate::bindings::duplicates::LnUrlCallbackStatus::Ok, + 1 => { + let ans = unsafe { self.kind.ErrorStatus }; + crate::bindings::duplicates::LnUrlCallbackStatus::ErrorStatus { + data: ans.data.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_ln_url_error_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlErrorData { + crate::bindings::LnUrlErrorData { + reason: self.reason.cst_decode(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_error { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlPayError { + match self.tag { + 0 => crate::bindings::duplicates::LnUrlPayError::AlreadyPaid, + 1 => { + let ans = unsafe { self.kind.Generic }; + crate::bindings::duplicates::LnUrlPayError::Generic { + err: ans.err.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.InvalidAmount }; + crate::bindings::duplicates::LnUrlPayError::InvalidAmount { + err: ans.err.cst_decode(), + } + } + 3 => { + let ans = unsafe { self.kind.InvalidInvoice }; + crate::bindings::duplicates::LnUrlPayError::InvalidInvoice { + err: ans.err.cst_decode(), + } + } + 4 => { + let ans = unsafe { self.kind.InvalidNetwork }; + crate::bindings::duplicates::LnUrlPayError::InvalidNetwork { + err: ans.err.cst_decode(), + } + } + 5 => { + let ans = unsafe { self.kind.InvalidUri }; + crate::bindings::duplicates::LnUrlPayError::InvalidUri { + err: ans.err.cst_decode(), + } + } + 6 => { + let ans = unsafe { self.kind.InvoiceExpired }; + crate::bindings::duplicates::LnUrlPayError::InvoiceExpired { + err: ans.err.cst_decode(), + } + } + 7 => { + let ans = unsafe { self.kind.PaymentFailed }; + crate::bindings::duplicates::LnUrlPayError::PaymentFailed { + err: ans.err.cst_decode(), + } + } + 8 => { + let ans = unsafe { self.kind.PaymentTimeout }; + crate::bindings::duplicates::LnUrlPayError::PaymentTimeout { + err: ans.err.cst_decode(), + } + } + 9 => { + let ans = unsafe { self.kind.RouteNotFound }; + crate::bindings::duplicates::LnUrlPayError::RouteNotFound { + err: ans.err.cst_decode(), + } + } + 10 => { + let ans = unsafe { self.kind.RouteTooExpensive }; + crate::bindings::duplicates::LnUrlPayError::RouteTooExpensive { + err: ans.err.cst_decode(), + } + } + 11 => { + let ans = unsafe { self.kind.ServiceConnectivity }; + crate::bindings::duplicates::LnUrlPayError::ServiceConnectivity { + err: ans.err.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_error_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayErrorData { + crate::bindings::LnUrlPayErrorData { + payment_hash: self.payment_hash.cst_decode(), + reason: self.reason.cst_decode(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_request { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayRequest { + crate::bindings::LnUrlPayRequest { + data: self.data.cst_decode(), + amount_msat: self.amount_msat.cst_decode(), + comment: self.comment.cst_decode(), + payment_label: self.payment_label.cst_decode(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_request_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlPayRequestData { + crate::bindings::LnUrlPayRequestData { + callback: self.callback.cst_decode(), + min_sendable: self.min_sendable.cst_decode(), + max_sendable: self.max_sendable.cst_decode(), + metadata_str: self.metadata_str.cst_decode(), + comment_allowed: self.comment_allowed.cst_decode(), + domain: self.domain.cst_decode(), + allows_nostr: self.allows_nostr.cst_decode(), + nostr_pubkey: self.nostr_pubkey.cst_decode(), + ln_address: self.ln_address.cst_decode(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_result { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::model::LnUrlPayResult { + match self.tag { + 0 => { + let ans = unsafe { self.kind.EndpointSuccess }; + crate::model::LnUrlPayResult::EndpointSuccess { + data: ans.data.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.EndpointError }; + crate::model::LnUrlPayResult::EndpointError { + data: ans.data.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.PayError }; + crate::model::LnUrlPayResult::PayError { + data: ans.data.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_ln_url_pay_success_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::model::LnUrlPaySuccessData { + crate::model::LnUrlPaySuccessData { + payment: self.payment.cst_decode(), + success_action: self.success_action.cst_decode(), + } + } +} +impl CstDecode for wire_cst_ln_url_withdraw_error { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlWithdrawError { + match self.tag { + 0 => { + let ans = unsafe { self.kind.Generic }; + crate::bindings::duplicates::LnUrlWithdrawError::Generic { + err: ans.err.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.InvalidAmount }; + crate::bindings::duplicates::LnUrlWithdrawError::InvalidAmount { + err: ans.err.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.InvalidInvoice }; + crate::bindings::duplicates::LnUrlWithdrawError::InvalidInvoice { + err: ans.err.cst_decode(), + } + } + 3 => { + let ans = unsafe { self.kind.InvalidUri }; + crate::bindings::duplicates::LnUrlWithdrawError::InvalidUri { + err: ans.err.cst_decode(), + } + } + 4 => { + let ans = unsafe { self.kind.InvoiceNoRoutingHints }; + crate::bindings::duplicates::LnUrlWithdrawError::InvoiceNoRoutingHints { + err: ans.err.cst_decode(), + } + } + 5 => { + let ans = unsafe { self.kind.ServiceConnectivity }; + crate::bindings::duplicates::LnUrlWithdrawError::ServiceConnectivity { + err: ans.err.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_ln_url_withdraw_request { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlWithdrawRequest { + crate::bindings::LnUrlWithdrawRequest { + data: self.data.cst_decode(), + amount_msat: self.amount_msat.cst_decode(), + description: self.description.cst_decode(), + } + } +} +impl CstDecode + for wire_cst_ln_url_withdraw_request_data +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::LnUrlWithdrawRequestData { + crate::bindings::LnUrlWithdrawRequestData { + callback: self.callback.cst_decode(), + k1: self.k1.cst_decode(), + default_description: self.default_description.cst_decode(), + min_withdrawable: self.min_withdrawable.cst_decode(), + max_withdrawable: self.max_withdrawable.cst_decode(), + } + } +} +impl CstDecode + for wire_cst_ln_url_withdraw_result +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlWithdrawResult { + match self.tag { + 0 => { + let ans = unsafe { self.kind.Ok }; + crate::bindings::duplicates::LnUrlWithdrawResult::Ok { + data: ans.data.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.ErrorStatus }; + crate::bindings::duplicates::LnUrlWithdrawResult::ErrorStatus { + data: ans.data.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode + for wire_cst_ln_url_withdraw_success_data +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::duplicates::LnUrlWithdrawSuccessData { + crate::bindings::duplicates::LnUrlWithdrawSuccessData { + invoice: self.invoice.cst_decode(), + } + } +} impl CstDecode for wire_cst_log_entry { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::LogEntry { @@ -358,6 +889,14 @@ impl CstDecode for wire_cst_log_entry { } } } +impl CstDecode for wire_cst_message_success_action_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::MessageSuccessActionData { + crate::bindings::MessageSuccessActionData { + message: self.message.cst_decode(), + } + } +} impl CstDecode for wire_cst_pay_onchain_request { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::model::PayOnchainRequest { @@ -515,18 +1054,18 @@ impl CstDecode for wire_cst_restore_request { } } } -impl CstDecode for wire_cst_route_hint { +impl CstDecode for wire_cst_route_hint { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> crate::model::RouteHint { - crate::model::RouteHint { + fn cst_decode(self) -> crate::bindings::RouteHint { + crate::bindings::RouteHint { hops: self.hops.cst_decode(), } } } -impl CstDecode for wire_cst_route_hint_hop { +impl CstDecode for wire_cst_route_hint_hop { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> crate::model::RouteHintHop { - crate::model::RouteHintHop { + fn cst_decode(self) -> crate::bindings::RouteHintHop { + crate::bindings::RouteHintHop { src_node_id: self.src_node_id.cst_decode(), short_channel_id: self.short_channel_id.cst_decode(), fees_base_msat: self.fees_base_msat.cst_decode(), @@ -545,6 +1084,67 @@ impl CstDecode for wire_cst_send_payment_resp } } } +impl CstDecode for wire_cst_success_action_processed { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::SuccessActionProcessed { + match self.tag { + 0 => { + let ans = unsafe { self.kind.Aes }; + crate::bindings::SuccessActionProcessed::Aes { + result: ans.result.cst_decode(), + } + } + 1 => { + let ans = unsafe { self.kind.Message }; + crate::bindings::SuccessActionProcessed::Message { + data: ans.data.cst_decode(), + } + } + 2 => { + let ans = unsafe { self.kind.Url }; + crate::bindings::SuccessActionProcessed::Url { + data: ans.data.cst_decode(), + } + } + _ => unreachable!(), + } + } +} +impl CstDecode for wire_cst_url_success_action_data { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::UrlSuccessActionData { + crate::bindings::UrlSuccessActionData { + description: self.description.cst_decode(), + url: self.url.cst_decode(), + } + } +} +impl NewWithNullPtr for wire_cst_aes_success_action_data_decrypted { + fn new_with_null_ptr() -> Self { + Self { + description: core::ptr::null_mut(), + plaintext: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_aes_success_action_data_decrypted { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_aes_success_action_data_result { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: AesSuccessActionDataResultKind { nil__: () }, + } + } +} +impl Default for wire_cst_aes_success_action_data_result { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_backup_request { fn new_with_null_ptr() -> Self { Self { @@ -569,6 +1169,22 @@ impl Default for wire_cst_binding_event_listener { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_bitcoin_address_data { + fn new_with_null_ptr() -> Self { + Self { + address: core::ptr::null_mut(), + network: Default::default(), + amount_sat: core::ptr::null_mut(), + label: core::ptr::null_mut(), + message: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_bitcoin_address_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_config { fn new_with_null_ptr() -> Self { Self { @@ -616,6 +1232,19 @@ impl Default for wire_cst_get_info_response { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_input_type { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: InputTypeKind { nil__: () }, + } + } +} +impl Default for wire_cst_input_type { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_liquid_sdk_error { fn new_with_null_ptr() -> Self { Self { @@ -665,6 +1294,214 @@ impl Default for wire_cst_ln_invoice { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_ln_url_auth_error { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlAuthErrorKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_auth_error { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_auth_request_data { + fn new_with_null_ptr() -> Self { + Self { + k1: core::ptr::null_mut(), + action: core::ptr::null_mut(), + domain: core::ptr::null_mut(), + url: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_auth_request_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_callback_status { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlCallbackStatusKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_callback_status { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_error_data { + fn new_with_null_ptr() -> Self { + Self { + reason: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_error_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_error { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlPayErrorKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_pay_error { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_error_data { + fn new_with_null_ptr() -> Self { + Self { + payment_hash: core::ptr::null_mut(), + reason: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_pay_error_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_request { + fn new_with_null_ptr() -> Self { + Self { + data: Default::default(), + amount_msat: Default::default(), + comment: core::ptr::null_mut(), + payment_label: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_pay_request { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_request_data { + fn new_with_null_ptr() -> Self { + Self { + callback: core::ptr::null_mut(), + min_sendable: Default::default(), + max_sendable: Default::default(), + metadata_str: core::ptr::null_mut(), + comment_allowed: Default::default(), + domain: core::ptr::null_mut(), + allows_nostr: Default::default(), + nostr_pubkey: core::ptr::null_mut(), + ln_address: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_pay_request_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_result { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlPayResultKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_pay_result { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_pay_success_data { + fn new_with_null_ptr() -> Self { + Self { + payment: Default::default(), + success_action: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_pay_success_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_withdraw_error { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlWithdrawErrorKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_withdraw_error { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_withdraw_request { + fn new_with_null_ptr() -> Self { + Self { + data: Default::default(), + amount_msat: Default::default(), + description: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_ln_url_withdraw_request { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_withdraw_request_data { + fn new_with_null_ptr() -> Self { + Self { + callback: core::ptr::null_mut(), + k1: core::ptr::null_mut(), + default_description: core::ptr::null_mut(), + min_withdrawable: Default::default(), + max_withdrawable: Default::default(), + } + } +} +impl Default for wire_cst_ln_url_withdraw_request_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_withdraw_result { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: LnUrlWithdrawResultKind { nil__: () }, + } + } +} +impl Default for wire_cst_ln_url_withdraw_result { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_ln_url_withdraw_success_data { + fn new_with_null_ptr() -> Self { + Self { + invoice: Default::default(), + } + } +} +impl Default for wire_cst_ln_url_withdraw_success_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_log_entry { fn new_with_null_ptr() -> Self { Self { @@ -678,6 +1515,18 @@ impl Default for wire_cst_log_entry { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_message_success_action_data { + fn new_with_null_ptr() -> Self { + Self { + message: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_message_success_action_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_pay_onchain_request { fn new_with_null_ptr() -> Self { Self { @@ -868,6 +1717,32 @@ impl Default for wire_cst_send_payment_response { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_success_action_processed { + fn new_with_null_ptr() -> Self { + Self { + tag: -1, + kind: SuccessActionProcessedKind { nil__: () }, + } + } +} +impl Default for wire_cst_success_action_processed { + fn default() -> Self { + Self::new_with_null_ptr() + } +} +impl NewWithNullPtr for wire_cst_url_success_action_data { + fn new_with_null_ptr() -> Self { + Self { + description: core::ptr::null_mut(), + url: core::ptr::null_mut(), + } + } +} +impl Default for wire_cst_url_success_action_data { + fn default() -> Self { + Self::new_with_null_ptr() + } +} #[no_mangle] pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_add_event_listener( @@ -917,6 +1792,33 @@ pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_li wire__crate__bindings__BindingLiquidSdk_list_payments_impl(port_, that) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth( + port_: i64, + that: usize, + req_data: *mut wire_cst_ln_url_auth_request_data, +) { + wire__crate__bindings__BindingLiquidSdk_lnurl_auth_impl(port_, that, req_data) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay( + port_: i64, + that: usize, + req: *mut wire_cst_ln_url_pay_request, +) { + wire__crate__bindings__BindingLiquidSdk_lnurl_pay_impl(port_, that, req) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw( + port_: i64, + that: usize, + req: *mut wire_cst_ln_url_withdraw_request, +) { + wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw_impl(port_, that, req) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_pay_onchain( port_: i64, @@ -1019,6 +1921,14 @@ pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__default_config( wire__crate__bindings__default_config_impl(network) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__parse( + port_: i64, + input: *mut wire_cst_list_prim_u_8_strict, +) { + wire__crate__bindings__parse_impl(port_, input) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_wire__crate__bindings__parse_invoice( input: *mut wire_cst_list_prim_u_8_strict, @@ -1044,6 +1954,22 @@ pub extern "C" fn frbgen_breez_liquid_rust_arc_decrement_strong_count_RustOpaque } } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted( +) -> *mut wire_cst_aes_success_action_data_decrypted { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_aes_success_action_data_decrypted::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result( +) -> *mut wire_cst_aes_success_action_data_result { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_aes_success_action_data_result::new_with_null_ptr(), + ) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_backup_request( ) -> *mut wire_cst_backup_request { @@ -1060,6 +1986,14 @@ pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_binding_event_listener ) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data( +) -> *mut wire_cst_bitcoin_address_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_bitcoin_address_data::new_with_null_ptr(), + ) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_connect_request( ) -> *mut wire_cst_connect_request { @@ -1076,6 +2010,91 @@ pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_liquid_sdk_event( ) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice() -> *mut wire_cst_ln_invoice { + flutter_rust_bridge::for_generated::new_leak_box_ptr(wire_cst_ln_invoice::new_with_null_ptr()) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data( +) -> *mut wire_cst_ln_url_auth_request_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_auth_request_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data( +) -> *mut wire_cst_ln_url_error_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_error_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data( +) -> *mut wire_cst_ln_url_pay_error_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_pay_error_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request( +) -> *mut wire_cst_ln_url_pay_request { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_pay_request::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data( +) -> *mut wire_cst_ln_url_pay_request_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_pay_request_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data( +) -> *mut wire_cst_ln_url_pay_success_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_pay_success_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request( +) -> *mut wire_cst_ln_url_withdraw_request { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_withdraw_request::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data( +) -> *mut wire_cst_ln_url_withdraw_request_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_withdraw_request_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data( +) -> *mut wire_cst_ln_url_withdraw_success_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_ln_url_withdraw_success_data::new_with_null_ptr(), + ) +} + +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data( +) -> *mut wire_cst_message_success_action_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_message_success_action_data::new_with_null_ptr(), + ) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_pay_onchain_request( ) -> *mut wire_cst_pay_onchain_request { @@ -1137,11 +2156,27 @@ pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_restore_request( ) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed( +) -> *mut wire_cst_success_action_processed { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_success_action_processed::new_with_null_ptr(), + ) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_u_64(value: u64) -> *mut u64 { flutter_rust_bridge::for_generated::new_leak_box_ptr(value) } +#[no_mangle] +pub extern "C" fn frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data( +) -> *mut wire_cst_url_success_action_data { + flutter_rust_bridge::for_generated::new_leak_box_ptr( + wire_cst_url_success_action_data::new_with_null_ptr(), + ) +} + #[no_mangle] pub extern "C" fn frbgen_breez_liquid_cst_new_list_payment(len: i32) -> *mut wire_cst_list_payment { let wrap = wire_cst_list_payment { @@ -1193,6 +2228,35 @@ pub extern "C" fn frbgen_breez_liquid_cst_new_list_route_hint_hop( flutter_rust_bridge::for_generated::new_leak_box_ptr(wrap) } +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_aes_success_action_data_decrypted { + description: *mut wire_cst_list_prim_u_8_strict, + plaintext: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_aes_success_action_data_result { + tag: i32, + kind: AesSuccessActionDataResultKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union AesSuccessActionDataResultKind { + Decrypted: wire_cst_AesSuccessActionDataResult_Decrypted, + ErrorStatus: wire_cst_AesSuccessActionDataResult_ErrorStatus, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_AesSuccessActionDataResult_Decrypted { + data: *mut wire_cst_aes_success_action_data_decrypted, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_AesSuccessActionDataResult_ErrorStatus { + reason: *mut wire_cst_list_prim_u_8_strict, +} #[repr(C)] #[derive(Clone, Copy)] pub struct wire_cst_backup_request { @@ -1205,6 +2269,15 @@ pub struct wire_cst_binding_event_listener { } #[repr(C)] #[derive(Clone, Copy)] +pub struct wire_cst_bitcoin_address_data { + address: *mut wire_cst_list_prim_u_8_strict, + network: i32, + amount_sat: *mut u64, + label: *mut wire_cst_list_prim_u_8_strict, + message: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] pub struct wire_cst_config { boltz_url: *mut wire_cst_list_prim_u_8_strict, liquid_electrum_url: *mut wire_cst_list_prim_u_8_strict, @@ -1231,6 +2304,65 @@ pub struct wire_cst_get_info_response { } #[repr(C)] #[derive(Clone, Copy)] +pub struct wire_cst_input_type { + tag: i32, + kind: InputTypeKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union InputTypeKind { + BitcoinAddress: wire_cst_InputType_BitcoinAddress, + Bolt11: wire_cst_InputType_Bolt11, + NodeId: wire_cst_InputType_NodeId, + Url: wire_cst_InputType_Url, + LnUrlPay: wire_cst_InputType_LnUrlPay, + LnUrlWithdraw: wire_cst_InputType_LnUrlWithdraw, + LnUrlAuth: wire_cst_InputType_LnUrlAuth, + LnUrlError: wire_cst_InputType_LnUrlError, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_BitcoinAddress { + address: *mut wire_cst_bitcoin_address_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_Bolt11 { + invoice: *mut wire_cst_ln_invoice, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_NodeId { + node_id: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_Url { + url: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_LnUrlPay { + data: *mut wire_cst_ln_url_pay_request_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_LnUrlWithdraw { + data: *mut wire_cst_ln_url_withdraw_request_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_LnUrlAuth { + data: *mut wire_cst_ln_url_auth_request_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_InputType_LnUrlError { + data: *mut wire_cst_ln_url_error_data, +} +#[repr(C)] +#[derive(Clone, Copy)] pub struct wire_cst_liquid_sdk_error { tag: i32, kind: LiquidSdkErrorKind, @@ -1341,12 +2473,306 @@ pub struct wire_cst_ln_invoice { } #[repr(C)] #[derive(Clone, Copy)] +pub struct wire_cst_ln_url_auth_error { + tag: i32, + kind: LnUrlAuthErrorKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlAuthErrorKind { + Generic: wire_cst_LnUrlAuthError_Generic, + InvalidUri: wire_cst_LnUrlAuthError_InvalidUri, + ServiceConnectivity: wire_cst_LnUrlAuthError_ServiceConnectivity, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlAuthError_Generic { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlAuthError_InvalidUri { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlAuthError_ServiceConnectivity { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_auth_request_data { + k1: *mut wire_cst_list_prim_u_8_strict, + action: *mut wire_cst_list_prim_u_8_strict, + domain: *mut wire_cst_list_prim_u_8_strict, + url: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_callback_status { + tag: i32, + kind: LnUrlCallbackStatusKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlCallbackStatusKind { + ErrorStatus: wire_cst_LnUrlCallbackStatus_ErrorStatus, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlCallbackStatus_ErrorStatus { + data: *mut wire_cst_ln_url_error_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_error_data { + reason: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_error { + tag: i32, + kind: LnUrlPayErrorKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlPayErrorKind { + Generic: wire_cst_LnUrlPayError_Generic, + InvalidAmount: wire_cst_LnUrlPayError_InvalidAmount, + InvalidInvoice: wire_cst_LnUrlPayError_InvalidInvoice, + InvalidNetwork: wire_cst_LnUrlPayError_InvalidNetwork, + InvalidUri: wire_cst_LnUrlPayError_InvalidUri, + InvoiceExpired: wire_cst_LnUrlPayError_InvoiceExpired, + PaymentFailed: wire_cst_LnUrlPayError_PaymentFailed, + PaymentTimeout: wire_cst_LnUrlPayError_PaymentTimeout, + RouteNotFound: wire_cst_LnUrlPayError_RouteNotFound, + RouteTooExpensive: wire_cst_LnUrlPayError_RouteTooExpensive, + ServiceConnectivity: wire_cst_LnUrlPayError_ServiceConnectivity, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_Generic { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_InvalidAmount { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_InvalidInvoice { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_InvalidNetwork { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_InvalidUri { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_InvoiceExpired { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_PaymentFailed { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_PaymentTimeout { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_RouteNotFound { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_RouteTooExpensive { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayError_ServiceConnectivity { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_error_data { + payment_hash: *mut wire_cst_list_prim_u_8_strict, + reason: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_request { + data: wire_cst_ln_url_pay_request_data, + amount_msat: u64, + comment: *mut wire_cst_list_prim_u_8_strict, + payment_label: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_request_data { + callback: *mut wire_cst_list_prim_u_8_strict, + min_sendable: u64, + max_sendable: u64, + metadata_str: *mut wire_cst_list_prim_u_8_strict, + comment_allowed: u16, + domain: *mut wire_cst_list_prim_u_8_strict, + allows_nostr: bool, + nostr_pubkey: *mut wire_cst_list_prim_u_8_strict, + ln_address: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_result { + tag: i32, + kind: LnUrlPayResultKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlPayResultKind { + EndpointSuccess: wire_cst_LnUrlPayResult_EndpointSuccess, + EndpointError: wire_cst_LnUrlPayResult_EndpointError, + PayError: wire_cst_LnUrlPayResult_PayError, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayResult_EndpointSuccess { + data: *mut wire_cst_ln_url_pay_success_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayResult_EndpointError { + data: *mut wire_cst_ln_url_error_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlPayResult_PayError { + data: *mut wire_cst_ln_url_pay_error_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_pay_success_data { + payment: wire_cst_payment, + success_action: *mut wire_cst_success_action_processed, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_withdraw_error { + tag: i32, + kind: LnUrlWithdrawErrorKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlWithdrawErrorKind { + Generic: wire_cst_LnUrlWithdrawError_Generic, + InvalidAmount: wire_cst_LnUrlWithdrawError_InvalidAmount, + InvalidInvoice: wire_cst_LnUrlWithdrawError_InvalidInvoice, + InvalidUri: wire_cst_LnUrlWithdrawError_InvalidUri, + InvoiceNoRoutingHints: wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints, + ServiceConnectivity: wire_cst_LnUrlWithdrawError_ServiceConnectivity, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_Generic { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_InvalidAmount { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_InvalidInvoice { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_InvalidUri { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawError_ServiceConnectivity { + err: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_withdraw_request { + data: wire_cst_ln_url_withdraw_request_data, + amount_msat: u64, + description: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_withdraw_request_data { + callback: *mut wire_cst_list_prim_u_8_strict, + k1: *mut wire_cst_list_prim_u_8_strict, + default_description: *mut wire_cst_list_prim_u_8_strict, + min_withdrawable: u64, + max_withdrawable: u64, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_withdraw_result { + tag: i32, + kind: LnUrlWithdrawResultKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union LnUrlWithdrawResultKind { + Ok: wire_cst_LnUrlWithdrawResult_Ok, + ErrorStatus: wire_cst_LnUrlWithdrawResult_ErrorStatus, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawResult_Ok { + data: *mut wire_cst_ln_url_withdraw_success_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_LnUrlWithdrawResult_ErrorStatus { + data: *mut wire_cst_ln_url_error_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_ln_url_withdraw_success_data { + invoice: wire_cst_ln_invoice, +} +#[repr(C)] +#[derive(Clone, Copy)] pub struct wire_cst_log_entry { line: *mut wire_cst_list_prim_u_8_strict, level: *mut wire_cst_list_prim_u_8_strict, } #[repr(C)] #[derive(Clone, Copy)] +pub struct wire_cst_message_success_action_data { + message: *mut wire_cst_list_prim_u_8_strict, +} +#[repr(C)] +#[derive(Clone, Copy)] pub struct wire_cst_pay_onchain_request { address: *mut wire_cst_list_prim_u_8_strict, prepare_res: wire_cst_prepare_pay_onchain_response, @@ -1485,3 +2911,38 @@ pub struct wire_cst_route_hint_hop { pub struct wire_cst_send_payment_response { payment: wire_cst_payment, } +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_success_action_processed { + tag: i32, + kind: SuccessActionProcessedKind, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub union SuccessActionProcessedKind { + Aes: wire_cst_SuccessActionProcessed_Aes, + Message: wire_cst_SuccessActionProcessed_Message, + Url: wire_cst_SuccessActionProcessed_Url, + nil__: (), +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_SuccessActionProcessed_Aes { + result: *mut wire_cst_aes_success_action_data_result, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_SuccessActionProcessed_Message { + data: *mut wire_cst_message_success_action_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_SuccessActionProcessed_Url { + data: *mut wire_cst_url_success_action_data, +} +#[repr(C)] +#[derive(Clone, Copy)] +pub struct wire_cst_url_success_action_data { + description: *mut wire_cst_list_prim_u_8_strict, + url: *mut wire_cst_list_prim_u_8_strict, +} diff --git a/lib/core/src/frb_generated.rs b/lib/core/src/frb_generated.rs index 508d2b8..0347b10 100644 --- a/lib/core/src/frb_generated.rs +++ b/lib/core/src/frb_generated.rs @@ -35,7 +35,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueNom, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.0.0-dev.38"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -107248138; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 540580972; // Section: executor @@ -287,6 +287,138 @@ fn wire__crate__bindings__BindingLiquidSdk_list_payments_impl( }, ) } +fn wire__crate__bindings__BindingLiquidSdk_lnurl_auth_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + that: impl CstDecode< + RustOpaqueNom>, + >, + req_data: impl CstDecode, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "BindingLiquidSdk_lnurl_auth", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let api_that = that.cst_decode(); + let api_req_data = req_data.cst_decode(); + move |context| async move { + transform_result_dco( + (move || async move { + let mut api_that_decoded = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_that_decoded = + Some(api_that.lockable_decode_async_ref().await) + } + _ => unreachable!(), + } + } + let api_that = &*api_that_decoded.unwrap(); + crate::bindings::BindingLiquidSdk::lnurl_auth(api_that, api_req_data).await + })() + .await, + ) + } + }, + ) +} +fn wire__crate__bindings__BindingLiquidSdk_lnurl_pay_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + that: impl CstDecode< + RustOpaqueNom>, + >, + req: impl CstDecode, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "BindingLiquidSdk_lnurl_pay", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let api_that = that.cst_decode(); + let api_req = req.cst_decode(); + move |context| async move { + transform_result_dco( + (move || async move { + let mut api_that_decoded = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_that_decoded = + Some(api_that.lockable_decode_async_ref().await) + } + _ => unreachable!(), + } + } + let api_that = &*api_that_decoded.unwrap(); + crate::bindings::BindingLiquidSdk::lnurl_pay(api_that, api_req).await + })() + .await, + ) + } + }, + ) +} +fn wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + that: impl CstDecode< + RustOpaqueNom>, + >, + req: impl CstDecode, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "BindingLiquidSdk_lnurl_withdraw", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let api_that = that.cst_decode(); + let api_req = req.cst_decode(); + move |context| async move { + transform_result_dco( + (move || async move { + let mut api_that_decoded = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_that_decoded = + Some(api_that.lockable_decode_async_ref().await) + } + _ => unreachable!(), + } + } + let api_that = &*api_that_decoded.unwrap(); + crate::bindings::BindingLiquidSdk::lnurl_withdraw(api_that, api_req).await + })() + .await, + ) + } + }, + ) +} fn wire__crate__bindings__BindingLiquidSdk_pay_onchain_impl( port_: flutter_rust_bridge::for_generated::MessagePort, that: impl CstDecode< @@ -688,7 +820,7 @@ fn wire__crate__bindings__connect_impl( ) } fn wire__crate__bindings__default_config_impl( - network: impl CstDecode, + network: impl CstDecode, ) -> flutter_rust_bridge::for_generated::WireSyncRust2DartDco { FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( flutter_rust_bridge::for_generated::TaskInfo { @@ -704,6 +836,26 @@ fn wire__crate__bindings__default_config_impl( }, ) } +fn wire__crate__bindings__parse_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + input: impl CstDecode, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "parse", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let api_input = input.cst_decode(); + move |context| async move { + transform_result_dco( + (move || async move { crate::bindings::parse(api_input).await })().await, + ) + } + }, + ) +} fn wire__crate__bindings__parse_invoice_impl( input: impl CstDecode, ) -> flutter_rust_bridge::for_generated::WireSyncRust2DartDco { @@ -720,8 +872,166 @@ fn wire__crate__bindings__parse_invoice_impl( ) } +// Section: static_checks + +#[allow(clippy::unnecessary_literal_unwrap)] +const _: fn() = || { + { + let AesSuccessActionDataDecrypted = + None::.unwrap(); + let _: String = AesSuccessActionDataDecrypted.description; + let _: String = AesSuccessActionDataDecrypted.plaintext; + } + match None::.unwrap() { + crate::bindings::AesSuccessActionDataResult::Decrypted { data } => { + let _: crate::bindings::AesSuccessActionDataDecrypted = data; + } + crate::bindings::AesSuccessActionDataResult::ErrorStatus { reason } => { + let _: String = reason; + } + } + { + let BitcoinAddressData = None::.unwrap(); + let _: String = BitcoinAddressData.address; + let _: crate::bindings::Network = BitcoinAddressData.network; + let _: Option = BitcoinAddressData.amount_sat; + let _: Option = BitcoinAddressData.label; + let _: Option = BitcoinAddressData.message; + } + match None::.unwrap() { + crate::bindings::InputType::BitcoinAddress { address } => { + let _: crate::bindings::BitcoinAddressData = address; + } + crate::bindings::InputType::Bolt11 { invoice } => { + let _: crate::bindings::LNInvoice = invoice; + } + crate::bindings::InputType::NodeId { node_id } => { + let _: String = node_id; + } + crate::bindings::InputType::Url { url } => { + let _: String = url; + } + crate::bindings::InputType::LnUrlPay { data } => { + let _: crate::bindings::LnUrlPayRequestData = data; + } + crate::bindings::InputType::LnUrlWithdraw { data } => { + let _: crate::bindings::LnUrlWithdrawRequestData = data; + } + crate::bindings::InputType::LnUrlAuth { data } => { + let _: crate::bindings::LnUrlAuthRequestData = data; + } + crate::bindings::InputType::LnUrlError { data } => { + let _: crate::bindings::LnUrlErrorData = data; + } + } + { + let LNInvoice = None::.unwrap(); + let _: String = LNInvoice.bolt11; + let _: crate::bindings::Network = LNInvoice.network; + let _: String = LNInvoice.payee_pubkey; + let _: String = LNInvoice.payment_hash; + let _: Option = LNInvoice.description; + let _: Option = LNInvoice.description_hash; + let _: Option = LNInvoice.amount_msat; + let _: u64 = LNInvoice.timestamp; + let _: u64 = LNInvoice.expiry; + let _: Vec = LNInvoice.routing_hints; + let _: Vec = LNInvoice.payment_secret; + let _: u64 = LNInvoice.min_final_cltv_expiry_delta; + } + { + let LnUrlAuthRequestData = None::.unwrap(); + let _: String = LnUrlAuthRequestData.k1; + let _: Option = LnUrlAuthRequestData.action; + let _: String = LnUrlAuthRequestData.domain; + let _: String = LnUrlAuthRequestData.url; + } + { + let LnUrlErrorData = None::.unwrap(); + let _: String = LnUrlErrorData.reason; + } + { + let LnUrlPayErrorData = None::.unwrap(); + let _: String = LnUrlPayErrorData.payment_hash; + let _: String = LnUrlPayErrorData.reason; + } + { + let LnUrlPayRequest = None::.unwrap(); + let _: crate::bindings::LnUrlPayRequestData = LnUrlPayRequest.data; + let _: u64 = LnUrlPayRequest.amount_msat; + let _: Option = LnUrlPayRequest.comment; + let _: Option = LnUrlPayRequest.payment_label; + } + { + let LnUrlPayRequestData = None::.unwrap(); + let _: String = LnUrlPayRequestData.callback; + let _: u64 = LnUrlPayRequestData.min_sendable; + let _: u64 = LnUrlPayRequestData.max_sendable; + let _: String = LnUrlPayRequestData.metadata_str; + let _: u16 = LnUrlPayRequestData.comment_allowed; + let _: String = LnUrlPayRequestData.domain; + let _: bool = LnUrlPayRequestData.allows_nostr; + let _: Option = LnUrlPayRequestData.nostr_pubkey; + let _: Option = LnUrlPayRequestData.ln_address; + } + { + let LnUrlWithdrawRequest = None::.unwrap(); + let _: crate::bindings::LnUrlWithdrawRequestData = LnUrlWithdrawRequest.data; + let _: u64 = LnUrlWithdrawRequest.amount_msat; + let _: Option = LnUrlWithdrawRequest.description; + } + { + let LnUrlWithdrawRequestData = None::.unwrap(); + let _: String = LnUrlWithdrawRequestData.callback; + let _: String = LnUrlWithdrawRequestData.k1; + let _: String = LnUrlWithdrawRequestData.default_description; + let _: u64 = LnUrlWithdrawRequestData.min_withdrawable; + let _: u64 = LnUrlWithdrawRequestData.max_withdrawable; + } + { + let MessageSuccessActionData = None::.unwrap(); + let _: String = MessageSuccessActionData.message; + } + { + let RouteHint = None::.unwrap(); + let _: Vec = RouteHint.hops; + } + { + let RouteHintHop = None::.unwrap(); + let _: String = RouteHintHop.src_node_id; + let _: u64 = RouteHintHop.short_channel_id; + let _: u32 = RouteHintHop.fees_base_msat; + let _: u32 = RouteHintHop.fees_proportional_millionths; + let _: u64 = RouteHintHop.cltv_expiry_delta; + let _: Option = RouteHintHop.htlc_minimum_msat; + let _: Option = RouteHintHop.htlc_maximum_msat; + } + match None::.unwrap() { + crate::bindings::SuccessActionProcessed::Aes { result } => { + let _: crate::bindings::AesSuccessActionDataResult = result; + } + crate::bindings::SuccessActionProcessed::Message { data } => { + let _: crate::bindings::MessageSuccessActionData = data; + } + crate::bindings::SuccessActionProcessed::Url { data } => { + let _: crate::bindings::UrlSuccessActionData = data; + } + } + { + let UrlSuccessActionData = None::.unwrap(); + let _: String = UrlSuccessActionData.description; + let _: String = UrlSuccessActionData.url; + } +}; + // Section: dart2rust +impl CstDecode for bool { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> bool { + self + } +} impl CstDecode for f32 { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> f32 { @@ -734,12 +1044,24 @@ impl CstDecode for i32 { self } } -impl CstDecode for i32 { +impl CstDecode for i32 { // Codec=Cst (C-struct based), see doc to use other codecs - fn cst_decode(self) -> crate::model::Network { + fn cst_decode(self) -> crate::model::LiquidNetwork { match self { - 0 => crate::model::Network::Mainnet, - 1 => crate::model::Network::Testnet, + 0 => crate::model::LiquidNetwork::Mainnet, + 1 => crate::model::LiquidNetwork::Testnet, + _ => unreachable!("Invalid variant for LiquidNetwork: {}", self), + } + } +} +impl CstDecode for i32 { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::bindings::Network { + match self { + 0 => crate::bindings::Network::Bitcoin, + 1 => crate::bindings::Network::Testnet, + 2 => crate::bindings::Network::Signet, + 3 => crate::bindings::Network::Regtest, _ => unreachable!("Invalid variant for Network: {}", self), } } @@ -767,6 +1089,12 @@ impl CstDecode for i32 { } } } +impl CstDecode for u16 { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> u16 { + self + } +} impl CstDecode for u32 { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> u32 { @@ -847,6 +1175,41 @@ impl SseDecode for String { } } +impl SseDecode for crate::bindings::AesSuccessActionDataDecrypted { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_description = ::sse_decode(deserializer); + let mut var_plaintext = ::sse_decode(deserializer); + return crate::bindings::AesSuccessActionDataDecrypted { + description: var_description, + plaintext: var_plaintext, + }; + } +} + +impl SseDecode for crate::bindings::AesSuccessActionDataResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_data = + ::sse_decode(deserializer); + return crate::bindings::AesSuccessActionDataResult::Decrypted { data: var_data }; + } + 1 => { + let mut var_reason = ::sse_decode(deserializer); + return crate::bindings::AesSuccessActionDataResult::ErrorStatus { + reason: var_reason, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + impl SseDecode for crate::model::BackupRequest { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -868,6 +1231,31 @@ impl SseDecode for crate::bindings::BindingEventListener { } } +impl SseDecode for crate::bindings::BitcoinAddressData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_address = ::sse_decode(deserializer); + let mut var_network = ::sse_decode(deserializer); + let mut var_amountSat = >::sse_decode(deserializer); + let mut var_label = >::sse_decode(deserializer); + let mut var_message = >::sse_decode(deserializer); + return crate::bindings::BitcoinAddressData { + address: var_address, + network: var_network, + amount_sat: var_amountSat, + label: var_label, + message: var_message, + }; + } +} + +impl SseDecode for bool { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u8().unwrap() != 0 + } +} + impl SseDecode for crate::model::Config { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -875,7 +1263,7 @@ impl SseDecode for crate::model::Config { let mut var_liquidElectrumUrl = ::sse_decode(deserializer); let mut var_bitcoinElectrumUrl = ::sse_decode(deserializer); let mut var_workingDir = ::sse_decode(deserializer); - let mut var_network = ::sse_decode(deserializer); + let mut var_network = ::sse_decode(deserializer); let mut var_paymentTimeoutSec = ::sse_decode(deserializer); let mut var_zeroConfMinFeeRate = ::sse_decode(deserializer); let mut var_zeroConfMaxAmountSat = >::sse_decode(deserializer); @@ -934,6 +1322,71 @@ impl SseDecode for i32 { } } +impl SseDecode for crate::bindings::InputType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_address = + ::sse_decode(deserializer); + return crate::bindings::InputType::BitcoinAddress { + address: var_address, + }; + } + 1 => { + let mut var_invoice = ::sse_decode(deserializer); + return crate::bindings::InputType::Bolt11 { + invoice: var_invoice, + }; + } + 2 => { + let mut var_nodeId = ::sse_decode(deserializer); + return crate::bindings::InputType::NodeId { + node_id: var_nodeId, + }; + } + 3 => { + let mut var_url = ::sse_decode(deserializer); + return crate::bindings::InputType::Url { url: var_url }; + } + 4 => { + let mut var_data = ::sse_decode(deserializer); + return crate::bindings::InputType::LnUrlPay { data: var_data }; + } + 5 => { + let mut var_data = + ::sse_decode(deserializer); + return crate::bindings::InputType::LnUrlWithdraw { data: var_data }; + } + 6 => { + let mut var_data = + ::sse_decode(deserializer); + return crate::bindings::InputType::LnUrlAuth { data: var_data }; + } + 7 => { + let mut var_data = ::sse_decode(deserializer); + return crate::bindings::InputType::LnUrlError { data: var_data }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::model::LiquidNetwork { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return match inner { + 0 => crate::model::LiquidNetwork::Mainnet, + 1 => crate::model::LiquidNetwork::Testnet, + _ => unreachable!("Invalid variant for LiquidNetwork: {}", inner), + }; + } +} + impl SseDecode for crate::error::LiquidSdkError { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1035,35 +1488,35 @@ impl SseDecode for Vec { } } -impl SseDecode for Vec { +impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { let mut len_ = ::sse_decode(deserializer); let mut ans_ = vec![]; for idx_ in 0..len_ { - ans_.push(::sse_decode(deserializer)); + ans_.push(::sse_decode(deserializer)); } return ans_; } } -impl SseDecode for Vec { +impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { let mut len_ = ::sse_decode(deserializer); let mut ans_ = vec![]; for idx_ in 0..len_ { - ans_.push(::sse_decode(deserializer)); + ans_.push(::sse_decode(deserializer)); } return ans_; } } -impl SseDecode for crate::model::LNInvoice { +impl SseDecode for crate::bindings::LNInvoice { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { let mut var_bolt11 = ::sse_decode(deserializer); - let mut var_network = ::sse_decode(deserializer); + let mut var_network = ::sse_decode(deserializer); let mut var_payeePubkey = ::sse_decode(deserializer); let mut var_paymentHash = ::sse_decode(deserializer); let mut var_description = >::sse_decode(deserializer); @@ -1071,10 +1524,10 @@ impl SseDecode for crate::model::LNInvoice { let mut var_amountMsat = >::sse_decode(deserializer); let mut var_timestamp = ::sse_decode(deserializer); let mut var_expiry = ::sse_decode(deserializer); - let mut var_routingHints = >::sse_decode(deserializer); + let mut var_routingHints = >::sse_decode(deserializer); let mut var_paymentSecret = >::sse_decode(deserializer); let mut var_minFinalCltvExpiryDelta = ::sse_decode(deserializer); - return crate::model::LNInvoice { + return crate::bindings::LNInvoice { bolt11: var_bolt11, network: var_network, payee_pubkey: var_payeePubkey, @@ -1091,6 +1544,344 @@ impl SseDecode for crate::model::LNInvoice { } } +impl SseDecode for crate::bindings::duplicates::LnUrlAuthError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlAuthError::Generic { err: var_err }; + } + 1 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlAuthError::InvalidUri { err: var_err }; + } + 2 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlAuthError::ServiceConnectivity { + err: var_err, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::bindings::LnUrlAuthRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_k1 = ::sse_decode(deserializer); + let mut var_action = >::sse_decode(deserializer); + let mut var_domain = ::sse_decode(deserializer); + let mut var_url = ::sse_decode(deserializer); + return crate::bindings::LnUrlAuthRequestData { + k1: var_k1, + action: var_action, + domain: var_domain, + url: var_url, + }; + } +} + +impl SseDecode for crate::bindings::duplicates::LnUrlCallbackStatus { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + return crate::bindings::duplicates::LnUrlCallbackStatus::Ok; + } + 1 => { + let mut var_data = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlCallbackStatus::ErrorStatus { + data: var_data, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::bindings::LnUrlErrorData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_reason = ::sse_decode(deserializer); + return crate::bindings::LnUrlErrorData { reason: var_reason }; + } +} + +impl SseDecode for crate::bindings::duplicates::LnUrlPayError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + return crate::bindings::duplicates::LnUrlPayError::AlreadyPaid; + } + 1 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::Generic { err: var_err }; + } + 2 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::InvalidAmount { err: var_err }; + } + 3 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::InvalidInvoice { err: var_err }; + } + 4 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::InvalidNetwork { err: var_err }; + } + 5 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::InvalidUri { err: var_err }; + } + 6 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::InvoiceExpired { err: var_err }; + } + 7 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::PaymentFailed { err: var_err }; + } + 8 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::PaymentTimeout { err: var_err }; + } + 9 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::RouteNotFound { err: var_err }; + } + 10 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::RouteTooExpensive { + err: var_err, + }; + } + 11 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlPayError::ServiceConnectivity { + err: var_err, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::bindings::LnUrlPayErrorData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_paymentHash = ::sse_decode(deserializer); + let mut var_reason = ::sse_decode(deserializer); + return crate::bindings::LnUrlPayErrorData { + payment_hash: var_paymentHash, + reason: var_reason, + }; + } +} + +impl SseDecode for crate::bindings::LnUrlPayRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_data = ::sse_decode(deserializer); + let mut var_amountMsat = ::sse_decode(deserializer); + let mut var_comment = >::sse_decode(deserializer); + let mut var_paymentLabel = >::sse_decode(deserializer); + return crate::bindings::LnUrlPayRequest { + data: var_data, + amount_msat: var_amountMsat, + comment: var_comment, + payment_label: var_paymentLabel, + }; + } +} + +impl SseDecode for crate::bindings::LnUrlPayRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_callback = ::sse_decode(deserializer); + let mut var_minSendable = ::sse_decode(deserializer); + let mut var_maxSendable = ::sse_decode(deserializer); + let mut var_metadataStr = ::sse_decode(deserializer); + let mut var_commentAllowed = ::sse_decode(deserializer); + let mut var_domain = ::sse_decode(deserializer); + let mut var_allowsNostr = ::sse_decode(deserializer); + let mut var_nostrPubkey = >::sse_decode(deserializer); + let mut var_lnAddress = >::sse_decode(deserializer); + return crate::bindings::LnUrlPayRequestData { + callback: var_callback, + min_sendable: var_minSendable, + max_sendable: var_maxSendable, + metadata_str: var_metadataStr, + comment_allowed: var_commentAllowed, + domain: var_domain, + allows_nostr: var_allowsNostr, + nostr_pubkey: var_nostrPubkey, + ln_address: var_lnAddress, + }; + } +} + +impl SseDecode for crate::model::LnUrlPayResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_data = ::sse_decode(deserializer); + return crate::model::LnUrlPayResult::EndpointSuccess { data: var_data }; + } + 1 => { + let mut var_data = ::sse_decode(deserializer); + return crate::model::LnUrlPayResult::EndpointError { data: var_data }; + } + 2 => { + let mut var_data = ::sse_decode(deserializer); + return crate::model::LnUrlPayResult::PayError { data: var_data }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::model::LnUrlPaySuccessData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_payment = ::sse_decode(deserializer); + let mut var_successAction = + >::sse_decode(deserializer); + return crate::model::LnUrlPaySuccessData { + payment: var_payment, + success_action: var_successAction, + }; + } +} + +impl SseDecode for crate::bindings::duplicates::LnUrlWithdrawError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::Generic { err: var_err }; + } + 1 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::InvalidAmount { + err: var_err, + }; + } + 2 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::InvalidInvoice { + err: var_err, + }; + } + 3 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::InvalidUri { + err: var_err, + }; + } + 4 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::InvoiceNoRoutingHints { + err: var_err, + }; + } + 5 => { + let mut var_err = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawError::ServiceConnectivity { + err: var_err, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::bindings::LnUrlWithdrawRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_data = ::sse_decode(deserializer); + let mut var_amountMsat = ::sse_decode(deserializer); + let mut var_description = >::sse_decode(deserializer); + return crate::bindings::LnUrlWithdrawRequest { + data: var_data, + amount_msat: var_amountMsat, + description: var_description, + }; + } +} + +impl SseDecode for crate::bindings::LnUrlWithdrawRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_callback = ::sse_decode(deserializer); + let mut var_k1 = ::sse_decode(deserializer); + let mut var_defaultDescription = ::sse_decode(deserializer); + let mut var_minWithdrawable = ::sse_decode(deserializer); + let mut var_maxWithdrawable = ::sse_decode(deserializer); + return crate::bindings::LnUrlWithdrawRequestData { + callback: var_callback, + k1: var_k1, + default_description: var_defaultDescription, + min_withdrawable: var_minWithdrawable, + max_withdrawable: var_maxWithdrawable, + }; + } +} + +impl SseDecode for crate::bindings::duplicates::LnUrlWithdrawResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_data = + ::sse_decode( + deserializer, + ); + return crate::bindings::duplicates::LnUrlWithdrawResult::Ok { data: var_data }; + } + 1 => { + let mut var_data = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawResult::ErrorStatus { + data: var_data, + }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for crate::bindings::duplicates::LnUrlWithdrawSuccessData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_invoice = ::sse_decode(deserializer); + return crate::bindings::duplicates::LnUrlWithdrawSuccessData { + invoice: var_invoice, + }; + } +} + impl SseDecode for crate::model::LogEntry { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1103,13 +1894,25 @@ impl SseDecode for crate::model::LogEntry { } } -impl SseDecode for crate::model::Network { +impl SseDecode for crate::bindings::MessageSuccessActionData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_message = ::sse_decode(deserializer); + return crate::bindings::MessageSuccessActionData { + message: var_message, + }; + } +} + +impl SseDecode for crate::bindings::Network { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { let mut inner = ::sse_decode(deserializer); return match inner { - 0 => crate::model::Network::Mainnet, - 1 => crate::model::Network::Testnet, + 0 => crate::bindings::Network::Bitcoin, + 1 => crate::bindings::Network::Testnet, + 2 => crate::bindings::Network::Signet, + 3 => crate::bindings::Network::Regtest, _ => unreachable!("Invalid variant for Network: {}", inner), }; } @@ -1126,6 +1929,19 @@ impl SseDecode for Option { } } +impl SseDecode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + if (::sse_decode(deserializer)) { + return Some(::sse_decode( + deserializer, + )); + } else { + return None; + } + } +} + impl SseDecode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1372,15 +2188,15 @@ impl SseDecode for crate::model::RestoreRequest { } } -impl SseDecode for crate::model::RouteHint { +impl SseDecode for crate::bindings::RouteHint { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - let mut var_hops = >::sse_decode(deserializer); - return crate::model::RouteHint { hops: var_hops }; + let mut var_hops = >::sse_decode(deserializer); + return crate::bindings::RouteHint { hops: var_hops }; } } -impl SseDecode for crate::model::RouteHintHop { +impl SseDecode for crate::bindings::RouteHintHop { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { let mut var_srcNodeId = ::sse_decode(deserializer); @@ -1390,7 +2206,7 @@ impl SseDecode for crate::model::RouteHintHop { let mut var_cltvExpiryDelta = ::sse_decode(deserializer); let mut var_htlcMinimumMsat = >::sse_decode(deserializer); let mut var_htlcMaximumMsat = >::sse_decode(deserializer); - return crate::model::RouteHintHop { + return crate::bindings::RouteHintHop { src_node_id: var_srcNodeId, short_channel_id: var_shortChannelId, fees_base_msat: var_feesBaseMsat, @@ -1412,6 +2228,40 @@ impl SseDecode for crate::model::SendPaymentResponse { } } +impl SseDecode for crate::bindings::SuccessActionProcessed { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut tag_ = ::sse_decode(deserializer); + match tag_ { + 0 => { + let mut var_result = + ::sse_decode(deserializer); + return crate::bindings::SuccessActionProcessed::Aes { result: var_result }; + } + 1 => { + let mut var_data = + ::sse_decode(deserializer); + return crate::bindings::SuccessActionProcessed::Message { data: var_data }; + } + 2 => { + let mut var_data = + ::sse_decode(deserializer); + return crate::bindings::SuccessActionProcessed::Url { data: var_data }; + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseDecode for u16 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u16::().unwrap() + } +} + impl SseDecode for u32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1438,6 +2288,18 @@ impl SseDecode for () { fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} } +impl SseDecode for crate::bindings::UrlSuccessActionData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_description = ::sse_decode(deserializer); + let mut var_url = ::sse_decode(deserializer); + return crate::bindings::UrlSuccessActionData { + description: var_description, + url: var_url, + }; + } +} + impl SseDecode for usize { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1445,13 +2307,6 @@ impl SseDecode for usize { } } -impl SseDecode for bool { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - deserializer.cursor.read_u8().unwrap() != 0 - } -} - fn pde_ffi_dispatcher_primary_impl( func_id: i32, port: flutter_rust_bridge::for_generated::MessagePort, @@ -1494,6 +2349,54 @@ impl flutter_rust_bridge::IntoIntoDart> for Binding } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.description.into_into_dart().into_dart(), + self.0.plaintext.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::AesSuccessActionDataDecrypted +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self.0 { + crate::bindings::AesSuccessActionDataResult::Decrypted { data } => { + [0.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::AesSuccessActionDataResult::ErrorStatus { reason } => { + [1.into_dart(), reason.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::AesSuccessActionDataResult +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} // Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::model::BackupRequest { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { @@ -1526,6 +2429,30 @@ impl flutter_rust_bridge::IntoIntoDart } } // Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.address.into_into_dart().into_dart(), + self.0.network.into_into_dart().into_dart(), + self.0.amount_sat.into_into_dart().into_dart(), + self.0.label.into_into_dart().into_dart(), + self.0.message.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::BitcoinAddressData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::model::Config { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { [ @@ -1586,6 +2513,69 @@ impl flutter_rust_bridge::IntoIntoDart } } // Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self.0 { + crate::bindings::InputType::BitcoinAddress { address } => { + [0.into_dart(), address.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::Bolt11 { invoice } => { + [1.into_dart(), invoice.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::NodeId { node_id } => { + [2.into_dart(), node_id.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::Url { url } => { + [3.into_dart(), url.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::LnUrlPay { data } => { + [4.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::LnUrlWithdraw { data } => { + [5.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::LnUrlAuth { data } => { + [6.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::InputType::LnUrlError { data } => { + [7.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::InputType +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::model::LiquidNetwork { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + Self::Mainnet => 0.into_dart(), + Self::Testnet => 1.into_dart(), + _ => unreachable!(), + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::LiquidNetwork {} +impl flutter_rust_bridge::IntoIntoDart + for crate::model::LiquidNetwork +{ + fn into_into_dart(self) -> crate::model::LiquidNetwork { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::error::LiquidSdkError { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { match self { @@ -1649,30 +2639,435 @@ impl flutter_rust_bridge::IntoIntoDart } } // Codec=Dco (DartCObject based), see doc to use other codecs -impl flutter_rust_bridge::IntoDart for crate::model::LNInvoice { +impl flutter_rust_bridge::IntoDart for FrbWrapper { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { [ - self.bolt11.into_into_dart().into_dart(), - self.network.into_into_dart().into_dart(), - self.payee_pubkey.into_into_dart().into_dart(), - self.payment_hash.into_into_dart().into_dart(), - self.description.into_into_dart().into_dart(), - self.description_hash.into_into_dart().into_dart(), - self.amount_msat.into_into_dart().into_dart(), - self.timestamp.into_into_dart().into_dart(), - self.expiry.into_into_dart().into_dart(), - self.routing_hints.into_into_dart().into_dart(), - self.payment_secret.into_into_dart().into_dart(), - self.min_final_cltv_expiry_delta + self.0.bolt11.into_into_dart().into_dart(), + self.0.network.into_into_dart().into_dart(), + self.0.payee_pubkey.into_into_dart().into_dart(), + self.0.payment_hash.into_into_dart().into_dart(), + self.0.description.into_into_dart().into_dart(), + self.0.description_hash.into_into_dart().into_dart(), + self.0.amount_msat.into_into_dart().into_dart(), + self.0.timestamp.into_into_dart().into_dart(), + self.0.expiry.into_into_dart().into_dart(), + self.0.routing_hints.into_into_dart().into_dart(), + self.0.payment_secret.into_into_dart().into_dart(), + self.0 + .min_final_cltv_expiry_delta .into_into_dart() .into_dart(), ] .into_dart() } } -impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::LNInvoice {} -impl flutter_rust_bridge::IntoIntoDart for crate::model::LNInvoice { - fn into_into_dart(self) -> crate::model::LNInvoice { +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LNInvoice +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlAuthError { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::bindings::duplicates::LnUrlAuthError::Generic { err } => { + [0.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlAuthError::InvalidUri { err } => { + [1.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlAuthError::ServiceConnectivity { err } => { + [2.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlAuthError +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlAuthError +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlAuthError { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.k1.into_into_dart().into_dart(), + self.0.action.into_into_dart().into_dart(), + self.0.domain.into_into_dart().into_dart(), + self.0.url.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlAuthRequestData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlCallbackStatus { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::bindings::duplicates::LnUrlCallbackStatus::Ok => [0.into_dart()].into_dart(), + crate::bindings::duplicates::LnUrlCallbackStatus::ErrorStatus { data } => { + [1.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlCallbackStatus +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlCallbackStatus +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlCallbackStatus { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [self.0.reason.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlErrorData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlPayError { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::bindings::duplicates::LnUrlPayError::AlreadyPaid => [0.into_dart()].into_dart(), + crate::bindings::duplicates::LnUrlPayError::Generic { err } => { + [1.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::InvalidAmount { err } => { + [2.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::InvalidInvoice { err } => { + [3.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::InvalidNetwork { err } => { + [4.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::InvalidUri { err } => { + [5.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::InvoiceExpired { err } => { + [6.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::PaymentFailed { err } => { + [7.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::PaymentTimeout { err } => { + [8.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::RouteNotFound { err } => { + [9.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::RouteTooExpensive { err } => { + [10.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlPayError::ServiceConnectivity { err } => { + [11.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlPayError +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlPayError +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlPayError { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.payment_hash.into_into_dart().into_dart(), + self.0.reason.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlPayErrorData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.data.into_into_dart().into_dart(), + self.0.amount_msat.into_into_dart().into_dart(), + self.0.comment.into_into_dart().into_dart(), + self.0.payment_label.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlPayRequest +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.callback.into_into_dart().into_dart(), + self.0.min_sendable.into_into_dart().into_dart(), + self.0.max_sendable.into_into_dart().into_dart(), + self.0.metadata_str.into_into_dart().into_dart(), + self.0.comment_allowed.into_into_dart().into_dart(), + self.0.domain.into_into_dart().into_dart(), + self.0.allows_nostr.into_into_dart().into_dart(), + self.0.nostr_pubkey.into_into_dart().into_dart(), + self.0.ln_address.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlPayRequestData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::model::LnUrlPayResult { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::model::LnUrlPayResult::EndpointSuccess { data } => { + [0.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::model::LnUrlPayResult::EndpointError { data } => { + [1.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::model::LnUrlPayResult::PayError { data } => { + [2.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::LnUrlPayResult {} +impl flutter_rust_bridge::IntoIntoDart + for crate::model::LnUrlPayResult +{ + fn into_into_dart(self) -> crate::model::LnUrlPayResult { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::model::LnUrlPaySuccessData { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.payment.into_into_dart().into_dart(), + self.success_action.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::model::LnUrlPaySuccessData +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::model::LnUrlPaySuccessData +{ + fn into_into_dart(self) -> crate::model::LnUrlPaySuccessData { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlWithdrawError { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::bindings::duplicates::LnUrlWithdrawError::Generic { err } => { + [0.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidAmount { err } => { + [1.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidInvoice { err } => { + [2.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidUri { err } => { + [3.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawError::InvoiceNoRoutingHints { err } => { + [4.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawError::ServiceConnectivity { err } => { + [5.into_dart(), err.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlWithdrawError +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlWithdrawError +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlWithdrawError { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.data.into_into_dart().into_dart(), + self.0.amount_msat.into_into_dart().into_dart(), + self.0.description.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlWithdrawRequest +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.callback.into_into_dart().into_dart(), + self.0.k1.into_into_dart().into_dart(), + self.0.default_description.into_into_dart().into_dart(), + self.0.min_withdrawable.into_into_dart().into_dart(), + self.0.max_withdrawable.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::LnUrlWithdrawRequestData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlWithdrawResult { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + crate::bindings::duplicates::LnUrlWithdrawResult::Ok { data } => { + [0.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::duplicates::LnUrlWithdrawResult::ErrorStatus { data } => { + [1.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlWithdrawResult +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlWithdrawResult +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlWithdrawResult { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::bindings::duplicates::LnUrlWithdrawSuccessData { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [self.invoice.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::bindings::duplicates::LnUrlWithdrawSuccessData +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::bindings::duplicates::LnUrlWithdrawSuccessData +{ + fn into_into_dart(self) -> crate::bindings::duplicates::LnUrlWithdrawSuccessData { self } } @@ -1693,19 +3088,43 @@ impl flutter_rust_bridge::IntoIntoDart for crate::model: } } // Codec=Dco (DartCObject based), see doc to use other codecs -impl flutter_rust_bridge::IntoDart for crate::model::Network { +impl flutter_rust_bridge::IntoDart for FrbWrapper { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { - match self { - Self::Mainnet => 0.into_dart(), - Self::Testnet => 1.into_dart(), + [self.0.message.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::MessageSuccessActionData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self.0 { + crate::bindings::Network::Bitcoin => 0.into_dart(), + crate::bindings::Network::Testnet => 1.into_dart(), + crate::bindings::Network::Signet => 2.into_dart(), + crate::bindings::Network::Regtest => 3.into_dart(), _ => unreachable!(), } } } -impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::Network {} -impl flutter_rust_bridge::IntoIntoDart for crate::model::Network { - fn into_into_dart(self) -> crate::model::Network { - self +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::Network +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() } } // Codec=Dco (DartCObject based), see doc to use other codecs @@ -1990,38 +3409,49 @@ impl flutter_rust_bridge::IntoIntoDart } } // Codec=Dco (DartCObject based), see doc to use other codecs -impl flutter_rust_bridge::IntoDart for crate::model::RouteHint { +impl flutter_rust_bridge::IntoDart for FrbWrapper { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { - [self.hops.into_into_dart().into_dart()].into_dart() + [self.0.hops.into_into_dart().into_dart()].into_dart() } } -impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::RouteHint {} -impl flutter_rust_bridge::IntoIntoDart for crate::model::RouteHint { - fn into_into_dart(self) -> crate::model::RouteHint { - self +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::RouteHint +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() } } // Codec=Dco (DartCObject based), see doc to use other codecs -impl flutter_rust_bridge::IntoDart for crate::model::RouteHintHop { +impl flutter_rust_bridge::IntoDart for FrbWrapper { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { [ - self.src_node_id.into_into_dart().into_dart(), - self.short_channel_id.into_into_dart().into_dart(), - self.fees_base_msat.into_into_dart().into_dart(), - self.fees_proportional_millionths + self.0.src_node_id.into_into_dart().into_dart(), + self.0.short_channel_id.into_into_dart().into_dart(), + self.0.fees_base_msat.into_into_dart().into_dart(), + self.0 + .fees_proportional_millionths .into_into_dart() .into_dart(), - self.cltv_expiry_delta.into_into_dart().into_dart(), - self.htlc_minimum_msat.into_into_dart().into_dart(), - self.htlc_maximum_msat.into_into_dart().into_dart(), + self.0.cltv_expiry_delta.into_into_dart().into_dart(), + self.0.htlc_minimum_msat.into_into_dart().into_dart(), + self.0.htlc_maximum_msat.into_into_dart().into_dart(), ] .into_dart() } } -impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::model::RouteHintHop {} -impl flutter_rust_bridge::IntoIntoDart for crate::model::RouteHintHop { - fn into_into_dart(self) -> crate::model::RouteHintHop { - self +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::RouteHintHop +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() } } // Codec=Dco (DartCObject based), see doc to use other codecs @@ -2041,6 +3471,57 @@ impl flutter_rust_bridge::IntoIntoDart self } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self.0 { + crate::bindings::SuccessActionProcessed::Aes { result } => { + [0.into_dart(), result.into_into_dart().into_dart()].into_dart() + } + crate::bindings::SuccessActionProcessed::Message { data } => { + [1.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + crate::bindings::SuccessActionProcessed::Url { data } => { + [2.into_dart(), data.into_into_dart().into_dart()].into_dart() + } + _ => { + unimplemented!(""); + } + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::SuccessActionProcessed +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.0.description.into_into_dart().into_dart(), + self.0.url.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for FrbWrapper +{ +} +impl flutter_rust_bridge::IntoIntoDart> + for crate::bindings::UrlSuccessActionData +{ + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} impl SseEncode for flutter_rust_bridge::for_generated::anyhow::Error { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2092,6 +3573,33 @@ impl SseEncode for String { } } +impl SseEncode for crate::bindings::AesSuccessActionDataDecrypted { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.description, serializer); + ::sse_encode(self.plaintext, serializer); + } +} + +impl SseEncode for crate::bindings::AesSuccessActionDataResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::AesSuccessActionDataResult::Decrypted { data } => { + ::sse_encode(0, serializer); + ::sse_encode(data, serializer); + } + crate::bindings::AesSuccessActionDataResult::ErrorStatus { reason } => { + ::sse_encode(1, serializer); + ::sse_encode(reason, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + impl SseEncode for crate::model::BackupRequest { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2106,6 +3614,24 @@ impl SseEncode for crate::bindings::BindingEventListener { } } +impl SseEncode for crate::bindings::BitcoinAddressData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.address, serializer); + ::sse_encode(self.network, serializer); + >::sse_encode(self.amount_sat, serializer); + >::sse_encode(self.label, serializer); + >::sse_encode(self.message, serializer); + } +} + +impl SseEncode for bool { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_u8(self as _).unwrap(); + } +} + impl SseEncode for crate::model::Config { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2113,7 +3639,7 @@ impl SseEncode for crate::model::Config { ::sse_encode(self.liquid_electrum_url, serializer); ::sse_encode(self.bitcoin_electrum_url, serializer); ::sse_encode(self.working_dir, serializer); - ::sse_encode(self.network, serializer); + ::sse_encode(self.network, serializer); ::sse_encode(self.payment_timeout_sec, serializer); ::sse_encode(self.zero_conf_min_fee_rate, serializer); >::sse_encode(self.zero_conf_max_amount_sat, serializer); @@ -2152,6 +3678,65 @@ impl SseEncode for i32 { } } +impl SseEncode for crate::bindings::InputType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::InputType::BitcoinAddress { address } => { + ::sse_encode(0, serializer); + ::sse_encode(address, serializer); + } + crate::bindings::InputType::Bolt11 { invoice } => { + ::sse_encode(1, serializer); + ::sse_encode(invoice, serializer); + } + crate::bindings::InputType::NodeId { node_id } => { + ::sse_encode(2, serializer); + ::sse_encode(node_id, serializer); + } + crate::bindings::InputType::Url { url } => { + ::sse_encode(3, serializer); + ::sse_encode(url, serializer); + } + crate::bindings::InputType::LnUrlPay { data } => { + ::sse_encode(4, serializer); + ::sse_encode(data, serializer); + } + crate::bindings::InputType::LnUrlWithdraw { data } => { + ::sse_encode(5, serializer); + ::sse_encode(data, serializer); + } + crate::bindings::InputType::LnUrlAuth { data } => { + ::sse_encode(6, serializer); + ::sse_encode(data, serializer); + } + crate::bindings::InputType::LnUrlError { data } => { + ::sse_encode(7, serializer); + ::sse_encode(data, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::model::LiquidNetwork { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode( + match self { + crate::model::LiquidNetwork::Mainnet => 0, + crate::model::LiquidNetwork::Testnet => 1, + _ => { + unimplemented!(""); + } + }, + serializer, + ); + } +} + impl SseEncode for crate::error::LiquidSdkError { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2235,31 +3820,31 @@ impl SseEncode for Vec { } } -impl SseEncode for Vec { +impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { ::sse_encode(self.len() as _, serializer); for item in self { - ::sse_encode(item, serializer); + ::sse_encode(item, serializer); } } } -impl SseEncode for Vec { +impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { ::sse_encode(self.len() as _, serializer); for item in self { - ::sse_encode(item, serializer); + ::sse_encode(item, serializer); } } } -impl SseEncode for crate::model::LNInvoice { +impl SseEncode for crate::bindings::LNInvoice { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { ::sse_encode(self.bolt11, serializer); - ::sse_encode(self.network, serializer); + ::sse_encode(self.network, serializer); ::sse_encode(self.payee_pubkey, serializer); ::sse_encode(self.payment_hash, serializer); >::sse_encode(self.description, serializer); @@ -2267,12 +3852,278 @@ impl SseEncode for crate::model::LNInvoice { >::sse_encode(self.amount_msat, serializer); ::sse_encode(self.timestamp, serializer); ::sse_encode(self.expiry, serializer); - >::sse_encode(self.routing_hints, serializer); + >::sse_encode(self.routing_hints, serializer); >::sse_encode(self.payment_secret, serializer); ::sse_encode(self.min_final_cltv_expiry_delta, serializer); } } +impl SseEncode for crate::bindings::duplicates::LnUrlAuthError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::duplicates::LnUrlAuthError::Generic { err } => { + ::sse_encode(0, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlAuthError::InvalidUri { err } => { + ::sse_encode(1, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlAuthError::ServiceConnectivity { err } => { + ::sse_encode(2, serializer); + ::sse_encode(err, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::bindings::LnUrlAuthRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.k1, serializer); + >::sse_encode(self.action, serializer); + ::sse_encode(self.domain, serializer); + ::sse_encode(self.url, serializer); + } +} + +impl SseEncode for crate::bindings::duplicates::LnUrlCallbackStatus { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::duplicates::LnUrlCallbackStatus::Ok => { + ::sse_encode(0, serializer); + } + crate::bindings::duplicates::LnUrlCallbackStatus::ErrorStatus { data } => { + ::sse_encode(1, serializer); + ::sse_encode(data, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::bindings::LnUrlErrorData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.reason, serializer); + } +} + +impl SseEncode for crate::bindings::duplicates::LnUrlPayError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::duplicates::LnUrlPayError::AlreadyPaid => { + ::sse_encode(0, serializer); + } + crate::bindings::duplicates::LnUrlPayError::Generic { err } => { + ::sse_encode(1, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::InvalidAmount { err } => { + ::sse_encode(2, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::InvalidInvoice { err } => { + ::sse_encode(3, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::InvalidNetwork { err } => { + ::sse_encode(4, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::InvalidUri { err } => { + ::sse_encode(5, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::InvoiceExpired { err } => { + ::sse_encode(6, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::PaymentFailed { err } => { + ::sse_encode(7, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::PaymentTimeout { err } => { + ::sse_encode(8, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::RouteNotFound { err } => { + ::sse_encode(9, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::RouteTooExpensive { err } => { + ::sse_encode(10, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlPayError::ServiceConnectivity { err } => { + ::sse_encode(11, serializer); + ::sse_encode(err, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::bindings::LnUrlPayErrorData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.payment_hash, serializer); + ::sse_encode(self.reason, serializer); + } +} + +impl SseEncode for crate::bindings::LnUrlPayRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.data, serializer); + ::sse_encode(self.amount_msat, serializer); + >::sse_encode(self.comment, serializer); + >::sse_encode(self.payment_label, serializer); + } +} + +impl SseEncode for crate::bindings::LnUrlPayRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.callback, serializer); + ::sse_encode(self.min_sendable, serializer); + ::sse_encode(self.max_sendable, serializer); + ::sse_encode(self.metadata_str, serializer); + ::sse_encode(self.comment_allowed, serializer); + ::sse_encode(self.domain, serializer); + ::sse_encode(self.allows_nostr, serializer); + >::sse_encode(self.nostr_pubkey, serializer); + >::sse_encode(self.ln_address, serializer); + } +} + +impl SseEncode for crate::model::LnUrlPayResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::model::LnUrlPayResult::EndpointSuccess { data } => { + ::sse_encode(0, serializer); + ::sse_encode(data, serializer); + } + crate::model::LnUrlPayResult::EndpointError { data } => { + ::sse_encode(1, serializer); + ::sse_encode(data, serializer); + } + crate::model::LnUrlPayResult::PayError { data } => { + ::sse_encode(2, serializer); + ::sse_encode(data, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::model::LnUrlPaySuccessData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.payment, serializer); + >::sse_encode( + self.success_action, + serializer, + ); + } +} + +impl SseEncode for crate::bindings::duplicates::LnUrlWithdrawError { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::duplicates::LnUrlWithdrawError::Generic { err } => { + ::sse_encode(0, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidAmount { err } => { + ::sse_encode(1, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidInvoice { err } => { + ::sse_encode(2, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlWithdrawError::InvalidUri { err } => { + ::sse_encode(3, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlWithdrawError::InvoiceNoRoutingHints { err } => { + ::sse_encode(4, serializer); + ::sse_encode(err, serializer); + } + crate::bindings::duplicates::LnUrlWithdrawError::ServiceConnectivity { err } => { + ::sse_encode(5, serializer); + ::sse_encode(err, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::bindings::LnUrlWithdrawRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.data, serializer); + ::sse_encode(self.amount_msat, serializer); + >::sse_encode(self.description, serializer); + } +} + +impl SseEncode for crate::bindings::LnUrlWithdrawRequestData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.callback, serializer); + ::sse_encode(self.k1, serializer); + ::sse_encode(self.default_description, serializer); + ::sse_encode(self.min_withdrawable, serializer); + ::sse_encode(self.max_withdrawable, serializer); + } +} + +impl SseEncode for crate::bindings::duplicates::LnUrlWithdrawResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::duplicates::LnUrlWithdrawResult::Ok { data } => { + ::sse_encode(0, serializer); + ::sse_encode( + data, serializer, + ); + } + crate::bindings::duplicates::LnUrlWithdrawResult::ErrorStatus { data } => { + ::sse_encode(1, serializer); + ::sse_encode(data, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for crate::bindings::duplicates::LnUrlWithdrawSuccessData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.invoice, serializer); + } +} + impl SseEncode for crate::model::LogEntry { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2281,13 +4132,22 @@ impl SseEncode for crate::model::LogEntry { } } -impl SseEncode for crate::model::Network { +impl SseEncode for crate::bindings::MessageSuccessActionData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.message, serializer); + } +} + +impl SseEncode for crate::bindings::Network { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { ::sse_encode( match self { - crate::model::Network::Mainnet => 0, - crate::model::Network::Testnet => 1, + crate::bindings::Network::Bitcoin => 0, + crate::bindings::Network::Testnet => 1, + crate::bindings::Network::Signet => 2, + crate::bindings::Network::Regtest => 3, _ => { unimplemented!(""); } @@ -2307,6 +4167,16 @@ impl SseEncode for Option { } } +impl SseEncode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.is_some(), serializer); + if let Some(value) = self { + ::sse_encode(value, serializer); + } + } +} + impl SseEncode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2510,14 +4380,14 @@ impl SseEncode for crate::model::RestoreRequest { } } -impl SseEncode for crate::model::RouteHint { +impl SseEncode for crate::bindings::RouteHint { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - >::sse_encode(self.hops, serializer); + >::sse_encode(self.hops, serializer); } } -impl SseEncode for crate::model::RouteHintHop { +impl SseEncode for crate::bindings::RouteHintHop { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { ::sse_encode(self.src_node_id, serializer); @@ -2537,6 +4407,36 @@ impl SseEncode for crate::model::SendPaymentResponse { } } +impl SseEncode for crate::bindings::SuccessActionProcessed { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + match self { + crate::bindings::SuccessActionProcessed::Aes { result } => { + ::sse_encode(0, serializer); + ::sse_encode(result, serializer); + } + crate::bindings::SuccessActionProcessed::Message { data } => { + ::sse_encode(1, serializer); + ::sse_encode(data, serializer); + } + crate::bindings::SuccessActionProcessed::Url { data } => { + ::sse_encode(2, serializer); + ::sse_encode(data, serializer); + } + _ => { + unimplemented!(""); + } + } + } +} + +impl SseEncode for u16 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_u16::(self).unwrap(); + } +} + impl SseEncode for u32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2563,6 +4463,14 @@ impl SseEncode for () { fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} } +impl SseEncode for crate::bindings::UrlSuccessActionData { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.description, serializer); + ::sse_encode(self.url, serializer); + } +} + impl SseEncode for usize { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -2573,13 +4481,6 @@ impl SseEncode for usize { } } -impl SseEncode for bool { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - serializer.cursor.write_u8(self as _).unwrap(); - } -} - #[cfg(not(target_family = "wasm"))] #[path = "frb_generated.io.rs"] mod io; diff --git a/lib/core/src/lib.rs b/lib/core/src/lib.rs index 4f8c4b0..f34f5b8 100644 --- a/lib/core/src/lib.rs +++ b/lib/core/src/lib.rs @@ -16,3 +16,5 @@ pub(crate) mod swapper; pub(crate) mod test_utils; pub(crate) mod utils; pub(crate) mod wallet; + +pub use sdk_common::prelude::*; diff --git a/lib/core/src/model.rs b/lib/core/src/model.rs index 71e7024..de99bdf 100644 --- a/lib/core/src/model.rs +++ b/lib/core/src/model.rs @@ -4,10 +4,11 @@ use boltz_client::swaps::boltzv2::{ CreateChainResponse, CreateReverseResponse, CreateSubmarineResponse, Leaf, Side, SwapTree, BOLTZ_MAINNET_URL_V2, BOLTZ_TESTNET_URL_V2, }; -use boltz_client::{BtcSwapScriptV2, BtcSwapTxV2, Keypair, LBtcSwapScriptV2, LBtcSwapTxV2, ToHex}; +use boltz_client::{BtcSwapScriptV2, BtcSwapTxV2, Keypair, LBtcSwapScriptV2, LBtcSwapTxV2}; use lwk_wollet::ElementsNetwork; use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef}; use rusqlite::ToSql; +use sdk_common::prelude::*; use serde::{Deserialize, Serialize}; use crate::error::PaymentError; @@ -27,7 +28,7 @@ pub struct Config { /// /// Prefix can be a relative or absolute path to this directory. pub working_dir: String, - pub network: Network, + pub network: LiquidNetwork, /// Send payment timeout. See [crate::sdk::LiquidSdk::send_payment] pub payment_timeout_sec: u64, /// Zero-conf minimum accepted fee-rate in sat/vbyte @@ -44,7 +45,7 @@ impl Config { liquid_electrum_url: "blockstream.info:995".to_string(), bitcoin_electrum_url: "blockstream.info:700".to_string(), working_dir: ".".to_string(), - network: Network::Mainnet, + network: LiquidNetwork::Mainnet, payment_timeout_sec: 15, zero_conf_min_fee_rate: DEFAULT_ZERO_CONF_MIN_FEE_RATE_MAINNET, zero_conf_max_amount_sat: None, @@ -57,7 +58,7 @@ impl Config { liquid_electrum_url: "blockstream.info:465".to_string(), bitcoin_electrum_url: "blockstream.info:993".to_string(), working_dir: ".".to_string(), - network: Network::Testnet, + network: LiquidNetwork::Testnet, payment_timeout_sec: 15, zero_conf_min_fee_rate: DEFAULT_ZERO_CONF_MIN_FEE_RATE_TESTNET, zero_conf_max_amount_sat: None, @@ -70,62 +71,68 @@ impl Config { } } +/// Network chosen for this Liquid SDK instance. Note that it represents both the Liquid and the +/// Bitcoin network used. #[derive(Debug, Copy, Clone, PartialEq, Serialize)] -pub enum Network { +pub enum LiquidNetwork { /// Mainnet Bitcoin and Liquid chains Mainnet, /// Testnet Bitcoin and Liquid chains Testnet, } -impl Network { +impl LiquidNetwork { pub fn as_bitcoin_chain(&self) -> Chain { match self { - Network::Mainnet => Chain::Bitcoin, - Network::Testnet => Chain::BitcoinTestnet, + LiquidNetwork::Mainnet => Chain::Bitcoin, + LiquidNetwork::Testnet => Chain::BitcoinTestnet, } } } -impl From for ElementsNetwork { - fn from(value: Network) -> Self { +impl From for ElementsNetwork { + fn from(value: LiquidNetwork) -> Self { match value { - Network::Mainnet => ElementsNetwork::Liquid, - Network::Testnet => ElementsNetwork::LiquidTestnet, + LiquidNetwork::Mainnet => ElementsNetwork::Liquid, + LiquidNetwork::Testnet => ElementsNetwork::LiquidTestnet, } } } -impl From for Chain { - fn from(value: Network) -> Self { +impl From for Chain { + fn from(value: LiquidNetwork) -> Self { match value { - Network::Mainnet => Chain::Liquid, - Network::Testnet => Chain::LiquidTestnet, + LiquidNetwork::Mainnet => Chain::Liquid, + LiquidNetwork::Testnet => Chain::LiquidTestnet, } } } -impl TryFrom<&str> for Network { +impl TryFrom<&str> for LiquidNetwork { type Error = anyhow::Error; - fn try_from(value: &str) -> Result { + fn try_from(value: &str) -> Result { match value.to_lowercase().as_str() { - "mainnet" => Ok(Network::Mainnet), - "testnet" => Ok(Network::Testnet), + "mainnet" => Ok(LiquidNetwork::Mainnet), + "testnet" => Ok(LiquidNetwork::Testnet), _ => Err(anyhow!("Invalid network")), } } } -impl TryFrom for Network { - type Error = anyhow::Error; - - fn try_from( - value: boltz_client::lightning_invoice::Currency, - ) -> Result { +impl From for sdk_common::prelude::Network { + fn from(value: LiquidNetwork) -> Self { match value { - boltz_client::lightning_invoice::Currency::Bitcoin => Ok(Network::Mainnet), - boltz_client::lightning_invoice::Currency::BitcoinTestnet => Ok(Network::Testnet), - _ => Err(anyhow!("Invalid network")), + LiquidNetwork::Mainnet => Self::Bitcoin, + LiquidNetwork::Testnet => Self::Testnet, + } + } +} + +impl From for sdk_common::bitcoin::Network { + fn from(value: LiquidNetwork) -> Self { + match value { + LiquidNetwork::Mainnet => Self::Bitcoin, + LiquidNetwork::Testnet => Self::Testnet, } } } @@ -879,69 +886,6 @@ pub struct LogEntry { pub level: String, } -/// Wrapper for a BOLT11 LN invoice -#[derive(Clone, Debug, PartialEq)] -pub struct LNInvoice { - pub bolt11: String, - pub network: Network, - pub payee_pubkey: String, - pub payment_hash: String, - pub description: Option, - pub description_hash: Option, - pub amount_msat: Option, - pub timestamp: u64, - pub expiry: u64, - pub routing_hints: Vec, - pub payment_secret: Vec, - pub min_final_cltv_expiry_delta: u64, -} - -/// A route hint for a LN payment -#[derive(Clone, Debug, PartialEq)] -pub struct RouteHint { - pub hops: Vec, -} - -impl RouteHint { - pub fn from_ldk_hint(hint: &boltz_client::lightning_invoice::RouteHint) -> RouteHint { - let mut hops = Vec::new(); - for hop in hint.0.iter() { - let pubkey_res = hop.src_node_id.serialize().to_hex(); - - let router_hop = RouteHintHop { - src_node_id: pubkey_res, - short_channel_id: hop.short_channel_id, - fees_base_msat: hop.fees.base_msat, - fees_proportional_millionths: hop.fees.proportional_millionths, - cltv_expiry_delta: u64::from(hop.cltv_expiry_delta), - htlc_minimum_msat: hop.htlc_minimum_msat, - htlc_maximum_msat: hop.htlc_maximum_msat, - }; - hops.push(router_hop); - } - RouteHint { hops } - } -} - -/// Details of a specific hop in a larger route hint -#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub struct RouteHintHop { - /// The node_id of the non-target end of the route - pub src_node_id: String, - /// The short_channel_id of this channel - pub short_channel_id: u64, - /// The fees which must be paid to use this channel - pub fees_base_msat: u32, - pub fees_proportional_millionths: u32, - - /// The difference in CLTV values between this node and the next node. - pub cltv_expiry_delta: u64, - /// The minimum value, in msat, which must be relayed to the next hop. - pub htlc_minimum_msat: Option, - /// The maximum value in msat available for routing with a single HTLC. - pub htlc_maximum_msat: Option, -} - #[derive(Clone, Debug, Serialize, Deserialize)] struct InternalLeaf { pub output: String, @@ -986,6 +930,30 @@ impl From for InternalSwapTree { } } +/// Contains the result of the entire LNURL-pay interaction, as reported by the LNURL endpoint. +/// +/// * `EndpointSuccess` indicates the payment is complete. The endpoint may return a `SuccessActionProcessed`, +/// in which case, the wallet has to present it to the user as described in +/// +/// +/// * `EndpointError` indicates a generic issue the LNURL endpoint encountered, including a freetext +/// field with the reason. +/// +/// * `PayError` indicates that an error occurred while trying to pay the invoice from the LNURL endpoint. +/// This includes the payment hash of the failed invoice and the failure reason. +#[derive(Serialize)] +pub enum LnUrlPayResult { + EndpointSuccess { data: LnUrlPaySuccessData }, + EndpointError { data: LnUrlErrorData }, + PayError { data: LnUrlPayErrorData }, +} + +#[derive(Serialize)] +pub struct LnUrlPaySuccessData { + pub payment: Payment, + pub success_action: Option, +} + #[macro_export] macro_rules! get_invoice_amount { ($invoice:expr) => { diff --git a/lib/core/src/persist/backup.rs b/lib/core/src/persist/backup.rs index 286e81b..53f5fa0 100644 --- a/lib/core/src/persist/backup.rs +++ b/lib/core/src/persist/backup.rs @@ -4,13 +4,13 @@ use anyhow::Result; use rusqlite::{backup::Backup, Connection}; use super::Persister; -use crate::model::Network; +use crate::model::LiquidNetwork; impl Persister { pub(crate) fn get_default_backup_path(&self) -> PathBuf { self.main_db_dir.join(match self.network { - Network::Mainnet => "backup.sql", - Network::Testnet => "backup-testnet.sql", + LiquidNetwork::Mainnet => "backup.sql", + LiquidNetwork::Testnet => "backup-testnet.sql", }) } diff --git a/lib/core/src/persist/mod.rs b/lib/core/src/persist/mod.rs index e88b28b..482befd 100644 --- a/lib/core/src/persist/mod.rs +++ b/lib/core/src/persist/mod.rs @@ -11,16 +11,16 @@ use migrations::current_migrations; use rusqlite::{params, Connection, OptionalExtension, Row}; use rusqlite_migration::{Migrations, M}; -use crate::model::{Network::*, *}; +use crate::model::{LiquidNetwork::*, *}; use crate::utils; pub(crate) struct Persister { main_db_dir: PathBuf, - network: Network, + network: LiquidNetwork, } impl Persister { - pub fn new(working_dir: &str, network: Network) -> Result { + pub fn new(working_dir: &str, network: LiquidNetwork) -> Result { let main_db_dir = PathBuf::from_str(working_dir)?; if !main_db_dir.exists() { create_dir_all(&main_db_dir)?; diff --git a/lib/core/src/sdk.rs b/lib/core/src/sdk.rs index eff1ced..7da0f74 100644 --- a/lib/core/src/sdk.rs +++ b/lib/core/src/sdk.rs @@ -1,16 +1,9 @@ use std::collections::HashMap; use std::time::Instant; -use std::{ - fs, - path::PathBuf, - str::FromStr, - sync::Arc, - time::{Duration, UNIX_EPOCH}, -}; +use std::{fs, path::PathBuf, str::FromStr, sync::Arc, time::Duration}; use anyhow::Result; use async_trait::async_trait; -use boltz_client::lightning_invoice::Bolt11InvoiceDescription; use boltz_client::ToHex; use boltz_client::{swaps::boltzv2::*, util::secrets::Preimage, Bolt11Invoice}; use futures_util::stream::select_all; @@ -18,11 +11,15 @@ use futures_util::StreamExt; use log::{debug, error, info, warn}; use lwk_wollet::bitcoin::hex::DisplayHex; use lwk_wollet::hashes::{sha256, Hash}; +use lwk_wollet::secp256k1::ThirtyTwoByteHash; use lwk_wollet::{elements::LockTime, ElementsNetwork}; use lwk_wollet::{ElectrumClient, ElectrumUrl}; +use sdk_common::bitcoin::secp256k1::Secp256k1; +use sdk_common::bitcoin::util::bip32::ChildNumber; use tokio::sync::{watch, Mutex, RwLock}; use tokio::time::MissedTickBehavior; use tokio_stream::wrappers::BroadcastStream; +use url::Url; use crate::chain::ChainService; use crate::chain_swap::ChainSwapStateHandler; @@ -33,13 +30,11 @@ use crate::send_swap::SendSwapStateHandler; use crate::swapper::{BoltzSwapper, ReconnectHandler, Swapper, SwapperStatusStream}; use crate::wallet::{LiquidOnchainWallet, OnchainWallet}; use crate::{ - ensure_sdk, error::{LiquidSdkResult, PaymentError}, event::EventManager, - get_invoice_amount, model::*, persist::Persister, - utils, + utils, *, }; pub const DEFAULT_DATA_DIR: &str = ".data"; @@ -511,8 +506,8 @@ impl LiquidSdk { })?; match (invoice.network().to_string().as_str(), self.config.network) { - ("bitcoin", Network::Mainnet) => {} - ("testnet", Network::Testnet) => {} + ("bitcoin", LiquidNetwork::Mainnet) => {} + ("testnet", LiquidNetwork::Testnet) => {} _ => { return Err(PaymentError::InvalidInvoice { err: "Invoice cannot be paid on the current network".to_string(), @@ -585,8 +580,8 @@ impl LiquidSdk { // TODO Replace this with own address when LWK supports taproot // https://github.com/Blockstream/lwk/issues/31 let temp_p2tr_addr = match self.config.network { - Network::Mainnet => "lq1pqvzxvqhrf54dd4sny4cag7497pe38252qefk46t92frs7us8r80ja9ha8r5me09nn22m4tmdqp5p4wafq3s59cql3v9n45t5trwtxrmxfsyxjnstkctj", - Network::Testnet => "tlq1pq0wqu32e2xacxeyps22x8gjre4qk3u6r70pj4r62hzczxeyz8x3yxucrpn79zy28plc4x37aaf33kwt6dz2nn6gtkya6h02mwpzy4eh69zzexq7cf5y5" + LiquidNetwork::Mainnet => "lq1pqvzxvqhrf54dd4sny4cag7497pe38252qefk46t92frs7us8r80ja9ha8r5me09nn22m4tmdqp5p4wafq3s59cql3v9n45t5trwtxrmxfsyxjnstkctj", + LiquidNetwork::Testnet => "tlq1pq0wqu32e2xacxeyps22x8gjre4qk3u6r70pj4r62hzczxeyz8x3yxucrpn79zy28plc4x37aaf33kwt6dz2nn6gtkya6h02mwpzy4eh69zzexq7cf5y5" }; self.estimate_onchain_tx_fee(amount_sat, temp_p2tr_addr) @@ -1288,66 +1283,146 @@ impl LiquidSdk { self.persister.restore_from_backup(backup_path) } - pub fn default_config(network: Network) -> Config { - match network { - Network::Mainnet => Config::mainnet(), - Network::Testnet => Config::testnet(), + /// Second step of LNURL-pay. The first step is `parse()`, which also validates the LNURL destination + /// and generates the `LnUrlPayRequest` payload needed here. + /// + /// This call will validate the `amount_msat` and `comment` parameters of `req` against the parameters + /// of the LNURL endpoint (`req_data`). If they match the endpoint requirements, the LNURL payment + /// is made. + pub async fn lnurl_pay(&self, req: LnUrlPayRequest) -> Result { + match validate_lnurl_pay( + req.amount_msat, + &req.comment, + &req.data, + self.config.network.into(), + ) + .await? + { + ValidatedCallbackResponse::EndpointError { data: e } => { + Ok(LnUrlPayResult::EndpointError { data: e }) + } + ValidatedCallbackResponse::EndpointSuccess { data: cb } => { + let pay_req = self + .prepare_send_payment(&PrepareSendRequest { + invoice: cb.pr.clone(), + }) + .await?; + + let payment = self.send_payment(&pay_req).await?.payment; + + let maybe_sa_processed: Option = match cb.success_action { + Some(sa) => { + let processed_sa = match sa { + // For AES, we decrypt the contents on the fly + SuccessAction::Aes(data) => { + let preimage_str = payment + .preimage + .clone() + .ok_or(LiquidSdkError::Generic { + err: "Payment successful but no preimage found".to_string(), + }) + .unwrap(); + let preimage = + sha256::Hash::from_str(&preimage_str).map_err(|_| { + sdk_common::prelude::LnUrlPayError::Generic { + err: "Invalid preimage".to_string(), + } + })?; + let preimage_arr: [u8; 32] = preimage.into_32(); + let result = match (data, &preimage_arr).try_into() { + Ok(data) => AesSuccessActionDataResult::Decrypted { data }, + Err(e) => AesSuccessActionDataResult::ErrorStatus { + reason: e.to_string(), + }, + }; + SuccessActionProcessed::Aes { result } + } + SuccessAction::Message(data) => { + SuccessActionProcessed::Message { data } + } + SuccessAction::Url(data) => SuccessActionProcessed::Url { data }, + }; + Some(processed_sa) + } + None => None, + }; + + Ok(LnUrlPayResult::EndpointSuccess { + data: model::LnUrlPaySuccessData { + payment, + success_action: maybe_sa_processed, + }, + }) + } } } - pub fn parse_invoice(input: &str) -> Result { - let input = input - .strip_prefix("lightning:") - .or(input.strip_prefix("LIGHTNING:")) - .unwrap_or(input); - let invoice = - Bolt11Invoice::from_str(input).map_err(|err| PaymentError::InvalidInvoice { - err: err.to_string(), - })?; + /// Second step of LNURL-withdraw. The first step is `parse()`, which also validates the LNURL destination + /// and generates the `LnUrlWithdrawRequest` payload needed here. + /// + /// This call will validate the given `amount_msat` against the parameters + /// of the LNURL endpoint (`data`). If they match the endpoint requirements, the LNURL withdraw + /// request is made. A successful result here means the endpoint started the payment. + pub async fn lnurl_withdraw( + &self, + req: LnUrlWithdrawRequest, + ) -> Result { + let prepare_receive_res = self + .prepare_receive_payment(&{ + PrepareReceiveRequest { + payer_amount_sat: req.amount_msat / 1_000, + } + }) + .await?; + let receive_res = self.receive_payment(&prepare_receive_res).await?; + let invoice = parse_invoice(&receive_res.invoice)?; - // Try to take payee pubkey from the tagged fields, if doesn't exist recover it from the signature - let payee_pubkey: String = match invoice.payee_pub_key() { - Some(key) => key.serialize().to_hex(), - None => invoice.recover_payee_pub_key().serialize().to_hex(), - }; - let description = match invoice.description() { - Bolt11InvoiceDescription::Direct(msg) => Some(msg.to_string()), - Bolt11InvoiceDescription::Hash(_) => None, - }; - let description_hash = match invoice.description() { - Bolt11InvoiceDescription::Direct(_) => None, - Bolt11InvoiceDescription::Hash(h) => Some(h.0.to_string()), - }; - let timestamp = invoice - .timestamp() - .duration_since(UNIX_EPOCH) - .map_err(|err| PaymentError::InvalidInvoice { - err: err.to_string(), - })? - .as_secs(); - let routing_hints = invoice - .route_hints() - .iter() - .map(RouteHint::from_ldk_hint) - .collect(); - - let res = LNInvoice { - bolt11: input.to_string(), - network: invoice.currency().try_into()?, - payee_pubkey, - payment_hash: invoice.payment_hash().to_hex(), - description, - description_hash, - amount_msat: invoice.amount_milli_satoshis(), - timestamp, - expiry: invoice.expiry_time().as_secs(), - routing_hints, - payment_secret: invoice.payment_secret().0.to_vec(), - min_final_cltv_expiry_delta: invoice.min_final_cltv_expiry_delta(), - }; + let res = validate_lnurl_withdraw(req.data, invoice).await?; Ok(res) } + /// Third and last step of LNURL-auth. The first step is `parse()`, which also validates the LNURL destination + /// and generates the `LnUrlAuthRequestData` payload needed here. The second step is user approval of auth action. + /// + /// This call will sign `k1` of the LNURL endpoint (`req_data`) on `secp256k1` using `linkingPrivKey` and DER-encodes the signature. + /// If they match the endpoint requirements, the LNURL auth request is made. A successful result here means the client signature is verified. + pub async fn lnurl_auth( + &self, + req_data: LnUrlAuthRequestData, + ) -> Result { + // m/138'/0 + let hashing_key = self.onchain_wallet.derive_bip32_key(vec![ + ChildNumber::from_hardened_idx(138).map_err(Into::::into)?, + ChildNumber::from(0), + ])?; + + let url = + Url::from_str(&req_data.url).map_err(|e| LnUrlError::InvalidUri(e.to_string()))?; + + let derivation_path = get_derivation_path(hashing_key, url)?; + let linking_key = self.onchain_wallet.derive_bip32_key(derivation_path)?; + let linking_keys = linking_key.to_keypair(&Secp256k1::new()); + + Ok(perform_lnurl_auth(linking_keys, req_data).await?) + } + + pub fn default_config(network: LiquidNetwork) -> Config { + match network { + LiquidNetwork::Mainnet => Config::mainnet(), + LiquidNetwork::Testnet => Config::testnet(), + } + } + + pub async fn parse(input: &str) -> Result { + parse(input) + .await + .map_err(|e| PaymentError::Generic { err: e.to_string() }) + } + + pub fn parse_invoice(input: &str) -> Result { + parse_invoice(input).map_err(|e| PaymentError::InvalidInvoice { err: e.to_string() }) + } + /// Configures a global SDK logger that will log to file and will forward log events to /// an optional application-specific logger. /// diff --git a/lib/core/src/swapper/mod.rs b/lib/core/src/swapper/mod.rs index 484aedb..47130dd 100644 --- a/lib/core/src/swapper/mod.rs +++ b/lib/core/src/swapper/mod.rs @@ -23,7 +23,7 @@ use tokio::sync::{broadcast, watch}; use crate::error::PaymentError; use crate::model::{ - ChainSwap, Config, Direction, Network, ReceiveSwap, SendSwap, SwapScriptV2, SwapTxV2, + ChainSwap, Config, Direction, LiquidNetwork, ReceiveSwap, SendSwap, SwapScriptV2, SwapTxV2, }; use crate::utils; @@ -62,7 +62,7 @@ pub trait Swapper: Send + Sync { /// Get a submarine pair information fn get_submarine_pairs(&self) -> Result, PaymentError>; - /// Refund a cooperatively chain swap + /// Refund a cooperatively chain swap fn refund_chain_swap_cooperative( &self, swap: &ChainSwap, @@ -70,7 +70,7 @@ pub trait Swapper: Send + Sync { broadcast_fees_sat: u64, ) -> Result; - /// Refund a cooperatively send swap + /// Refund a cooperatively send swap fn refund_send_swap_cooperative( &self, swap: &SendSwap, @@ -349,8 +349,8 @@ impl BoltzSwapper { is_cooperative, )?; let is_lowball = match self.config.network { - Network::Mainnet => None, - Network::Testnet => { + LiquidNetwork::Mainnet => None, + LiquidNetwork::Testnet => { Some((&self.client, boltz_client::network::Chain::LiquidTestnet)) } }; @@ -423,8 +423,8 @@ impl BoltzSwapper { None, )?; let is_lowball = match self.config.network { - Network::Mainnet => None, - Network::Testnet => { + LiquidNetwork::Mainnet => None, + LiquidNetwork::Testnet => { Some((&self.client, boltz_client::network::Chain::LiquidTestnet)) } }; @@ -471,7 +471,7 @@ impl Swapper for BoltzSwapper { Ok(self.client.get_submarine_pairs()?.get_lbtc_to_btc_pair()) } - /// Refund a cooperatively chain swap + /// Refund a cooperatively chain swap fn refund_chain_swap_cooperative( &self, swap: &ChainSwap, @@ -490,7 +490,7 @@ impl Swapper for BoltzSwapper { ) } - /// Refund a cooperatively send swap + /// Refund a cooperatively send swap fn refund_send_swap_cooperative( &self, swap: &SendSwap, diff --git a/lib/core/src/test_utils.rs b/lib/core/src/test_utils.rs index c743dac..6909d83 100644 --- a/lib/core/src/test_utils.rs +++ b/lib/core/src/test_utils.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use crate::{ chain_swap::ChainSwapStateHandler, model::{ - ChainSwap, Config, Direction, Network, PaymentState, PaymentTxData, PaymentType, + ChainSwap, Config, Direction, LiquidNetwork, PaymentState, PaymentTxData, PaymentType, ReceiveSwap, SendSwap, }, persist::Persister, @@ -162,7 +162,7 @@ pub(crate) fn new_persister() -> Result<(TempDir, Persister)> { .path() .to_str() .ok_or(anyhow!("Could not create temporary directory"))?, - Network::Testnet, + LiquidNetwork::Testnet, )?; persister.init()?; Ok((temp_dir, persister)) diff --git a/lib/core/src/wallet.rs b/lib/core/src/wallet.rs index 280b1bf..9324c4d 100644 --- a/lib/core/src/wallet.rs +++ b/lib/core/src/wallet.rs @@ -11,11 +11,13 @@ use lwk_wollet::{ ElectrumClient, ElectrumUrl, ElementsNetwork, FsPersister, Tip, WalletTx, Wollet, WolletDescriptor, }; +use sdk_common::bitcoin::secp256k1::Secp256k1; +use sdk_common::bitcoin::util::bip32::{ChildNumber, ExtendedPrivKey}; use tokio::sync::Mutex; use crate::{ error::PaymentError, - model::{Config, Network}, + model::{Config, LiquidNetwork}, }; #[async_trait] @@ -40,6 +42,8 @@ pub trait OnchainWallet: Send + Sync { /// Get the public key of the wallet fn pubkey(&self) -> String; + fn derive_bip32_key(&self, path: Vec) -> Result; + /// Perform a full scan of the wallet async fn full_scan(&self) -> Result<(), PaymentError>; } @@ -52,7 +56,7 @@ pub(crate) struct LiquidOnchainWallet { impl LiquidOnchainWallet { pub(crate) fn new(mnemonic: String, config: Config) -> Result { - let is_mainnet = config.network == Network::Mainnet; + let is_mainnet = config.network == LiquidNetwork::Mainnet; let lwk_signer = SwSigner::new(&mnemonic, is_mainnet)?; let descriptor = LiquidOnchainWallet::get_descriptor(&lwk_signer, config.network)?; let elements_network: ElementsNetwork = config.network.into(); @@ -69,9 +73,9 @@ impl LiquidOnchainWallet { fn get_descriptor( signer: &SwSigner, - network: Network, + network: LiquidNetwork, ) -> Result { - let is_mainnet = network == Network::Mainnet; + let is_mainnet = network == LiquidNetwork::Mainnet; let descriptor_str = singlesig_desc( signer, Singlesig::Wpkh, @@ -145,4 +149,14 @@ impl OnchainWallet for LiquidOnchainWallet { lwk_wollet::full_scan_with_electrum_client(&mut wallet, &mut electrum_client)?; Ok(()) } + + fn derive_bip32_key(&self, path: Vec) -> Result { + let seed = self.lwk_signer.seed().ok_or(PaymentError::SignerError { + err: "Could not get signer seed".to_string(), + })?; + + let bip32_xpriv = ExtendedPrivKey::new_master(self.config.network.into(), &seed)? + .derive_priv(&Secp256k1::new(), &path)?; + Ok(bip32_xpriv) + } } diff --git a/packages/dart/lib/src/bindings.dart b/packages/dart/lib/src/bindings.dart index 372178d..aade79f 100644 --- a/packages/dart/lib/src/bindings.dart +++ b/packages/dart/lib/src/bindings.dart @@ -3,10 +3,13 @@ // ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import +import 'bindings/duplicates.dart'; import 'error.dart'; import 'frb_generated.dart'; import 'model.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; +import 'package:freezed_annotation/freezed_annotation.dart' hide protected; +part 'bindings.freezed.dart'; // These functions are ignored because they are not marked as `pub`: `init` // These types are ignored because they are not used by any `pub` functions: `DartBindingLogger` @@ -17,9 +20,11 @@ Future connect({required ConnectRequest req}) => /// If used, this must be called before `connect`. It can only be called once. Stream breezLogStream() => RustLib.instance.api.crateBindingsBreezLogStream(); -Config defaultConfig({required Network network}) => +Config defaultConfig({required LiquidNetwork network}) => RustLib.instance.api.crateBindingsDefaultConfig(network: network); +Future parse({required String input}) => RustLib.instance.api.crateBindingsParse(input: input); + LNInvoice parseInvoice({required String input}) => RustLib.instance.api.crateBindingsParseInvoice(input: input); @@ -37,6 +42,12 @@ abstract class BindingLiquidSdk implements RustOpaqueInterface { Future> listPayments(); + Future lnurlAuth({required LnUrlAuthRequestData reqData}); + + Future lnurlPay({required LnUrlPayRequest req}); + + Future lnurlWithdraw({required LnUrlWithdrawRequest req}); + Future payOnchain({required PayOnchainRequest req}); Future preparePayOnchain({required PreparePayOnchainRequest req}); @@ -54,6 +65,39 @@ abstract class BindingLiquidSdk implements RustOpaqueInterface { Future sync(); } +class AesSuccessActionDataDecrypted { + final String description; + final String plaintext; + + const AesSuccessActionDataDecrypted({ + required this.description, + required this.plaintext, + }); + + @override + int get hashCode => description.hashCode ^ plaintext.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AesSuccessActionDataDecrypted && + runtimeType == other.runtimeType && + description == other.description && + plaintext == other.plaintext; +} + +@freezed +sealed class AesSuccessActionDataResult with _$AesSuccessActionDataResult { + const AesSuccessActionDataResult._(); + + const factory AesSuccessActionDataResult.decrypted({ + required AesSuccessActionDataDecrypted data, + }) = AesSuccessActionDataResult_Decrypted; + const factory AesSuccessActionDataResult.errorStatus({ + required String reason, + }) = AesSuccessActionDataResult_ErrorStatus; +} + class BindingEventListener { final RustStreamSink stream; @@ -72,3 +116,446 @@ class BindingEventListener { identical(this, other) || other is BindingEventListener && runtimeType == other.runtimeType && stream == other.stream; } + +class BitcoinAddressData { + final String address; + final Network network; + final BigInt? amountSat; + final String? label; + final String? message; + + const BitcoinAddressData({ + required this.address, + required this.network, + this.amountSat, + this.label, + this.message, + }); + + @override + int get hashCode => + address.hashCode ^ network.hashCode ^ amountSat.hashCode ^ label.hashCode ^ message.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is BitcoinAddressData && + runtimeType == other.runtimeType && + address == other.address && + network == other.network && + amountSat == other.amountSat && + label == other.label && + message == other.message; +} + +@freezed +sealed class InputType with _$InputType { + const InputType._(); + + const factory InputType.bitcoinAddress({ + required BitcoinAddressData address, + }) = InputType_BitcoinAddress; + const factory InputType.bolt11({ + required LNInvoice invoice, + }) = InputType_Bolt11; + const factory InputType.nodeId({ + required String nodeId, + }) = InputType_NodeId; + const factory InputType.url({ + required String url, + }) = InputType_Url; + const factory InputType.lnUrlPay({ + required LnUrlPayRequestData data, + }) = InputType_LnUrlPay; + const factory InputType.lnUrlWithdraw({ + required LnUrlWithdrawRequestData data, + }) = InputType_LnUrlWithdraw; + const factory InputType.lnUrlAuth({ + required LnUrlAuthRequestData data, + }) = InputType_LnUrlAuth; + const factory InputType.lnUrlError({ + required LnUrlErrorData data, + }) = InputType_LnUrlError; +} + +class LNInvoice { + final String bolt11; + final Network network; + final String payeePubkey; + final String paymentHash; + final String? description; + final String? descriptionHash; + final BigInt? amountMsat; + final BigInt timestamp; + final BigInt expiry; + final List routingHints; + final Uint8List paymentSecret; + final BigInt minFinalCltvExpiryDelta; + + const LNInvoice({ + required this.bolt11, + required this.network, + required this.payeePubkey, + required this.paymentHash, + this.description, + this.descriptionHash, + this.amountMsat, + required this.timestamp, + required this.expiry, + required this.routingHints, + required this.paymentSecret, + required this.minFinalCltvExpiryDelta, + }); + + @override + int get hashCode => + bolt11.hashCode ^ + network.hashCode ^ + payeePubkey.hashCode ^ + paymentHash.hashCode ^ + description.hashCode ^ + descriptionHash.hashCode ^ + amountMsat.hashCode ^ + timestamp.hashCode ^ + expiry.hashCode ^ + routingHints.hashCode ^ + paymentSecret.hashCode ^ + minFinalCltvExpiryDelta.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LNInvoice && + runtimeType == other.runtimeType && + bolt11 == other.bolt11 && + network == other.network && + payeePubkey == other.payeePubkey && + paymentHash == other.paymentHash && + description == other.description && + descriptionHash == other.descriptionHash && + amountMsat == other.amountMsat && + timestamp == other.timestamp && + expiry == other.expiry && + routingHints == other.routingHints && + paymentSecret == other.paymentSecret && + minFinalCltvExpiryDelta == other.minFinalCltvExpiryDelta; +} + +class LnUrlAuthRequestData { + final String k1; + final String? action; + final String domain; + final String url; + + const LnUrlAuthRequestData({ + required this.k1, + this.action, + required this.domain, + required this.url, + }); + + @override + int get hashCode => k1.hashCode ^ action.hashCode ^ domain.hashCode ^ url.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlAuthRequestData && + runtimeType == other.runtimeType && + k1 == other.k1 && + action == other.action && + domain == other.domain && + url == other.url; +} + +class LnUrlErrorData { + final String reason; + + const LnUrlErrorData({ + required this.reason, + }); + + @override + int get hashCode => reason.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlErrorData && runtimeType == other.runtimeType && reason == other.reason; +} + +class LnUrlPayErrorData { + final String paymentHash; + final String reason; + + const LnUrlPayErrorData({ + required this.paymentHash, + required this.reason, + }); + + @override + int get hashCode => paymentHash.hashCode ^ reason.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlPayErrorData && + runtimeType == other.runtimeType && + paymentHash == other.paymentHash && + reason == other.reason; +} + +class LnUrlPayRequest { + final LnUrlPayRequestData data; + final BigInt amountMsat; + final String? comment; + final String? paymentLabel; + + const LnUrlPayRequest({ + required this.data, + required this.amountMsat, + this.comment, + this.paymentLabel, + }); + + @override + int get hashCode => data.hashCode ^ amountMsat.hashCode ^ comment.hashCode ^ paymentLabel.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlPayRequest && + runtimeType == other.runtimeType && + data == other.data && + amountMsat == other.amountMsat && + comment == other.comment && + paymentLabel == other.paymentLabel; +} + +class LnUrlPayRequestData { + final String callback; + final BigInt minSendable; + final BigInt maxSendable; + final String metadataStr; + final int commentAllowed; + final String domain; + final bool allowsNostr; + final String? nostrPubkey; + final String? lnAddress; + + const LnUrlPayRequestData({ + required this.callback, + required this.minSendable, + required this.maxSendable, + required this.metadataStr, + required this.commentAllowed, + required this.domain, + required this.allowsNostr, + this.nostrPubkey, + this.lnAddress, + }); + + @override + int get hashCode => + callback.hashCode ^ + minSendable.hashCode ^ + maxSendable.hashCode ^ + metadataStr.hashCode ^ + commentAllowed.hashCode ^ + domain.hashCode ^ + allowsNostr.hashCode ^ + nostrPubkey.hashCode ^ + lnAddress.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlPayRequestData && + runtimeType == other.runtimeType && + callback == other.callback && + minSendable == other.minSendable && + maxSendable == other.maxSendable && + metadataStr == other.metadataStr && + commentAllowed == other.commentAllowed && + domain == other.domain && + allowsNostr == other.allowsNostr && + nostrPubkey == other.nostrPubkey && + lnAddress == other.lnAddress; +} + +class LnUrlWithdrawRequest { + final LnUrlWithdrawRequestData data; + final BigInt amountMsat; + final String? description; + + const LnUrlWithdrawRequest({ + required this.data, + required this.amountMsat, + this.description, + }); + + @override + int get hashCode => data.hashCode ^ amountMsat.hashCode ^ description.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlWithdrawRequest && + runtimeType == other.runtimeType && + data == other.data && + amountMsat == other.amountMsat && + description == other.description; +} + +class LnUrlWithdrawRequestData { + final String callback; + final String k1; + final String defaultDescription; + final BigInt minWithdrawable; + final BigInt maxWithdrawable; + + const LnUrlWithdrawRequestData({ + required this.callback, + required this.k1, + required this.defaultDescription, + required this.minWithdrawable, + required this.maxWithdrawable, + }); + + @override + int get hashCode => + callback.hashCode ^ + k1.hashCode ^ + defaultDescription.hashCode ^ + minWithdrawable.hashCode ^ + maxWithdrawable.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LnUrlWithdrawRequestData && + runtimeType == other.runtimeType && + callback == other.callback && + k1 == other.k1 && + defaultDescription == other.defaultDescription && + minWithdrawable == other.minWithdrawable && + maxWithdrawable == other.maxWithdrawable; +} + +class MessageSuccessActionData { + final String message; + + const MessageSuccessActionData({ + required this.message, + }); + + @override + int get hashCode => message.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is MessageSuccessActionData && runtimeType == other.runtimeType && message == other.message; +} + +enum Network { + bitcoin, + testnet, + signet, + regtest, + ; +} + +class RouteHint { + final List hops; + + const RouteHint({ + required this.hops, + }); + + @override + int get hashCode => hops.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || other is RouteHint && runtimeType == other.runtimeType && hops == other.hops; +} + +class RouteHintHop { + final String srcNodeId; + final BigInt shortChannelId; + final int feesBaseMsat; + final int feesProportionalMillionths; + final BigInt cltvExpiryDelta; + final BigInt? htlcMinimumMsat; + final BigInt? htlcMaximumMsat; + + const RouteHintHop({ + required this.srcNodeId, + required this.shortChannelId, + required this.feesBaseMsat, + required this.feesProportionalMillionths, + required this.cltvExpiryDelta, + this.htlcMinimumMsat, + this.htlcMaximumMsat, + }); + + @override + int get hashCode => + srcNodeId.hashCode ^ + shortChannelId.hashCode ^ + feesBaseMsat.hashCode ^ + feesProportionalMillionths.hashCode ^ + cltvExpiryDelta.hashCode ^ + htlcMinimumMsat.hashCode ^ + htlcMaximumMsat.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is RouteHintHop && + runtimeType == other.runtimeType && + srcNodeId == other.srcNodeId && + shortChannelId == other.shortChannelId && + feesBaseMsat == other.feesBaseMsat && + feesProportionalMillionths == other.feesProportionalMillionths && + cltvExpiryDelta == other.cltvExpiryDelta && + htlcMinimumMsat == other.htlcMinimumMsat && + htlcMaximumMsat == other.htlcMaximumMsat; +} + +@freezed +sealed class SuccessActionProcessed with _$SuccessActionProcessed { + const SuccessActionProcessed._(); + + const factory SuccessActionProcessed.aes({ + required AesSuccessActionDataResult result, + }) = SuccessActionProcessed_Aes; + const factory SuccessActionProcessed.message({ + required MessageSuccessActionData data, + }) = SuccessActionProcessed_Message; + const factory SuccessActionProcessed.url({ + required UrlSuccessActionData data, + }) = SuccessActionProcessed_Url; +} + +class UrlSuccessActionData { + final String description; + final String url; + + const UrlSuccessActionData({ + required this.description, + required this.url, + }); + + @override + int get hashCode => description.hashCode ^ url.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is UrlSuccessActionData && + runtimeType == other.runtimeType && + description == other.description && + url == other.url; +} diff --git a/packages/dart/lib/src/frb_generated.dart b/packages/dart/lib/src/frb_generated.dart index a341770..11805b9 100644 --- a/packages/dart/lib/src/frb_generated.dart +++ b/packages/dart/lib/src/frb_generated.dart @@ -4,6 +4,7 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field import 'bindings.dart'; +import 'bindings/duplicates.dart'; import 'dart:async'; import 'dart:convert'; import 'error.dart'; @@ -54,7 +55,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.0.0-dev.38'; @override - int get rustContentHash => -107248138; + int get rustContentHash => 540580972; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( stem: 'breez_liquid_sdk', @@ -76,6 +77,15 @@ abstract class RustLibApi extends BaseApi { Future> crateBindingsBindingLiquidSdkListPayments({required BindingLiquidSdk that}); + Future crateBindingsBindingLiquidSdkLnurlAuth( + {required BindingLiquidSdk that, required LnUrlAuthRequestData reqData}); + + Future crateBindingsBindingLiquidSdkLnurlPay( + {required BindingLiquidSdk that, required LnUrlPayRequest req}); + + Future crateBindingsBindingLiquidSdkLnurlWithdraw( + {required BindingLiquidSdk that, required LnUrlWithdrawRequest req}); + Future crateBindingsBindingLiquidSdkPayOnchain( {required BindingLiquidSdk that, required PayOnchainRequest req}); @@ -105,7 +115,9 @@ abstract class RustLibApi extends BaseApi { Future crateBindingsConnect({required ConnectRequest req}); - Config crateBindingsDefaultConfig({required Network network}); + Config crateBindingsDefaultConfig({required LiquidNetwork network}); + + Future crateBindingsParse({required String input}); LNInvoice crateBindingsParseInvoice({required String input}); @@ -272,6 +284,84 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["that"], ); + @override + Future crateBindingsBindingLiquidSdkLnurlAuth( + {required BindingLiquidSdk that, required LnUrlAuthRequestData reqData}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + var arg0 = + cst_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk( + that); + var arg1 = cst_encode_box_autoadd_ln_url_auth_request_data(reqData); + return wire.wire__crate__bindings__BindingLiquidSdk_lnurl_auth(port_, arg0, arg1); + }, + codec: DcoCodec( + decodeSuccessData: dco_decode_ln_url_callback_status, + decodeErrorData: dco_decode_ln_url_auth_error, + ), + constMeta: kCrateBindingsBindingLiquidSdkLnurlAuthConstMeta, + argValues: [that, reqData], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateBindingsBindingLiquidSdkLnurlAuthConstMeta => const TaskConstMeta( + debugName: "BindingLiquidSdk_lnurl_auth", + argNames: ["that", "reqData"], + ); + + @override + Future crateBindingsBindingLiquidSdkLnurlPay( + {required BindingLiquidSdk that, required LnUrlPayRequest req}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + var arg0 = + cst_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk( + that); + var arg1 = cst_encode_box_autoadd_ln_url_pay_request(req); + return wire.wire__crate__bindings__BindingLiquidSdk_lnurl_pay(port_, arg0, arg1); + }, + codec: DcoCodec( + decodeSuccessData: dco_decode_ln_url_pay_result, + decodeErrorData: dco_decode_ln_url_pay_error, + ), + constMeta: kCrateBindingsBindingLiquidSdkLnurlPayConstMeta, + argValues: [that, req], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateBindingsBindingLiquidSdkLnurlPayConstMeta => const TaskConstMeta( + debugName: "BindingLiquidSdk_lnurl_pay", + argNames: ["that", "req"], + ); + + @override + Future crateBindingsBindingLiquidSdkLnurlWithdraw( + {required BindingLiquidSdk that, required LnUrlWithdrawRequest req}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + var arg0 = + cst_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk( + that); + var arg1 = cst_encode_box_autoadd_ln_url_withdraw_request(req); + return wire.wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw(port_, arg0, arg1); + }, + codec: DcoCodec( + decodeSuccessData: dco_decode_ln_url_withdraw_result, + decodeErrorData: dco_decode_ln_url_withdraw_error, + ), + constMeta: kCrateBindingsBindingLiquidSdkLnurlWithdrawConstMeta, + argValues: [that, req], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateBindingsBindingLiquidSdkLnurlWithdrawConstMeta => const TaskConstMeta( + debugName: "BindingLiquidSdk_lnurl_withdraw", + argNames: ["that", "req"], + ); + @override Future crateBindingsBindingLiquidSdkPayOnchain( {required BindingLiquidSdk that, required PayOnchainRequest req}) { @@ -549,10 +639,10 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); @override - Config crateBindingsDefaultConfig({required Network network}) { + Config crateBindingsDefaultConfig({required LiquidNetwork network}) { return handler.executeSync(SyncTask( callFfi: () { - var arg0 = cst_encode_network(network); + var arg0 = cst_encode_liquid_network(network); return wire.wire__crate__bindings__default_config(arg0); }, codec: DcoCodec( @@ -570,6 +660,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["network"], ); + @override + Future crateBindingsParse({required String input}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + var arg0 = cst_encode_String(input); + return wire.wire__crate__bindings__parse(port_, arg0); + }, + codec: DcoCodec( + decodeSuccessData: dco_decode_input_type, + decodeErrorData: dco_decode_payment_error, + ), + constMeta: kCrateBindingsParseConstMeta, + argValues: [input], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateBindingsParseConstMeta => const TaskConstMeta( + debugName: "parse", + argNames: ["input"], + ); + @override LNInvoice crateBindingsParseInvoice({required String input}) { return handler.executeSync(SyncTask( @@ -645,6 +757,34 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as String; } + @protected + AesSuccessActionDataDecrypted dco_decode_aes_success_action_data_decrypted(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return AesSuccessActionDataDecrypted( + description: dco_decode_String(arr[0]), + plaintext: dco_decode_String(arr[1]), + ); + } + + @protected + AesSuccessActionDataResult dco_decode_aes_success_action_data_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return AesSuccessActionDataResult_Decrypted( + data: dco_decode_box_autoadd_aes_success_action_data_decrypted(raw[1]), + ); + case 1: + return AesSuccessActionDataResult_ErrorStatus( + reason: dco_decode_String(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + @protected BackupRequest dco_decode_backup_request(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -665,6 +805,38 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); } + @protected + BitcoinAddressData dco_decode_bitcoin_address_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 5) throw Exception('unexpected arr length: expect 5 but see ${arr.length}'); + return BitcoinAddressData( + address: dco_decode_String(arr[0]), + network: dco_decode_network(arr[1]), + amountSat: dco_decode_opt_box_autoadd_u_64(arr[2]), + label: dco_decode_opt_String(arr[3]), + message: dco_decode_opt_String(arr[4]), + ); + } + + @protected + bool dco_decode_bool(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as bool; + } + + @protected + AesSuccessActionDataDecrypted dco_decode_box_autoadd_aes_success_action_data_decrypted(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_aes_success_action_data_decrypted(raw); + } + + @protected + AesSuccessActionDataResult dco_decode_box_autoadd_aes_success_action_data_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_aes_success_action_data_result(raw); + } + @protected BackupRequest dco_decode_box_autoadd_backup_request(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -677,6 +849,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return dco_decode_binding_event_listener(raw); } + @protected + BitcoinAddressData dco_decode_box_autoadd_bitcoin_address_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_bitcoin_address_data(raw); + } + @protected ConnectRequest dco_decode_box_autoadd_connect_request(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -689,6 +867,72 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return dco_decode_liquid_sdk_event(raw); } + @protected + LNInvoice dco_decode_box_autoadd_ln_invoice(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_invoice(raw); + } + + @protected + LnUrlAuthRequestData dco_decode_box_autoadd_ln_url_auth_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_auth_request_data(raw); + } + + @protected + LnUrlErrorData dco_decode_box_autoadd_ln_url_error_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_error_data(raw); + } + + @protected + LnUrlPayErrorData dco_decode_box_autoadd_ln_url_pay_error_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_pay_error_data(raw); + } + + @protected + LnUrlPayRequest dco_decode_box_autoadd_ln_url_pay_request(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_pay_request(raw); + } + + @protected + LnUrlPayRequestData dco_decode_box_autoadd_ln_url_pay_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_pay_request_data(raw); + } + + @protected + LnUrlPaySuccessData dco_decode_box_autoadd_ln_url_pay_success_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_pay_success_data(raw); + } + + @protected + LnUrlWithdrawRequest dco_decode_box_autoadd_ln_url_withdraw_request(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_withdraw_request(raw); + } + + @protected + LnUrlWithdrawRequestData dco_decode_box_autoadd_ln_url_withdraw_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_withdraw_request_data(raw); + } + + @protected + LnUrlWithdrawSuccessData dco_decode_box_autoadd_ln_url_withdraw_success_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ln_url_withdraw_success_data(raw); + } + + @protected + MessageSuccessActionData dco_decode_box_autoadd_message_success_action_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_message_success_action_data(raw); + } + @protected PayOnchainRequest dco_decode_box_autoadd_pay_onchain_request(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -737,12 +981,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return dco_decode_restore_request(raw); } + @protected + SuccessActionProcessed dco_decode_box_autoadd_success_action_processed(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_success_action_processed(raw); + } + @protected BigInt dco_decode_box_autoadd_u_64(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return dco_decode_u_64(raw); } + @protected + UrlSuccessActionData dco_decode_box_autoadd_url_success_action_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_url_success_action_data(raw); + } + @protected Config dco_decode_config(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -753,7 +1009,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { liquidElectrumUrl: dco_decode_String(arr[1]), bitcoinElectrumUrl: dco_decode_String(arr[2]), workingDir: dco_decode_String(arr[3]), - network: dco_decode_network(arr[4]), + network: dco_decode_liquid_network(arr[4]), paymentTimeoutSec: dco_decode_u_64(arr[5]), zeroConfMinFeeRate: dco_decode_f_32(arr[6]), zeroConfMaxAmountSat: dco_decode_opt_box_autoadd_u_64(arr[7]), @@ -796,6 +1052,53 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as int; } + @protected + InputType dco_decode_input_type(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return InputType_BitcoinAddress( + address: dco_decode_box_autoadd_bitcoin_address_data(raw[1]), + ); + case 1: + return InputType_Bolt11( + invoice: dco_decode_box_autoadd_ln_invoice(raw[1]), + ); + case 2: + return InputType_NodeId( + nodeId: dco_decode_String(raw[1]), + ); + case 3: + return InputType_Url( + url: dco_decode_String(raw[1]), + ); + case 4: + return InputType_LnUrlPay( + data: dco_decode_box_autoadd_ln_url_pay_request_data(raw[1]), + ); + case 5: + return InputType_LnUrlWithdraw( + data: dco_decode_box_autoadd_ln_url_withdraw_request_data(raw[1]), + ); + case 6: + return InputType_LnUrlAuth( + data: dco_decode_box_autoadd_ln_url_auth_request_data(raw[1]), + ); + case 7: + return InputType_LnUrlError( + data: dco_decode_box_autoadd_ln_url_error_data(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LiquidNetwork dco_decode_liquid_network(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return LiquidNetwork.values[raw as int]; + } + @protected LiquidSdkError dco_decode_liquid_sdk_error(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -897,6 +1200,280 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); } + @protected + LnUrlAuthError dco_decode_ln_url_auth_error(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlAuthError_Generic( + err: dco_decode_String(raw[1]), + ); + case 1: + return LnUrlAuthError_InvalidUri( + err: dco_decode_String(raw[1]), + ); + case 2: + return LnUrlAuthError_ServiceConnectivity( + err: dco_decode_String(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlAuthRequestData dco_decode_ln_url_auth_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 4) throw Exception('unexpected arr length: expect 4 but see ${arr.length}'); + return LnUrlAuthRequestData( + k1: dco_decode_String(arr[0]), + action: dco_decode_opt_String(arr[1]), + domain: dco_decode_String(arr[2]), + url: dco_decode_String(arr[3]), + ); + } + + @protected + LnUrlCallbackStatus dco_decode_ln_url_callback_status(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlCallbackStatus_Ok(); + case 1: + return LnUrlCallbackStatus_ErrorStatus( + data: dco_decode_box_autoadd_ln_url_error_data(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlErrorData dco_decode_ln_url_error_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 1) throw Exception('unexpected arr length: expect 1 but see ${arr.length}'); + return LnUrlErrorData( + reason: dco_decode_String(arr[0]), + ); + } + + @protected + LnUrlPayError dco_decode_ln_url_pay_error(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlPayError_AlreadyPaid(); + case 1: + return LnUrlPayError_Generic( + err: dco_decode_String(raw[1]), + ); + case 2: + return LnUrlPayError_InvalidAmount( + err: dco_decode_String(raw[1]), + ); + case 3: + return LnUrlPayError_InvalidInvoice( + err: dco_decode_String(raw[1]), + ); + case 4: + return LnUrlPayError_InvalidNetwork( + err: dco_decode_String(raw[1]), + ); + case 5: + return LnUrlPayError_InvalidUri( + err: dco_decode_String(raw[1]), + ); + case 6: + return LnUrlPayError_InvoiceExpired( + err: dco_decode_String(raw[1]), + ); + case 7: + return LnUrlPayError_PaymentFailed( + err: dco_decode_String(raw[1]), + ); + case 8: + return LnUrlPayError_PaymentTimeout( + err: dco_decode_String(raw[1]), + ); + case 9: + return LnUrlPayError_RouteNotFound( + err: dco_decode_String(raw[1]), + ); + case 10: + return LnUrlPayError_RouteTooExpensive( + err: dco_decode_String(raw[1]), + ); + case 11: + return LnUrlPayError_ServiceConnectivity( + err: dco_decode_String(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlPayErrorData dco_decode_ln_url_pay_error_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return LnUrlPayErrorData( + paymentHash: dco_decode_String(arr[0]), + reason: dco_decode_String(arr[1]), + ); + } + + @protected + LnUrlPayRequest dco_decode_ln_url_pay_request(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 4) throw Exception('unexpected arr length: expect 4 but see ${arr.length}'); + return LnUrlPayRequest( + data: dco_decode_ln_url_pay_request_data(arr[0]), + amountMsat: dco_decode_u_64(arr[1]), + comment: dco_decode_opt_String(arr[2]), + paymentLabel: dco_decode_opt_String(arr[3]), + ); + } + + @protected + LnUrlPayRequestData dco_decode_ln_url_pay_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 9) throw Exception('unexpected arr length: expect 9 but see ${arr.length}'); + return LnUrlPayRequestData( + callback: dco_decode_String(arr[0]), + minSendable: dco_decode_u_64(arr[1]), + maxSendable: dco_decode_u_64(arr[2]), + metadataStr: dco_decode_String(arr[3]), + commentAllowed: dco_decode_u_16(arr[4]), + domain: dco_decode_String(arr[5]), + allowsNostr: dco_decode_bool(arr[6]), + nostrPubkey: dco_decode_opt_String(arr[7]), + lnAddress: dco_decode_opt_String(arr[8]), + ); + } + + @protected + LnUrlPayResult dco_decode_ln_url_pay_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlPayResult_EndpointSuccess( + data: dco_decode_box_autoadd_ln_url_pay_success_data(raw[1]), + ); + case 1: + return LnUrlPayResult_EndpointError( + data: dco_decode_box_autoadd_ln_url_error_data(raw[1]), + ); + case 2: + return LnUrlPayResult_PayError( + data: dco_decode_box_autoadd_ln_url_pay_error_data(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlPaySuccessData dco_decode_ln_url_pay_success_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return LnUrlPaySuccessData( + payment: dco_decode_payment(arr[0]), + successAction: dco_decode_opt_box_autoadd_success_action_processed(arr[1]), + ); + } + + @protected + LnUrlWithdrawError dco_decode_ln_url_withdraw_error(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlWithdrawError_Generic( + err: dco_decode_String(raw[1]), + ); + case 1: + return LnUrlWithdrawError_InvalidAmount( + err: dco_decode_String(raw[1]), + ); + case 2: + return LnUrlWithdrawError_InvalidInvoice( + err: dco_decode_String(raw[1]), + ); + case 3: + return LnUrlWithdrawError_InvalidUri( + err: dco_decode_String(raw[1]), + ); + case 4: + return LnUrlWithdrawError_InvoiceNoRoutingHints( + err: dco_decode_String(raw[1]), + ); + case 5: + return LnUrlWithdrawError_ServiceConnectivity( + err: dco_decode_String(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlWithdrawRequest dco_decode_ln_url_withdraw_request(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 3) throw Exception('unexpected arr length: expect 3 but see ${arr.length}'); + return LnUrlWithdrawRequest( + data: dco_decode_ln_url_withdraw_request_data(arr[0]), + amountMsat: dco_decode_u_64(arr[1]), + description: dco_decode_opt_String(arr[2]), + ); + } + + @protected + LnUrlWithdrawRequestData dco_decode_ln_url_withdraw_request_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 5) throw Exception('unexpected arr length: expect 5 but see ${arr.length}'); + return LnUrlWithdrawRequestData( + callback: dco_decode_String(arr[0]), + k1: dco_decode_String(arr[1]), + defaultDescription: dco_decode_String(arr[2]), + minWithdrawable: dco_decode_u_64(arr[3]), + maxWithdrawable: dco_decode_u_64(arr[4]), + ); + } + + @protected + LnUrlWithdrawResult dco_decode_ln_url_withdraw_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return LnUrlWithdrawResult_Ok( + data: dco_decode_box_autoadd_ln_url_withdraw_success_data(raw[1]), + ); + case 1: + return LnUrlWithdrawResult_ErrorStatus( + data: dco_decode_box_autoadd_ln_url_error_data(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + LnUrlWithdrawSuccessData dco_decode_ln_url_withdraw_success_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 1) throw Exception('unexpected arr length: expect 1 but see ${arr.length}'); + return LnUrlWithdrawSuccessData( + invoice: dco_decode_ln_invoice(arr[0]), + ); + } + @protected LogEntry dco_decode_log_entry(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -908,6 +1485,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); } + @protected + MessageSuccessActionData dco_decode_message_success_action_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 1) throw Exception('unexpected arr length: expect 1 but see ${arr.length}'); + return MessageSuccessActionData( + message: dco_decode_String(arr[0]), + ); + } + @protected Network dco_decode_network(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -920,6 +1507,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw == null ? null : dco_decode_String(raw); } + @protected + SuccessActionProcessed? dco_decode_opt_box_autoadd_success_action_processed(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw == null ? null : dco_decode_box_autoadd_success_action_processed(raw); + } + @protected BigInt? dco_decode_opt_box_autoadd_u_64(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -1149,6 +1742,33 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); } + @protected + SuccessActionProcessed dco_decode_success_action_processed(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + switch (raw[0]) { + case 0: + return SuccessActionProcessed_Aes( + result: dco_decode_box_autoadd_aes_success_action_data_result(raw[1]), + ); + case 1: + return SuccessActionProcessed_Message( + data: dco_decode_box_autoadd_message_success_action_data(raw[1]), + ); + case 2: + return SuccessActionProcessed_Url( + data: dco_decode_box_autoadd_url_success_action_data(raw[1]), + ); + default: + throw Exception("unreachable"); + } + } + + @protected + int dco_decode_u_16(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as int; + } + @protected int dco_decode_u_32(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -1173,6 +1793,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return; } + @protected + UrlSuccessActionData dco_decode_url_success_action_data(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return UrlSuccessActionData( + description: dco_decode_String(arr[0]), + url: dco_decode_String(arr[1]), + ); + } + @protected BigInt dco_decode_usize(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -1231,6 +1862,31 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return utf8.decoder.convert(inner); } + @protected + AesSuccessActionDataDecrypted sse_decode_aes_success_action_data_decrypted(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_description = sse_decode_String(deserializer); + var var_plaintext = sse_decode_String(deserializer); + return AesSuccessActionDataDecrypted(description: var_description, plaintext: var_plaintext); + } + + @protected + AesSuccessActionDataResult sse_decode_aes_success_action_data_result(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_data = sse_decode_box_autoadd_aes_success_action_data_decrypted(deserializer); + return AesSuccessActionDataResult_Decrypted(data: var_data); + case 1: + var var_reason = sse_decode_String(deserializer); + return AesSuccessActionDataResult_ErrorStatus(reason: var_reason); + default: + throw UnimplementedError(''); + } + } + @protected BackupRequest sse_decode_backup_request(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1245,6 +1901,42 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return BindingEventListener(stream: var_stream); } + @protected + BitcoinAddressData sse_decode_bitcoin_address_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_address = sse_decode_String(deserializer); + var var_network = sse_decode_network(deserializer); + var var_amountSat = sse_decode_opt_box_autoadd_u_64(deserializer); + var var_label = sse_decode_opt_String(deserializer); + var var_message = sse_decode_opt_String(deserializer); + return BitcoinAddressData( + address: var_address, + network: var_network, + amountSat: var_amountSat, + label: var_label, + message: var_message); + } + + @protected + bool sse_decode_bool(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getUint8() != 0; + } + + @protected + AesSuccessActionDataDecrypted sse_decode_box_autoadd_aes_success_action_data_decrypted( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_aes_success_action_data_decrypted(deserializer)); + } + + @protected + AesSuccessActionDataResult sse_decode_box_autoadd_aes_success_action_data_result( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_aes_success_action_data_result(deserializer)); + } + @protected BackupRequest sse_decode_box_autoadd_backup_request(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1257,6 +1949,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (sse_decode_binding_event_listener(deserializer)); } + @protected + BitcoinAddressData sse_decode_box_autoadd_bitcoin_address_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_bitcoin_address_data(deserializer)); + } + @protected ConnectRequest sse_decode_box_autoadd_connect_request(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1269,6 +1967,72 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (sse_decode_liquid_sdk_event(deserializer)); } + @protected + LNInvoice sse_decode_box_autoadd_ln_invoice(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_invoice(deserializer)); + } + + @protected + LnUrlAuthRequestData sse_decode_box_autoadd_ln_url_auth_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_auth_request_data(deserializer)); + } + + @protected + LnUrlErrorData sse_decode_box_autoadd_ln_url_error_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_error_data(deserializer)); + } + + @protected + LnUrlPayErrorData sse_decode_box_autoadd_ln_url_pay_error_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_pay_error_data(deserializer)); + } + + @protected + LnUrlPayRequest sse_decode_box_autoadd_ln_url_pay_request(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_pay_request(deserializer)); + } + + @protected + LnUrlPayRequestData sse_decode_box_autoadd_ln_url_pay_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_pay_request_data(deserializer)); + } + + @protected + LnUrlPaySuccessData sse_decode_box_autoadd_ln_url_pay_success_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_pay_success_data(deserializer)); + } + + @protected + LnUrlWithdrawRequest sse_decode_box_autoadd_ln_url_withdraw_request(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_withdraw_request(deserializer)); + } + + @protected + LnUrlWithdrawRequestData sse_decode_box_autoadd_ln_url_withdraw_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_withdraw_request_data(deserializer)); + } + + @protected + LnUrlWithdrawSuccessData sse_decode_box_autoadd_ln_url_withdraw_success_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ln_url_withdraw_success_data(deserializer)); + } + + @protected + MessageSuccessActionData sse_decode_box_autoadd_message_success_action_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_message_success_action_data(deserializer)); + } + @protected PayOnchainRequest sse_decode_box_autoadd_pay_onchain_request(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1317,12 +2081,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (sse_decode_restore_request(deserializer)); } + @protected + SuccessActionProcessed sse_decode_box_autoadd_success_action_processed(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_success_action_processed(deserializer)); + } + @protected BigInt sse_decode_box_autoadd_u_64(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs return (sse_decode_u_64(deserializer)); } + @protected + UrlSuccessActionData sse_decode_box_autoadd_url_success_action_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_url_success_action_data(deserializer)); + } + @protected Config sse_decode_config(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1330,7 +2106,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { var var_liquidElectrumUrl = sse_decode_String(deserializer); var var_bitcoinElectrumUrl = sse_decode_String(deserializer); var var_workingDir = sse_decode_String(deserializer); - var var_network = sse_decode_network(deserializer); + var var_network = sse_decode_liquid_network(deserializer); var var_paymentTimeoutSec = sse_decode_u_64(deserializer); var var_zeroConfMinFeeRate = sse_decode_f_32(deserializer); var var_zeroConfMaxAmountSat = sse_decode_opt_box_autoadd_u_64(deserializer); @@ -1379,6 +2155,48 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getInt32(); } + @protected + InputType sse_decode_input_type(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_address = sse_decode_box_autoadd_bitcoin_address_data(deserializer); + return InputType_BitcoinAddress(address: var_address); + case 1: + var var_invoice = sse_decode_box_autoadd_ln_invoice(deserializer); + return InputType_Bolt11(invoice: var_invoice); + case 2: + var var_nodeId = sse_decode_String(deserializer); + return InputType_NodeId(nodeId: var_nodeId); + case 3: + var var_url = sse_decode_String(deserializer); + return InputType_Url(url: var_url); + case 4: + var var_data = sse_decode_box_autoadd_ln_url_pay_request_data(deserializer); + return InputType_LnUrlPay(data: var_data); + case 5: + var var_data = sse_decode_box_autoadd_ln_url_withdraw_request_data(deserializer); + return InputType_LnUrlWithdraw(data: var_data); + case 6: + var var_data = sse_decode_box_autoadd_ln_url_auth_request_data(deserializer); + return InputType_LnUrlAuth(data: var_data); + case 7: + var var_data = sse_decode_box_autoadd_ln_url_error_data(deserializer); + return InputType_LnUrlError(data: var_data); + default: + throw UnimplementedError(''); + } + } + + @protected + LiquidNetwork sse_decode_liquid_network(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_i_32(deserializer); + return LiquidNetwork.values[inner]; + } + @protected LiquidSdkError sse_decode_liquid_sdk_error(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1504,6 +2322,254 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { minFinalCltvExpiryDelta: var_minFinalCltvExpiryDelta); } + @protected + LnUrlAuthError sse_decode_ln_url_auth_error(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_err = sse_decode_String(deserializer); + return LnUrlAuthError_Generic(err: var_err); + case 1: + var var_err = sse_decode_String(deserializer); + return LnUrlAuthError_InvalidUri(err: var_err); + case 2: + var var_err = sse_decode_String(deserializer); + return LnUrlAuthError_ServiceConnectivity(err: var_err); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlAuthRequestData sse_decode_ln_url_auth_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_k1 = sse_decode_String(deserializer); + var var_action = sse_decode_opt_String(deserializer); + var var_domain = sse_decode_String(deserializer); + var var_url = sse_decode_String(deserializer); + return LnUrlAuthRequestData(k1: var_k1, action: var_action, domain: var_domain, url: var_url); + } + + @protected + LnUrlCallbackStatus sse_decode_ln_url_callback_status(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + return LnUrlCallbackStatus_Ok(); + case 1: + var var_data = sse_decode_box_autoadd_ln_url_error_data(deserializer); + return LnUrlCallbackStatus_ErrorStatus(data: var_data); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlErrorData sse_decode_ln_url_error_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_reason = sse_decode_String(deserializer); + return LnUrlErrorData(reason: var_reason); + } + + @protected + LnUrlPayError sse_decode_ln_url_pay_error(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + return LnUrlPayError_AlreadyPaid(); + case 1: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_Generic(err: var_err); + case 2: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_InvalidAmount(err: var_err); + case 3: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_InvalidInvoice(err: var_err); + case 4: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_InvalidNetwork(err: var_err); + case 5: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_InvalidUri(err: var_err); + case 6: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_InvoiceExpired(err: var_err); + case 7: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_PaymentFailed(err: var_err); + case 8: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_PaymentTimeout(err: var_err); + case 9: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_RouteNotFound(err: var_err); + case 10: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_RouteTooExpensive(err: var_err); + case 11: + var var_err = sse_decode_String(deserializer); + return LnUrlPayError_ServiceConnectivity(err: var_err); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlPayErrorData sse_decode_ln_url_pay_error_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_paymentHash = sse_decode_String(deserializer); + var var_reason = sse_decode_String(deserializer); + return LnUrlPayErrorData(paymentHash: var_paymentHash, reason: var_reason); + } + + @protected + LnUrlPayRequest sse_decode_ln_url_pay_request(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_data = sse_decode_ln_url_pay_request_data(deserializer); + var var_amountMsat = sse_decode_u_64(deserializer); + var var_comment = sse_decode_opt_String(deserializer); + var var_paymentLabel = sse_decode_opt_String(deserializer); + return LnUrlPayRequest( + data: var_data, amountMsat: var_amountMsat, comment: var_comment, paymentLabel: var_paymentLabel); + } + + @protected + LnUrlPayRequestData sse_decode_ln_url_pay_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_callback = sse_decode_String(deserializer); + var var_minSendable = sse_decode_u_64(deserializer); + var var_maxSendable = sse_decode_u_64(deserializer); + var var_metadataStr = sse_decode_String(deserializer); + var var_commentAllowed = sse_decode_u_16(deserializer); + var var_domain = sse_decode_String(deserializer); + var var_allowsNostr = sse_decode_bool(deserializer); + var var_nostrPubkey = sse_decode_opt_String(deserializer); + var var_lnAddress = sse_decode_opt_String(deserializer); + return LnUrlPayRequestData( + callback: var_callback, + minSendable: var_minSendable, + maxSendable: var_maxSendable, + metadataStr: var_metadataStr, + commentAllowed: var_commentAllowed, + domain: var_domain, + allowsNostr: var_allowsNostr, + nostrPubkey: var_nostrPubkey, + lnAddress: var_lnAddress); + } + + @protected + LnUrlPayResult sse_decode_ln_url_pay_result(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_data = sse_decode_box_autoadd_ln_url_pay_success_data(deserializer); + return LnUrlPayResult_EndpointSuccess(data: var_data); + case 1: + var var_data = sse_decode_box_autoadd_ln_url_error_data(deserializer); + return LnUrlPayResult_EndpointError(data: var_data); + case 2: + var var_data = sse_decode_box_autoadd_ln_url_pay_error_data(deserializer); + return LnUrlPayResult_PayError(data: var_data); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlPaySuccessData sse_decode_ln_url_pay_success_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_payment = sse_decode_payment(deserializer); + var var_successAction = sse_decode_opt_box_autoadd_success_action_processed(deserializer); + return LnUrlPaySuccessData(payment: var_payment, successAction: var_successAction); + } + + @protected + LnUrlWithdrawError sse_decode_ln_url_withdraw_error(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_Generic(err: var_err); + case 1: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_InvalidAmount(err: var_err); + case 2: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_InvalidInvoice(err: var_err); + case 3: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_InvalidUri(err: var_err); + case 4: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_InvoiceNoRoutingHints(err: var_err); + case 5: + var var_err = sse_decode_String(deserializer); + return LnUrlWithdrawError_ServiceConnectivity(err: var_err); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlWithdrawRequest sse_decode_ln_url_withdraw_request(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_data = sse_decode_ln_url_withdraw_request_data(deserializer); + var var_amountMsat = sse_decode_u_64(deserializer); + var var_description = sse_decode_opt_String(deserializer); + return LnUrlWithdrawRequest(data: var_data, amountMsat: var_amountMsat, description: var_description); + } + + @protected + LnUrlWithdrawRequestData sse_decode_ln_url_withdraw_request_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_callback = sse_decode_String(deserializer); + var var_k1 = sse_decode_String(deserializer); + var var_defaultDescription = sse_decode_String(deserializer); + var var_minWithdrawable = sse_decode_u_64(deserializer); + var var_maxWithdrawable = sse_decode_u_64(deserializer); + return LnUrlWithdrawRequestData( + callback: var_callback, + k1: var_k1, + defaultDescription: var_defaultDescription, + minWithdrawable: var_minWithdrawable, + maxWithdrawable: var_maxWithdrawable); + } + + @protected + LnUrlWithdrawResult sse_decode_ln_url_withdraw_result(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_data = sse_decode_box_autoadd_ln_url_withdraw_success_data(deserializer); + return LnUrlWithdrawResult_Ok(data: var_data); + case 1: + var var_data = sse_decode_box_autoadd_ln_url_error_data(deserializer); + return LnUrlWithdrawResult_ErrorStatus(data: var_data); + default: + throw UnimplementedError(''); + } + } + + @protected + LnUrlWithdrawSuccessData sse_decode_ln_url_withdraw_success_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_invoice = sse_decode_ln_invoice(deserializer); + return LnUrlWithdrawSuccessData(invoice: var_invoice); + } + @protected LogEntry sse_decode_log_entry(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1512,6 +2578,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return LogEntry(line: var_line, level: var_level); } + @protected + MessageSuccessActionData sse_decode_message_success_action_data(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_message = sse_decode_String(deserializer); + return MessageSuccessActionData(message: var_message); + } + @protected Network sse_decode_network(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1530,6 +2603,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } + @protected + SuccessActionProcessed? sse_decode_opt_box_autoadd_success_action_processed(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + if (sse_decode_bool(deserializer)) { + return (sse_decode_box_autoadd_success_action_processed(deserializer)); + } else { + return null; + } + } + @protected BigInt? sse_decode_opt_box_autoadd_u_64(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1740,6 +2824,32 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return SendPaymentResponse(payment: var_payment); } + @protected + SuccessActionProcessed sse_decode_success_action_processed(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var tag_ = sse_decode_i_32(deserializer); + switch (tag_) { + case 0: + var var_result = sse_decode_box_autoadd_aes_success_action_data_result(deserializer); + return SuccessActionProcessed_Aes(result: var_result); + case 1: + var var_data = sse_decode_box_autoadd_message_success_action_data(deserializer); + return SuccessActionProcessed_Message(data: var_data); + case 2: + var var_data = sse_decode_box_autoadd_url_success_action_data(deserializer); + return SuccessActionProcessed_Url(data: var_data); + default: + throw UnimplementedError(''); + } + } + + @protected + int sse_decode_u_16(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getUint16(); + } + @protected int sse_decode_u_32(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1764,15 +2874,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } @protected - BigInt sse_decode_usize(SseDeserializer deserializer) { + UrlSuccessActionData sse_decode_url_success_action_data(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getBigUint64(); + var var_description = sse_decode_String(deserializer); + var var_url = sse_decode_String(deserializer); + return UrlSuccessActionData(description: var_description, url: var_url); } @protected - bool sse_decode_bool(SseDeserializer deserializer) { + BigInt sse_decode_usize(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getUint8() != 0; + return deserializer.buffer.getBigUint64(); } @protected @@ -1799,6 +2911,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (raw as BindingLiquidSdkImpl).frbInternalCstEncode(); } + @protected + bool cst_encode_bool(bool raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return raw; + } + @protected double cst_encode_f_32(double raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -1811,6 +2929,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw; } + @protected + int cst_encode_liquid_network(LiquidNetwork raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return cst_encode_i_32(raw.index); + } + @protected int cst_encode_network(Network raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -1829,6 +2953,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return cst_encode_i_32(raw.index); } + @protected + int cst_encode_u_16(int raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return raw; + } + @protected int cst_encode_u_32(int raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -1899,6 +3029,29 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); } + @protected + void sse_encode_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.description, serializer); + sse_encode_String(self.plaintext, serializer); + } + + @protected + void sse_encode_aes_success_action_data_result(AesSuccessActionDataResult self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case AesSuccessActionDataResult_Decrypted(data: final data): + sse_encode_i_32(0, serializer); + sse_encode_box_autoadd_aes_success_action_data_decrypted(data, serializer); + case AesSuccessActionDataResult_ErrorStatus(reason: final reason): + sse_encode_i_32(1, serializer); + sse_encode_String(reason, serializer); + default: + throw UnimplementedError(''); + } + } + @protected void sse_encode_backup_request(BackupRequest self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1911,6 +3064,36 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_StreamSink_liquid_sdk_event_Dco(self.stream, serializer); } + @protected + void sse_encode_bitcoin_address_data(BitcoinAddressData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.address, serializer); + sse_encode_network(self.network, serializer); + sse_encode_opt_box_autoadd_u_64(self.amountSat, serializer); + sse_encode_opt_String(self.label, serializer); + sse_encode_opt_String(self.message, serializer); + } + + @protected + void sse_encode_bool(bool self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putUint8(self ? 1 : 0); + } + + @protected + void sse_encode_box_autoadd_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_aes_success_action_data_decrypted(self, serializer); + } + + @protected + void sse_encode_box_autoadd_aes_success_action_data_result( + AesSuccessActionDataResult self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_aes_success_action_data_result(self, serializer); + } + @protected void sse_encode_box_autoadd_backup_request(BackupRequest self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1923,6 +3106,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_binding_event_listener(self, serializer); } + @protected + void sse_encode_box_autoadd_bitcoin_address_data(BitcoinAddressData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_bitcoin_address_data(self, serializer); + } + @protected void sse_encode_box_autoadd_connect_request(ConnectRequest self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1935,6 +3124,75 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_liquid_sdk_event(self, serializer); } + @protected + void sse_encode_box_autoadd_ln_invoice(LNInvoice self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_invoice(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_auth_request_data(LnUrlAuthRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_auth_request_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_error_data(LnUrlErrorData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_error_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_pay_error_data(LnUrlPayErrorData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_pay_error_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_pay_request(LnUrlPayRequest self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_pay_request(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_pay_request_data(LnUrlPayRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_pay_request_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_pay_success_data(LnUrlPaySuccessData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_pay_success_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_request(LnUrlWithdrawRequest self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_withdraw_request(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_request_data( + LnUrlWithdrawRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_withdraw_request_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_success_data( + LnUrlWithdrawSuccessData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_withdraw_success_data(self, serializer); + } + + @protected + void sse_encode_box_autoadd_message_success_action_data( + MessageSuccessActionData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_message_success_action_data(self, serializer); + } + @protected void sse_encode_box_autoadd_pay_onchain_request(PayOnchainRequest self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1985,12 +3243,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_restore_request(self, serializer); } + @protected + void sse_encode_box_autoadd_success_action_processed( + SuccessActionProcessed self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_success_action_processed(self, serializer); + } + @protected void sse_encode_box_autoadd_u_64(BigInt self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs sse_encode_u_64(self, serializer); } + @protected + void sse_encode_box_autoadd_url_success_action_data(UrlSuccessActionData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_url_success_action_data(self, serializer); + } + @protected void sse_encode_config(Config self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -1998,7 +3269,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_String(self.liquidElectrumUrl, serializer); sse_encode_String(self.bitcoinElectrumUrl, serializer); sse_encode_String(self.workingDir, serializer); - sse_encode_network(self.network, serializer); + sse_encode_liquid_network(self.network, serializer); sse_encode_u_64(self.paymentTimeoutSec, serializer); sse_encode_f_32(self.zeroConfMinFeeRate, serializer); sse_encode_opt_box_autoadd_u_64(self.zeroConfMaxAmountSat, serializer); @@ -2032,6 +3303,45 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putInt32(self); } + @protected + void sse_encode_input_type(InputType self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case InputType_BitcoinAddress(address: final address): + sse_encode_i_32(0, serializer); + sse_encode_box_autoadd_bitcoin_address_data(address, serializer); + case InputType_Bolt11(invoice: final invoice): + sse_encode_i_32(1, serializer); + sse_encode_box_autoadd_ln_invoice(invoice, serializer); + case InputType_NodeId(nodeId: final nodeId): + sse_encode_i_32(2, serializer); + sse_encode_String(nodeId, serializer); + case InputType_Url(url: final url): + sse_encode_i_32(3, serializer); + sse_encode_String(url, serializer); + case InputType_LnUrlPay(data: final data): + sse_encode_i_32(4, serializer); + sse_encode_box_autoadd_ln_url_pay_request_data(data, serializer); + case InputType_LnUrlWithdraw(data: final data): + sse_encode_i_32(5, serializer); + sse_encode_box_autoadd_ln_url_withdraw_request_data(data, serializer); + case InputType_LnUrlAuth(data: final data): + sse_encode_i_32(6, serializer); + sse_encode_box_autoadd_ln_url_auth_request_data(data, serializer); + case InputType_LnUrlError(data: final data): + sse_encode_i_32(7, serializer); + sse_encode_box_autoadd_ln_url_error_data(data, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_liquid_network(LiquidNetwork self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.index, serializer); + } + @protected void sse_encode_liquid_sdk_error(LiquidSdkError self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2131,6 +3441,218 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_u_64(self.minFinalCltvExpiryDelta, serializer); } + @protected + void sse_encode_ln_url_auth_error(LnUrlAuthError self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlAuthError_Generic(err: final err): + sse_encode_i_32(0, serializer); + sse_encode_String(err, serializer); + case LnUrlAuthError_InvalidUri(err: final err): + sse_encode_i_32(1, serializer); + sse_encode_String(err, serializer); + case LnUrlAuthError_ServiceConnectivity(err: final err): + sse_encode_i_32(2, serializer); + sse_encode_String(err, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_auth_request_data(LnUrlAuthRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.k1, serializer); + sse_encode_opt_String(self.action, serializer); + sse_encode_String(self.domain, serializer); + sse_encode_String(self.url, serializer); + } + + @protected + void sse_encode_ln_url_callback_status(LnUrlCallbackStatus self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlCallbackStatus_Ok(): + sse_encode_i_32(0, serializer); + case LnUrlCallbackStatus_ErrorStatus(data: final data): + sse_encode_i_32(1, serializer); + sse_encode_box_autoadd_ln_url_error_data(data, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_error_data(LnUrlErrorData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.reason, serializer); + } + + @protected + void sse_encode_ln_url_pay_error(LnUrlPayError self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlPayError_AlreadyPaid(): + sse_encode_i_32(0, serializer); + case LnUrlPayError_Generic(err: final err): + sse_encode_i_32(1, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_InvalidAmount(err: final err): + sse_encode_i_32(2, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_InvalidInvoice(err: final err): + sse_encode_i_32(3, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_InvalidNetwork(err: final err): + sse_encode_i_32(4, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_InvalidUri(err: final err): + sse_encode_i_32(5, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_InvoiceExpired(err: final err): + sse_encode_i_32(6, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_PaymentFailed(err: final err): + sse_encode_i_32(7, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_PaymentTimeout(err: final err): + sse_encode_i_32(8, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_RouteNotFound(err: final err): + sse_encode_i_32(9, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_RouteTooExpensive(err: final err): + sse_encode_i_32(10, serializer); + sse_encode_String(err, serializer); + case LnUrlPayError_ServiceConnectivity(err: final err): + sse_encode_i_32(11, serializer); + sse_encode_String(err, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_pay_error_data(LnUrlPayErrorData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.paymentHash, serializer); + sse_encode_String(self.reason, serializer); + } + + @protected + void sse_encode_ln_url_pay_request(LnUrlPayRequest self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_pay_request_data(self.data, serializer); + sse_encode_u_64(self.amountMsat, serializer); + sse_encode_opt_String(self.comment, serializer); + sse_encode_opt_String(self.paymentLabel, serializer); + } + + @protected + void sse_encode_ln_url_pay_request_data(LnUrlPayRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.callback, serializer); + sse_encode_u_64(self.minSendable, serializer); + sse_encode_u_64(self.maxSendable, serializer); + sse_encode_String(self.metadataStr, serializer); + sse_encode_u_16(self.commentAllowed, serializer); + sse_encode_String(self.domain, serializer); + sse_encode_bool(self.allowsNostr, serializer); + sse_encode_opt_String(self.nostrPubkey, serializer); + sse_encode_opt_String(self.lnAddress, serializer); + } + + @protected + void sse_encode_ln_url_pay_result(LnUrlPayResult self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlPayResult_EndpointSuccess(data: final data): + sse_encode_i_32(0, serializer); + sse_encode_box_autoadd_ln_url_pay_success_data(data, serializer); + case LnUrlPayResult_EndpointError(data: final data): + sse_encode_i_32(1, serializer); + sse_encode_box_autoadd_ln_url_error_data(data, serializer); + case LnUrlPayResult_PayError(data: final data): + sse_encode_i_32(2, serializer); + sse_encode_box_autoadd_ln_url_pay_error_data(data, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_pay_success_data(LnUrlPaySuccessData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_payment(self.payment, serializer); + sse_encode_opt_box_autoadd_success_action_processed(self.successAction, serializer); + } + + @protected + void sse_encode_ln_url_withdraw_error(LnUrlWithdrawError self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlWithdrawError_Generic(err: final err): + sse_encode_i_32(0, serializer); + sse_encode_String(err, serializer); + case LnUrlWithdrawError_InvalidAmount(err: final err): + sse_encode_i_32(1, serializer); + sse_encode_String(err, serializer); + case LnUrlWithdrawError_InvalidInvoice(err: final err): + sse_encode_i_32(2, serializer); + sse_encode_String(err, serializer); + case LnUrlWithdrawError_InvalidUri(err: final err): + sse_encode_i_32(3, serializer); + sse_encode_String(err, serializer); + case LnUrlWithdrawError_InvoiceNoRoutingHints(err: final err): + sse_encode_i_32(4, serializer); + sse_encode_String(err, serializer); + case LnUrlWithdrawError_ServiceConnectivity(err: final err): + sse_encode_i_32(5, serializer); + sse_encode_String(err, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_withdraw_request(LnUrlWithdrawRequest self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_url_withdraw_request_data(self.data, serializer); + sse_encode_u_64(self.amountMsat, serializer); + sse_encode_opt_String(self.description, serializer); + } + + @protected + void sse_encode_ln_url_withdraw_request_data(LnUrlWithdrawRequestData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.callback, serializer); + sse_encode_String(self.k1, serializer); + sse_encode_String(self.defaultDescription, serializer); + sse_encode_u_64(self.minWithdrawable, serializer); + sse_encode_u_64(self.maxWithdrawable, serializer); + } + + @protected + void sse_encode_ln_url_withdraw_result(LnUrlWithdrawResult self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case LnUrlWithdrawResult_Ok(data: final data): + sse_encode_i_32(0, serializer); + sse_encode_box_autoadd_ln_url_withdraw_success_data(data, serializer); + case LnUrlWithdrawResult_ErrorStatus(data: final data): + sse_encode_i_32(1, serializer); + sse_encode_box_autoadd_ln_url_error_data(data, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_ln_url_withdraw_success_data(LnUrlWithdrawSuccessData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ln_invoice(self.invoice, serializer); + } + @protected void sse_encode_log_entry(LogEntry self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2138,6 +3660,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_String(self.level, serializer); } + @protected + void sse_encode_message_success_action_data(MessageSuccessActionData self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.message, serializer); + } + @protected void sse_encode_network(Network self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2154,6 +3682,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } + @protected + void sse_encode_opt_box_autoadd_success_action_processed( + SuccessActionProcessed? self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + sse_encode_bool(self != null, serializer); + if (self != null) { + sse_encode_box_autoadd_success_action_processed(self, serializer); + } + } + @protected void sse_encode_opt_box_autoadd_u_64(BigInt? self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2328,6 +3867,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_payment(self.payment, serializer); } + @protected + void sse_encode_success_action_processed(SuccessActionProcessed self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + switch (self) { + case SuccessActionProcessed_Aes(result: final result): + sse_encode_i_32(0, serializer); + sse_encode_box_autoadd_aes_success_action_data_result(result, serializer); + case SuccessActionProcessed_Message(data: final data): + sse_encode_i_32(1, serializer); + sse_encode_box_autoadd_message_success_action_data(data, serializer); + case SuccessActionProcessed_Url(data: final data): + sse_encode_i_32(2, serializer); + sse_encode_box_autoadd_url_success_action_data(data, serializer); + default: + throw UnimplementedError(''); + } + } + + @protected + void sse_encode_u_16(int self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putUint16(self); + } + @protected void sse_encode_u_32(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -2352,15 +3915,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } @protected - void sse_encode_usize(BigInt self, SseSerializer serializer) { + void sse_encode_url_success_action_data(UrlSuccessActionData self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putBigUint64(self); + sse_encode_String(self.description, serializer); + sse_encode_String(self.url, serializer); } @protected - void sse_encode_bool(bool self, SseSerializer serializer) { + void sse_encode_usize(BigInt self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putUint8(self ? 1 : 0); + serializer.buffer.putBigUint64(self); } } @@ -2404,6 +3968,15 @@ class BindingLiquidSdkImpl extends RustOpaque implements BindingLiquidSdk { that: this, ); + Future lnurlAuth({required LnUrlAuthRequestData reqData}) => + RustLib.instance.api.crateBindingsBindingLiquidSdkLnurlAuth(that: this, reqData: reqData); + + Future lnurlPay({required LnUrlPayRequest req}) => + RustLib.instance.api.crateBindingsBindingLiquidSdkLnurlPay(that: this, req: req); + + Future lnurlWithdraw({required LnUrlWithdrawRequest req}) => + RustLib.instance.api.crateBindingsBindingLiquidSdkLnurlWithdraw(that: this, req: req); + Future payOnchain({required PayOnchainRequest req}) => RustLib.instance.api.crateBindingsBindingLiquidSdkPayOnchain(that: this, req: req); diff --git a/packages/dart/lib/src/frb_generated.io.dart b/packages/dart/lib/src/frb_generated.io.dart index 9ce1f78..f63118e 100644 --- a/packages/dart/lib/src/frb_generated.io.dart +++ b/packages/dart/lib/src/frb_generated.io.dart @@ -4,6 +4,7 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field import 'bindings.dart'; +import 'bindings/duplicates.dart'; import 'dart:async'; import 'dart:convert'; import 'dart:ffi' as ffi; @@ -49,24 +50,78 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String dco_decode_String(dynamic raw); + @protected + AesSuccessActionDataDecrypted dco_decode_aes_success_action_data_decrypted(dynamic raw); + + @protected + AesSuccessActionDataResult dco_decode_aes_success_action_data_result(dynamic raw); + @protected BackupRequest dco_decode_backup_request(dynamic raw); @protected BindingEventListener dco_decode_binding_event_listener(dynamic raw); + @protected + BitcoinAddressData dco_decode_bitcoin_address_data(dynamic raw); + + @protected + bool dco_decode_bool(dynamic raw); + + @protected + AesSuccessActionDataDecrypted dco_decode_box_autoadd_aes_success_action_data_decrypted(dynamic raw); + + @protected + AesSuccessActionDataResult dco_decode_box_autoadd_aes_success_action_data_result(dynamic raw); + @protected BackupRequest dco_decode_box_autoadd_backup_request(dynamic raw); @protected BindingEventListener dco_decode_box_autoadd_binding_event_listener(dynamic raw); + @protected + BitcoinAddressData dco_decode_box_autoadd_bitcoin_address_data(dynamic raw); + @protected ConnectRequest dco_decode_box_autoadd_connect_request(dynamic raw); @protected LiquidSdkEvent dco_decode_box_autoadd_liquid_sdk_event(dynamic raw); + @protected + LNInvoice dco_decode_box_autoadd_ln_invoice(dynamic raw); + + @protected + LnUrlAuthRequestData dco_decode_box_autoadd_ln_url_auth_request_data(dynamic raw); + + @protected + LnUrlErrorData dco_decode_box_autoadd_ln_url_error_data(dynamic raw); + + @protected + LnUrlPayErrorData dco_decode_box_autoadd_ln_url_pay_error_data(dynamic raw); + + @protected + LnUrlPayRequest dco_decode_box_autoadd_ln_url_pay_request(dynamic raw); + + @protected + LnUrlPayRequestData dco_decode_box_autoadd_ln_url_pay_request_data(dynamic raw); + + @protected + LnUrlPaySuccessData dco_decode_box_autoadd_ln_url_pay_success_data(dynamic raw); + + @protected + LnUrlWithdrawRequest dco_decode_box_autoadd_ln_url_withdraw_request(dynamic raw); + + @protected + LnUrlWithdrawRequestData dco_decode_box_autoadd_ln_url_withdraw_request_data(dynamic raw); + + @protected + LnUrlWithdrawSuccessData dco_decode_box_autoadd_ln_url_withdraw_success_data(dynamic raw); + + @protected + MessageSuccessActionData dco_decode_box_autoadd_message_success_action_data(dynamic raw); + @protected PayOnchainRequest dco_decode_box_autoadd_pay_onchain_request(dynamic raw); @@ -91,9 +146,15 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected RestoreRequest dco_decode_box_autoadd_restore_request(dynamic raw); + @protected + SuccessActionProcessed dco_decode_box_autoadd_success_action_processed(dynamic raw); + @protected BigInt dco_decode_box_autoadd_u_64(dynamic raw); + @protected + UrlSuccessActionData dco_decode_box_autoadd_url_success_action_data(dynamic raw); + @protected Config dco_decode_config(dynamic raw); @@ -109,6 +170,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int dco_decode_i_32(dynamic raw); + @protected + InputType dco_decode_input_type(dynamic raw); + + @protected + LiquidNetwork dco_decode_liquid_network(dynamic raw); + @protected LiquidSdkError dco_decode_liquid_sdk_error(dynamic raw); @@ -130,15 +197,66 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected LNInvoice dco_decode_ln_invoice(dynamic raw); + @protected + LnUrlAuthError dco_decode_ln_url_auth_error(dynamic raw); + + @protected + LnUrlAuthRequestData dco_decode_ln_url_auth_request_data(dynamic raw); + + @protected + LnUrlCallbackStatus dco_decode_ln_url_callback_status(dynamic raw); + + @protected + LnUrlErrorData dco_decode_ln_url_error_data(dynamic raw); + + @protected + LnUrlPayError dco_decode_ln_url_pay_error(dynamic raw); + + @protected + LnUrlPayErrorData dco_decode_ln_url_pay_error_data(dynamic raw); + + @protected + LnUrlPayRequest dco_decode_ln_url_pay_request(dynamic raw); + + @protected + LnUrlPayRequestData dco_decode_ln_url_pay_request_data(dynamic raw); + + @protected + LnUrlPayResult dco_decode_ln_url_pay_result(dynamic raw); + + @protected + LnUrlPaySuccessData dco_decode_ln_url_pay_success_data(dynamic raw); + + @protected + LnUrlWithdrawError dco_decode_ln_url_withdraw_error(dynamic raw); + + @protected + LnUrlWithdrawRequest dco_decode_ln_url_withdraw_request(dynamic raw); + + @protected + LnUrlWithdrawRequestData dco_decode_ln_url_withdraw_request_data(dynamic raw); + + @protected + LnUrlWithdrawResult dco_decode_ln_url_withdraw_result(dynamic raw); + + @protected + LnUrlWithdrawSuccessData dco_decode_ln_url_withdraw_success_data(dynamic raw); + @protected LogEntry dco_decode_log_entry(dynamic raw); + @protected + MessageSuccessActionData dco_decode_message_success_action_data(dynamic raw); + @protected Network dco_decode_network(dynamic raw); @protected String? dco_decode_opt_String(dynamic raw); + @protected + SuccessActionProcessed? dco_decode_opt_box_autoadd_success_action_processed(dynamic raw); + @protected BigInt? dco_decode_opt_box_autoadd_u_64(dynamic raw); @@ -190,6 +308,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected SendPaymentResponse dco_decode_send_payment_response(dynamic raw); + @protected + SuccessActionProcessed dco_decode_success_action_processed(dynamic raw); + + @protected + int dco_decode_u_16(dynamic raw); + @protected int dco_decode_u_32(dynamic raw); @@ -202,6 +326,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void dco_decode_unit(dynamic raw); + @protected + UrlSuccessActionData dco_decode_url_success_action_data(dynamic raw); + @protected BigInt dco_decode_usize(dynamic raw); @@ -231,24 +358,80 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String sse_decode_String(SseDeserializer deserializer); + @protected + AesSuccessActionDataDecrypted sse_decode_aes_success_action_data_decrypted(SseDeserializer deserializer); + + @protected + AesSuccessActionDataResult sse_decode_aes_success_action_data_result(SseDeserializer deserializer); + @protected BackupRequest sse_decode_backup_request(SseDeserializer deserializer); @protected BindingEventListener sse_decode_binding_event_listener(SseDeserializer deserializer); + @protected + BitcoinAddressData sse_decode_bitcoin_address_data(SseDeserializer deserializer); + + @protected + bool sse_decode_bool(SseDeserializer deserializer); + + @protected + AesSuccessActionDataDecrypted sse_decode_box_autoadd_aes_success_action_data_decrypted( + SseDeserializer deserializer); + + @protected + AesSuccessActionDataResult sse_decode_box_autoadd_aes_success_action_data_result( + SseDeserializer deserializer); + @protected BackupRequest sse_decode_box_autoadd_backup_request(SseDeserializer deserializer); @protected BindingEventListener sse_decode_box_autoadd_binding_event_listener(SseDeserializer deserializer); + @protected + BitcoinAddressData sse_decode_box_autoadd_bitcoin_address_data(SseDeserializer deserializer); + @protected ConnectRequest sse_decode_box_autoadd_connect_request(SseDeserializer deserializer); @protected LiquidSdkEvent sse_decode_box_autoadd_liquid_sdk_event(SseDeserializer deserializer); + @protected + LNInvoice sse_decode_box_autoadd_ln_invoice(SseDeserializer deserializer); + + @protected + LnUrlAuthRequestData sse_decode_box_autoadd_ln_url_auth_request_data(SseDeserializer deserializer); + + @protected + LnUrlErrorData sse_decode_box_autoadd_ln_url_error_data(SseDeserializer deserializer); + + @protected + LnUrlPayErrorData sse_decode_box_autoadd_ln_url_pay_error_data(SseDeserializer deserializer); + + @protected + LnUrlPayRequest sse_decode_box_autoadd_ln_url_pay_request(SseDeserializer deserializer); + + @protected + LnUrlPayRequestData sse_decode_box_autoadd_ln_url_pay_request_data(SseDeserializer deserializer); + + @protected + LnUrlPaySuccessData sse_decode_box_autoadd_ln_url_pay_success_data(SseDeserializer deserializer); + + @protected + LnUrlWithdrawRequest sse_decode_box_autoadd_ln_url_withdraw_request(SseDeserializer deserializer); + + @protected + LnUrlWithdrawRequestData sse_decode_box_autoadd_ln_url_withdraw_request_data(SseDeserializer deserializer); + + @protected + LnUrlWithdrawSuccessData sse_decode_box_autoadd_ln_url_withdraw_success_data(SseDeserializer deserializer); + + @protected + MessageSuccessActionData sse_decode_box_autoadd_message_success_action_data(SseDeserializer deserializer); + @protected PayOnchainRequest sse_decode_box_autoadd_pay_onchain_request(SseDeserializer deserializer); @@ -273,9 +456,15 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected RestoreRequest sse_decode_box_autoadd_restore_request(SseDeserializer deserializer); + @protected + SuccessActionProcessed sse_decode_box_autoadd_success_action_processed(SseDeserializer deserializer); + @protected BigInt sse_decode_box_autoadd_u_64(SseDeserializer deserializer); + @protected + UrlSuccessActionData sse_decode_box_autoadd_url_success_action_data(SseDeserializer deserializer); + @protected Config sse_decode_config(SseDeserializer deserializer); @@ -291,6 +480,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int sse_decode_i_32(SseDeserializer deserializer); + @protected + InputType sse_decode_input_type(SseDeserializer deserializer); + + @protected + LiquidNetwork sse_decode_liquid_network(SseDeserializer deserializer); + @protected LiquidSdkError sse_decode_liquid_sdk_error(SseDeserializer deserializer); @@ -312,15 +507,66 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected LNInvoice sse_decode_ln_invoice(SseDeserializer deserializer); + @protected + LnUrlAuthError sse_decode_ln_url_auth_error(SseDeserializer deserializer); + + @protected + LnUrlAuthRequestData sse_decode_ln_url_auth_request_data(SseDeserializer deserializer); + + @protected + LnUrlCallbackStatus sse_decode_ln_url_callback_status(SseDeserializer deserializer); + + @protected + LnUrlErrorData sse_decode_ln_url_error_data(SseDeserializer deserializer); + + @protected + LnUrlPayError sse_decode_ln_url_pay_error(SseDeserializer deserializer); + + @protected + LnUrlPayErrorData sse_decode_ln_url_pay_error_data(SseDeserializer deserializer); + + @protected + LnUrlPayRequest sse_decode_ln_url_pay_request(SseDeserializer deserializer); + + @protected + LnUrlPayRequestData sse_decode_ln_url_pay_request_data(SseDeserializer deserializer); + + @protected + LnUrlPayResult sse_decode_ln_url_pay_result(SseDeserializer deserializer); + + @protected + LnUrlPaySuccessData sse_decode_ln_url_pay_success_data(SseDeserializer deserializer); + + @protected + LnUrlWithdrawError sse_decode_ln_url_withdraw_error(SseDeserializer deserializer); + + @protected + LnUrlWithdrawRequest sse_decode_ln_url_withdraw_request(SseDeserializer deserializer); + + @protected + LnUrlWithdrawRequestData sse_decode_ln_url_withdraw_request_data(SseDeserializer deserializer); + + @protected + LnUrlWithdrawResult sse_decode_ln_url_withdraw_result(SseDeserializer deserializer); + + @protected + LnUrlWithdrawSuccessData sse_decode_ln_url_withdraw_success_data(SseDeserializer deserializer); + @protected LogEntry sse_decode_log_entry(SseDeserializer deserializer); + @protected + MessageSuccessActionData sse_decode_message_success_action_data(SseDeserializer deserializer); + @protected Network sse_decode_network(SseDeserializer deserializer); @protected String? sse_decode_opt_String(SseDeserializer deserializer); + @protected + SuccessActionProcessed? sse_decode_opt_box_autoadd_success_action_processed(SseDeserializer deserializer); + @protected BigInt? sse_decode_opt_box_autoadd_u_64(SseDeserializer deserializer); @@ -372,6 +618,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected SendPaymentResponse sse_decode_send_payment_response(SseDeserializer deserializer); + @protected + SuccessActionProcessed sse_decode_success_action_processed(SseDeserializer deserializer); + + @protected + int sse_decode_u_16(SseDeserializer deserializer); + @protected int sse_decode_u_32(SseDeserializer deserializer); @@ -385,10 +637,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_decode_unit(SseDeserializer deserializer); @protected - BigInt sse_decode_usize(SseDeserializer deserializer); + UrlSuccessActionData sse_decode_url_success_action_data(SseDeserializer deserializer); @protected - bool sse_decode_bool(SseDeserializer deserializer); + BigInt sse_decode_usize(SseDeserializer deserializer); @protected ffi.Pointer cst_encode_AnyhowException(AnyhowException raw) { @@ -418,6 +670,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return cst_encode_list_prim_u_8_strict(utf8.encoder.convert(raw)); } + @protected + ffi.Pointer + cst_encode_box_autoadd_aes_success_action_data_decrypted(AesSuccessActionDataDecrypted raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_aes_success_action_data_decrypted(); + cst_api_fill_to_wire_aes_success_action_data_decrypted(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_aes_success_action_data_result( + AesSuccessActionDataResult raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_aes_success_action_data_result(); + cst_api_fill_to_wire_aes_success_action_data_result(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_box_autoadd_backup_request(BackupRequest raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -435,6 +705,15 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return ptr; } + @protected + ffi.Pointer cst_encode_box_autoadd_bitcoin_address_data( + BitcoinAddressData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_bitcoin_address_data(); + cst_api_fill_to_wire_bitcoin_address_data(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_box_autoadd_connect_request(ConnectRequest raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -451,6 +730,102 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return ptr; } + @protected + ffi.Pointer cst_encode_box_autoadd_ln_invoice(LNInvoice raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_invoice(); + cst_api_fill_to_wire_ln_invoice(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_auth_request_data( + LnUrlAuthRequestData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_auth_request_data(); + cst_api_fill_to_wire_ln_url_auth_request_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_error_data(LnUrlErrorData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_error_data(); + cst_api_fill_to_wire_ln_url_error_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_pay_error_data( + LnUrlPayErrorData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_pay_error_data(); + cst_api_fill_to_wire_ln_url_pay_error_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_pay_request(LnUrlPayRequest raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_pay_request(); + cst_api_fill_to_wire_ln_url_pay_request(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_pay_request_data( + LnUrlPayRequestData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_pay_request_data(); + cst_api_fill_to_wire_ln_url_pay_request_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_pay_success_data( + LnUrlPaySuccessData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_pay_success_data(); + cst_api_fill_to_wire_ln_url_pay_success_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_withdraw_request( + LnUrlWithdrawRequest raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_withdraw_request(); + cst_api_fill_to_wire_ln_url_withdraw_request(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_withdraw_request_data( + LnUrlWithdrawRequestData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_withdraw_request_data(); + cst_api_fill_to_wire_ln_url_withdraw_request_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_ln_url_withdraw_success_data( + LnUrlWithdrawSuccessData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ln_url_withdraw_success_data(); + cst_api_fill_to_wire_ln_url_withdraw_success_data(raw, ptr.ref); + return ptr; + } + + @protected + ffi.Pointer cst_encode_box_autoadd_message_success_action_data( + MessageSuccessActionData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_message_success_action_data(); + cst_api_fill_to_wire_message_success_action_data(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_box_autoadd_pay_onchain_request( PayOnchainRequest raw) { @@ -521,12 +896,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return ptr; } + @protected + ffi.Pointer cst_encode_box_autoadd_success_action_processed( + SuccessActionProcessed raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_success_action_processed(); + cst_api_fill_to_wire_success_action_processed(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_box_autoadd_u_64(BigInt raw) { // Codec=Cst (C-struct based), see doc to use other codecs return wire.cst_new_box_autoadd_u_64(cst_encode_u_64(raw)); } + @protected + ffi.Pointer cst_encode_box_autoadd_url_success_action_data( + UrlSuccessActionData raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_url_success_action_data(); + cst_api_fill_to_wire_url_success_action_data(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_list_payment(List raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -571,6 +964,13 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return raw == null ? ffi.nullptr : cst_encode_String(raw); } + @protected + ffi.Pointer cst_encode_opt_box_autoadd_success_action_processed( + SuccessActionProcessed? raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return raw == null ? ffi.nullptr : cst_encode_box_autoadd_success_action_processed(raw); + } + @protected ffi.Pointer cst_encode_opt_box_autoadd_u_64(BigInt? raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -589,6 +989,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { return raw.toSigned(64).toInt(); } + @protected + void cst_api_fill_to_wire_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted apiObj, wire_cst_aes_success_action_data_decrypted wireObj) { + wireObj.description = cst_encode_String(apiObj.description); + wireObj.plaintext = cst_encode_String(apiObj.plaintext); + } + + @protected + void cst_api_fill_to_wire_aes_success_action_data_result( + AesSuccessActionDataResult apiObj, wire_cst_aes_success_action_data_result wireObj) { + if (apiObj is AesSuccessActionDataResult_Decrypted) { + var pre_data = cst_encode_box_autoadd_aes_success_action_data_decrypted(apiObj.data); + wireObj.tag = 0; + wireObj.kind.Decrypted.data = pre_data; + return; + } + if (apiObj is AesSuccessActionDataResult_ErrorStatus) { + var pre_reason = cst_encode_String(apiObj.reason); + wireObj.tag = 1; + wireObj.kind.ErrorStatus.reason = pre_reason; + return; + } + } + @protected void cst_api_fill_to_wire_backup_request(BackupRequest apiObj, wire_cst_backup_request wireObj) { wireObj.backup_path = cst_encode_opt_String(apiObj.backupPath); @@ -600,6 +1024,28 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { wireObj.stream = cst_encode_StreamSink_liquid_sdk_event_Dco(apiObj.stream); } + @protected + void cst_api_fill_to_wire_bitcoin_address_data( + BitcoinAddressData apiObj, wire_cst_bitcoin_address_data wireObj) { + wireObj.address = cst_encode_String(apiObj.address); + wireObj.network = cst_encode_network(apiObj.network); + wireObj.amount_sat = cst_encode_opt_box_autoadd_u_64(apiObj.amountSat); + wireObj.label = cst_encode_opt_String(apiObj.label); + wireObj.message = cst_encode_opt_String(apiObj.message); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_aes_success_action_data_decrypted(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_aes_success_action_data_result( + AesSuccessActionDataResult apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_aes_success_action_data_result(apiObj, wireObj.ref); + } + @protected void cst_api_fill_to_wire_box_autoadd_backup_request( BackupRequest apiObj, ffi.Pointer wireObj) { @@ -612,6 +1058,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { cst_api_fill_to_wire_binding_event_listener(apiObj, wireObj.ref); } + @protected + void cst_api_fill_to_wire_box_autoadd_bitcoin_address_data( + BitcoinAddressData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_bitcoin_address_data(apiObj, wireObj.ref); + } + @protected void cst_api_fill_to_wire_box_autoadd_connect_request( ConnectRequest apiObj, ffi.Pointer wireObj) { @@ -624,6 +1076,72 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { cst_api_fill_to_wire_liquid_sdk_event(apiObj, wireObj.ref); } + @protected + void cst_api_fill_to_wire_box_autoadd_ln_invoice( + LNInvoice apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_invoice(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_auth_request_data( + LnUrlAuthRequestData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_auth_request_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_error_data( + LnUrlErrorData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_error_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_pay_error_data( + LnUrlPayErrorData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_pay_error_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_pay_request( + LnUrlPayRequest apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_pay_request(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_pay_request_data( + LnUrlPayRequestData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_pay_request_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_pay_success_data( + LnUrlPaySuccessData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_pay_success_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_withdraw_request( + LnUrlWithdrawRequest apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_withdraw_request(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_withdraw_request_data( + LnUrlWithdrawRequestData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_withdraw_request_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_ln_url_withdraw_success_data( + LnUrlWithdrawSuccessData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ln_url_withdraw_success_data(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_message_success_action_data( + MessageSuccessActionData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_message_success_action_data(apiObj, wireObj.ref); + } + @protected void cst_api_fill_to_wire_box_autoadd_pay_onchain_request( PayOnchainRequest apiObj, ffi.Pointer wireObj) { @@ -671,13 +1189,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { cst_api_fill_to_wire_restore_request(apiObj, wireObj.ref); } + @protected + void cst_api_fill_to_wire_box_autoadd_success_action_processed( + SuccessActionProcessed apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_success_action_processed(apiObj, wireObj.ref); + } + + @protected + void cst_api_fill_to_wire_box_autoadd_url_success_action_data( + UrlSuccessActionData apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_url_success_action_data(apiObj, wireObj.ref); + } + @protected void cst_api_fill_to_wire_config(Config apiObj, wire_cst_config wireObj) { wireObj.boltz_url = cst_encode_String(apiObj.boltzUrl); wireObj.liquid_electrum_url = cst_encode_String(apiObj.liquidElectrumUrl); wireObj.bitcoin_electrum_url = cst_encode_String(apiObj.bitcoinElectrumUrl); wireObj.working_dir = cst_encode_String(apiObj.workingDir); - wireObj.network = cst_encode_network(apiObj.network); + wireObj.network = cst_encode_liquid_network(apiObj.network); wireObj.payment_timeout_sec = cst_encode_u_64(apiObj.paymentTimeoutSec); wireObj.zero_conf_min_fee_rate = cst_encode_f_32(apiObj.zeroConfMinFeeRate); wireObj.zero_conf_max_amount_sat = cst_encode_opt_box_autoadd_u_64(apiObj.zeroConfMaxAmountSat); @@ -697,6 +1227,58 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { wireObj.pubkey = cst_encode_String(apiObj.pubkey); } + @protected + void cst_api_fill_to_wire_input_type(InputType apiObj, wire_cst_input_type wireObj) { + if (apiObj is InputType_BitcoinAddress) { + var pre_address = cst_encode_box_autoadd_bitcoin_address_data(apiObj.address); + wireObj.tag = 0; + wireObj.kind.BitcoinAddress.address = pre_address; + return; + } + if (apiObj is InputType_Bolt11) { + var pre_invoice = cst_encode_box_autoadd_ln_invoice(apiObj.invoice); + wireObj.tag = 1; + wireObj.kind.Bolt11.invoice = pre_invoice; + return; + } + if (apiObj is InputType_NodeId) { + var pre_node_id = cst_encode_String(apiObj.nodeId); + wireObj.tag = 2; + wireObj.kind.NodeId.node_id = pre_node_id; + return; + } + if (apiObj is InputType_Url) { + var pre_url = cst_encode_String(apiObj.url); + wireObj.tag = 3; + wireObj.kind.Url.url = pre_url; + return; + } + if (apiObj is InputType_LnUrlPay) { + var pre_data = cst_encode_box_autoadd_ln_url_pay_request_data(apiObj.data); + wireObj.tag = 4; + wireObj.kind.LnUrlPay.data = pre_data; + return; + } + if (apiObj is InputType_LnUrlWithdraw) { + var pre_data = cst_encode_box_autoadd_ln_url_withdraw_request_data(apiObj.data); + wireObj.tag = 5; + wireObj.kind.LnUrlWithdraw.data = pre_data; + return; + } + if (apiObj is InputType_LnUrlAuth) { + var pre_data = cst_encode_box_autoadd_ln_url_auth_request_data(apiObj.data); + wireObj.tag = 6; + wireObj.kind.LnUrlAuth.data = pre_data; + return; + } + if (apiObj is InputType_LnUrlError) { + var pre_data = cst_encode_box_autoadd_ln_url_error_data(apiObj.data); + wireObj.tag = 7; + wireObj.kind.LnUrlError.data = pre_data; + return; + } + } + @protected void cst_api_fill_to_wire_liquid_sdk_error(LiquidSdkError apiObj, wire_cst_liquid_sdk_error wireObj) { if (apiObj is LiquidSdkError_AlreadyStarted) { @@ -781,12 +1363,283 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { wireObj.min_final_cltv_expiry_delta = cst_encode_u_64(apiObj.minFinalCltvExpiryDelta); } + @protected + void cst_api_fill_to_wire_ln_url_auth_error(LnUrlAuthError apiObj, wire_cst_ln_url_auth_error wireObj) { + if (apiObj is LnUrlAuthError_Generic) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 0; + wireObj.kind.Generic.err = pre_err; + return; + } + if (apiObj is LnUrlAuthError_InvalidUri) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 1; + wireObj.kind.InvalidUri.err = pre_err; + return; + } + if (apiObj is LnUrlAuthError_ServiceConnectivity) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 2; + wireObj.kind.ServiceConnectivity.err = pre_err; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_auth_request_data( + LnUrlAuthRequestData apiObj, wire_cst_ln_url_auth_request_data wireObj) { + wireObj.k1 = cst_encode_String(apiObj.k1); + wireObj.action = cst_encode_opt_String(apiObj.action); + wireObj.domain = cst_encode_String(apiObj.domain); + wireObj.url = cst_encode_String(apiObj.url); + } + + @protected + void cst_api_fill_to_wire_ln_url_callback_status( + LnUrlCallbackStatus apiObj, wire_cst_ln_url_callback_status wireObj) { + if (apiObj is LnUrlCallbackStatus_Ok) { + wireObj.tag = 0; + return; + } + if (apiObj is LnUrlCallbackStatus_ErrorStatus) { + var pre_data = cst_encode_box_autoadd_ln_url_error_data(apiObj.data); + wireObj.tag = 1; + wireObj.kind.ErrorStatus.data = pre_data; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_error_data(LnUrlErrorData apiObj, wire_cst_ln_url_error_data wireObj) { + wireObj.reason = cst_encode_String(apiObj.reason); + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_error(LnUrlPayError apiObj, wire_cst_ln_url_pay_error wireObj) { + if (apiObj is LnUrlPayError_AlreadyPaid) { + wireObj.tag = 0; + return; + } + if (apiObj is LnUrlPayError_Generic) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 1; + wireObj.kind.Generic.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_InvalidAmount) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 2; + wireObj.kind.InvalidAmount.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_InvalidInvoice) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 3; + wireObj.kind.InvalidInvoice.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_InvalidNetwork) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 4; + wireObj.kind.InvalidNetwork.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_InvalidUri) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 5; + wireObj.kind.InvalidUri.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_InvoiceExpired) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 6; + wireObj.kind.InvoiceExpired.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_PaymentFailed) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 7; + wireObj.kind.PaymentFailed.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_PaymentTimeout) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 8; + wireObj.kind.PaymentTimeout.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_RouteNotFound) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 9; + wireObj.kind.RouteNotFound.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_RouteTooExpensive) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 10; + wireObj.kind.RouteTooExpensive.err = pre_err; + return; + } + if (apiObj is LnUrlPayError_ServiceConnectivity) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 11; + wireObj.kind.ServiceConnectivity.err = pre_err; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_error_data( + LnUrlPayErrorData apiObj, wire_cst_ln_url_pay_error_data wireObj) { + wireObj.payment_hash = cst_encode_String(apiObj.paymentHash); + wireObj.reason = cst_encode_String(apiObj.reason); + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_request(LnUrlPayRequest apiObj, wire_cst_ln_url_pay_request wireObj) { + cst_api_fill_to_wire_ln_url_pay_request_data(apiObj.data, wireObj.data); + wireObj.amount_msat = cst_encode_u_64(apiObj.amountMsat); + wireObj.comment = cst_encode_opt_String(apiObj.comment); + wireObj.payment_label = cst_encode_opt_String(apiObj.paymentLabel); + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_request_data( + LnUrlPayRequestData apiObj, wire_cst_ln_url_pay_request_data wireObj) { + wireObj.callback = cst_encode_String(apiObj.callback); + wireObj.min_sendable = cst_encode_u_64(apiObj.minSendable); + wireObj.max_sendable = cst_encode_u_64(apiObj.maxSendable); + wireObj.metadata_str = cst_encode_String(apiObj.metadataStr); + wireObj.comment_allowed = cst_encode_u_16(apiObj.commentAllowed); + wireObj.domain = cst_encode_String(apiObj.domain); + wireObj.allows_nostr = cst_encode_bool(apiObj.allowsNostr); + wireObj.nostr_pubkey = cst_encode_opt_String(apiObj.nostrPubkey); + wireObj.ln_address = cst_encode_opt_String(apiObj.lnAddress); + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_result(LnUrlPayResult apiObj, wire_cst_ln_url_pay_result wireObj) { + if (apiObj is LnUrlPayResult_EndpointSuccess) { + var pre_data = cst_encode_box_autoadd_ln_url_pay_success_data(apiObj.data); + wireObj.tag = 0; + wireObj.kind.EndpointSuccess.data = pre_data; + return; + } + if (apiObj is LnUrlPayResult_EndpointError) { + var pre_data = cst_encode_box_autoadd_ln_url_error_data(apiObj.data); + wireObj.tag = 1; + wireObj.kind.EndpointError.data = pre_data; + return; + } + if (apiObj is LnUrlPayResult_PayError) { + var pre_data = cst_encode_box_autoadd_ln_url_pay_error_data(apiObj.data); + wireObj.tag = 2; + wireObj.kind.PayError.data = pre_data; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_pay_success_data( + LnUrlPaySuccessData apiObj, wire_cst_ln_url_pay_success_data wireObj) { + cst_api_fill_to_wire_payment(apiObj.payment, wireObj.payment); + wireObj.success_action = cst_encode_opt_box_autoadd_success_action_processed(apiObj.successAction); + } + + @protected + void cst_api_fill_to_wire_ln_url_withdraw_error( + LnUrlWithdrawError apiObj, wire_cst_ln_url_withdraw_error wireObj) { + if (apiObj is LnUrlWithdrawError_Generic) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 0; + wireObj.kind.Generic.err = pre_err; + return; + } + if (apiObj is LnUrlWithdrawError_InvalidAmount) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 1; + wireObj.kind.InvalidAmount.err = pre_err; + return; + } + if (apiObj is LnUrlWithdrawError_InvalidInvoice) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 2; + wireObj.kind.InvalidInvoice.err = pre_err; + return; + } + if (apiObj is LnUrlWithdrawError_InvalidUri) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 3; + wireObj.kind.InvalidUri.err = pre_err; + return; + } + if (apiObj is LnUrlWithdrawError_InvoiceNoRoutingHints) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 4; + wireObj.kind.InvoiceNoRoutingHints.err = pre_err; + return; + } + if (apiObj is LnUrlWithdrawError_ServiceConnectivity) { + var pre_err = cst_encode_String(apiObj.err); + wireObj.tag = 5; + wireObj.kind.ServiceConnectivity.err = pre_err; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_withdraw_request( + LnUrlWithdrawRequest apiObj, wire_cst_ln_url_withdraw_request wireObj) { + cst_api_fill_to_wire_ln_url_withdraw_request_data(apiObj.data, wireObj.data); + wireObj.amount_msat = cst_encode_u_64(apiObj.amountMsat); + wireObj.description = cst_encode_opt_String(apiObj.description); + } + + @protected + void cst_api_fill_to_wire_ln_url_withdraw_request_data( + LnUrlWithdrawRequestData apiObj, wire_cst_ln_url_withdraw_request_data wireObj) { + wireObj.callback = cst_encode_String(apiObj.callback); + wireObj.k1 = cst_encode_String(apiObj.k1); + wireObj.default_description = cst_encode_String(apiObj.defaultDescription); + wireObj.min_withdrawable = cst_encode_u_64(apiObj.minWithdrawable); + wireObj.max_withdrawable = cst_encode_u_64(apiObj.maxWithdrawable); + } + + @protected + void cst_api_fill_to_wire_ln_url_withdraw_result( + LnUrlWithdrawResult apiObj, wire_cst_ln_url_withdraw_result wireObj) { + if (apiObj is LnUrlWithdrawResult_Ok) { + var pre_data = cst_encode_box_autoadd_ln_url_withdraw_success_data(apiObj.data); + wireObj.tag = 0; + wireObj.kind.Ok.data = pre_data; + return; + } + if (apiObj is LnUrlWithdrawResult_ErrorStatus) { + var pre_data = cst_encode_box_autoadd_ln_url_error_data(apiObj.data); + wireObj.tag = 1; + wireObj.kind.ErrorStatus.data = pre_data; + return; + } + } + + @protected + void cst_api_fill_to_wire_ln_url_withdraw_success_data( + LnUrlWithdrawSuccessData apiObj, wire_cst_ln_url_withdraw_success_data wireObj) { + cst_api_fill_to_wire_ln_invoice(apiObj.invoice, wireObj.invoice); + } + @protected void cst_api_fill_to_wire_log_entry(LogEntry apiObj, wire_cst_log_entry wireObj) { wireObj.line = cst_encode_String(apiObj.line); wireObj.level = cst_encode_String(apiObj.level); } + @protected + void cst_api_fill_to_wire_message_success_action_data( + MessageSuccessActionData apiObj, wire_cst_message_success_action_data wireObj) { + wireObj.message = cst_encode_String(apiObj.message); + } + @protected void cst_api_fill_to_wire_pay_onchain_request( PayOnchainRequest apiObj, wire_cst_pay_onchain_request wireObj) { @@ -974,6 +1827,36 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { cst_api_fill_to_wire_payment(apiObj.payment, wireObj.payment); } + @protected + void cst_api_fill_to_wire_success_action_processed( + SuccessActionProcessed apiObj, wire_cst_success_action_processed wireObj) { + if (apiObj is SuccessActionProcessed_Aes) { + var pre_result = cst_encode_box_autoadd_aes_success_action_data_result(apiObj.result); + wireObj.tag = 0; + wireObj.kind.Aes.result = pre_result; + return; + } + if (apiObj is SuccessActionProcessed_Message) { + var pre_data = cst_encode_box_autoadd_message_success_action_data(apiObj.data); + wireObj.tag = 1; + wireObj.kind.Message.data = pre_data; + return; + } + if (apiObj is SuccessActionProcessed_Url) { + var pre_data = cst_encode_box_autoadd_url_success_action_data(apiObj.data); + wireObj.tag = 2; + wireObj.kind.Url.data = pre_data; + return; + } + } + + @protected + void cst_api_fill_to_wire_url_success_action_data( + UrlSuccessActionData apiObj, wire_cst_url_success_action_data wireObj) { + wireObj.description = cst_encode_String(apiObj.description); + wireObj.url = cst_encode_String(apiObj.url); + } + @protected int cst_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk( BindingLiquidSdk raw); @@ -986,12 +1869,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { int cst_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdk( BindingLiquidSdk raw); + @protected + bool cst_encode_bool(bool raw); + @protected double cst_encode_f_32(double raw); @protected int cst_encode_i_32(int raw); + @protected + int cst_encode_liquid_network(LiquidNetwork raw); + @protected int cst_encode_network(Network raw); @@ -1001,6 +1890,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int cst_encode_payment_type(PaymentType raw); + @protected + int cst_encode_u_16(int raw); + @protected int cst_encode_u_32(int raw); @@ -1035,24 +1927,84 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted self, SseSerializer serializer); + + @protected + void sse_encode_aes_success_action_data_result(AesSuccessActionDataResult self, SseSerializer serializer); + @protected void sse_encode_backup_request(BackupRequest self, SseSerializer serializer); @protected void sse_encode_binding_event_listener(BindingEventListener self, SseSerializer serializer); + @protected + void sse_encode_bitcoin_address_data(BitcoinAddressData self, SseSerializer serializer); + + @protected + void sse_encode_bool(bool self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_aes_success_action_data_decrypted( + AesSuccessActionDataDecrypted self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_aes_success_action_data_result( + AesSuccessActionDataResult self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_backup_request(BackupRequest self, SseSerializer serializer); @protected void sse_encode_box_autoadd_binding_event_listener(BindingEventListener self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_bitcoin_address_data(BitcoinAddressData self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_connect_request(ConnectRequest self, SseSerializer serializer); @protected void sse_encode_box_autoadd_liquid_sdk_event(LiquidSdkEvent self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_ln_invoice(LNInvoice self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_auth_request_data(LnUrlAuthRequestData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_error_data(LnUrlErrorData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_pay_error_data(LnUrlPayErrorData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_pay_request(LnUrlPayRequest self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_pay_request_data(LnUrlPayRequestData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_pay_success_data(LnUrlPaySuccessData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_request(LnUrlWithdrawRequest self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_request_data( + LnUrlWithdrawRequestData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_ln_url_withdraw_success_data( + LnUrlWithdrawSuccessData self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_message_success_action_data( + MessageSuccessActionData self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_pay_onchain_request(PayOnchainRequest self, SseSerializer serializer); @@ -1078,9 +2030,15 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_box_autoadd_restore_request(RestoreRequest self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_success_action_processed(SuccessActionProcessed self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_u_64(BigInt self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_url_success_action_data(UrlSuccessActionData self, SseSerializer serializer); + @protected void sse_encode_config(Config self, SseSerializer serializer); @@ -1096,6 +2054,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_i_32(int self, SseSerializer serializer); + @protected + void sse_encode_input_type(InputType self, SseSerializer serializer); + + @protected + void sse_encode_liquid_network(LiquidNetwork self, SseSerializer serializer); + @protected void sse_encode_liquid_sdk_error(LiquidSdkError self, SseSerializer serializer); @@ -1117,15 +2081,67 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_ln_invoice(LNInvoice self, SseSerializer serializer); + @protected + void sse_encode_ln_url_auth_error(LnUrlAuthError self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_auth_request_data(LnUrlAuthRequestData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_callback_status(LnUrlCallbackStatus self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_error_data(LnUrlErrorData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_error(LnUrlPayError self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_error_data(LnUrlPayErrorData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_request(LnUrlPayRequest self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_request_data(LnUrlPayRequestData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_result(LnUrlPayResult self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_pay_success_data(LnUrlPaySuccessData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_withdraw_error(LnUrlWithdrawError self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_withdraw_request(LnUrlWithdrawRequest self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_withdraw_request_data(LnUrlWithdrawRequestData self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_withdraw_result(LnUrlWithdrawResult self, SseSerializer serializer); + + @protected + void sse_encode_ln_url_withdraw_success_data(LnUrlWithdrawSuccessData self, SseSerializer serializer); + @protected void sse_encode_log_entry(LogEntry self, SseSerializer serializer); + @protected + void sse_encode_message_success_action_data(MessageSuccessActionData self, SseSerializer serializer); + @protected void sse_encode_network(Network self, SseSerializer serializer); @protected void sse_encode_opt_String(String? self, SseSerializer serializer); + @protected + void sse_encode_opt_box_autoadd_success_action_processed( + SuccessActionProcessed? self, SseSerializer serializer); + @protected void sse_encode_opt_box_autoadd_u_64(BigInt? self, SseSerializer serializer); @@ -1177,6 +2193,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_send_payment_response(SendPaymentResponse self, SseSerializer serializer); + @protected + void sse_encode_success_action_processed(SuccessActionProcessed self, SseSerializer serializer); + + @protected + void sse_encode_u_16(int self, SseSerializer serializer); + @protected void sse_encode_u_32(int self, SseSerializer serializer); @@ -1190,10 +2212,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_unit(void self, SseSerializer serializer); @protected - void sse_encode_usize(BigInt self, SseSerializer serializer); + void sse_encode_url_success_action_data(UrlSuccessActionData self, SseSerializer serializer); @protected - void sse_encode_bool(bool self, SseSerializer serializer); + void sse_encode_usize(BigInt self, SseSerializer serializer); } // Section: wire_class @@ -1332,6 +2354,66 @@ class RustLibWire implements BaseWire { late final _wire__crate__bindings__BindingLiquidSdk_list_payments = _wire__crate__bindings__BindingLiquidSdk_list_paymentsPtr.asFunction(); + void wire__crate__bindings__BindingLiquidSdk_lnurl_auth( + int port_, + int that, + ffi.Pointer req_data, + ) { + return _wire__crate__bindings__BindingLiquidSdk_lnurl_auth( + port_, + that, + req_data, + ); + } + + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_authPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth'); + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_auth = + _wire__crate__bindings__BindingLiquidSdk_lnurl_authPtr + .asFunction)>(); + + void wire__crate__bindings__BindingLiquidSdk_lnurl_pay( + int port_, + int that, + ffi.Pointer req, + ) { + return _wire__crate__bindings__BindingLiquidSdk_lnurl_pay( + port_, + that, + req, + ); + } + + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_payPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay'); + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_pay = + _wire__crate__bindings__BindingLiquidSdk_lnurl_payPtr + .asFunction)>(); + + void wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw( + int port_, + int that, + ffi.Pointer req, + ) { + return _wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw( + port_, + that, + req, + ); + } + + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_withdrawPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw'); + late final _wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw = + _wire__crate__bindings__BindingLiquidSdk_lnurl_withdrawPtr + .asFunction)>(); + void wire__crate__bindings__BindingLiquidSdk_pay_onchain( int port_, int that, @@ -1554,6 +2636,22 @@ class RustLibWire implements BaseWire { late final _wire__crate__bindings__default_config = _wire__crate__bindings__default_configPtr.asFunction(); + void wire__crate__bindings__parse( + int port_, + ffi.Pointer input, + ) { + return _wire__crate__bindings__parse( + port_, + input, + ); + } + + late final _wire__crate__bindings__parsePtr = + _lookup)>>( + 'frbgen_breez_liquid_wire__crate__bindings__parse'); + late final _wire__crate__bindings__parse = _wire__crate__bindings__parsePtr + .asFunction)>(); + WireSyncRust2DartDco wire__crate__bindings__parse_invoice( ffi.Pointer input, ) { @@ -1600,6 +2698,29 @@ class RustLibWire implements BaseWire { _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdkPtr .asFunction)>(); + ffi.Pointer + cst_new_box_autoadd_aes_success_action_data_decrypted() { + return _cst_new_box_autoadd_aes_success_action_data_decrypted(); + } + + late final _cst_new_box_autoadd_aes_success_action_data_decryptedPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted'); + late final _cst_new_box_autoadd_aes_success_action_data_decrypted = + _cst_new_box_autoadd_aes_success_action_data_decryptedPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_aes_success_action_data_result() { + return _cst_new_box_autoadd_aes_success_action_data_result(); + } + + late final _cst_new_box_autoadd_aes_success_action_data_resultPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result'); + late final _cst_new_box_autoadd_aes_success_action_data_result = + _cst_new_box_autoadd_aes_success_action_data_resultPtr + .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_backup_request() { return _cst_new_box_autoadd_backup_request(); } @@ -1620,6 +2741,16 @@ class RustLibWire implements BaseWire { late final _cst_new_box_autoadd_binding_event_listener = _cst_new_box_autoadd_binding_event_listenerPtr .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_bitcoin_address_data() { + return _cst_new_box_autoadd_bitcoin_address_data(); + } + + late final _cst_new_box_autoadd_bitcoin_address_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data'); + late final _cst_new_box_autoadd_bitcoin_address_data = _cst_new_box_autoadd_bitcoin_address_dataPtr + .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_connect_request() { return _cst_new_box_autoadd_connect_request(); } @@ -1640,6 +2771,119 @@ class RustLibWire implements BaseWire { late final _cst_new_box_autoadd_liquid_sdk_event = _cst_new_box_autoadd_liquid_sdk_eventPtr .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_ln_invoice() { + return _cst_new_box_autoadd_ln_invoice(); + } + + late final _cst_new_box_autoadd_ln_invoicePtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice'); + late final _cst_new_box_autoadd_ln_invoice = + _cst_new_box_autoadd_ln_invoicePtr.asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_auth_request_data() { + return _cst_new_box_autoadd_ln_url_auth_request_data(); + } + + late final _cst_new_box_autoadd_ln_url_auth_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data'); + late final _cst_new_box_autoadd_ln_url_auth_request_data = _cst_new_box_autoadd_ln_url_auth_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_error_data() { + return _cst_new_box_autoadd_ln_url_error_data(); + } + + late final _cst_new_box_autoadd_ln_url_error_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data'); + late final _cst_new_box_autoadd_ln_url_error_data = _cst_new_box_autoadd_ln_url_error_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_pay_error_data() { + return _cst_new_box_autoadd_ln_url_pay_error_data(); + } + + late final _cst_new_box_autoadd_ln_url_pay_error_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data'); + late final _cst_new_box_autoadd_ln_url_pay_error_data = _cst_new_box_autoadd_ln_url_pay_error_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_pay_request() { + return _cst_new_box_autoadd_ln_url_pay_request(); + } + + late final _cst_new_box_autoadd_ln_url_pay_requestPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request'); + late final _cst_new_box_autoadd_ln_url_pay_request = _cst_new_box_autoadd_ln_url_pay_requestPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_pay_request_data() { + return _cst_new_box_autoadd_ln_url_pay_request_data(); + } + + late final _cst_new_box_autoadd_ln_url_pay_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data'); + late final _cst_new_box_autoadd_ln_url_pay_request_data = _cst_new_box_autoadd_ln_url_pay_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_pay_success_data() { + return _cst_new_box_autoadd_ln_url_pay_success_data(); + } + + late final _cst_new_box_autoadd_ln_url_pay_success_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data'); + late final _cst_new_box_autoadd_ln_url_pay_success_data = _cst_new_box_autoadd_ln_url_pay_success_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_withdraw_request() { + return _cst_new_box_autoadd_ln_url_withdraw_request(); + } + + late final _cst_new_box_autoadd_ln_url_withdraw_requestPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request'); + late final _cst_new_box_autoadd_ln_url_withdraw_request = _cst_new_box_autoadd_ln_url_withdraw_requestPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_withdraw_request_data() { + return _cst_new_box_autoadd_ln_url_withdraw_request_data(); + } + + late final _cst_new_box_autoadd_ln_url_withdraw_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data'); + late final _cst_new_box_autoadd_ln_url_withdraw_request_data = + _cst_new_box_autoadd_ln_url_withdraw_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_ln_url_withdraw_success_data() { + return _cst_new_box_autoadd_ln_url_withdraw_success_data(); + } + + late final _cst_new_box_autoadd_ln_url_withdraw_success_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data'); + late final _cst_new_box_autoadd_ln_url_withdraw_success_data = + _cst_new_box_autoadd_ln_url_withdraw_success_dataPtr + .asFunction Function()>(); + + ffi.Pointer cst_new_box_autoadd_message_success_action_data() { + return _cst_new_box_autoadd_message_success_action_data(); + } + + late final _cst_new_box_autoadd_message_success_action_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data'); + late final _cst_new_box_autoadd_message_success_action_data = + _cst_new_box_autoadd_message_success_action_dataPtr + .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_pay_onchain_request() { return _cst_new_box_autoadd_pay_onchain_request(); } @@ -1721,6 +2965,16 @@ class RustLibWire implements BaseWire { late final _cst_new_box_autoadd_restore_request = _cst_new_box_autoadd_restore_requestPtr.asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_success_action_processed() { + return _cst_new_box_autoadd_success_action_processed(); + } + + late final _cst_new_box_autoadd_success_action_processedPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed'); + late final _cst_new_box_autoadd_success_action_processed = _cst_new_box_autoadd_success_action_processedPtr + .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_u_64( int value, ) { @@ -1735,6 +2989,16 @@ class RustLibWire implements BaseWire { late final _cst_new_box_autoadd_u_64 = _cst_new_box_autoadd_u_64Ptr.asFunction Function(int)>(); + ffi.Pointer cst_new_box_autoadd_url_success_action_data() { + return _cst_new_box_autoadd_url_success_action_data(); + } + + late final _cst_new_box_autoadd_url_success_action_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data'); + late final _cst_new_box_autoadd_url_success_action_data = _cst_new_box_autoadd_url_success_action_dataPtr + .asFunction Function()>(); + ffi.Pointer cst_new_list_payment( int len, ) { @@ -1801,9 +3065,12 @@ class RustLibWire implements BaseWire { _dummy_method_to_enforce_bundlingPtr.asFunction(); } -typedef DartPostCObjectFnType - = ffi.Pointer message)>>; +typedef DartPostCObjectFnType = ffi.Pointer>; +typedef DartPostCObjectFnTypeFunction = ffi.Bool Function(DartPort port_id, ffi.Pointer message); +typedef DartDartPostCObjectFnTypeFunction = bool Function( + DartDartPort port_id, ffi.Pointer message); typedef DartPort = ffi.Int64; +typedef DartDartPort = int; final class wire_cst_list_prim_u_8_strict extends ffi.Struct { external ffi.Pointer ptr; @@ -1816,6 +3083,74 @@ final class wire_cst_backup_request extends ffi.Struct { external ffi.Pointer backup_path; } +final class wire_cst_ln_url_auth_request_data extends ffi.Struct { + external ffi.Pointer k1; + + external ffi.Pointer action; + + external ffi.Pointer domain; + + external ffi.Pointer url; +} + +final class wire_cst_ln_url_pay_request_data extends ffi.Struct { + external ffi.Pointer callback; + + @ffi.Uint64() + external int min_sendable; + + @ffi.Uint64() + external int max_sendable; + + external ffi.Pointer metadata_str; + + @ffi.Uint16() + external int comment_allowed; + + external ffi.Pointer domain; + + @ffi.Bool() + external bool allows_nostr; + + external ffi.Pointer nostr_pubkey; + + external ffi.Pointer ln_address; +} + +final class wire_cst_ln_url_pay_request extends ffi.Struct { + external wire_cst_ln_url_pay_request_data data; + + @ffi.Uint64() + external int amount_msat; + + external ffi.Pointer comment; + + external ffi.Pointer payment_label; +} + +final class wire_cst_ln_url_withdraw_request_data extends ffi.Struct { + external ffi.Pointer callback; + + external ffi.Pointer k1; + + external ffi.Pointer default_description; + + @ffi.Uint64() + external int min_withdrawable; + + @ffi.Uint64() + external int max_withdrawable; +} + +final class wire_cst_ln_url_withdraw_request extends ffi.Struct { + external wire_cst_ln_url_withdraw_request_data data; + + @ffi.Uint64() + external int amount_msat; + + external ffi.Pointer description; +} + final class wire_cst_prepare_pay_onchain_response extends ffi.Struct { @ffi.Uint64() external int amount_sat; @@ -1968,11 +3303,44 @@ final class wire_cst_connect_request extends ffi.Struct { external wire_cst_config config; } -final class wire_cst_list_payment extends ffi.Struct { - external ffi.Pointer ptr; +final class wire_cst_aes_success_action_data_decrypted extends ffi.Struct { + external ffi.Pointer description; + + external ffi.Pointer plaintext; +} + +final class wire_cst_AesSuccessActionDataResult_Decrypted extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_AesSuccessActionDataResult_ErrorStatus extends ffi.Struct { + external ffi.Pointer reason; +} + +final class AesSuccessActionDataResultKind extends ffi.Union { + external wire_cst_AesSuccessActionDataResult_Decrypted Decrypted; + + external wire_cst_AesSuccessActionDataResult_ErrorStatus ErrorStatus; +} + +final class wire_cst_aes_success_action_data_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external AesSuccessActionDataResultKind kind; +} + +final class wire_cst_bitcoin_address_data extends ffi.Struct { + external ffi.Pointer address; @ffi.Int32() - external int len; + external int network; + + external ffi.Pointer amount_sat; + + external ffi.Pointer label; + + external ffi.Pointer message; } final class wire_cst_route_hint_hop extends ffi.Struct { @@ -2013,40 +3381,6 @@ final class wire_cst_list_route_hint extends ffi.Struct { external int len; } -final class wire_cst_get_info_response extends ffi.Struct { - @ffi.Uint64() - external int balance_sat; - - @ffi.Uint64() - external int pending_send_sat; - - @ffi.Uint64() - external int pending_receive_sat; - - external ffi.Pointer pubkey; -} - -final class wire_cst_LiquidSdkError_Generic extends ffi.Struct { - external ffi.Pointer err; -} - -final class wire_cst_LiquidSdkError_ServiceConnectivity extends ffi.Struct { - external ffi.Pointer err; -} - -final class LiquidSdkErrorKind extends ffi.Union { - external wire_cst_LiquidSdkError_Generic Generic; - - external wire_cst_LiquidSdkError_ServiceConnectivity ServiceConnectivity; -} - -final class wire_cst_liquid_sdk_error extends ffi.Struct { - @ffi.Int32() - external int tag; - - external LiquidSdkErrorKind kind; -} - final class wire_cst_ln_invoice extends ffi.Struct { external ffi.Pointer bolt11; @@ -2077,6 +3411,371 @@ final class wire_cst_ln_invoice extends ffi.Struct { external int min_final_cltv_expiry_delta; } +final class wire_cst_ln_url_error_data extends ffi.Struct { + external ffi.Pointer reason; +} + +final class wire_cst_ln_url_pay_error_data extends ffi.Struct { + external ffi.Pointer payment_hash; + + external ffi.Pointer reason; +} + +final class wire_cst_SuccessActionProcessed_Aes extends ffi.Struct { + external ffi.Pointer result; +} + +final class wire_cst_message_success_action_data extends ffi.Struct { + external ffi.Pointer message; +} + +final class wire_cst_SuccessActionProcessed_Message extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_url_success_action_data extends ffi.Struct { + external ffi.Pointer description; + + external ffi.Pointer url; +} + +final class wire_cst_SuccessActionProcessed_Url extends ffi.Struct { + external ffi.Pointer data; +} + +final class SuccessActionProcessedKind extends ffi.Union { + external wire_cst_SuccessActionProcessed_Aes Aes; + + external wire_cst_SuccessActionProcessed_Message Message; + + external wire_cst_SuccessActionProcessed_Url Url; +} + +final class wire_cst_success_action_processed extends ffi.Struct { + @ffi.Int32() + external int tag; + + external SuccessActionProcessedKind kind; +} + +final class wire_cst_ln_url_pay_success_data extends ffi.Struct { + external wire_cst_payment payment; + + external ffi.Pointer success_action; +} + +final class wire_cst_ln_url_withdraw_success_data extends ffi.Struct { + external wire_cst_ln_invoice invoice; +} + +final class wire_cst_list_payment extends ffi.Struct { + external ffi.Pointer ptr; + + @ffi.Int32() + external int len; +} + +final class wire_cst_get_info_response extends ffi.Struct { + @ffi.Uint64() + external int balance_sat; + + @ffi.Uint64() + external int pending_send_sat; + + @ffi.Uint64() + external int pending_receive_sat; + + external ffi.Pointer pubkey; +} + +final class wire_cst_InputType_BitcoinAddress extends ffi.Struct { + external ffi.Pointer address; +} + +final class wire_cst_InputType_Bolt11 extends ffi.Struct { + external ffi.Pointer invoice; +} + +final class wire_cst_InputType_NodeId extends ffi.Struct { + external ffi.Pointer node_id; +} + +final class wire_cst_InputType_Url extends ffi.Struct { + external ffi.Pointer url; +} + +final class wire_cst_InputType_LnUrlPay extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlWithdraw extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlAuth extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlError extends ffi.Struct { + external ffi.Pointer data; +} + +final class InputTypeKind extends ffi.Union { + external wire_cst_InputType_BitcoinAddress BitcoinAddress; + + external wire_cst_InputType_Bolt11 Bolt11; + + external wire_cst_InputType_NodeId NodeId; + + external wire_cst_InputType_Url Url; + + external wire_cst_InputType_LnUrlPay LnUrlPay; + + external wire_cst_InputType_LnUrlWithdraw LnUrlWithdraw; + + external wire_cst_InputType_LnUrlAuth LnUrlAuth; + + external wire_cst_InputType_LnUrlError LnUrlError; +} + +final class wire_cst_input_type extends ffi.Struct { + @ffi.Int32() + external int tag; + + external InputTypeKind kind; +} + +final class wire_cst_LiquidSdkError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LiquidSdkError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LiquidSdkErrorKind extends ffi.Union { + external wire_cst_LiquidSdkError_Generic Generic; + + external wire_cst_LiquidSdkError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_liquid_sdk_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LiquidSdkErrorKind kind; +} + +final class wire_cst_LnUrlAuthError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlAuthError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlAuthError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlAuthErrorKind extends ffi.Union { + external wire_cst_LnUrlAuthError_Generic Generic; + + external wire_cst_LnUrlAuthError_InvalidUri InvalidUri; + + external wire_cst_LnUrlAuthError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_auth_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlAuthErrorKind kind; +} + +final class wire_cst_LnUrlCallbackStatus_ErrorStatus extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlCallbackStatusKind extends ffi.Union { + external wire_cst_LnUrlCallbackStatus_ErrorStatus ErrorStatus; +} + +final class wire_cst_ln_url_callback_status extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlCallbackStatusKind kind; +} + +final class wire_cst_LnUrlPayError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidAmount extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidInvoice extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidNetwork extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvoiceExpired extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_PaymentFailed extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_PaymentTimeout extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_RouteNotFound extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_RouteTooExpensive extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlPayErrorKind extends ffi.Union { + external wire_cst_LnUrlPayError_Generic Generic; + + external wire_cst_LnUrlPayError_InvalidAmount InvalidAmount; + + external wire_cst_LnUrlPayError_InvalidInvoice InvalidInvoice; + + external wire_cst_LnUrlPayError_InvalidNetwork InvalidNetwork; + + external wire_cst_LnUrlPayError_InvalidUri InvalidUri; + + external wire_cst_LnUrlPayError_InvoiceExpired InvoiceExpired; + + external wire_cst_LnUrlPayError_PaymentFailed PaymentFailed; + + external wire_cst_LnUrlPayError_PaymentTimeout PaymentTimeout; + + external wire_cst_LnUrlPayError_RouteNotFound RouteNotFound; + + external wire_cst_LnUrlPayError_RouteTooExpensive RouteTooExpensive; + + external wire_cst_LnUrlPayError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_pay_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlPayErrorKind kind; +} + +final class wire_cst_LnUrlPayResult_EndpointSuccess extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlPayResult_EndpointError extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlPayResult_PayError extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlPayResultKind extends ffi.Union { + external wire_cst_LnUrlPayResult_EndpointSuccess EndpointSuccess; + + external wire_cst_LnUrlPayResult_EndpointError EndpointError; + + external wire_cst_LnUrlPayResult_PayError PayError; +} + +final class wire_cst_ln_url_pay_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlPayResultKind kind; +} + +final class wire_cst_LnUrlWithdrawError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidAmount extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidInvoice extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlWithdrawErrorKind extends ffi.Union { + external wire_cst_LnUrlWithdrawError_Generic Generic; + + external wire_cst_LnUrlWithdrawError_InvalidAmount InvalidAmount; + + external wire_cst_LnUrlWithdrawError_InvalidInvoice InvalidInvoice; + + external wire_cst_LnUrlWithdrawError_InvalidUri InvalidUri; + + external wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints InvoiceNoRoutingHints; + + external wire_cst_LnUrlWithdrawError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_withdraw_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlWithdrawErrorKind kind; +} + +final class wire_cst_LnUrlWithdrawResult_Ok extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlWithdrawResult_ErrorStatus extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlWithdrawResultKind extends ffi.Union { + external wire_cst_LnUrlWithdrawResult_Ok Ok; + + external wire_cst_LnUrlWithdrawResult_ErrorStatus ErrorStatus; +} + +final class wire_cst_ln_url_withdraw_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlWithdrawResultKind kind; +} + final class wire_cst_log_entry extends ffi.Struct { external ffi.Pointer line; diff --git a/packages/dart/lib/src/model.dart b/packages/dart/lib/src/model.dart index c242332..439d633 100644 --- a/packages/dart/lib/src/model.dart +++ b/packages/dart/lib/src/model.dart @@ -3,6 +3,7 @@ // ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import +import 'bindings.dart'; import 'frb_generated.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; import 'package:freezed_annotation/freezed_annotation.dart' hide protected; @@ -38,7 +39,7 @@ class Config { /// /// Prefix can be a relative or absolute path to this directory. final String workingDir; - final Network network; + final LiquidNetwork network; /// Send payment timeout. See [crate::sdk::LiquidSdk::send_payment] final BigInt paymentTimeoutSec; @@ -141,6 +142,17 @@ class GetInfoResponse { pubkey == other.pubkey; } +/// Network chosen for this Liquid SDK instance. Note that it represents both the Liquid and the +/// Bitcoin network used. +enum LiquidNetwork { + /// Mainnet Bitcoin and Liquid chains + mainnet, + + /// Testnet Bitcoin and Liquid chains + testnet, + ; +} + @freezed sealed class LiquidSdkEvent with _$LiquidSdkEvent { const LiquidSdkEvent._(); @@ -166,68 +178,40 @@ sealed class LiquidSdkEvent with _$LiquidSdkEvent { const factory LiquidSdkEvent.synced() = LiquidSdkEvent_Synced; } -/// Wrapper for a BOLT11 LN invoice -class LNInvoice { - final String bolt11; - final Network network; - final String payeePubkey; - final String paymentHash; - final String? description; - final String? descriptionHash; - final BigInt? amountMsat; - final BigInt timestamp; - final BigInt expiry; - final List routingHints; - final Uint8List paymentSecret; - final BigInt minFinalCltvExpiryDelta; +@freezed +sealed class LnUrlPayResult with _$LnUrlPayResult { + const LnUrlPayResult._(); - const LNInvoice({ - required this.bolt11, - required this.network, - required this.payeePubkey, - required this.paymentHash, - this.description, - this.descriptionHash, - this.amountMsat, - required this.timestamp, - required this.expiry, - required this.routingHints, - required this.paymentSecret, - required this.minFinalCltvExpiryDelta, + const factory LnUrlPayResult.endpointSuccess({ + required LnUrlPaySuccessData data, + }) = LnUrlPayResult_EndpointSuccess; + const factory LnUrlPayResult.endpointError({ + required LnUrlErrorData data, + }) = LnUrlPayResult_EndpointError; + const factory LnUrlPayResult.payError({ + required LnUrlPayErrorData data, + }) = LnUrlPayResult_PayError; +} + +class LnUrlPaySuccessData { + final Payment payment; + final SuccessActionProcessed? successAction; + + const LnUrlPaySuccessData({ + required this.payment, + this.successAction, }); @override - int get hashCode => - bolt11.hashCode ^ - network.hashCode ^ - payeePubkey.hashCode ^ - paymentHash.hashCode ^ - description.hashCode ^ - descriptionHash.hashCode ^ - amountMsat.hashCode ^ - timestamp.hashCode ^ - expiry.hashCode ^ - routingHints.hashCode ^ - paymentSecret.hashCode ^ - minFinalCltvExpiryDelta.hashCode; + int get hashCode => payment.hashCode ^ successAction.hashCode; @override bool operator ==(Object other) => identical(this, other) || - other is LNInvoice && + other is LnUrlPaySuccessData && runtimeType == other.runtimeType && - bolt11 == other.bolt11 && - network == other.network && - payeePubkey == other.payeePubkey && - paymentHash == other.paymentHash && - description == other.description && - descriptionHash == other.descriptionHash && - amountMsat == other.amountMsat && - timestamp == other.timestamp && - expiry == other.expiry && - routingHints == other.routingHints && - paymentSecret == other.paymentSecret && - minFinalCltvExpiryDelta == other.minFinalCltvExpiryDelta; + payment == other.payment && + successAction == other.successAction; } /// Internal SDK log entry used in the Uniffi and Dart bindings @@ -249,15 +233,6 @@ class LogEntry { other is LogEntry && runtimeType == other.runtimeType && line == other.line && level == other.level; } -enum Network { - /// Mainnet Bitcoin and Liquid chains - mainnet, - - /// Testnet Bitcoin and Liquid chains - testnet, - ; -} - class PayOnchainRequest { final String address; final PreparePayOnchainResponse prepareRes; @@ -593,77 +568,6 @@ class RestoreRequest { other is RestoreRequest && runtimeType == other.runtimeType && backupPath == other.backupPath; } -/// A route hint for a LN payment -class RouteHint { - final List hops; - - const RouteHint({ - required this.hops, - }); - - @override - int get hashCode => hops.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || other is RouteHint && runtimeType == other.runtimeType && hops == other.hops; -} - -/// Details of a specific hop in a larger route hint -class RouteHintHop { - /// The node_id of the non-target end of the route - final String srcNodeId; - - /// The short_channel_id of this channel - final BigInt shortChannelId; - - /// The fees which must be paid to use this channel - final int feesBaseMsat; - final int feesProportionalMillionths; - - /// The difference in CLTV values between this node and the next node. - final BigInt cltvExpiryDelta; - - /// The minimum value, in msat, which must be relayed to the next hop. - final BigInt? htlcMinimumMsat; - - /// The maximum value in msat available for routing with a single HTLC. - final BigInt? htlcMaximumMsat; - - const RouteHintHop({ - required this.srcNodeId, - required this.shortChannelId, - required this.feesBaseMsat, - required this.feesProportionalMillionths, - required this.cltvExpiryDelta, - this.htlcMinimumMsat, - this.htlcMaximumMsat, - }); - - @override - int get hashCode => - srcNodeId.hashCode ^ - shortChannelId.hashCode ^ - feesBaseMsat.hashCode ^ - feesProportionalMillionths.hashCode ^ - cltvExpiryDelta.hashCode ^ - htlcMinimumMsat.hashCode ^ - htlcMaximumMsat.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is RouteHintHop && - runtimeType == other.runtimeType && - srcNodeId == other.srcNodeId && - shortChannelId == other.shortChannelId && - feesBaseMsat == other.feesBaseMsat && - feesProportionalMillionths == other.feesProportionalMillionths && - cltvExpiryDelta == other.cltvExpiryDelta && - htlcMinimumMsat == other.htlcMinimumMsat && - htlcMaximumMsat == other.htlcMaximumMsat; -} - class SendPaymentResponse { final Payment payment; diff --git a/packages/dart/lib/src/model.freezed.dart b/packages/dart/lib/src/model.freezed.dart index bfb8554..9800926 100644 --- a/packages/dart/lib/src/model.freezed.dart +++ b/packages/dart/lib/src/model.freezed.dart @@ -520,3 +520,248 @@ abstract class LiquidSdkEvent_Synced extends LiquidSdkEvent { const factory LiquidSdkEvent_Synced() = _$LiquidSdkEvent_SyncedImpl; const LiquidSdkEvent_Synced._() : super._(); } + +/// @nodoc +mixin _$LnUrlPayResult { + Object get data => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $LnUrlPayResultCopyWith<$Res> { + factory $LnUrlPayResultCopyWith(LnUrlPayResult value, $Res Function(LnUrlPayResult) then) = + _$LnUrlPayResultCopyWithImpl<$Res, LnUrlPayResult>; +} + +/// @nodoc +class _$LnUrlPayResultCopyWithImpl<$Res, $Val extends LnUrlPayResult> + implements $LnUrlPayResultCopyWith<$Res> { + _$LnUrlPayResultCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$LnUrlPayResult_EndpointSuccessImplCopyWith<$Res> { + factory _$$LnUrlPayResult_EndpointSuccessImplCopyWith(_$LnUrlPayResult_EndpointSuccessImpl value, + $Res Function(_$LnUrlPayResult_EndpointSuccessImpl) then) = + __$$LnUrlPayResult_EndpointSuccessImplCopyWithImpl<$Res>; + @useResult + $Res call({LnUrlPaySuccessData data}); +} + +/// @nodoc +class __$$LnUrlPayResult_EndpointSuccessImplCopyWithImpl<$Res> + extends _$LnUrlPayResultCopyWithImpl<$Res, _$LnUrlPayResult_EndpointSuccessImpl> + implements _$$LnUrlPayResult_EndpointSuccessImplCopyWith<$Res> { + __$$LnUrlPayResult_EndpointSuccessImplCopyWithImpl( + _$LnUrlPayResult_EndpointSuccessImpl _value, $Res Function(_$LnUrlPayResult_EndpointSuccessImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? data = null, + }) { + return _then(_$LnUrlPayResult_EndpointSuccessImpl( + data: null == data + ? _value.data + : data // ignore: cast_nullable_to_non_nullable + as LnUrlPaySuccessData, + )); + } +} + +/// @nodoc + +class _$LnUrlPayResult_EndpointSuccessImpl extends LnUrlPayResult_EndpointSuccess { + const _$LnUrlPayResult_EndpointSuccessImpl({required this.data}) : super._(); + + @override + final LnUrlPaySuccessData data; + + @override + String toString() { + return 'LnUrlPayResult.endpointSuccess(data: $data)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$LnUrlPayResult_EndpointSuccessImpl && + (identical(other.data, data) || other.data == data)); + } + + @override + int get hashCode => Object.hash(runtimeType, data); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$LnUrlPayResult_EndpointSuccessImplCopyWith<_$LnUrlPayResult_EndpointSuccessImpl> get copyWith => + __$$LnUrlPayResult_EndpointSuccessImplCopyWithImpl<_$LnUrlPayResult_EndpointSuccessImpl>( + this, _$identity); +} + +abstract class LnUrlPayResult_EndpointSuccess extends LnUrlPayResult { + const factory LnUrlPayResult_EndpointSuccess({required final LnUrlPaySuccessData data}) = + _$LnUrlPayResult_EndpointSuccessImpl; + const LnUrlPayResult_EndpointSuccess._() : super._(); + + @override + LnUrlPaySuccessData get data; + @JsonKey(ignore: true) + _$$LnUrlPayResult_EndpointSuccessImplCopyWith<_$LnUrlPayResult_EndpointSuccessImpl> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$LnUrlPayResult_EndpointErrorImplCopyWith<$Res> { + factory _$$LnUrlPayResult_EndpointErrorImplCopyWith( + _$LnUrlPayResult_EndpointErrorImpl value, $Res Function(_$LnUrlPayResult_EndpointErrorImpl) then) = + __$$LnUrlPayResult_EndpointErrorImplCopyWithImpl<$Res>; + @useResult + $Res call({LnUrlErrorData data}); +} + +/// @nodoc +class __$$LnUrlPayResult_EndpointErrorImplCopyWithImpl<$Res> + extends _$LnUrlPayResultCopyWithImpl<$Res, _$LnUrlPayResult_EndpointErrorImpl> + implements _$$LnUrlPayResult_EndpointErrorImplCopyWith<$Res> { + __$$LnUrlPayResult_EndpointErrorImplCopyWithImpl( + _$LnUrlPayResult_EndpointErrorImpl _value, $Res Function(_$LnUrlPayResult_EndpointErrorImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? data = null, + }) { + return _then(_$LnUrlPayResult_EndpointErrorImpl( + data: null == data + ? _value.data + : data // ignore: cast_nullable_to_non_nullable + as LnUrlErrorData, + )); + } +} + +/// @nodoc + +class _$LnUrlPayResult_EndpointErrorImpl extends LnUrlPayResult_EndpointError { + const _$LnUrlPayResult_EndpointErrorImpl({required this.data}) : super._(); + + @override + final LnUrlErrorData data; + + @override + String toString() { + return 'LnUrlPayResult.endpointError(data: $data)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$LnUrlPayResult_EndpointErrorImpl && + (identical(other.data, data) || other.data == data)); + } + + @override + int get hashCode => Object.hash(runtimeType, data); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$LnUrlPayResult_EndpointErrorImplCopyWith<_$LnUrlPayResult_EndpointErrorImpl> get copyWith => + __$$LnUrlPayResult_EndpointErrorImplCopyWithImpl<_$LnUrlPayResult_EndpointErrorImpl>(this, _$identity); +} + +abstract class LnUrlPayResult_EndpointError extends LnUrlPayResult { + const factory LnUrlPayResult_EndpointError({required final LnUrlErrorData data}) = + _$LnUrlPayResult_EndpointErrorImpl; + const LnUrlPayResult_EndpointError._() : super._(); + + @override + LnUrlErrorData get data; + @JsonKey(ignore: true) + _$$LnUrlPayResult_EndpointErrorImplCopyWith<_$LnUrlPayResult_EndpointErrorImpl> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$LnUrlPayResult_PayErrorImplCopyWith<$Res> { + factory _$$LnUrlPayResult_PayErrorImplCopyWith( + _$LnUrlPayResult_PayErrorImpl value, $Res Function(_$LnUrlPayResult_PayErrorImpl) then) = + __$$LnUrlPayResult_PayErrorImplCopyWithImpl<$Res>; + @useResult + $Res call({LnUrlPayErrorData data}); +} + +/// @nodoc +class __$$LnUrlPayResult_PayErrorImplCopyWithImpl<$Res> + extends _$LnUrlPayResultCopyWithImpl<$Res, _$LnUrlPayResult_PayErrorImpl> + implements _$$LnUrlPayResult_PayErrorImplCopyWith<$Res> { + __$$LnUrlPayResult_PayErrorImplCopyWithImpl( + _$LnUrlPayResult_PayErrorImpl _value, $Res Function(_$LnUrlPayResult_PayErrorImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? data = null, + }) { + return _then(_$LnUrlPayResult_PayErrorImpl( + data: null == data + ? _value.data + : data // ignore: cast_nullable_to_non_nullable + as LnUrlPayErrorData, + )); + } +} + +/// @nodoc + +class _$LnUrlPayResult_PayErrorImpl extends LnUrlPayResult_PayError { + const _$LnUrlPayResult_PayErrorImpl({required this.data}) : super._(); + + @override + final LnUrlPayErrorData data; + + @override + String toString() { + return 'LnUrlPayResult.payError(data: $data)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$LnUrlPayResult_PayErrorImpl && + (identical(other.data, data) || other.data == data)); + } + + @override + int get hashCode => Object.hash(runtimeType, data); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$LnUrlPayResult_PayErrorImplCopyWith<_$LnUrlPayResult_PayErrorImpl> get copyWith => + __$$LnUrlPayResult_PayErrorImplCopyWithImpl<_$LnUrlPayResult_PayErrorImpl>(this, _$identity); +} + +abstract class LnUrlPayResult_PayError extends LnUrlPayResult { + const factory LnUrlPayResult_PayError({required final LnUrlPayErrorData data}) = + _$LnUrlPayResult_PayErrorImpl; + const LnUrlPayResult_PayError._() : super._(); + + @override + LnUrlPayErrorData get data; + @JsonKey(ignore: true) + _$$LnUrlPayResult_PayErrorImplCopyWith<_$LnUrlPayResult_PayErrorImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/packages/flutter/example/lib/main.dart b/packages/flutter/example/lib/main.dart index 484ff5f..3bf43e5 100644 --- a/packages/flutter/example/lib/main.dart +++ b/packages/flutter/example/lib/main.dart @@ -23,7 +23,7 @@ void main() async { Future reconnect({ required BreezLiquidSDK liquidSDK, required String mnemonic, - Network network = Network.mainnet, + LiquidNetwork network = LiquidNetwork.mainnet, }) async { final config = await getConfig(network: network); final req = ConnectRequest( diff --git a/packages/flutter/example/lib/routes/connect/connect_page.dart b/packages/flutter/example/lib/routes/connect/connect_page.dart index ea8aa6a..04f9721 100644 --- a/packages/flutter/example/lib/routes/connect/connect_page.dart +++ b/packages/flutter/example/lib/routes/connect/connect_page.dart @@ -97,7 +97,7 @@ class _ConnectPageState extends State { Future initializeWallet({ required String mnemonic, - Network network = Network.mainnet, + LiquidNetwork network = LiquidNetwork.mainnet, }) async { final config = await getConfig(network: network); final req = ConnectRequest( diff --git a/packages/flutter/example/lib/utils/config.dart b/packages/flutter/example/lib/utils/config.dart index d0ac30c..f61755c 100644 --- a/packages/flutter/example/lib/utils/config.dart +++ b/packages/flutter/example/lib/utils/config.dart @@ -3,7 +3,7 @@ import 'package:flutter_breez_liquid/flutter_breez_liquid.dart'; import 'package:path_provider/path_provider.dart'; Future getConfig({ - Network network = Network.mainnet, + LiquidNetwork network = LiquidNetwork.mainnet, }) async { debugPrint("Getting default SDK config for network: $network"); final defaultConf = defaultConfig(network: network); @@ -19,7 +19,7 @@ extension ConfigCopyWith on Config { String? boltzUrl, String? electrumUrl, String? workingDir, - Network? network, + LiquidNetwork? network, BigInt? paymentTimeoutSec, }) { return Config( diff --git a/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart b/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart index 2825626..45ee739 100644 --- a/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart +++ b/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart @@ -141,6 +141,66 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_list_paymentsPtr .asFunction(); + void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth( + int port_, + int that, + ffi.Pointer req_data, + ) { + return _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth( + port_, + that, + req_data, + ); + } + + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_authPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth'); + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_auth = + _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_authPtr + .asFunction)>(); + + void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay( + int port_, + int that, + ffi.Pointer req, + ) { + return _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay( + port_, + that, + req, + ); + } + + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_payPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay'); + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_pay = + _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_payPtr + .asFunction)>(); + + void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw( + int port_, + int that, + ffi.Pointer req, + ) { + return _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw( + port_, + that, + req, + ); + } + + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdrawPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Int64, ffi.UintPtr, ffi.Pointer)>>( + 'frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw'); + late final _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdraw = + _frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_lnurl_withdrawPtr + .asFunction)>(); + void frbgen_breez_liquid_wire__crate__bindings__BindingLiquidSdk_pay_onchain( int port_, int that, @@ -368,6 +428,23 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_wire__crate__bindings__default_configPtr .asFunction(); + void frbgen_breez_liquid_wire__crate__bindings__parse( + int port_, + ffi.Pointer input, + ) { + return _frbgen_breez_liquid_wire__crate__bindings__parse( + port_, + input, + ); + } + + late final _frbgen_breez_liquid_wire__crate__bindings__parsePtr = + _lookup)>>( + 'frbgen_breez_liquid_wire__crate__bindings__parse'); + late final _frbgen_breez_liquid_wire__crate__bindings__parse = + _frbgen_breez_liquid_wire__crate__bindings__parsePtr + .asFunction)>(); + WireSyncRust2DartDco frbgen_breez_liquid_wire__crate__bindings__parse_invoice( ffi.Pointer input, ) { @@ -415,6 +492,30 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBindingLiquidSdkPtr .asFunction)>(); + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted() { + return _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decryptedPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decrypted = + _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_decryptedPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result() { + return _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_resultPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_result = + _frbgen_breez_liquid_cst_new_box_autoadd_aes_success_action_data_resultPtr + .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_backup_request() { return _frbgen_breez_liquid_cst_new_box_autoadd_backup_request(); } @@ -438,6 +539,17 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_cst_new_box_autoadd_binding_event_listenerPtr .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_data = + _frbgen_breez_liquid_cst_new_box_autoadd_bitcoin_address_dataPtr + .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_connect_request() { return _frbgen_breez_liquid_cst_new_box_autoadd_connect_request(); } @@ -460,6 +572,135 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_cst_new_box_autoadd_liquid_sdk_eventPtr .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_invoicePtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_invoice = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_invoicePtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_auth_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_error_dataPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_error_dataPtr + .asFunction Function()>(); + + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_requestPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_requestPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_pay_success_dataPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_requestPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_requestPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_request_dataPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_data = + _frbgen_breez_liquid_cst_new_box_autoadd_ln_url_withdraw_success_dataPtr + .asFunction Function()>(); + + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_data = + _frbgen_breez_liquid_cst_new_box_autoadd_message_success_action_dataPtr + .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_pay_onchain_request() { return _frbgen_breez_liquid_cst_new_box_autoadd_pay_onchain_request(); } @@ -552,6 +793,18 @@ class FlutterBreezLiquidBindings { _frbgen_breez_liquid_cst_new_box_autoadd_restore_requestPtr .asFunction Function()>(); + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed() { + return _frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_success_action_processedPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_success_action_processed = + _frbgen_breez_liquid_cst_new_box_autoadd_success_action_processedPtr + .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_box_autoadd_u_64( int value, ) { @@ -566,6 +819,18 @@ class FlutterBreezLiquidBindings { late final _frbgen_breez_liquid_cst_new_box_autoadd_u_64 = _frbgen_breez_liquid_cst_new_box_autoadd_u_64Ptr.asFunction Function(int)>(); + ffi.Pointer + frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data() { + return _frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data(); + } + + late final _frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_dataPtr = + _lookup Function()>>( + 'frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data'); + late final _frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_data = + _frbgen_breez_liquid_cst_new_box_autoadd_url_success_action_dataPtr + .asFunction Function()>(); + ffi.Pointer frbgen_breez_liquid_cst_new_list_payment( int len, ) { @@ -663,6 +928,74 @@ final class wire_cst_backup_request extends ffi.Struct { external ffi.Pointer backup_path; } +final class wire_cst_ln_url_auth_request_data extends ffi.Struct { + external ffi.Pointer k1; + + external ffi.Pointer action; + + external ffi.Pointer domain; + + external ffi.Pointer url; +} + +final class wire_cst_ln_url_pay_request_data extends ffi.Struct { + external ffi.Pointer callback; + + @ffi.Uint64() + external int min_sendable; + + @ffi.Uint64() + external int max_sendable; + + external ffi.Pointer metadata_str; + + @ffi.Uint16() + external int comment_allowed; + + external ffi.Pointer domain; + + @ffi.Bool() + external bool allows_nostr; + + external ffi.Pointer nostr_pubkey; + + external ffi.Pointer ln_address; +} + +final class wire_cst_ln_url_pay_request extends ffi.Struct { + external wire_cst_ln_url_pay_request_data data; + + @ffi.Uint64() + external int amount_msat; + + external ffi.Pointer comment; + + external ffi.Pointer payment_label; +} + +final class wire_cst_ln_url_withdraw_request_data extends ffi.Struct { + external ffi.Pointer callback; + + external ffi.Pointer k1; + + external ffi.Pointer default_description; + + @ffi.Uint64() + external int min_withdrawable; + + @ffi.Uint64() + external int max_withdrawable; +} + +final class wire_cst_ln_url_withdraw_request extends ffi.Struct { + external wire_cst_ln_url_withdraw_request_data data; + + @ffi.Uint64() + external int amount_msat; + + external ffi.Pointer description; +} + final class wire_cst_prepare_pay_onchain_response extends ffi.Struct { @ffi.Uint64() external int amount_sat; @@ -815,11 +1148,44 @@ final class wire_cst_connect_request extends ffi.Struct { external wire_cst_config config; } -final class wire_cst_list_payment extends ffi.Struct { - external ffi.Pointer ptr; +final class wire_cst_aes_success_action_data_decrypted extends ffi.Struct { + external ffi.Pointer description; + + external ffi.Pointer plaintext; +} + +final class wire_cst_AesSuccessActionDataResult_Decrypted extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_AesSuccessActionDataResult_ErrorStatus extends ffi.Struct { + external ffi.Pointer reason; +} + +final class AesSuccessActionDataResultKind extends ffi.Union { + external wire_cst_AesSuccessActionDataResult_Decrypted Decrypted; + + external wire_cst_AesSuccessActionDataResult_ErrorStatus ErrorStatus; +} + +final class wire_cst_aes_success_action_data_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external AesSuccessActionDataResultKind kind; +} + +final class wire_cst_bitcoin_address_data extends ffi.Struct { + external ffi.Pointer address; @ffi.Int32() - external int len; + external int network; + + external ffi.Pointer amount_sat; + + external ffi.Pointer label; + + external ffi.Pointer message; } final class wire_cst_route_hint_hop extends ffi.Struct { @@ -860,40 +1226,6 @@ final class wire_cst_list_route_hint extends ffi.Struct { external int len; } -final class wire_cst_get_info_response extends ffi.Struct { - @ffi.Uint64() - external int balance_sat; - - @ffi.Uint64() - external int pending_send_sat; - - @ffi.Uint64() - external int pending_receive_sat; - - external ffi.Pointer pubkey; -} - -final class wire_cst_LiquidSdkError_Generic extends ffi.Struct { - external ffi.Pointer err; -} - -final class wire_cst_LiquidSdkError_ServiceConnectivity extends ffi.Struct { - external ffi.Pointer err; -} - -final class LiquidSdkErrorKind extends ffi.Union { - external wire_cst_LiquidSdkError_Generic Generic; - - external wire_cst_LiquidSdkError_ServiceConnectivity ServiceConnectivity; -} - -final class wire_cst_liquid_sdk_error extends ffi.Struct { - @ffi.Int32() - external int tag; - - external LiquidSdkErrorKind kind; -} - final class wire_cst_ln_invoice extends ffi.Struct { external ffi.Pointer bolt11; @@ -924,6 +1256,371 @@ final class wire_cst_ln_invoice extends ffi.Struct { external int min_final_cltv_expiry_delta; } +final class wire_cst_ln_url_error_data extends ffi.Struct { + external ffi.Pointer reason; +} + +final class wire_cst_ln_url_pay_error_data extends ffi.Struct { + external ffi.Pointer payment_hash; + + external ffi.Pointer reason; +} + +final class wire_cst_SuccessActionProcessed_Aes extends ffi.Struct { + external ffi.Pointer result; +} + +final class wire_cst_message_success_action_data extends ffi.Struct { + external ffi.Pointer message; +} + +final class wire_cst_SuccessActionProcessed_Message extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_url_success_action_data extends ffi.Struct { + external ffi.Pointer description; + + external ffi.Pointer url; +} + +final class wire_cst_SuccessActionProcessed_Url extends ffi.Struct { + external ffi.Pointer data; +} + +final class SuccessActionProcessedKind extends ffi.Union { + external wire_cst_SuccessActionProcessed_Aes Aes; + + external wire_cst_SuccessActionProcessed_Message Message; + + external wire_cst_SuccessActionProcessed_Url Url; +} + +final class wire_cst_success_action_processed extends ffi.Struct { + @ffi.Int32() + external int tag; + + external SuccessActionProcessedKind kind; +} + +final class wire_cst_ln_url_pay_success_data extends ffi.Struct { + external wire_cst_payment payment; + + external ffi.Pointer success_action; +} + +final class wire_cst_ln_url_withdraw_success_data extends ffi.Struct { + external wire_cst_ln_invoice invoice; +} + +final class wire_cst_list_payment extends ffi.Struct { + external ffi.Pointer ptr; + + @ffi.Int32() + external int len; +} + +final class wire_cst_get_info_response extends ffi.Struct { + @ffi.Uint64() + external int balance_sat; + + @ffi.Uint64() + external int pending_send_sat; + + @ffi.Uint64() + external int pending_receive_sat; + + external ffi.Pointer pubkey; +} + +final class wire_cst_InputType_BitcoinAddress extends ffi.Struct { + external ffi.Pointer address; +} + +final class wire_cst_InputType_Bolt11 extends ffi.Struct { + external ffi.Pointer invoice; +} + +final class wire_cst_InputType_NodeId extends ffi.Struct { + external ffi.Pointer node_id; +} + +final class wire_cst_InputType_Url extends ffi.Struct { + external ffi.Pointer url; +} + +final class wire_cst_InputType_LnUrlPay extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlWithdraw extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlAuth extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_InputType_LnUrlError extends ffi.Struct { + external ffi.Pointer data; +} + +final class InputTypeKind extends ffi.Union { + external wire_cst_InputType_BitcoinAddress BitcoinAddress; + + external wire_cst_InputType_Bolt11 Bolt11; + + external wire_cst_InputType_NodeId NodeId; + + external wire_cst_InputType_Url Url; + + external wire_cst_InputType_LnUrlPay LnUrlPay; + + external wire_cst_InputType_LnUrlWithdraw LnUrlWithdraw; + + external wire_cst_InputType_LnUrlAuth LnUrlAuth; + + external wire_cst_InputType_LnUrlError LnUrlError; +} + +final class wire_cst_input_type extends ffi.Struct { + @ffi.Int32() + external int tag; + + external InputTypeKind kind; +} + +final class wire_cst_LiquidSdkError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LiquidSdkError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LiquidSdkErrorKind extends ffi.Union { + external wire_cst_LiquidSdkError_Generic Generic; + + external wire_cst_LiquidSdkError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_liquid_sdk_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LiquidSdkErrorKind kind; +} + +final class wire_cst_LnUrlAuthError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlAuthError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlAuthError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlAuthErrorKind extends ffi.Union { + external wire_cst_LnUrlAuthError_Generic Generic; + + external wire_cst_LnUrlAuthError_InvalidUri InvalidUri; + + external wire_cst_LnUrlAuthError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_auth_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlAuthErrorKind kind; +} + +final class wire_cst_LnUrlCallbackStatus_ErrorStatus extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlCallbackStatusKind extends ffi.Union { + external wire_cst_LnUrlCallbackStatus_ErrorStatus ErrorStatus; +} + +final class wire_cst_ln_url_callback_status extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlCallbackStatusKind kind; +} + +final class wire_cst_LnUrlPayError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidAmount extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidInvoice extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidNetwork extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_InvoiceExpired extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_PaymentFailed extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_PaymentTimeout extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_RouteNotFound extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_RouteTooExpensive extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlPayError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlPayErrorKind extends ffi.Union { + external wire_cst_LnUrlPayError_Generic Generic; + + external wire_cst_LnUrlPayError_InvalidAmount InvalidAmount; + + external wire_cst_LnUrlPayError_InvalidInvoice InvalidInvoice; + + external wire_cst_LnUrlPayError_InvalidNetwork InvalidNetwork; + + external wire_cst_LnUrlPayError_InvalidUri InvalidUri; + + external wire_cst_LnUrlPayError_InvoiceExpired InvoiceExpired; + + external wire_cst_LnUrlPayError_PaymentFailed PaymentFailed; + + external wire_cst_LnUrlPayError_PaymentTimeout PaymentTimeout; + + external wire_cst_LnUrlPayError_RouteNotFound RouteNotFound; + + external wire_cst_LnUrlPayError_RouteTooExpensive RouteTooExpensive; + + external wire_cst_LnUrlPayError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_pay_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlPayErrorKind kind; +} + +final class wire_cst_LnUrlPayResult_EndpointSuccess extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlPayResult_EndpointError extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlPayResult_PayError extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlPayResultKind extends ffi.Union { + external wire_cst_LnUrlPayResult_EndpointSuccess EndpointSuccess; + + external wire_cst_LnUrlPayResult_EndpointError EndpointError; + + external wire_cst_LnUrlPayResult_PayError PayError; +} + +final class wire_cst_ln_url_pay_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlPayResultKind kind; +} + +final class wire_cst_LnUrlWithdrawError_Generic extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidAmount extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidInvoice extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvalidUri extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints extends ffi.Struct { + external ffi.Pointer err; +} + +final class wire_cst_LnUrlWithdrawError_ServiceConnectivity extends ffi.Struct { + external ffi.Pointer err; +} + +final class LnUrlWithdrawErrorKind extends ffi.Union { + external wire_cst_LnUrlWithdrawError_Generic Generic; + + external wire_cst_LnUrlWithdrawError_InvalidAmount InvalidAmount; + + external wire_cst_LnUrlWithdrawError_InvalidInvoice InvalidInvoice; + + external wire_cst_LnUrlWithdrawError_InvalidUri InvalidUri; + + external wire_cst_LnUrlWithdrawError_InvoiceNoRoutingHints InvoiceNoRoutingHints; + + external wire_cst_LnUrlWithdrawError_ServiceConnectivity ServiceConnectivity; +} + +final class wire_cst_ln_url_withdraw_error extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlWithdrawErrorKind kind; +} + +final class wire_cst_LnUrlWithdrawResult_Ok extends ffi.Struct { + external ffi.Pointer data; +} + +final class wire_cst_LnUrlWithdrawResult_ErrorStatus extends ffi.Struct { + external ffi.Pointer data; +} + +final class LnUrlWithdrawResultKind extends ffi.Union { + external wire_cst_LnUrlWithdrawResult_Ok Ok; + + external wire_cst_LnUrlWithdrawResult_ErrorStatus ErrorStatus; +} + +final class wire_cst_ln_url_withdraw_result extends ffi.Struct { + @ffi.Int32() + external int tag; + + external LnUrlWithdrawResultKind kind; +} + final class wire_cst_log_entry extends ffi.Struct { external ffi.Pointer line; diff --git a/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKMapper.kt b/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKMapper.kt index daa8782..250c445 100644 --- a/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKMapper.kt +++ b/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKMapper.kt @@ -3,6 +3,42 @@ import breez_liquid_sdk.* import com.facebook.react.bridge.* import java.util.* +fun asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: ReadableMap): AesSuccessActionDataDecrypted? { + if (!validateMandatoryFields( + aesSuccessActionDataDecrypted, + arrayOf( + "description", + "plaintext", + ), + ) + ) { + return null + } + val description = aesSuccessActionDataDecrypted.getString("description")!! + val plaintext = aesSuccessActionDataDecrypted.getString("plaintext")!! + return AesSuccessActionDataDecrypted( + description, + plaintext, + ) +} + +fun readableMapOf(aesSuccessActionDataDecrypted: AesSuccessActionDataDecrypted): ReadableMap = + readableMapOf( + "description" to aesSuccessActionDataDecrypted.description, + "plaintext" to aesSuccessActionDataDecrypted.plaintext, + ) + +fun asAesSuccessActionDataDecryptedList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asAesSuccessActionDataDecrypted(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asBackupRequest(backupRequest: ReadableMap): BackupRequest? { if (!validateMandatoryFields( backupRequest, @@ -33,6 +69,51 @@ fun asBackupRequestList(arr: ReadableArray): List { return list } +fun asBitcoinAddressData(bitcoinAddressData: ReadableMap): BitcoinAddressData? { + if (!validateMandatoryFields( + bitcoinAddressData, + arrayOf( + "address", + "network", + ), + ) + ) { + return null + } + val address = bitcoinAddressData.getString("address")!! + val network = bitcoinAddressData.getString("network")?.let { asNetwork(it) }!! + val amountSat = if (hasNonNullKey(bitcoinAddressData, "amountSat")) bitcoinAddressData.getDouble("amountSat").toULong() else null + val label = if (hasNonNullKey(bitcoinAddressData, "label")) bitcoinAddressData.getString("label") else null + val message = if (hasNonNullKey(bitcoinAddressData, "message")) bitcoinAddressData.getString("message") else null + return BitcoinAddressData( + address, + network, + amountSat, + label, + message, + ) +} + +fun readableMapOf(bitcoinAddressData: BitcoinAddressData): ReadableMap = + readableMapOf( + "address" to bitcoinAddressData.address, + "network" to bitcoinAddressData.network.name.lowercase(), + "amountSat" to bitcoinAddressData.amountSat, + "label" to bitcoinAddressData.label, + "message" to bitcoinAddressData.message, + ) + +fun asBitcoinAddressDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asBitcoinAddressData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asConfig(config: ReadableMap): Config? { if (!validateMandatoryFields( config, @@ -53,7 +134,7 @@ fun asConfig(config: ReadableMap): Config? { val liquidElectrumUrl = config.getString("liquidElectrumUrl")!! val bitcoinElectrumUrl = config.getString("bitcoinElectrumUrl")!! val workingDir = config.getString("workingDir")!! - val network = config.getString("network")?.let { asNetwork(it) }!! + val network = config.getString("network")?.let { asLiquidNetwork(it) }!! val paymentTimeoutSec = config.getDouble("paymentTimeoutSec").toULong() val zeroConfMinFeeRate = config.getDouble("zeroConfMinFeeRate") val zeroConfMaxAmountSat = @@ -254,6 +335,382 @@ fun asLnInvoiceList(arr: ReadableArray): List { return list } +fun asLnUrlAuthRequestData(lnUrlAuthRequestData: ReadableMap): LnUrlAuthRequestData? { + if (!validateMandatoryFields( + lnUrlAuthRequestData, + arrayOf( + "k1", + "domain", + "url", + ), + ) + ) { + return null + } + val k1 = lnUrlAuthRequestData.getString("k1")!! + val domain = lnUrlAuthRequestData.getString("domain")!! + val url = lnUrlAuthRequestData.getString("url")!! + val action = if (hasNonNullKey(lnUrlAuthRequestData, "action")) lnUrlAuthRequestData.getString("action") else null + return LnUrlAuthRequestData( + k1, + domain, + url, + action, + ) +} + +fun readableMapOf(lnUrlAuthRequestData: LnUrlAuthRequestData): ReadableMap = + readableMapOf( + "k1" to lnUrlAuthRequestData.k1, + "domain" to lnUrlAuthRequestData.domain, + "url" to lnUrlAuthRequestData.url, + "action" to lnUrlAuthRequestData.action, + ) + +fun asLnUrlAuthRequestDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlAuthRequestData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlErrorData(lnUrlErrorData: ReadableMap): LnUrlErrorData? { + if (!validateMandatoryFields( + lnUrlErrorData, + arrayOf( + "reason", + ), + ) + ) { + return null + } + val reason = lnUrlErrorData.getString("reason")!! + return LnUrlErrorData( + reason, + ) +} + +fun readableMapOf(lnUrlErrorData: LnUrlErrorData): ReadableMap = + readableMapOf( + "reason" to lnUrlErrorData.reason, + ) + +fun asLnUrlErrorDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlErrorData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlPayErrorData(lnUrlPayErrorData: ReadableMap): LnUrlPayErrorData? { + if (!validateMandatoryFields( + lnUrlPayErrorData, + arrayOf( + "paymentHash", + "reason", + ), + ) + ) { + return null + } + val paymentHash = lnUrlPayErrorData.getString("paymentHash")!! + val reason = lnUrlPayErrorData.getString("reason")!! + return LnUrlPayErrorData( + paymentHash, + reason, + ) +} + +fun readableMapOf(lnUrlPayErrorData: LnUrlPayErrorData): ReadableMap = + readableMapOf( + "paymentHash" to lnUrlPayErrorData.paymentHash, + "reason" to lnUrlPayErrorData.reason, + ) + +fun asLnUrlPayErrorDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlPayErrorData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlPayRequest(lnUrlPayRequest: ReadableMap): LnUrlPayRequest? { + if (!validateMandatoryFields( + lnUrlPayRequest, + arrayOf( + "data", + "amountMsat", + ), + ) + ) { + return null + } + val data = lnUrlPayRequest.getMap("data")?.let { asLnUrlPayRequestData(it) }!! + val amountMsat = lnUrlPayRequest.getDouble("amountMsat").toULong() + val comment = if (hasNonNullKey(lnUrlPayRequest, "comment")) lnUrlPayRequest.getString("comment") else null + val paymentLabel = if (hasNonNullKey(lnUrlPayRequest, "paymentLabel")) lnUrlPayRequest.getString("paymentLabel") else null + return LnUrlPayRequest( + data, + amountMsat, + comment, + paymentLabel, + ) +} + +fun readableMapOf(lnUrlPayRequest: LnUrlPayRequest): ReadableMap = + readableMapOf( + "data" to readableMapOf(lnUrlPayRequest.data), + "amountMsat" to lnUrlPayRequest.amountMsat, + "comment" to lnUrlPayRequest.comment, + "paymentLabel" to lnUrlPayRequest.paymentLabel, + ) + +fun asLnUrlPayRequestList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlPayRequest(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlPayRequestData(lnUrlPayRequestData: ReadableMap): LnUrlPayRequestData? { + if (!validateMandatoryFields( + lnUrlPayRequestData, + arrayOf( + "callback", + "minSendable", + "maxSendable", + "metadataStr", + "commentAllowed", + "domain", + "allowsNostr", + ), + ) + ) { + return null + } + val callback = lnUrlPayRequestData.getString("callback")!! + val minSendable = lnUrlPayRequestData.getDouble("minSendable").toULong() + val maxSendable = lnUrlPayRequestData.getDouble("maxSendable").toULong() + val metadataStr = lnUrlPayRequestData.getString("metadataStr")!! + val commentAllowed = lnUrlPayRequestData.getInt("commentAllowed").toUShort() + val domain = lnUrlPayRequestData.getString("domain")!! + val allowsNostr = lnUrlPayRequestData.getBoolean("allowsNostr") + val nostrPubkey = if (hasNonNullKey(lnUrlPayRequestData, "nostrPubkey")) lnUrlPayRequestData.getString("nostrPubkey") else null + val lnAddress = if (hasNonNullKey(lnUrlPayRequestData, "lnAddress")) lnUrlPayRequestData.getString("lnAddress") else null + return LnUrlPayRequestData( + callback, + minSendable, + maxSendable, + metadataStr, + commentAllowed, + domain, + allowsNostr, + nostrPubkey, + lnAddress, + ) +} + +fun readableMapOf(lnUrlPayRequestData: LnUrlPayRequestData): ReadableMap = + readableMapOf( + "callback" to lnUrlPayRequestData.callback, + "minSendable" to lnUrlPayRequestData.minSendable, + "maxSendable" to lnUrlPayRequestData.maxSendable, + "metadataStr" to lnUrlPayRequestData.metadataStr, + "commentAllowed" to lnUrlPayRequestData.commentAllowed, + "domain" to lnUrlPayRequestData.domain, + "allowsNostr" to lnUrlPayRequestData.allowsNostr, + "nostrPubkey" to lnUrlPayRequestData.nostrPubkey, + "lnAddress" to lnUrlPayRequestData.lnAddress, + ) + +fun asLnUrlPayRequestDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlPayRequestData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlPaySuccessData(lnUrlPaySuccessData: ReadableMap): LnUrlPaySuccessData? { + if (!validateMandatoryFields( + lnUrlPaySuccessData, + arrayOf( + "payment", + ), + ) + ) { + return null + } + val successAction = + if (hasNonNullKey(lnUrlPaySuccessData, "successAction")) { + lnUrlPaySuccessData.getMap("successAction")?.let { + asSuccessActionProcessed(it) + } + } else { + null + } + val payment = lnUrlPaySuccessData.getMap("payment")?.let { asPayment(it) }!! + return LnUrlPaySuccessData( + successAction, + payment, + ) +} + +fun readableMapOf(lnUrlPaySuccessData: LnUrlPaySuccessData): ReadableMap = + readableMapOf( + "successAction" to lnUrlPaySuccessData.successAction?.let { readableMapOf(it) }, + "payment" to readableMapOf(lnUrlPaySuccessData.payment), + ) + +fun asLnUrlPaySuccessDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlPaySuccessData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlWithdrawRequest(lnUrlWithdrawRequest: ReadableMap): LnUrlWithdrawRequest? { + if (!validateMandatoryFields( + lnUrlWithdrawRequest, + arrayOf( + "data", + "amountMsat", + ), + ) + ) { + return null + } + val data = lnUrlWithdrawRequest.getMap("data")?.let { asLnUrlWithdrawRequestData(it) }!! + val amountMsat = lnUrlWithdrawRequest.getDouble("amountMsat").toULong() + val description = if (hasNonNullKey(lnUrlWithdrawRequest, "description")) lnUrlWithdrawRequest.getString("description") else null + return LnUrlWithdrawRequest( + data, + amountMsat, + description, + ) +} + +fun readableMapOf(lnUrlWithdrawRequest: LnUrlWithdrawRequest): ReadableMap = + readableMapOf( + "data" to readableMapOf(lnUrlWithdrawRequest.data), + "amountMsat" to lnUrlWithdrawRequest.amountMsat, + "description" to lnUrlWithdrawRequest.description, + ) + +fun asLnUrlWithdrawRequestList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlWithdrawRequest(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: ReadableMap): LnUrlWithdrawRequestData? { + if (!validateMandatoryFields( + lnUrlWithdrawRequestData, + arrayOf( + "callback", + "k1", + "defaultDescription", + "minWithdrawable", + "maxWithdrawable", + ), + ) + ) { + return null + } + val callback = lnUrlWithdrawRequestData.getString("callback")!! + val k1 = lnUrlWithdrawRequestData.getString("k1")!! + val defaultDescription = lnUrlWithdrawRequestData.getString("defaultDescription")!! + val minWithdrawable = lnUrlWithdrawRequestData.getDouble("minWithdrawable").toULong() + val maxWithdrawable = lnUrlWithdrawRequestData.getDouble("maxWithdrawable").toULong() + return LnUrlWithdrawRequestData( + callback, + k1, + defaultDescription, + minWithdrawable, + maxWithdrawable, + ) +} + +fun readableMapOf(lnUrlWithdrawRequestData: LnUrlWithdrawRequestData): ReadableMap = + readableMapOf( + "callback" to lnUrlWithdrawRequestData.callback, + "k1" to lnUrlWithdrawRequestData.k1, + "defaultDescription" to lnUrlWithdrawRequestData.defaultDescription, + "minWithdrawable" to lnUrlWithdrawRequestData.minWithdrawable, + "maxWithdrawable" to lnUrlWithdrawRequestData.maxWithdrawable, + ) + +fun asLnUrlWithdrawRequestDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlWithdrawRequestData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: ReadableMap): LnUrlWithdrawSuccessData? { + if (!validateMandatoryFields( + lnUrlWithdrawSuccessData, + arrayOf( + "invoice", + ), + ) + ) { + return null + } + val invoice = lnUrlWithdrawSuccessData.getMap("invoice")?.let { asLnInvoice(it) }!! + return LnUrlWithdrawSuccessData( + invoice, + ) +} + +fun readableMapOf(lnUrlWithdrawSuccessData: LnUrlWithdrawSuccessData): ReadableMap = + readableMapOf( + "invoice" to readableMapOf(lnUrlWithdrawSuccessData.invoice), + ) + +fun asLnUrlWithdrawSuccessDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlWithdrawSuccessData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asLogEntry(logEntry: ReadableMap): LogEntry? { if (!validateMandatoryFields( logEntry, @@ -290,6 +747,38 @@ fun asLogEntryList(arr: ReadableArray): List { return list } +fun asMessageSuccessActionData(messageSuccessActionData: ReadableMap): MessageSuccessActionData? { + if (!validateMandatoryFields( + messageSuccessActionData, + arrayOf( + "message", + ), + ) + ) { + return null + } + val message = messageSuccessActionData.getString("message")!! + return MessageSuccessActionData( + message, + ) +} + +fun readableMapOf(messageSuccessActionData: MessageSuccessActionData): ReadableMap = + readableMapOf( + "message" to messageSuccessActionData.message, + ) + +fun asMessageSuccessActionDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asMessageSuccessActionData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asPayOnchainRequest(payOnchainRequest: ReadableMap): PayOnchainRequest? { if (!validateMandatoryFields( payOnchainRequest, @@ -780,6 +1269,175 @@ fun asSendPaymentResponseList(arr: ReadableArray): List { return list } +fun asUrlSuccessActionData(urlSuccessActionData: ReadableMap): UrlSuccessActionData? { + if (!validateMandatoryFields( + urlSuccessActionData, + arrayOf( + "description", + "url", + ), + ) + ) { + return null + } + val description = urlSuccessActionData.getString("description")!! + val url = urlSuccessActionData.getString("url")!! + return UrlSuccessActionData( + description, + url, + ) +} + +fun readableMapOf(urlSuccessActionData: UrlSuccessActionData): ReadableMap = + readableMapOf( + "description" to urlSuccessActionData.description, + "url" to urlSuccessActionData.url, + ) + +fun asUrlSuccessActionDataList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asUrlSuccessActionData(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asAesSuccessActionDataResult(aesSuccessActionDataResult: ReadableMap): AesSuccessActionDataResult? { + val type = aesSuccessActionDataResult.getString("type") + + if (type == "decrypted") { + return AesSuccessActionDataResult.Decrypted( + aesSuccessActionDataResult.getMap("data")?.let { asAesSuccessActionDataDecrypted(it) }!!, + ) + } + if (type == "errorStatus") { + return AesSuccessActionDataResult.ErrorStatus(aesSuccessActionDataResult.getString("reason")!!) + } + return null +} + +fun readableMapOf(aesSuccessActionDataResult: AesSuccessActionDataResult): ReadableMap? { + val map = Arguments.createMap() + when (aesSuccessActionDataResult) { + is AesSuccessActionDataResult.Decrypted -> { + pushToMap(map, "type", "decrypted") + pushToMap(map, "data", readableMapOf(aesSuccessActionDataResult.data)) + } + is AesSuccessActionDataResult.ErrorStatus -> { + pushToMap(map, "type", "errorStatus") + pushToMap(map, "reason", aesSuccessActionDataResult.reason) + } + } + return map +} + +fun asAesSuccessActionDataResultList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asAesSuccessActionDataResult(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asInputType(inputType: ReadableMap): InputType? { + val type = inputType.getString("type") + + if (type == "bitcoinAddress") { + return InputType.BitcoinAddress(inputType.getMap("address")?.let { asBitcoinAddressData(it) }!!) + } + if (type == "bolt11") { + return InputType.Bolt11(inputType.getMap("invoice")?.let { asLnInvoice(it) }!!) + } + if (type == "nodeId") { + return InputType.NodeId(inputType.getString("nodeId")!!) + } + if (type == "url") { + return InputType.Url(inputType.getString("url")!!) + } + if (type == "lnUrlPay") { + return InputType.LnUrlPay(inputType.getMap("data")?.let { asLnUrlPayRequestData(it) }!!) + } + if (type == "lnUrlWithdraw") { + return InputType.LnUrlWithdraw(inputType.getMap("data")?.let { asLnUrlWithdrawRequestData(it) }!!) + } + if (type == "lnUrlAuth") { + return InputType.LnUrlAuth(inputType.getMap("data")?.let { asLnUrlAuthRequestData(it) }!!) + } + if (type == "lnUrlError") { + return InputType.LnUrlError(inputType.getMap("data")?.let { asLnUrlErrorData(it) }!!) + } + return null +} + +fun readableMapOf(inputType: InputType): ReadableMap? { + val map = Arguments.createMap() + when (inputType) { + is InputType.BitcoinAddress -> { + pushToMap(map, "type", "bitcoinAddress") + pushToMap(map, "address", readableMapOf(inputType.address)) + } + is InputType.Bolt11 -> { + pushToMap(map, "type", "bolt11") + pushToMap(map, "invoice", readableMapOf(inputType.invoice)) + } + is InputType.NodeId -> { + pushToMap(map, "type", "nodeId") + pushToMap(map, "nodeId", inputType.nodeId) + } + is InputType.Url -> { + pushToMap(map, "type", "url") + pushToMap(map, "url", inputType.url) + } + is InputType.LnUrlPay -> { + pushToMap(map, "type", "lnUrlPay") + pushToMap(map, "data", readableMapOf(inputType.data)) + } + is InputType.LnUrlWithdraw -> { + pushToMap(map, "type", "lnUrlWithdraw") + pushToMap(map, "data", readableMapOf(inputType.data)) + } + is InputType.LnUrlAuth -> { + pushToMap(map, "type", "lnUrlAuth") + pushToMap(map, "data", readableMapOf(inputType.data)) + } + is InputType.LnUrlError -> { + pushToMap(map, "type", "lnUrlError") + pushToMap(map, "data", readableMapOf(inputType.data)) + } + } + return map +} + +fun asInputTypeList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asInputType(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLiquidNetwork(type: String): LiquidNetwork = LiquidNetwork.valueOf(camelToUpperSnakeCase(type)) + +fun asLiquidNetworkList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is String -> list.add(asLiquidNetwork(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asLiquidSdkEvent(liquidSdkEvent: ReadableMap): LiquidSdkEvent? { val type = liquidSdkEvent.getString("type") @@ -852,6 +1510,126 @@ fun asLiquidSdkEventList(arr: ReadableArray): List { return list } +fun asLnUrlCallbackStatus(lnUrlCallbackStatus: ReadableMap): LnUrlCallbackStatus? { + val type = lnUrlCallbackStatus.getString("type") + + if (type == "ok") { + return LnUrlCallbackStatus.Ok + } + if (type == "errorStatus") { + return LnUrlCallbackStatus.ErrorStatus(lnUrlCallbackStatus.getMap("data")?.let { asLnUrlErrorData(it) }!!) + } + return null +} + +fun readableMapOf(lnUrlCallbackStatus: LnUrlCallbackStatus): ReadableMap? { + val map = Arguments.createMap() + when (lnUrlCallbackStatus) { + is LnUrlCallbackStatus.Ok -> { + pushToMap(map, "type", "ok") + } + is LnUrlCallbackStatus.ErrorStatus -> { + pushToMap(map, "type", "errorStatus") + pushToMap(map, "data", readableMapOf(lnUrlCallbackStatus.data)) + } + } + return map +} + +fun asLnUrlCallbackStatusList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlCallbackStatus(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlPayResult(lnUrlPayResult: ReadableMap): LnUrlPayResult? { + val type = lnUrlPayResult.getString("type") + + if (type == "endpointSuccess") { + return LnUrlPayResult.EndpointSuccess(lnUrlPayResult.getMap("data")?.let { asLnUrlPaySuccessData(it) }!!) + } + if (type == "endpointError") { + return LnUrlPayResult.EndpointError(lnUrlPayResult.getMap("data")?.let { asLnUrlErrorData(it) }!!) + } + if (type == "payError") { + return LnUrlPayResult.PayError(lnUrlPayResult.getMap("data")?.let { asLnUrlPayErrorData(it) }!!) + } + return null +} + +fun readableMapOf(lnUrlPayResult: LnUrlPayResult): ReadableMap? { + val map = Arguments.createMap() + when (lnUrlPayResult) { + is LnUrlPayResult.EndpointSuccess -> { + pushToMap(map, "type", "endpointSuccess") + pushToMap(map, "data", readableMapOf(lnUrlPayResult.data)) + } + is LnUrlPayResult.EndpointError -> { + pushToMap(map, "type", "endpointError") + pushToMap(map, "data", readableMapOf(lnUrlPayResult.data)) + } + is LnUrlPayResult.PayError -> { + pushToMap(map, "type", "payError") + pushToMap(map, "data", readableMapOf(lnUrlPayResult.data)) + } + } + return map +} + +fun asLnUrlPayResultList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlPayResult(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + +fun asLnUrlWithdrawResult(lnUrlWithdrawResult: ReadableMap): LnUrlWithdrawResult? { + val type = lnUrlWithdrawResult.getString("type") + + if (type == "ok") { + return LnUrlWithdrawResult.Ok(lnUrlWithdrawResult.getMap("data")?.let { asLnUrlWithdrawSuccessData(it) }!!) + } + if (type == "errorStatus") { + return LnUrlWithdrawResult.ErrorStatus(lnUrlWithdrawResult.getMap("data")?.let { asLnUrlErrorData(it) }!!) + } + return null +} + +fun readableMapOf(lnUrlWithdrawResult: LnUrlWithdrawResult): ReadableMap? { + val map = Arguments.createMap() + when (lnUrlWithdrawResult) { + is LnUrlWithdrawResult.Ok -> { + pushToMap(map, "type", "ok") + pushToMap(map, "data", readableMapOf(lnUrlWithdrawResult.data)) + } + is LnUrlWithdrawResult.ErrorStatus -> { + pushToMap(map, "type", "errorStatus") + pushToMap(map, "data", readableMapOf(lnUrlWithdrawResult.data)) + } + } + return map +} + +fun asLnUrlWithdrawResultList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asLnUrlWithdrawResult(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun asNetwork(type: String): Network = Network.valueOf(camelToUpperSnakeCase(type)) fun asNetworkList(arr: ReadableArray): List { @@ -891,6 +1669,51 @@ fun asPaymentTypeList(arr: ReadableArray): List { return list } +fun asSuccessActionProcessed(successActionProcessed: ReadableMap): SuccessActionProcessed? { + val type = successActionProcessed.getString("type") + + if (type == "aes") { + return SuccessActionProcessed.Aes(successActionProcessed.getMap("result")?.let { asAesSuccessActionDataResult(it) }!!) + } + if (type == "message") { + return SuccessActionProcessed.Message(successActionProcessed.getMap("data")?.let { asMessageSuccessActionData(it) }!!) + } + if (type == "url") { + return SuccessActionProcessed.Url(successActionProcessed.getMap("data")?.let { asUrlSuccessActionData(it) }!!) + } + return null +} + +fun readableMapOf(successActionProcessed: SuccessActionProcessed): ReadableMap? { + val map = Arguments.createMap() + when (successActionProcessed) { + is SuccessActionProcessed.Aes -> { + pushToMap(map, "type", "aes") + pushToMap(map, "result", readableMapOf(successActionProcessed.result)) + } + is SuccessActionProcessed.Message -> { + pushToMap(map, "type", "message") + pushToMap(map, "data", readableMapOf(successActionProcessed.data)) + } + is SuccessActionProcessed.Url -> { + pushToMap(map, "type", "url") + pushToMap(map, "data", readableMapOf(successActionProcessed.data)) + } + } + return map +} + +fun asSuccessActionProcessedList(arr: ReadableArray): List { + val list = ArrayList() + for (value in arr.toArrayList()) { + when (value) { + is ReadableMap -> list.add(asSuccessActionProcessed(value)!!) + else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}")) + } + } + return list +} + fun readableMapOf(vararg values: Pair): ReadableMap { val map = Arguments.createMap() for ((key, value) in values) { diff --git a/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKModule.kt b/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKModule.kt index e5c3b5a..955bd88 100644 --- a/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKModule.kt +++ b/packages/react-native/android/src/main/java/com/breezliquidsdk/BreezLiquidSDKModule.kt @@ -61,7 +61,7 @@ class BreezLiquidSDKModule( ) { executor.execute { try { - val networkTmp = asNetwork(network) + val networkTmp = asLiquidNetwork(network) val res = defaultConfig(networkTmp) val workingDir = File(reactApplicationContext.filesDir.toString() + "/breezLiquidSdk") @@ -74,13 +74,28 @@ class BreezLiquidSDKModule( } @ReactMethod - fun parseInvoice( - invoice: String, + fun parse( + input: String, promise: Promise, ) { executor.execute { try { - val res = parseInvoice(invoice) + val res = parse(input) + promise.resolve(readableMapOf(res)) + } catch (e: Exception) { + promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e) + } + } + } + + @ReactMethod + fun parseInvoice( + input: String, + promise: Promise, + ) { + executor.execute { + try { + val res = parseInvoice(input) promise.resolve(readableMapOf(res)) } catch (e: Exception) { promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e) @@ -349,4 +364,57 @@ class BreezLiquidSDKModule( } } } + + @ReactMethod + fun lnurlPay( + req: ReadableMap, + promise: Promise, + ) { + executor.execute { + try { + val lnUrlPayRequest = + asLnUrlPayRequest(req) ?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("req", "LnUrlPayRequest")) } + val res = getBindingLiquidSdk().lnurlPay(lnUrlPayRequest) + promise.resolve(readableMapOf(res)) + } catch (e: Exception) { + promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e) + } + } + } + + @ReactMethod + fun lnurlWithdraw( + req: ReadableMap, + promise: Promise, + ) { + executor.execute { + try { + val lnUrlWithdrawRequest = + asLnUrlWithdrawRequest(req) + ?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("req", "LnUrlWithdrawRequest")) } + val res = getBindingLiquidSdk().lnurlWithdraw(lnUrlWithdrawRequest) + promise.resolve(readableMapOf(res)) + } catch (e: Exception) { + promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e) + } + } + } + + @ReactMethod + fun lnurlAuth( + reqData: ReadableMap, + promise: Promise, + ) { + executor.execute { + try { + val lnUrlAuthRequestData = + asLnUrlAuthRequestData(reqData) + ?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("reqData", "LnUrlAuthRequestData")) } + val res = getBindingLiquidSdk().lnurlAuth(lnUrlAuthRequestData) + promise.resolve(readableMapOf(res)) + } catch (e: Exception) { + promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e) + } + } + } } diff --git a/packages/react-native/ios/BreezLiquidSDKMapper.swift b/packages/react-native/ios/BreezLiquidSDKMapper.swift index fc8364d..f42bfc6 100644 --- a/packages/react-native/ios/BreezLiquidSDKMapper.swift +++ b/packages/react-native/ios/BreezLiquidSDKMapper.swift @@ -2,6 +2,44 @@ import BreezLiquidSDK import Foundation enum BreezLiquidSDKMapper { + static func asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: [String: Any?]) throws -> AesSuccessActionDataDecrypted { + guard let description = aesSuccessActionDataDecrypted["description"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "AesSuccessActionDataDecrypted")) + } + guard let plaintext = aesSuccessActionDataDecrypted["plaintext"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "plaintext", typeName: "AesSuccessActionDataDecrypted")) + } + + return AesSuccessActionDataDecrypted( + description: description, + plaintext: plaintext + ) + } + + static func dictionaryOf(aesSuccessActionDataDecrypted: AesSuccessActionDataDecrypted) -> [String: Any?] { + return [ + "description": aesSuccessActionDataDecrypted.description, + "plaintext": aesSuccessActionDataDecrypted.plaintext, + ] + } + + static func asAesSuccessActionDataDecryptedList(arr: [Any]) throws -> [AesSuccessActionDataDecrypted] { + var list = [AesSuccessActionDataDecrypted]() + for value in arr { + if let val = value as? [String: Any?] { + var aesSuccessActionDataDecrypted = try asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: val) + list.append(aesSuccessActionDataDecrypted) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "AesSuccessActionDataDecrypted")) + } + } + return list + } + + static func arrayOf(aesSuccessActionDataDecryptedList: [AesSuccessActionDataDecrypted]) -> [Any] { + return aesSuccessActionDataDecryptedList.map { v -> [String: Any?] in dictionaryOf(aesSuccessActionDataDecrypted: v) } + } + static func asBackupRequest(backupRequest: [String: Any?]) throws -> BackupRequest { var backupPath: String? if hasNonNilKey(data: backupRequest, key: "backupPath") { @@ -38,6 +76,73 @@ enum BreezLiquidSDKMapper { return backupRequestList.map { v -> [String: Any?] in dictionaryOf(backupRequest: v) } } + static func asBitcoinAddressData(bitcoinAddressData: [String: Any?]) throws -> BitcoinAddressData { + guard let address = bitcoinAddressData["address"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "BitcoinAddressData")) + } + guard let networkTmp = bitcoinAddressData["network"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "BitcoinAddressData")) + } + let network = try asNetwork(network: networkTmp) + + var amountSat: UInt64? + if hasNonNilKey(data: bitcoinAddressData, key: "amountSat") { + guard let amountSatTmp = bitcoinAddressData["amountSat"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "amountSat")) + } + amountSat = amountSatTmp + } + var label: String? + if hasNonNilKey(data: bitcoinAddressData, key: "label") { + guard let labelTmp = bitcoinAddressData["label"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "label")) + } + label = labelTmp + } + var message: String? + if hasNonNilKey(data: bitcoinAddressData, key: "message") { + guard let messageTmp = bitcoinAddressData["message"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "message")) + } + message = messageTmp + } + + return BitcoinAddressData( + address: address, + network: network, + amountSat: amountSat, + label: label, + message: message + ) + } + + static func dictionaryOf(bitcoinAddressData: BitcoinAddressData) -> [String: Any?] { + return [ + "address": bitcoinAddressData.address, + "network": valueOf(network: bitcoinAddressData.network), + "amountSat": bitcoinAddressData.amountSat == nil ? nil : bitcoinAddressData.amountSat, + "label": bitcoinAddressData.label == nil ? nil : bitcoinAddressData.label, + "message": bitcoinAddressData.message == nil ? nil : bitcoinAddressData.message, + ] + } + + static func asBitcoinAddressDataList(arr: [Any]) throws -> [BitcoinAddressData] { + var list = [BitcoinAddressData]() + for value in arr { + if let val = value as? [String: Any?] { + var bitcoinAddressData = try asBitcoinAddressData(bitcoinAddressData: val) + list.append(bitcoinAddressData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "BitcoinAddressData")) + } + } + return list + } + + static func arrayOf(bitcoinAddressDataList: [BitcoinAddressData]) -> [Any] { + return bitcoinAddressDataList.map { v -> [String: Any?] in dictionaryOf(bitcoinAddressData: v) } + } + static func asConfig(config: [String: Any?]) throws -> Config { guard let boltzUrl = config["boltzUrl"] as? String else { throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "boltzUrl", typeName: "Config")) @@ -54,7 +159,7 @@ enum BreezLiquidSDKMapper { guard let networkTmp = config["network"] as? String else { throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "Config")) } - let network = try asNetwork(network: networkTmp) + let network = try asLiquidNetwork(liquidNetwork: networkTmp) guard let paymentTimeoutSec = config["paymentTimeoutSec"] as? UInt64 else { throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentTimeoutSec", typeName: "Config")) @@ -88,7 +193,7 @@ enum BreezLiquidSDKMapper { "liquidElectrumUrl": config.liquidElectrumUrl, "bitcoinElectrumUrl": config.bitcoinElectrumUrl, "workingDir": config.workingDir, - "network": valueOf(network: config.network), + "network": valueOf(liquidNetwork: config.network), "paymentTimeoutSec": config.paymentTimeoutSec, "zeroConfMinFeeRate": config.zeroConfMinFeeRate, "zeroConfMaxAmountSat": config.zeroConfMaxAmountSat == nil ? nil : config.zeroConfMaxAmountSat, @@ -304,6 +409,443 @@ enum BreezLiquidSDKMapper { return lnInvoiceList.map { v -> [String: Any?] in dictionaryOf(lnInvoice: v) } } + static func asLnUrlAuthRequestData(lnUrlAuthRequestData: [String: Any?]) throws -> LnUrlAuthRequestData { + guard let k1 = lnUrlAuthRequestData["k1"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "k1", typeName: "LnUrlAuthRequestData")) + } + guard let domain = lnUrlAuthRequestData["domain"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "domain", typeName: "LnUrlAuthRequestData")) + } + guard let url = lnUrlAuthRequestData["url"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "LnUrlAuthRequestData")) + } + var action: String? + if hasNonNilKey(data: lnUrlAuthRequestData, key: "action") { + guard let actionTmp = lnUrlAuthRequestData["action"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "action")) + } + action = actionTmp + } + + return LnUrlAuthRequestData( + k1: k1, + domain: domain, + url: url, + action: action + ) + } + + static func dictionaryOf(lnUrlAuthRequestData: LnUrlAuthRequestData) -> [String: Any?] { + return [ + "k1": lnUrlAuthRequestData.k1, + "domain": lnUrlAuthRequestData.domain, + "url": lnUrlAuthRequestData.url, + "action": lnUrlAuthRequestData.action == nil ? nil : lnUrlAuthRequestData.action, + ] + } + + static func asLnUrlAuthRequestDataList(arr: [Any]) throws -> [LnUrlAuthRequestData] { + var list = [LnUrlAuthRequestData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlAuthRequestData = try asLnUrlAuthRequestData(lnUrlAuthRequestData: val) + list.append(lnUrlAuthRequestData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlAuthRequestData")) + } + } + return list + } + + static func arrayOf(lnUrlAuthRequestDataList: [LnUrlAuthRequestData]) -> [Any] { + return lnUrlAuthRequestDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlAuthRequestData: v) } + } + + static func asLnUrlErrorData(lnUrlErrorData: [String: Any?]) throws -> LnUrlErrorData { + guard let reason = lnUrlErrorData["reason"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "LnUrlErrorData")) + } + + return LnUrlErrorData( + reason: reason) + } + + static func dictionaryOf(lnUrlErrorData: LnUrlErrorData) -> [String: Any?] { + return [ + "reason": lnUrlErrorData.reason, + ] + } + + static func asLnUrlErrorDataList(arr: [Any]) throws -> [LnUrlErrorData] { + var list = [LnUrlErrorData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlErrorData = try asLnUrlErrorData(lnUrlErrorData: val) + list.append(lnUrlErrorData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlErrorData")) + } + } + return list + } + + static func arrayOf(lnUrlErrorDataList: [LnUrlErrorData]) -> [Any] { + return lnUrlErrorDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlErrorData: v) } + } + + static func asLnUrlPayErrorData(lnUrlPayErrorData: [String: Any?]) throws -> LnUrlPayErrorData { + guard let paymentHash = lnUrlPayErrorData["paymentHash"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentHash", typeName: "LnUrlPayErrorData")) + } + guard let reason = lnUrlPayErrorData["reason"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "LnUrlPayErrorData")) + } + + return LnUrlPayErrorData( + paymentHash: paymentHash, + reason: reason + ) + } + + static func dictionaryOf(lnUrlPayErrorData: LnUrlPayErrorData) -> [String: Any?] { + return [ + "paymentHash": lnUrlPayErrorData.paymentHash, + "reason": lnUrlPayErrorData.reason, + ] + } + + static func asLnUrlPayErrorDataList(arr: [Any]) throws -> [LnUrlPayErrorData] { + var list = [LnUrlPayErrorData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlPayErrorData = try asLnUrlPayErrorData(lnUrlPayErrorData: val) + list.append(lnUrlPayErrorData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayErrorData")) + } + } + return list + } + + static func arrayOf(lnUrlPayErrorDataList: [LnUrlPayErrorData]) -> [Any] { + return lnUrlPayErrorDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlPayErrorData: v) } + } + + static func asLnUrlPayRequest(lnUrlPayRequest: [String: Any?]) throws -> LnUrlPayRequest { + guard let dataTmp = lnUrlPayRequest["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayRequest")) + } + let data = try asLnUrlPayRequestData(lnUrlPayRequestData: dataTmp) + + guard let amountMsat = lnUrlPayRequest["amountMsat"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "amountMsat", typeName: "LnUrlPayRequest")) + } + var comment: String? + if hasNonNilKey(data: lnUrlPayRequest, key: "comment") { + guard let commentTmp = lnUrlPayRequest["comment"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "comment")) + } + comment = commentTmp + } + var paymentLabel: String? + if hasNonNilKey(data: lnUrlPayRequest, key: "paymentLabel") { + guard let paymentLabelTmp = lnUrlPayRequest["paymentLabel"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "paymentLabel")) + } + paymentLabel = paymentLabelTmp + } + + return LnUrlPayRequest( + data: data, + amountMsat: amountMsat, + comment: comment, + paymentLabel: paymentLabel + ) + } + + static func dictionaryOf(lnUrlPayRequest: LnUrlPayRequest) -> [String: Any?] { + return [ + "data": dictionaryOf(lnUrlPayRequestData: lnUrlPayRequest.data), + "amountMsat": lnUrlPayRequest.amountMsat, + "comment": lnUrlPayRequest.comment == nil ? nil : lnUrlPayRequest.comment, + "paymentLabel": lnUrlPayRequest.paymentLabel == nil ? nil : lnUrlPayRequest.paymentLabel, + ] + } + + static func asLnUrlPayRequestList(arr: [Any]) throws -> [LnUrlPayRequest] { + var list = [LnUrlPayRequest]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlPayRequest = try asLnUrlPayRequest(lnUrlPayRequest: val) + list.append(lnUrlPayRequest) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayRequest")) + } + } + return list + } + + static func arrayOf(lnUrlPayRequestList: [LnUrlPayRequest]) -> [Any] { + return lnUrlPayRequestList.map { v -> [String: Any?] in dictionaryOf(lnUrlPayRequest: v) } + } + + static func asLnUrlPayRequestData(lnUrlPayRequestData: [String: Any?]) throws -> LnUrlPayRequestData { + guard let callback = lnUrlPayRequestData["callback"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "callback", typeName: "LnUrlPayRequestData")) + } + guard let minSendable = lnUrlPayRequestData["minSendable"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "minSendable", typeName: "LnUrlPayRequestData")) + } + guard let maxSendable = lnUrlPayRequestData["maxSendable"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "maxSendable", typeName: "LnUrlPayRequestData")) + } + guard let metadataStr = lnUrlPayRequestData["metadataStr"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "metadataStr", typeName: "LnUrlPayRequestData")) + } + guard let commentAllowed = lnUrlPayRequestData["commentAllowed"] as? UInt16 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "commentAllowed", typeName: "LnUrlPayRequestData")) + } + guard let domain = lnUrlPayRequestData["domain"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "domain", typeName: "LnUrlPayRequestData")) + } + guard let allowsNostr = lnUrlPayRequestData["allowsNostr"] as? Bool else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "allowsNostr", typeName: "LnUrlPayRequestData")) + } + var nostrPubkey: String? + if hasNonNilKey(data: lnUrlPayRequestData, key: "nostrPubkey") { + guard let nostrPubkeyTmp = lnUrlPayRequestData["nostrPubkey"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "nostrPubkey")) + } + nostrPubkey = nostrPubkeyTmp + } + var lnAddress: String? + if hasNonNilKey(data: lnUrlPayRequestData, key: "lnAddress") { + guard let lnAddressTmp = lnUrlPayRequestData["lnAddress"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "lnAddress")) + } + lnAddress = lnAddressTmp + } + + return LnUrlPayRequestData( + callback: callback, + minSendable: minSendable, + maxSendable: maxSendable, + metadataStr: metadataStr, + commentAllowed: commentAllowed, + domain: domain, + allowsNostr: allowsNostr, + nostrPubkey: nostrPubkey, + lnAddress: lnAddress + ) + } + + static func dictionaryOf(lnUrlPayRequestData: LnUrlPayRequestData) -> [String: Any?] { + return [ + "callback": lnUrlPayRequestData.callback, + "minSendable": lnUrlPayRequestData.minSendable, + "maxSendable": lnUrlPayRequestData.maxSendable, + "metadataStr": lnUrlPayRequestData.metadataStr, + "commentAllowed": lnUrlPayRequestData.commentAllowed, + "domain": lnUrlPayRequestData.domain, + "allowsNostr": lnUrlPayRequestData.allowsNostr, + "nostrPubkey": lnUrlPayRequestData.nostrPubkey == nil ? nil : lnUrlPayRequestData.nostrPubkey, + "lnAddress": lnUrlPayRequestData.lnAddress == nil ? nil : lnUrlPayRequestData.lnAddress, + ] + } + + static func asLnUrlPayRequestDataList(arr: [Any]) throws -> [LnUrlPayRequestData] { + var list = [LnUrlPayRequestData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlPayRequestData = try asLnUrlPayRequestData(lnUrlPayRequestData: val) + list.append(lnUrlPayRequestData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayRequestData")) + } + } + return list + } + + static func arrayOf(lnUrlPayRequestDataList: [LnUrlPayRequestData]) -> [Any] { + return lnUrlPayRequestDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlPayRequestData: v) } + } + + static func asLnUrlPaySuccessData(lnUrlPaySuccessData: [String: Any?]) throws -> LnUrlPaySuccessData { + var successAction: SuccessActionProcessed? + if let successActionTmp = lnUrlPaySuccessData["successAction"] as? [String: Any?] { + successAction = try asSuccessActionProcessed(successActionProcessed: successActionTmp) + } + + guard let paymentTmp = lnUrlPaySuccessData["payment"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "payment", typeName: "LnUrlPaySuccessData")) + } + let payment = try asPayment(payment: paymentTmp) + + return LnUrlPaySuccessData( + successAction: successAction, + payment: payment + ) + } + + static func dictionaryOf(lnUrlPaySuccessData: LnUrlPaySuccessData) -> [String: Any?] { + return [ + "successAction": lnUrlPaySuccessData.successAction == nil ? nil : dictionaryOf(successActionProcessed: lnUrlPaySuccessData.successAction!), + "payment": dictionaryOf(payment: lnUrlPaySuccessData.payment), + ] + } + + static func asLnUrlPaySuccessDataList(arr: [Any]) throws -> [LnUrlPaySuccessData] { + var list = [LnUrlPaySuccessData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlPaySuccessData = try asLnUrlPaySuccessData(lnUrlPaySuccessData: val) + list.append(lnUrlPaySuccessData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPaySuccessData")) + } + } + return list + } + + static func arrayOf(lnUrlPaySuccessDataList: [LnUrlPaySuccessData]) -> [Any] { + return lnUrlPaySuccessDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlPaySuccessData: v) } + } + + static func asLnUrlWithdrawRequest(lnUrlWithdrawRequest: [String: Any?]) throws -> LnUrlWithdrawRequest { + guard let dataTmp = lnUrlWithdrawRequest["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawRequest")) + } + let data = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: dataTmp) + + guard let amountMsat = lnUrlWithdrawRequest["amountMsat"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "amountMsat", typeName: "LnUrlWithdrawRequest")) + } + var description: String? + if hasNonNilKey(data: lnUrlWithdrawRequest, key: "description") { + guard let descriptionTmp = lnUrlWithdrawRequest["description"] as? String else { + throw LiquidSdkError.Generic(message: errUnexpectedValue(fieldName: "description")) + } + description = descriptionTmp + } + + return LnUrlWithdrawRequest( + data: data, + amountMsat: amountMsat, + description: description + ) + } + + static func dictionaryOf(lnUrlWithdrawRequest: LnUrlWithdrawRequest) -> [String: Any?] { + return [ + "data": dictionaryOf(lnUrlWithdrawRequestData: lnUrlWithdrawRequest.data), + "amountMsat": lnUrlWithdrawRequest.amountMsat, + "description": lnUrlWithdrawRequest.description == nil ? nil : lnUrlWithdrawRequest.description, + ] + } + + static func asLnUrlWithdrawRequestList(arr: [Any]) throws -> [LnUrlWithdrawRequest] { + var list = [LnUrlWithdrawRequest]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlWithdrawRequest = try asLnUrlWithdrawRequest(lnUrlWithdrawRequest: val) + list.append(lnUrlWithdrawRequest) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawRequest")) + } + } + return list + } + + static func arrayOf(lnUrlWithdrawRequestList: [LnUrlWithdrawRequest]) -> [Any] { + return lnUrlWithdrawRequestList.map { v -> [String: Any?] in dictionaryOf(lnUrlWithdrawRequest: v) } + } + + static func asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: [String: Any?]) throws -> LnUrlWithdrawRequestData { + guard let callback = lnUrlWithdrawRequestData["callback"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "callback", typeName: "LnUrlWithdrawRequestData")) + } + guard let k1 = lnUrlWithdrawRequestData["k1"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "k1", typeName: "LnUrlWithdrawRequestData")) + } + guard let defaultDescription = lnUrlWithdrawRequestData["defaultDescription"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "defaultDescription", typeName: "LnUrlWithdrawRequestData")) + } + guard let minWithdrawable = lnUrlWithdrawRequestData["minWithdrawable"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "minWithdrawable", typeName: "LnUrlWithdrawRequestData")) + } + guard let maxWithdrawable = lnUrlWithdrawRequestData["maxWithdrawable"] as? UInt64 else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "maxWithdrawable", typeName: "LnUrlWithdrawRequestData")) + } + + return LnUrlWithdrawRequestData( + callback: callback, + k1: k1, + defaultDescription: defaultDescription, + minWithdrawable: minWithdrawable, + maxWithdrawable: maxWithdrawable + ) + } + + static func dictionaryOf(lnUrlWithdrawRequestData: LnUrlWithdrawRequestData) -> [String: Any?] { + return [ + "callback": lnUrlWithdrawRequestData.callback, + "k1": lnUrlWithdrawRequestData.k1, + "defaultDescription": lnUrlWithdrawRequestData.defaultDescription, + "minWithdrawable": lnUrlWithdrawRequestData.minWithdrawable, + "maxWithdrawable": lnUrlWithdrawRequestData.maxWithdrawable, + ] + } + + static func asLnUrlWithdrawRequestDataList(arr: [Any]) throws -> [LnUrlWithdrawRequestData] { + var list = [LnUrlWithdrawRequestData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlWithdrawRequestData = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: val) + list.append(lnUrlWithdrawRequestData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawRequestData")) + } + } + return list + } + + static func arrayOf(lnUrlWithdrawRequestDataList: [LnUrlWithdrawRequestData]) -> [Any] { + return lnUrlWithdrawRequestDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlWithdrawRequestData: v) } + } + + static func asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: [String: Any?]) throws -> LnUrlWithdrawSuccessData { + guard let invoiceTmp = lnUrlWithdrawSuccessData["invoice"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "invoice", typeName: "LnUrlWithdrawSuccessData")) + } + let invoice = try asLnInvoice(lnInvoice: invoiceTmp) + + return LnUrlWithdrawSuccessData( + invoice: invoice) + } + + static func dictionaryOf(lnUrlWithdrawSuccessData: LnUrlWithdrawSuccessData) -> [String: Any?] { + return [ + "invoice": dictionaryOf(lnInvoice: lnUrlWithdrawSuccessData.invoice), + ] + } + + static func asLnUrlWithdrawSuccessDataList(arr: [Any]) throws -> [LnUrlWithdrawSuccessData] { + var list = [LnUrlWithdrawSuccessData]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlWithdrawSuccessData = try asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: val) + list.append(lnUrlWithdrawSuccessData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawSuccessData")) + } + } + return list + } + + static func arrayOf(lnUrlWithdrawSuccessDataList: [LnUrlWithdrawSuccessData]) -> [Any] { + return lnUrlWithdrawSuccessDataList.map { v -> [String: Any?] in dictionaryOf(lnUrlWithdrawSuccessData: v) } + } + static func asLogEntry(logEntry: [String: Any?]) throws -> LogEntry { guard let line = logEntry["line"] as? String else { throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "line", typeName: "LogEntry")) @@ -342,6 +884,38 @@ enum BreezLiquidSDKMapper { return logEntryList.map { v -> [String: Any?] in dictionaryOf(logEntry: v) } } + static func asMessageSuccessActionData(messageSuccessActionData: [String: Any?]) throws -> MessageSuccessActionData { + guard let message = messageSuccessActionData["message"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "message", typeName: "MessageSuccessActionData")) + } + + return MessageSuccessActionData( + message: message) + } + + static func dictionaryOf(messageSuccessActionData: MessageSuccessActionData) -> [String: Any?] { + return [ + "message": messageSuccessActionData.message, + ] + } + + static func asMessageSuccessActionDataList(arr: [Any]) throws -> [MessageSuccessActionData] { + var list = [MessageSuccessActionData]() + for value in arr { + if let val = value as? [String: Any?] { + var messageSuccessActionData = try asMessageSuccessActionData(messageSuccessActionData: val) + list.append(messageSuccessActionData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "MessageSuccessActionData")) + } + } + return list + } + + static func arrayOf(messageSuccessActionDataList: [MessageSuccessActionData]) -> [Any] { + return messageSuccessActionDataList.map { v -> [String: Any?] in dictionaryOf(messageSuccessActionData: v) } + } + static func asPayOnchainRequest(payOnchainRequest: [String: Any?]) throws -> PayOnchainRequest { guard let address = payOnchainRequest["address"] as? String else { throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "PayOnchainRequest")) @@ -912,6 +1486,291 @@ enum BreezLiquidSDKMapper { return sendPaymentResponseList.map { v -> [String: Any?] in dictionaryOf(sendPaymentResponse: v) } } + static func asUrlSuccessActionData(urlSuccessActionData: [String: Any?]) throws -> UrlSuccessActionData { + guard let description = urlSuccessActionData["description"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "UrlSuccessActionData")) + } + guard let url = urlSuccessActionData["url"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "UrlSuccessActionData")) + } + + return UrlSuccessActionData( + description: description, + url: url + ) + } + + static func dictionaryOf(urlSuccessActionData: UrlSuccessActionData) -> [String: Any?] { + return [ + "description": urlSuccessActionData.description, + "url": urlSuccessActionData.url, + ] + } + + static func asUrlSuccessActionDataList(arr: [Any]) throws -> [UrlSuccessActionData] { + var list = [UrlSuccessActionData]() + for value in arr { + if let val = value as? [String: Any?] { + var urlSuccessActionData = try asUrlSuccessActionData(urlSuccessActionData: val) + list.append(urlSuccessActionData) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "UrlSuccessActionData")) + } + } + return list + } + + static func arrayOf(urlSuccessActionDataList: [UrlSuccessActionData]) -> [Any] { + return urlSuccessActionDataList.map { v -> [String: Any?] in dictionaryOf(urlSuccessActionData: v) } + } + + static func asAesSuccessActionDataResult(aesSuccessActionDataResult: [String: Any?]) throws -> AesSuccessActionDataResult { + let type = aesSuccessActionDataResult["type"] as! String + if type == "decrypted" { + guard let dataTmp = aesSuccessActionDataResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "AesSuccessActionDataResult")) + } + let _data = try asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: dataTmp) + + return AesSuccessActionDataResult.decrypted(data: _data) + } + if type == "errorStatus" { + guard let _reason = aesSuccessActionDataResult["reason"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "AesSuccessActionDataResult")) + } + return AesSuccessActionDataResult.errorStatus(reason: _reason) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum AesSuccessActionDataResult") + } + + static func dictionaryOf(aesSuccessActionDataResult: AesSuccessActionDataResult) -> [String: Any?] { + switch aesSuccessActionDataResult { + case let .decrypted( + data + ): + return [ + "type": "decrypted", + "data": dictionaryOf(aesSuccessActionDataDecrypted: data), + ] + + case let .errorStatus( + reason + ): + return [ + "type": "errorStatus", + "reason": reason, + ] + } + } + + static func arrayOf(aesSuccessActionDataResultList: [AesSuccessActionDataResult]) -> [Any] { + return aesSuccessActionDataResultList.map { v -> [String: Any?] in dictionaryOf(aesSuccessActionDataResult: v) } + } + + static func asAesSuccessActionDataResultList(arr: [Any]) throws -> [AesSuccessActionDataResult] { + var list = [AesSuccessActionDataResult]() + for value in arr { + if let val = value as? [String: Any?] { + var aesSuccessActionDataResult = try asAesSuccessActionDataResult(aesSuccessActionDataResult: val) + list.append(aesSuccessActionDataResult) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "AesSuccessActionDataResult")) + } + } + return list + } + + static func asInputType(inputType: [String: Any?]) throws -> InputType { + let type = inputType["type"] as! String + if type == "bitcoinAddress" { + guard let addressTmp = inputType["address"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "InputType")) + } + let _address = try asBitcoinAddressData(bitcoinAddressData: addressTmp) + + return InputType.bitcoinAddress(address: _address) + } + if type == "bolt11" { + guard let invoiceTmp = inputType["invoice"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "invoice", typeName: "InputType")) + } + let _invoice = try asLnInvoice(lnInvoice: invoiceTmp) + + return InputType.bolt11(invoice: _invoice) + } + if type == "nodeId" { + guard let _nodeId = inputType["nodeId"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "nodeId", typeName: "InputType")) + } + return InputType.nodeId(nodeId: _nodeId) + } + if type == "url" { + guard let _url = inputType["url"] as? String else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "InputType")) + } + return InputType.url(url: _url) + } + if type == "lnUrlPay" { + guard let dataTmp = inputType["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) + } + let _data = try asLnUrlPayRequestData(lnUrlPayRequestData: dataTmp) + + return InputType.lnUrlPay(data: _data) + } + if type == "lnUrlWithdraw" { + guard let dataTmp = inputType["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) + } + let _data = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: dataTmp) + + return InputType.lnUrlWithdraw(data: _data) + } + if type == "lnUrlAuth" { + guard let dataTmp = inputType["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) + } + let _data = try asLnUrlAuthRequestData(lnUrlAuthRequestData: dataTmp) + + return InputType.lnUrlAuth(data: _data) + } + if type == "lnUrlError" { + guard let dataTmp = inputType["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) + } + let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) + + return InputType.lnUrlError(data: _data) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum InputType") + } + + static func dictionaryOf(inputType: InputType) -> [String: Any?] { + switch inputType { + case let .bitcoinAddress( + address + ): + return [ + "type": "bitcoinAddress", + "address": dictionaryOf(bitcoinAddressData: address), + ] + + case let .bolt11( + invoice + ): + return [ + "type": "bolt11", + "invoice": dictionaryOf(lnInvoice: invoice), + ] + + case let .nodeId( + nodeId + ): + return [ + "type": "nodeId", + "nodeId": nodeId, + ] + + case let .url( + url + ): + return [ + "type": "url", + "url": url, + ] + + case let .lnUrlPay( + data + ): + return [ + "type": "lnUrlPay", + "data": dictionaryOf(lnUrlPayRequestData: data), + ] + + case let .lnUrlWithdraw( + data + ): + return [ + "type": "lnUrlWithdraw", + "data": dictionaryOf(lnUrlWithdrawRequestData: data), + ] + + case let .lnUrlAuth( + data + ): + return [ + "type": "lnUrlAuth", + "data": dictionaryOf(lnUrlAuthRequestData: data), + ] + + case let .lnUrlError( + data + ): + return [ + "type": "lnUrlError", + "data": dictionaryOf(lnUrlErrorData: data), + ] + } + } + + static func arrayOf(inputTypeList: [InputType]) -> [Any] { + return inputTypeList.map { v -> [String: Any?] in dictionaryOf(inputType: v) } + } + + static func asInputTypeList(arr: [Any]) throws -> [InputType] { + var list = [InputType]() + for value in arr { + if let val = value as? [String: Any?] { + var inputType = try asInputType(inputType: val) + list.append(inputType) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "InputType")) + } + } + return list + } + + static func asLiquidNetwork(liquidNetwork: String) throws -> LiquidNetwork { + switch liquidNetwork { + case "mainnet": + return LiquidNetwork.mainnet + + case "testnet": + return LiquidNetwork.testnet + + default: throw LiquidSdkError.Generic(message: "Invalid variant \(liquidNetwork) for enum LiquidNetwork") + } + } + + static func valueOf(liquidNetwork: LiquidNetwork) -> String { + switch liquidNetwork { + case .mainnet: + return "mainnet" + + case .testnet: + return "testnet" + } + } + + static func arrayOf(liquidNetworkList: [LiquidNetwork]) -> [String] { + return liquidNetworkList.map { v -> String in valueOf(liquidNetwork: v) } + } + + static func asLiquidNetworkList(arr: [Any]) throws -> [LiquidNetwork] { + var list = [LiquidNetwork]() + for value in arr { + if let val = value as? String { + var liquidNetwork = try asLiquidNetwork(liquidNetwork: val) + list.append(liquidNetwork) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LiquidNetwork")) + } + } + return list + } + static func asLiquidSdkEvent(liquidSdkEvent: [String: Any?]) throws -> LiquidSdkEvent { let type = liquidSdkEvent["type"] as! String if type == "paymentFailed" { @@ -1043,25 +1902,222 @@ enum BreezLiquidSDKMapper { return list } + static func asLnUrlCallbackStatus(lnUrlCallbackStatus: [String: Any?]) throws -> LnUrlCallbackStatus { + let type = lnUrlCallbackStatus["type"] as! String + if type == "ok" { + return LnUrlCallbackStatus.ok + } + if type == "errorStatus" { + guard let dataTmp = lnUrlCallbackStatus["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlCallbackStatus")) + } + let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) + + return LnUrlCallbackStatus.errorStatus(data: _data) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum LnUrlCallbackStatus") + } + + static func dictionaryOf(lnUrlCallbackStatus: LnUrlCallbackStatus) -> [String: Any?] { + switch lnUrlCallbackStatus { + case .ok: + return [ + "type": "ok", + ] + + case let .errorStatus( + data + ): + return [ + "type": "errorStatus", + "data": dictionaryOf(lnUrlErrorData: data), + ] + } + } + + static func arrayOf(lnUrlCallbackStatusList: [LnUrlCallbackStatus]) -> [Any] { + return lnUrlCallbackStatusList.map { v -> [String: Any?] in dictionaryOf(lnUrlCallbackStatus: v) } + } + + static func asLnUrlCallbackStatusList(arr: [Any]) throws -> [LnUrlCallbackStatus] { + var list = [LnUrlCallbackStatus]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlCallbackStatus = try asLnUrlCallbackStatus(lnUrlCallbackStatus: val) + list.append(lnUrlCallbackStatus) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlCallbackStatus")) + } + } + return list + } + + static func asLnUrlPayResult(lnUrlPayResult: [String: Any?]) throws -> LnUrlPayResult { + let type = lnUrlPayResult["type"] as! String + if type == "endpointSuccess" { + guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) + } + let _data = try asLnUrlPaySuccessData(lnUrlPaySuccessData: dataTmp) + + return LnUrlPayResult.endpointSuccess(data: _data) + } + if type == "endpointError" { + guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) + } + let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) + + return LnUrlPayResult.endpointError(data: _data) + } + if type == "payError" { + guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) + } + let _data = try asLnUrlPayErrorData(lnUrlPayErrorData: dataTmp) + + return LnUrlPayResult.payError(data: _data) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum LnUrlPayResult") + } + + static func dictionaryOf(lnUrlPayResult: LnUrlPayResult) -> [String: Any?] { + switch lnUrlPayResult { + case let .endpointSuccess( + data + ): + return [ + "type": "endpointSuccess", + "data": dictionaryOf(lnUrlPaySuccessData: data), + ] + + case let .endpointError( + data + ): + return [ + "type": "endpointError", + "data": dictionaryOf(lnUrlErrorData: data), + ] + + case let .payError( + data + ): + return [ + "type": "payError", + "data": dictionaryOf(lnUrlPayErrorData: data), + ] + } + } + + static func arrayOf(lnUrlPayResultList: [LnUrlPayResult]) -> [Any] { + return lnUrlPayResultList.map { v -> [String: Any?] in dictionaryOf(lnUrlPayResult: v) } + } + + static func asLnUrlPayResultList(arr: [Any]) throws -> [LnUrlPayResult] { + var list = [LnUrlPayResult]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlPayResult = try asLnUrlPayResult(lnUrlPayResult: val) + list.append(lnUrlPayResult) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayResult")) + } + } + return list + } + + static func asLnUrlWithdrawResult(lnUrlWithdrawResult: [String: Any?]) throws -> LnUrlWithdrawResult { + let type = lnUrlWithdrawResult["type"] as! String + if type == "ok" { + guard let dataTmp = lnUrlWithdrawResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawResult")) + } + let _data = try asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: dataTmp) + + return LnUrlWithdrawResult.ok(data: _data) + } + if type == "errorStatus" { + guard let dataTmp = lnUrlWithdrawResult["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawResult")) + } + let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) + + return LnUrlWithdrawResult.errorStatus(data: _data) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum LnUrlWithdrawResult") + } + + static func dictionaryOf(lnUrlWithdrawResult: LnUrlWithdrawResult) -> [String: Any?] { + switch lnUrlWithdrawResult { + case let .ok( + data + ): + return [ + "type": "ok", + "data": dictionaryOf(lnUrlWithdrawSuccessData: data), + ] + + case let .errorStatus( + data + ): + return [ + "type": "errorStatus", + "data": dictionaryOf(lnUrlErrorData: data), + ] + } + } + + static func arrayOf(lnUrlWithdrawResultList: [LnUrlWithdrawResult]) -> [Any] { + return lnUrlWithdrawResultList.map { v -> [String: Any?] in dictionaryOf(lnUrlWithdrawResult: v) } + } + + static func asLnUrlWithdrawResultList(arr: [Any]) throws -> [LnUrlWithdrawResult] { + var list = [LnUrlWithdrawResult]() + for value in arr { + if let val = value as? [String: Any?] { + var lnUrlWithdrawResult = try asLnUrlWithdrawResult(lnUrlWithdrawResult: val) + list.append(lnUrlWithdrawResult) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawResult")) + } + } + return list + } + static func asNetwork(network: String) throws -> Network { switch network { - case "mainnet": - return Network.mainnet + case "bitcoin": + return Network.bitcoin case "testnet": return Network.testnet + case "signet": + return Network.signet + + case "regtest": + return Network.regtest + default: throw LiquidSdkError.Generic(message: "Invalid variant \(network) for enum Network") } } static func valueOf(network: Network) -> String { switch network { - case .mainnet: - return "mainnet" + case .bitcoin: + return "bitcoin" case .testnet: return "testnet" + + case .signet: + return "signet" + + case .regtest: + return "regtest" } } @@ -1178,6 +2234,81 @@ enum BreezLiquidSDKMapper { return list } + static func asSuccessActionProcessed(successActionProcessed: [String: Any?]) throws -> SuccessActionProcessed { + let type = successActionProcessed["type"] as! String + if type == "aes" { + guard let resultTmp = successActionProcessed["result"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "result", typeName: "SuccessActionProcessed")) + } + let _result = try asAesSuccessActionDataResult(aesSuccessActionDataResult: resultTmp) + + return SuccessActionProcessed.aes(result: _result) + } + if type == "message" { + guard let dataTmp = successActionProcessed["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "SuccessActionProcessed")) + } + let _data = try asMessageSuccessActionData(messageSuccessActionData: dataTmp) + + return SuccessActionProcessed.message(data: _data) + } + if type == "url" { + guard let dataTmp = successActionProcessed["data"] as? [String: Any?] else { + throw LiquidSdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "SuccessActionProcessed")) + } + let _data = try asUrlSuccessActionData(urlSuccessActionData: dataTmp) + + return SuccessActionProcessed.url(data: _data) + } + + throw LiquidSdkError.Generic(message: "Unexpected type \(type) for enum SuccessActionProcessed") + } + + static func dictionaryOf(successActionProcessed: SuccessActionProcessed) -> [String: Any?] { + switch successActionProcessed { + case let .aes( + result + ): + return [ + "type": "aes", + "result": dictionaryOf(aesSuccessActionDataResult: result), + ] + + case let .message( + data + ): + return [ + "type": "message", + "data": dictionaryOf(messageSuccessActionData: data), + ] + + case let .url( + data + ): + return [ + "type": "url", + "data": dictionaryOf(urlSuccessActionData: data), + ] + } + } + + static func arrayOf(successActionProcessedList: [SuccessActionProcessed]) -> [Any] { + return successActionProcessedList.map { v -> [String: Any?] in dictionaryOf(successActionProcessed: v) } + } + + static func asSuccessActionProcessedList(arr: [Any]) throws -> [SuccessActionProcessed] { + var list = [SuccessActionProcessed]() + for value in arr { + if let val = value as? [String: Any?] { + var successActionProcessed = try asSuccessActionProcessed(successActionProcessed: val) + list.append(successActionProcessed) + } else { + throw LiquidSdkError.Generic(message: errUnexpectedType(typeName: "SuccessActionProcessed")) + } + } + return list + } + static func hasNonNilKey(data: [String: Any?], key: String) -> Bool { if let val = data[key] { return !(val == nil || val is NSNull) diff --git a/packages/react-native/ios/RNBreezLiquidSDK.m b/packages/react-native/ios/RNBreezLiquidSDK.m index 3a632f1..535b9f0 100644 --- a/packages/react-native/ios/RNBreezLiquidSDK.m +++ b/packages/react-native/ios/RNBreezLiquidSDK.m @@ -10,7 +10,13 @@ RCT_EXTERN_METHOD( ) RCT_EXTERN_METHOD( - parseInvoice: (NSString*)invoice + parse: (NSString*)input + resolve: (RCTPromiseResolveBlock)resolve + reject: (RCTPromiseRejectBlock)reject +) + +RCT_EXTERN_METHOD( + parseInvoice: (NSString*)input resolve: (RCTPromiseResolveBlock)resolve reject: (RCTPromiseRejectBlock)reject ) @@ -105,4 +111,22 @@ RCT_EXTERN_METHOD( reject: (RCTPromiseRejectBlock)reject ) +RCT_EXTERN_METHOD( + lnurlPay: (NSDictionary*)req + resolve: (RCTPromiseResolveBlock)resolve + reject: (RCTPromiseRejectBlock)reject +) + +RCT_EXTERN_METHOD( + lnurlWithdraw: (NSDictionary*)req + resolve: (RCTPromiseResolveBlock)resolve + reject: (RCTPromiseRejectBlock)reject +) + +RCT_EXTERN_METHOD( + lnurlAuth: (NSDictionary*)reqData + resolve: (RCTPromiseResolveBlock)resolve + reject: (RCTPromiseRejectBlock)reject +) + @end \ No newline at end of file diff --git a/packages/react-native/ios/RNBreezLiquidSDK.swift b/packages/react-native/ios/RNBreezLiquidSDK.swift index 15c52d1..bec5ab8 100644 --- a/packages/react-native/ios/RNBreezLiquidSDK.swift +++ b/packages/react-native/ios/RNBreezLiquidSDK.swift @@ -74,7 +74,7 @@ class RNBreezLiquidSDK: RCTEventEmitter { @objc(defaultConfig:resolve:reject:) func defaultConfig(_ network: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { do { - let networkTmp = try BreezLiquidSDKMapper.asNetwork(network: network) + let networkTmp = try BreezLiquidSDKMapper.asLiquidNetwork(liquidNetwork: network) var res = BreezLiquidSDK.defaultConfig(network: networkTmp) res.workingDir = RNBreezLiquidSDK.breezLiquidSdkDirectory.path resolve(BreezLiquidSDKMapper.dictionaryOf(config: res)) @@ -83,10 +83,20 @@ class RNBreezLiquidSDK: RCTEventEmitter { } } - @objc(parseInvoice:resolve:reject:) - func parseInvoice(_ invoice: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + @objc(parse:resolve:reject:) + func parse(_ input: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { do { - var res = try BreezLiquidSDK.parseInvoice(invoice: invoice) + var res = try BreezLiquidSDK.parse(input: input) + resolve(BreezLiquidSDKMapper.dictionaryOf(inputType: res)) + } catch let err { + rejectErr(err: err, reject: reject) + } + } + + @objc(parseInvoice:resolve:reject:) + func parseInvoice(_ input: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + do { + var res = try BreezLiquidSDK.parseInvoice(input: input) resolve(BreezLiquidSDKMapper.dictionaryOf(lnInvoice: res)) } catch let err { rejectErr(err: err, reject: reject) @@ -273,6 +283,39 @@ class RNBreezLiquidSDK: RCTEventEmitter { } } + @objc(lnurlPay:resolve:reject:) + func lnurlPay(_ req: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + do { + let lnUrlPayRequest = try BreezLiquidSDKMapper.asLnUrlPayRequest(lnUrlPayRequest: req) + var res = try getBindingLiquidSdk().lnurlPay(req: lnUrlPayRequest) + resolve(BreezLiquidSDKMapper.dictionaryOf(lnUrlPayResult: res)) + } catch let err { + rejectErr(err: err, reject: reject) + } + } + + @objc(lnurlWithdraw:resolve:reject:) + func lnurlWithdraw(_ req: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + do { + let lnUrlWithdrawRequest = try BreezLiquidSDKMapper.asLnUrlWithdrawRequest(lnUrlWithdrawRequest: req) + var res = try getBindingLiquidSdk().lnurlWithdraw(req: lnUrlWithdrawRequest) + resolve(BreezLiquidSDKMapper.dictionaryOf(lnUrlWithdrawResult: res)) + } catch let err { + rejectErr(err: err, reject: reject) + } + } + + @objc(lnurlAuth:resolve:reject:) + func lnurlAuth(_ reqData: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + do { + let lnUrlAuthRequestData = try BreezLiquidSDKMapper.asLnUrlAuthRequestData(lnUrlAuthRequestData: reqData) + var res = try getBindingLiquidSdk().lnurlAuth(reqData: lnUrlAuthRequestData) + resolve(BreezLiquidSDKMapper.dictionaryOf(lnUrlCallbackStatus: res)) + } catch let err { + rejectErr(err: err, reject: reject) + } + } + func rejectErr(err: Error, reject: @escaping RCTPromiseRejectBlock) { var errorName = "Generic" var message = "\(err)" diff --git a/packages/react-native/src/index.ts b/packages/react-native/src/index.ts index e317a4e..dabd189 100644 --- a/packages/react-native/src/index.ts +++ b/packages/react-native/src/index.ts @@ -19,16 +19,29 @@ const BreezLiquidSDK = NativeModules.RNBreezLiquidSDK const BreezLiquidSDKEmitter = new NativeEventEmitter(BreezLiquidSDK) +export interface AesSuccessActionDataDecrypted { + description: string + plaintext: string +} + export interface BackupRequest { backupPath?: string } +export interface BitcoinAddressData { + address: string + network: Network + amountSat?: number + label?: string + message?: string +} + export interface Config { boltzUrl: string liquidElectrumUrl: string bitcoinElectrumUrl: string workingDir: string - network: Network + network: LiquidNetwork paymentTimeoutSec: number zeroConfMinFeeRate: number zeroConfMaxAmountSat?: number @@ -61,11 +74,73 @@ export interface LnInvoice { minFinalCltvExpiryDelta: number } +export interface LnUrlAuthRequestData { + k1: string + domain: string + url: string + action?: string +} + +export interface LnUrlErrorData { + reason: string +} + +export interface LnUrlPayErrorData { + paymentHash: string + reason: string +} + +export interface LnUrlPayRequest { + data: LnUrlPayRequestData + amountMsat: number + comment?: string + paymentLabel?: string +} + +export interface LnUrlPayRequestData { + callback: string + minSendable: number + maxSendable: number + metadataStr: string + commentAllowed: number + domain: string + allowsNostr: boolean + nostrPubkey?: string + lnAddress?: string +} + +export interface LnUrlPaySuccessData { + successAction?: SuccessActionProcessed + payment: Payment +} + +export interface LnUrlWithdrawRequest { + data: LnUrlWithdrawRequestData + amountMsat: number + description?: string +} + +export interface LnUrlWithdrawRequestData { + callback: string + k1: string + defaultDescription: string + minWithdrawable: number + maxWithdrawable: number +} + +export interface LnUrlWithdrawSuccessData { + invoice: LnInvoice +} + export interface LogEntry { line: string level: string } +export interface MessageSuccessActionData { + message: string +} + export interface PayOnchainRequest { address: string prepareRes: PreparePayOnchainResponse @@ -139,6 +214,66 @@ export interface SendPaymentResponse { payment: Payment } +export interface UrlSuccessActionData { + description: string + url: string +} + +export enum AesSuccessActionDataResultVariant { + DECRYPTED = "decrypted", + ERROR_STATUS = "errorStatus" +} + +export type AesSuccessActionDataResult = { + type: AesSuccessActionDataResultVariant.DECRYPTED, + data: AesSuccessActionDataDecrypted +} | { + type: AesSuccessActionDataResultVariant.ERROR_STATUS, + reason: string +} + +export enum InputTypeVariant { + BITCOIN_ADDRESS = "bitcoinAddress", + BOLT11 = "bolt11", + NODE_ID = "nodeId", + URL = "url", + LN_URL_PAY = "lnUrlPay", + LN_URL_WITHDRAW = "lnUrlWithdraw", + LN_URL_AUTH = "lnUrlAuth", + LN_URL_ERROR = "lnUrlError" +} + +export type InputType = { + type: InputTypeVariant.BITCOIN_ADDRESS, + address: BitcoinAddressData +} | { + type: InputTypeVariant.BOLT11, + invoice: LnInvoice +} | { + type: InputTypeVariant.NODE_ID, + nodeId: string +} | { + type: InputTypeVariant.URL, + url: string +} | { + type: InputTypeVariant.LN_URL_PAY, + data: LnUrlPayRequestData +} | { + type: InputTypeVariant.LN_URL_WITHDRAW, + data: LnUrlWithdrawRequestData +} | { + type: InputTypeVariant.LN_URL_AUTH, + data: LnUrlAuthRequestData +} | { + type: InputTypeVariant.LN_URL_ERROR, + data: LnUrlErrorData +} + +export enum LiquidNetwork { + MAINNET = "mainnet", + TESTNET = "testnet" +} + export enum LiquidSdkEventVariant { PAYMENT_FAILED = "paymentFailed", PAYMENT_PENDING = "paymentPending", @@ -171,9 +306,53 @@ export type LiquidSdkEvent = { type: LiquidSdkEventVariant.SYNCED } +export enum LnUrlCallbackStatusVariant { + OK = "ok", + ERROR_STATUS = "errorStatus" +} + +export type LnUrlCallbackStatus = { + type: LnUrlCallbackStatusVariant.OK +} | { + type: LnUrlCallbackStatusVariant.ERROR_STATUS, + data: LnUrlErrorData +} + +export enum LnUrlPayResultVariant { + ENDPOINT_SUCCESS = "endpointSuccess", + ENDPOINT_ERROR = "endpointError", + PAY_ERROR = "payError" +} + +export type LnUrlPayResult = { + type: LnUrlPayResultVariant.ENDPOINT_SUCCESS, + data: LnUrlPaySuccessData +} | { + type: LnUrlPayResultVariant.ENDPOINT_ERROR, + data: LnUrlErrorData +} | { + type: LnUrlPayResultVariant.PAY_ERROR, + data: LnUrlPayErrorData +} + +export enum LnUrlWithdrawResultVariant { + OK = "ok", + ERROR_STATUS = "errorStatus" +} + +export type LnUrlWithdrawResult = { + type: LnUrlWithdrawResultVariant.OK, + data: LnUrlWithdrawSuccessData +} | { + type: LnUrlWithdrawResultVariant.ERROR_STATUS, + data: LnUrlErrorData +} + export enum Network { - MAINNET = "mainnet", - TESTNET = "testnet" + BITCOIN = "bitcoin", + TESTNET = "testnet", + SIGNET = "signet", + REGTEST = "regtest" } export enum PaymentState { @@ -189,6 +368,23 @@ export enum PaymentType { SEND = "send" } +export enum SuccessActionProcessedVariant { + AES = "aes", + MESSAGE = "message", + URL = "url" +} + +export type SuccessActionProcessed = { + type: SuccessActionProcessedVariant.AES, + result: AesSuccessActionDataResult +} | { + type: SuccessActionProcessedVariant.MESSAGE, + data: MessageSuccessActionData +} | { + type: SuccessActionProcessedVariant.URL, + data: UrlSuccessActionData +} + export type EventListener = (e: LiquidSdkEvent) => void export type Logger = (logEntry: LogEntry) => void @@ -215,13 +411,18 @@ export const setLogger = async (logger: Logger): Promise => return subscription } -export const defaultConfig = async (network: Network): Promise => { +export const defaultConfig = async (network: LiquidNetwork): Promise => { const response = await BreezLiquidSDK.defaultConfig(network) return response } -export const parseInvoice = async (invoice: string): Promise => { - const response = await BreezLiquidSDK.parseInvoice(invoice) +export const parse = async (input: string): Promise => { + const response = await BreezLiquidSDK.parse(input) + return response +} + +export const parseInvoice = async (input: string): Promise => { + const response = await BreezLiquidSDK.parseInvoice(input) return response } @@ -285,3 +486,18 @@ export const restore = async (req: RestoreRequest): Promise => { export const disconnect = async (): Promise => { await BreezLiquidSDK.disconnect() } + +export const lnurlPay = async (req: LnUrlPayRequest): Promise => { + const response = await BreezLiquidSDK.lnurlPay(req) + return response +} + +export const lnurlWithdraw = async (req: LnUrlWithdrawRequest): Promise => { + const response = await BreezLiquidSDK.lnurlWithdraw(req) + return response +} + +export const lnurlAuth = async (reqData: LnUrlAuthRequestData): Promise => { + const response = await BreezLiquidSDK.lnurlAuth(reqData) + return response +}