From 32c924596ed10d15117df205b09aa30871af323a Mon Sep 17 00:00:00 2001 From: benthecarman Date: Fri, 18 Oct 2024 16:39:29 -0500 Subject: [PATCH] Beginning of separating out crates --- Cargo.lock | 1597 ++++++++--------- Cargo.toml | 48 +- harbor-client/Cargo.toml | 40 + diesel.toml => harbor-client/diesel.toml | 0 .../migrations}/.keep | 0 .../2024-05-13-234832_create_config/down.sql | 0 .../2024-05-13-234832_create_config/up.sql | 0 harbor-client/src/core.rs | 371 ++++ {src => harbor-client/src}/db.rs | 9 +- .../src}/db_models/fedimint.rs | 0 .../src}/db_models/lightning_payment.rs | 2 +- .../src}/db_models/lightning_receive.rs | 2 +- {src => harbor-client/src}/db_models/mod.rs | 16 +- .../src}/db_models/onchain_payment.rs | 2 +- .../src}/db_models/onchain_receive.rs | 2 +- .../src}/db_models/profile.rs | 0 .../src}/db_models/schema.rs | 0 .../src/db_models/transaction_item.rs | 39 + {src => harbor-client/src}/fedimint_client.rs | 167 +- harbor-client/src/lib.rs | 94 + harbor-ui/.gitignore | 1 + harbor-ui/Cargo.toml | 45 + .../assets}/fonts/Inter-Bold.ttf | Bin .../assets}/fonts/Inter-Regular.ttf | Bin {assets => harbor-ui/assets}/harbor_logo.svg | 0 {assets => harbor-ui/assets}/icons/bolt.svg | 0 {assets => harbor-ui/assets}/icons/chain.svg | 0 .../assets}/icons/chevron_down.svg | 0 {assets => harbor-ui/assets}/icons/copy.svg | 0 .../assets}/icons/down_left.svg | 0 {assets => harbor-ui/assets}/icons/eye.svg | 0 {assets => harbor-ui/assets}/icons/heart.svg | 0 {assets => harbor-ui/assets}/icons/home.svg | 0 .../assets}/icons/left_right.svg | 0 {assets => harbor-ui/assets}/icons/people.svg | 0 {assets => harbor-ui/assets}/icons/plus.svg | 0 {assets => harbor-ui/assets}/icons/qr.svg | 0 .../assets}/icons/restart.svg | 0 .../assets}/icons/settings.svg | 0 .../assets}/icons/small_close.svg | 0 .../assets}/icons/squirrel.svg | 0 .../assets}/icons/up_right.svg | 0 src/core.rs => harbor-ui/src/bridge.rs | 493 ++--- {src => harbor-ui/src}/components/button.rs | 0 .../src}/components/caption_text.rs | 0 {src => harbor-ui/src}/components/colors.rs | 0 {src => harbor-ui/src}/components/easing.rs | 0 .../src}/components/federation_item.rs | 12 +- {src => harbor-ui/src}/components/header.rs | 0 {src => harbor-ui/src}/components/icon.rs | 0 {src => harbor-ui/src}/components/input.rs | 0 {src => harbor-ui/src}/components/layout.rs | 0 .../src}/components/mini_copy.rs | 0 {src => harbor-ui/src}/components/mod.rs | 0 {src => harbor-ui/src}/components/rules.rs | 0 .../src}/components/screen_header.rs | 3 +- {src => harbor-ui/src}/components/sidebar.rs | 0 {src => harbor-ui/src}/components/spinner.rs | 0 {src => harbor-ui/src}/components/styles.rs | 0 {src => harbor-ui/src}/components/toast.rs | 0 .../src}/components/transaction_item.rs | 46 +- {src => harbor-ui/src}/components/util.rs | 0 {src => harbor-ui/src}/conf.rs | 4 +- {src => harbor-ui/src}/main.rs | 13 +- {src => harbor-ui/src}/routes/donate.rs | 0 {src => harbor-ui/src}/routes/history.rs | 0 {src => harbor-ui/src}/routes/home.rs | 0 {src => harbor-ui/src}/routes/mints.rs | 0 {src => harbor-ui/src}/routes/mod.rs | 0 {src => harbor-ui/src}/routes/receive.rs | 3 +- {src => harbor-ui/src}/routes/send.rs | 0 {src => harbor-ui/src}/routes/settings.rs | 0 {src => harbor-ui/src}/routes/transfer.rs | 0 {src => harbor-ui/src}/routes/unlock.rs | 0 {src => harbor-ui/src}/routes/welcome.rs | 0 justfile | 6 +- src/bridge.rs | 224 --- 77 files changed, 1638 insertions(+), 1601 deletions(-) create mode 100644 harbor-client/Cargo.toml rename diesel.toml => harbor-client/diesel.toml (100%) rename {migrations => harbor-client/migrations}/.keep (100%) rename {migrations => harbor-client/migrations}/2024-05-13-234832_create_config/down.sql (100%) rename {migrations => harbor-client/migrations}/2024-05-13-234832_create_config/up.sql (100%) create mode 100644 harbor-client/src/core.rs rename {src => harbor-client/src}/db.rs (98%) rename {src => harbor-client/src}/db_models/fedimint.rs (100%) rename {src => harbor-client/src}/db_models/lightning_payment.rs (97%) rename {src => harbor-client/src}/db_models/lightning_receive.rs (97%) rename {src => harbor-client/src}/db_models/mod.rs (74%) rename {src => harbor-client/src}/db_models/onchain_payment.rs (97%) rename {src => harbor-client/src}/db_models/onchain_receive.rs (97%) rename {src => harbor-client/src}/db_models/profile.rs (100%) rename {src => harbor-client/src}/db_models/schema.rs (100%) create mode 100644 harbor-client/src/db_models/transaction_item.rs rename {src => harbor-client/src}/fedimint_client.rs (86%) create mode 100644 harbor-client/src/lib.rs create mode 100644 harbor-ui/.gitignore create mode 100644 harbor-ui/Cargo.toml rename {assets => harbor-ui/assets}/fonts/Inter-Bold.ttf (100%) rename {assets => harbor-ui/assets}/fonts/Inter-Regular.ttf (100%) rename {assets => harbor-ui/assets}/harbor_logo.svg (100%) rename {assets => harbor-ui/assets}/icons/bolt.svg (100%) rename {assets => harbor-ui/assets}/icons/chain.svg (100%) rename {assets => harbor-ui/assets}/icons/chevron_down.svg (100%) rename {assets => harbor-ui/assets}/icons/copy.svg (100%) rename {assets => harbor-ui/assets}/icons/down_left.svg (100%) rename {assets => harbor-ui/assets}/icons/eye.svg (100%) rename {assets => harbor-ui/assets}/icons/heart.svg (100%) rename {assets => harbor-ui/assets}/icons/home.svg (100%) rename {assets => harbor-ui/assets}/icons/left_right.svg (100%) rename {assets => harbor-ui/assets}/icons/people.svg (100%) rename {assets => harbor-ui/assets}/icons/plus.svg (100%) rename {assets => harbor-ui/assets}/icons/qr.svg (100%) rename {assets => harbor-ui/assets}/icons/restart.svg (100%) rename {assets => harbor-ui/assets}/icons/settings.svg (100%) rename {assets => harbor-ui/assets}/icons/small_close.svg (100%) rename {assets => harbor-ui/assets}/icons/squirrel.svg (100%) rename {assets => harbor-ui/assets}/icons/up_right.svg (100%) rename src/core.rs => harbor-ui/src/bridge.rs (52%) rename {src => harbor-ui/src}/components/button.rs (100%) rename {src => harbor-ui/src}/components/caption_text.rs (100%) rename {src => harbor-ui/src}/components/colors.rs (100%) rename {src => harbor-ui/src}/components/easing.rs (100%) rename {src => harbor-ui/src}/components/federation_item.rs (87%) rename {src => harbor-ui/src}/components/header.rs (100%) rename {src => harbor-ui/src}/components/icon.rs (100%) rename {src => harbor-ui/src}/components/input.rs (100%) rename {src => harbor-ui/src}/components/layout.rs (100%) rename {src => harbor-ui/src}/components/mini_copy.rs (100%) rename {src => harbor-ui/src}/components/mod.rs (100%) rename {src => harbor-ui/src}/components/rules.rs (100%) rename {src => harbor-ui/src}/components/screen_header.rs (91%) rename {src => harbor-ui/src}/components/sidebar.rs (100%) rename {src => harbor-ui/src}/components/spinner.rs (100%) rename {src => harbor-ui/src}/components/styles.rs (100%) rename {src => harbor-ui/src}/components/toast.rs (100%) rename {src => harbor-ui/src}/components/transaction_item.rs (61%) rename {src => harbor-ui/src}/components/util.rs (100%) rename {src => harbor-ui/src}/conf.rs (95%) rename {src => harbor-ui/src}/main.rs (99%) rename {src => harbor-ui/src}/routes/donate.rs (100%) rename {src => harbor-ui/src}/routes/history.rs (100%) rename {src => harbor-ui/src}/routes/home.rs (100%) rename {src => harbor-ui/src}/routes/mints.rs (100%) rename {src => harbor-ui/src}/routes/mod.rs (100%) rename {src => harbor-ui/src}/routes/receive.rs (99%) rename {src => harbor-ui/src}/routes/send.rs (100%) rename {src => harbor-ui/src}/routes/settings.rs (100%) rename {src => harbor-ui/src}/routes/transfer.rs (100%) rename {src => harbor-ui/src}/routes/unlock.rs (100%) rename {src => harbor-ui/src}/routes/welcome.rs (100%) delete mode 100644 src/bridge.rs diff --git a/Cargo.lock b/Cargo.lock index 2469fa5..2bcf909 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "ab_glyph" -version = "0.2.25" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f90148830dac590fac7ccfe78ec4a8ea404c60f75a24e16407a71f0f40de775" +checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -20,19 +20,13 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "addr2line" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -141,7 +135,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.5.0", + "bitflags 2.6.0", "cc", "cesu8", "jni", @@ -227,9 +221,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" [[package]] name = "approx" @@ -251,7 +245,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -268,9 +262,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -301,9 +295,9 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ "event-listener", "event-listener-strategy", @@ -313,12 +307,11 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -326,9 +319,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.12" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" +checksum = "103db485efc3e41214fe4fda9f3dbeae2eb9082f48fd236e6095627a9422066e" dependencies = [ "flate2", "futures-core", @@ -339,9 +332,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", @@ -363,9 +356,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ "async-lock", "cfg-if", @@ -377,7 +370,7 @@ dependencies = [ "rustix", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -393,9 +386,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", "async-io", @@ -408,7 +401,6 @@ dependencies = [ "futures-lite", "rustix", "tracing", - "windows-sys 0.52.0", ] [[package]] @@ -419,14 +411,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ "async-io", "async-lock", @@ -437,14 +429,14 @@ dependencies = [ "rustix", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -453,13 +445,13 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -476,7 +468,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -530,9 +522,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backon" @@ -554,7 +546,7 @@ dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide 0.8.0", + "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", @@ -622,11 +614,11 @@ dependencies = [ [[package]] name = "bip39" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ - "bitcoin_hashes 0.11.0", + "bitcoin_hashes 0.13.0", "rand 0.8.5", "rand_core 0.6.4", "serde", @@ -681,6 +673,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f9997f8650dd818369931b5672a18dbef95324d0513aa99aae758de8ce86e5b" +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + [[package]] name = "bitcoin-private" version = "0.1.0" @@ -706,6 +704,16 @@ dependencies = [ "serde", ] +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals 0.2.0", + "hex-conservative", +] + [[package]] name = "bitcoincore-rpc" version = "0.17.0" @@ -740,9 +748,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ "serde", ] @@ -782,7 +790,7 @@ checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -820,12 +828,11 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", - "async-lock", "async-task", "futures-io", "futures-lite", @@ -872,22 +879,22 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -898,23 +905,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" - -[[package]] -name = "calloop" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" -dependencies = [ - "bitflags 2.5.0", - "log", - "polling", - "rustix", - "slab", - "thiserror", -] +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "calloop" @@ -922,7 +915,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "log", "polling", "rustix", @@ -930,25 +923,13 @@ dependencies = [ "thiserror", ] -[[package]] -name = "calloop-wayland-source" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" -dependencies = [ - "calloop 0.12.4", - "rustix", - "wayland-backend", - "wayland-client", -] - [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop 0.13.0", + "calloop", "rustix", "wayland-backend", "wayland-client", @@ -971,13 +952,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -1032,9 +1013,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.17" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -1042,9 +1023,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -1054,14 +1035,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1072,22 +1053,22 @@ checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] [[package]] name = "clipboard_macos" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95" +checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f" dependencies = [ - "objc", - "objc-foundation", - "objc_id", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] @@ -1120,36 +1101,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1238,7 +1189,7 @@ dependencies = [ "rust-ini 0.19.0", "serde", "serde_json", - "toml 0.8.12", + "toml", "yaml-rust", ] @@ -1293,11 +1244,21 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" @@ -1306,8 +1267,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", "foreign-types", "libc", ] @@ -1319,7 +1293,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", "libc", ] @@ -1329,7 +1314,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "fontdb 0.16.2", "log", "rangemap", @@ -1348,18 +1333,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -1394,9 +1379,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -1427,14 +1412,10 @@ dependencies = [ ] [[package]] -name = "ctor" -version = "0.2.8" +name = "ctor-lite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" -dependencies = [ - "quote", - "syn 2.0.61", -] +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" [[package]] name = "ctr" @@ -1475,7 +1456,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1484,8 +1465,8 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" dependencies = [ - "bitflags 2.5.0", - "libloading 0.8.3", + "bitflags 2.6.0", + "libloading 0.8.5", "winapi", ] @@ -1550,7 +1531,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1572,7 +1553,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1631,7 +1612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c21b673a9b8c78c34908e6fcb42b922e11c4df2de5237f1c3f58d3285904a84b" dependencies = [ "heck 0.4.1", - "itertools 0.10.5", + "itertools 0.11.0", "proc-macro-crate 1.3.1", "proc-macro2", "quote", @@ -1658,14 +1639,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68a27f0a2651f507903d67f8fb0688291e3e69f70381cdb5ee9729366f795f80" dependencies = [ "heck 0.5.0", - "indexmap 2.2.6", - "itertools 0.12.1", - "proc-macro-crate 3.1.0", + "indexmap 2.6.0", + "itertools 0.13.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "sha3", "strum 0.26.3", - "syn 2.0.61", + "syn 2.0.79", "void", ] @@ -1710,7 +1691,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1721,9 +1702,9 @@ checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" [[package]] name = "diesel" -version = "2.1.6" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff236accb9a5069572099f0b350a92e9560e8e63a9b8d546162f4a5e03026bb2" +checksum = "158fe8e2e68695bd615d7e4f3227c0727b151330d3e253b525086c348d055d5e" dependencies = [ "chrono", "diesel_derives", @@ -1734,21 +1715,22 @@ dependencies = [ [[package]] name = "diesel_derives" -version = "2.1.4" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14701062d6bed917b5c7103bdffaee1e4609279e240488ad24e7bd979ca6866c" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", + "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "diesel_migrations" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6036b3f0120c5961381b570ee20a02432d7e2d27ea60de9578799cf9156914ac" +checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" dependencies = [ "diesel", "migrations_internals", @@ -1757,11 +1739,11 @@ dependencies = [ [[package]] name = "diesel_table_macro_syntax" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1840,7 +1822,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -1849,7 +1831,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.3", + "libloading 0.8.5", ] [[package]] @@ -1881,11 +1863,11 @@ checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "drm" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1894,9 +1876,9 @@ dependencies = [ [[package]] name = "drm-ffi" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" dependencies = [ "drm-sys", "rustix", @@ -1910,12 +1892,26 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" dependencies = [ "libc", - "linux-raw-sys 0.6.4", + "linux-raw-sys 0.6.5", +] + +[[package]] +name = "dsl_auto_type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +dependencies = [ + "darling 0.20.10", + "either", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] @@ -1978,9 +1974,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "electrum-client" @@ -2054,14 +2050,14 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "enumflags2" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ "enumflags2_derive", "serde", @@ -2069,13 +2065,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -2099,11 +2095,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b73807008a3c7f171cc40312f37d95ef0396e048b5848d775f54b1a4dd4a0d3" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" dependencies = [ "serde", + "typeid", ] [[package]] @@ -2118,9 +2115,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "esplora-client" @@ -2129,7 +2126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cb1f7f2489cce83bc3bd92784f9ba5271eeb6e729b975895fc541f78cbfcdca" dependencies = [ "bitcoin 0.30.2", - "bitcoin-internals", + "bitcoin-internals 0.1.0", "log", "reqwest 0.11.27", "serde", @@ -2137,9 +2134,9 @@ dependencies = [ [[package]] name = "etagere" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306960881d6c46bd0dd6b7f07442a441418c08d0d3e63d8d080b0f64c6343e4e" +checksum = "0e2f1e3be19fb10f549be8c1bf013e8675b4066c445e36eb76d2ebb2f54ee495" dependencies = [ "euclid", "svg_fmt", @@ -2147,18 +2144,18 @@ dependencies = [ [[package]] name = "euclid" -version = "0.22.9" +version = "0.22.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" dependencies = [ "num-traits", ] [[package]] name = "event-listener" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", @@ -2195,15 +2192,15 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ "simd-adler32", ] @@ -2350,7 +2347,7 @@ dependencies = [ "futures", "itertools 0.13.0", "rand 0.8.5", - "reqwest 0.12.7", + "reqwest 0.12.8", "serde", "serde_json", "strum 0.26.3", @@ -2422,7 +2419,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -2468,7 +2465,7 @@ dependencies = [ "lightning-invoice", "lnurl-rs", "rand 0.8.5", - "reqwest 0.12.7", + "reqwest 0.12.8", "secp256k1 0.27.0", "serde", "serde_json", @@ -2721,7 +2718,7 @@ checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" dependencies = [ "atomic 0.6.0", "serde", - "toml 0.8.12", + "toml", "uncased", "version_check", ] @@ -2734,18 +2731,18 @@ checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "libredox 0.1.3", + "libredox", "windows-sys 0.59.0", ] [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide 0.7.2", + "miniz_oxide", ] [[package]] @@ -2772,22 +2769,28 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "font-types" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0189ccb084f77c5523e08288d418cbaa09c451a08515678a0aa265df9a8b60" +checksum = "dda6e36206148f69fc6ecb1bb6c0dedd7ee469f3db1d0dc2045beea28430ca43" dependencies = [ "bytemuck", ] [[package]] name = "fontconfig-parser" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" +checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" dependencies = [ - "roxmltree 0.19.0", + "roxmltree", ] [[package]] @@ -2836,7 +2839,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -2894,9 +2897,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2909,9 +2912,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2919,15 +2922,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2937,9 +2940,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -2956,13 +2959,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -2972,21 +2975,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -3000,9 +3003,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -3062,9 +3065,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "gl_generator" @@ -3174,7 +3177,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "gpu-alloc-types", ] @@ -3184,7 +3187,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -3206,7 +3209,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "gpu-descriptor-types", "hashbrown 0.14.5", ] @@ -3217,7 +3220,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -3253,7 +3256,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -3272,7 +3275,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -3290,7 +3293,7 @@ dependencies = [ ] [[package]] -name = "harbor" +name = "harbor-client" version = "0.1.0" dependencies = [ "anyhow", @@ -3317,6 +3320,42 @@ dependencies = [ "lyon_algorithms", "once_cell", "palette", + "rusqlite", + "serde", + "tempdir", + "tokio", + "uuid", +] + +[[package]] +name = "harbor-ui" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bitcoin 0.30.2", + "chrono", + "config", + "diesel", + "diesel_migrations", + "fedimint-api-client", + "fedimint-bip39", + "fedimint-client", + "fedimint-core", + "fedimint-ln-client", + "fedimint-ln-common", + "fedimint-mint-client", + "fedimint-wallet-client", + "harbor-client", + "hex", + "home", + "iced", + "log", + "lyon_algorithms", + "once_cell", + "palette", "pretty_env_logger", "rusqlite", "serde", @@ -3350,6 +3389,17 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashlink" version = "0.8.4" @@ -3365,10 +3415,10 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "com", "libc", - "libloading 0.8.3", + "libloading 0.8.5", "thiserror", "widestring", "winapi", @@ -3392,6 +3442,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -3493,9 +3549,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -3503,22 +3559,22 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -3544,9 +3600,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -3568,16 +3624,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -3594,7 +3650,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.28", + "hyper 0.14.31", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -3608,9 +3664,9 @@ checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.5.0", "hyper-util", - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -3620,29 +3676,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.5.0", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3677,11 +3732,11 @@ dependencies = [ [[package]] name = "iced_core" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa341b914c93e1afc651c8b5c5b6c88aa68aa92e7d9923366b97a85a7f2ba46" +checksum = "0013a238275494641bf8f1732a23a808196540dc67b22ff97099c044ae4c8a1c" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "dark-light", "glam", @@ -3697,9 +3752,9 @@ dependencies = [ [[package]] name = "iced_futures" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9b08fd632f5131344702869eea35fdebef9e548ab504942ac6b44fb42c90e2" +checksum = "0c04a6745ba2e80f32cf01e034fd00d853aa4f4cd8b91888099cb7aaee0d5d7c" dependencies = [ "futures", "iced_core", @@ -3729,7 +3784,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba25a18cfa6d5cc160aca7e1b34f73ccdff21680fa8702168c09739767b6c66f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytemuck", "cosmic-text", "half", @@ -3759,9 +3814,9 @@ dependencies = [ [[package]] name = "iced_runtime" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72474ab379b1c53f4ec5e468c66f8e307f8db13c865c2714d2c4a4a5b38c9a1" +checksum = "348b5b2c61c934d88ca3b0ed1ed913291e923d086a66fa288ce9669da9ef62b5" dependencies = [ "bytes", "iced_core", @@ -3789,11 +3844,11 @@ dependencies = [ [[package]] name = "iced_wgpu" -version = "0.13.0" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8194d7666004b8e947f89ab7446d323ab0b882971226c1913ef98764c9e4bbc4" +checksum = "15708887133671d2bcc6c1d01d1f176f43a64d6cdc3b2bf893396c3ee498295f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytemuck", "futures", "glam", @@ -3811,9 +3866,9 @@ dependencies = [ [[package]] name = "iced_widget" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23eef161bcd216f3472916570919dc3542647285da9cc81085b8d5cb434dc870" +checksum = "81429e1b950b0e4bca65be4c4278fea6678ea782030a411778f26fa9f8983e1d" dependencies = [ "iced_renderer", "iced_runtime", @@ -3898,7 +3953,7 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -3910,7 +3965,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -3926,18 +3981,18 @@ dependencies = [ [[package]] name = "include_dir" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" dependencies = [ "include_dir_macros", ] [[package]] name = "include_dir_macros" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ "proc-macro2", "quote", @@ -3956,12 +4011,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", "serde", ] @@ -3977,9 +4032,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -3992,17 +4047,17 @@ checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] @@ -4024,9 +4079,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] @@ -4070,9 +4125,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -4085,9 +4140,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -4116,9 +4171,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89841d4f03a14c055eb41d4f41901819573ef948e8ee0d5c86466fd286b2ce7f" +checksum = "548125b159ba1314104f5bb5f38519e03a41862786aa3925cf349aae9cdd546e" dependencies = [ "base64 0.22.1", "futures-channel", @@ -4127,7 +4182,7 @@ dependencies = [ "http 1.1.0", "jsonrpsee-core", "pin-project", - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", "soketto", "thiserror", @@ -4140,9 +4195,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff79651479f69ada7bda604ef2acf3f1aa50755d97cc36d25ff04c2664f9d96f" +checksum = "f2882f6f8acb9fdaec7cefc4fd607119a9bd709831df7d7672a1d3b644628280" dependencies = [ "async-trait", "futures-timer", @@ -4161,9 +4216,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531e386460425e49679587871a056f2895a47dade21457324ad1262cd78ef6d9" +checksum = "a178c60086f24cc35bb82f57c651d0d25d99c4742b4d335de04e97fa1f08a8a1" dependencies = [ "http 1.1.0", "serde", @@ -4173,9 +4228,9 @@ dependencies = [ [[package]] name = "jsonrpsee-wasm-client" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a2d2206c8f04c6b79a11bd1d92d6726b6f7fd3dec57c91e07fa53e867268bbb" +checksum = "1a01cd500915d24ab28ca17527e23901ef1be6d659a2322451e1045532516c25" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -4184,9 +4239,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87bc869e143d430e748988261d19b630e8f1692074e68f1a7f0eb4c521d2fc58" +checksum = "0fe322e0896d0955a3ebdd5bf813571c53fea29edd713bc315b76620b327e86d" dependencies = [ "http 1.1.0", "jsonrpsee-client-transport", @@ -4211,7 +4266,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.3", + "libloading 0.8.5", "pkg-config", ] @@ -4243,18 +4298,18 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin 0.9.8", ] [[package]] name = "libc" -version = "0.2.158" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libloading" @@ -4268,9 +4323,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -4279,19 +4334,8 @@ dependencies = [ [[package]] name = "libm" version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" -dependencies = [ - "bitflags 2.5.0", - "libc", - "redox_syscall 0.4.1", -] +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libredox" @@ -4299,9 +4343,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", ] [[package]] @@ -4347,15 +4391,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "linux-raw-sys" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "lnurl-rs" @@ -4370,7 +4414,7 @@ dependencies = [ "bitcoin 0.30.2", "cbc", "email_address", - "reqwest 0.12.7", + "reqwest 0.12.8", "serde", "serde_json", "url", @@ -4394,11 +4438,11 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -4434,9 +4478,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca507745ba7ccbc76e5c44e7b63b1a29d2b0d6126f375806a5bbaf657c7d6c45" +checksum = "9c08a606c7a59638d6c6aa18ac91a06aa9fb5f765a7efb27e6a4da58700740d7" dependencies = [ "lyon_geom", "num-traits", @@ -4444,9 +4488,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4470bd0b1f29eda66068ab1fd47719facda0a136b829bcca69287ed0ac40a134" +checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" dependencies = [ "float_next_after", "lyon_path", @@ -4489,15 +4533,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -4529,9 +4573,9 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block", - "core-graphics-types", + "core-graphics-types 0.1.3", "foreign-types", "log", "objc", @@ -4540,19 +4584,19 @@ dependencies = [ [[package]] name = "migrations_internals" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" dependencies = [ "serde", - "toml 0.7.8", + "toml", ] [[package]] name = "migrations_macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" dependencies = [ "migrations_internals", "proc-macro2", @@ -4573,25 +4617,15 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniscript" -version = "10.0.0" +version = "10.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eb102b66b2127a872dbcc73095b7b47aeb9d92f7b03c2b2298253ffc82c7594" +checksum = "d371924f9eb7aa860ab395baaaa0bcdfa81a32f330b538c4e2c04617b2722fe3" dependencies = [ "bitcoin 0.30.2", "bitcoin-private", "serde", ] -[[package]] -name = "miniz_oxide" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" -dependencies = [ - "adler", - "simd-adler32", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -4599,6 +4633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -4607,7 +4642,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", "wasi", "windows-sys 0.52.0", @@ -4620,10 +4655,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" dependencies = [ "bit-set", - "bitflags 2.5.0", + "bitflags 2.6.0", "codespan-reporting", "hexf-parse", - "indexmap 2.2.6", + "indexmap 2.6.0", "log", "num-traits", "rustc-hash 1.1.0", @@ -4639,7 +4674,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -4674,13 +4709,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", - "cfg_aliases 0.1.1", + "cfg_aliases 0.2.1", "libc", "memoffset", ] @@ -4774,29 +4809,29 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -4809,17 +4844,6 @@ dependencies = [ "objc_exception", ] -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - [[package]] name = "objc-sys" version = "0.3.5" @@ -4842,7 +4866,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "libc", "objc2", @@ -4858,7 +4882,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-core-location", @@ -4882,7 +4906,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-foundation", @@ -4924,7 +4948,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "dispatch", "libc", @@ -4949,7 +4973,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-foundation", @@ -4961,7 +4985,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-foundation", @@ -4984,7 +5008,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-cloud-kit", @@ -5016,7 +5040,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "objc2", "objc2-core-location", @@ -5032,44 +5056,35 @@ dependencies = [ "cc", ] -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - [[package]] name = "object" -version = "0.36.4" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl-src" -version = "300.2.3+3.2.1" +version = "300.3.2+3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843" +checksum = "a211a18d945ef7e648cc6e0058f4c548ee46aab922ea203e0d30e966ea23647b" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -5086,11 +5101,11 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.47" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" dependencies = [ - "libredox 0.0.2", + "libredox", ] [[package]] @@ -5140,11 +5155,11 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owned_ttf_parser" -version = "0.20.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" dependencies = [ - "ttf-parser 0.20.0", + "ttf-parser 0.25.0", ] [[package]] @@ -5215,7 +5230,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -5238,7 +5253,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 1.0.109", @@ -5246,9 +5261,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -5263,9 +5278,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core 0.9.10", @@ -5293,7 +5308,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", "smallvec", "windows-targets 0.52.6", ] @@ -5317,9 +5332,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" [[package]] name = "pem-rfc7468" @@ -5338,9 +5353,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -5349,9 +5364,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -5359,22 +5374,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "pest_meta" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ "once_cell", "pest", @@ -5411,7 +5426,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -5431,22 +5446,22 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -5463,9 +5478,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand", @@ -5495,36 +5510,36 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.2", + "miniz_oxide", ] [[package]] name = "polling" -version = "3.7.0" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.4.0", "pin-project-lite", "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5536,7 +5551,7 @@ dependencies = [ "atomic 0.5.3", "crossbeam-queue", "futures", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "static_assertions", "thiserror", @@ -5550,9 +5565,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "presser" @@ -5587,7 +5605,7 @@ checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" dependencies = [ "autocfg", "equivalent", - "indexmap 2.2.6", + "indexmap 2.6.0", ] [[package]] @@ -5602,11 +5620,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.22", ] [[package]] @@ -5635,18 +5653,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" [[package]] name = "pwd-grp" @@ -5668,9 +5686,9 @@ checksum = "166f136dfdb199f98186f3649cf7a0536534a61417a1a30221b492b4fb60ce3f" [[package]] name = "quick-xml" -version = "0.36.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" dependencies = [ "memchr", ] @@ -5686,7 +5704,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.13", + "rustls 0.23.15", "socket2", "thiserror", "tokio", @@ -5703,7 +5721,7 @@ dependencies = [ "rand 0.8.5", "ring 0.17.8", "rustc-hash 2.0.0", - "rustls 0.23.13", + "rustls 0.23.15", "slab", "thiserror", "tinyvec", @@ -5725,9 +5743,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -5739,7 +5757,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "scheduled-thread-pool", ] @@ -5830,9 +5848,9 @@ checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" [[package]] name = "raw-window-handle" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" @@ -5865,9 +5883,9 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.20.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c141b9980e1150201b2a3a32879001c8f975fe313ec3df5471a9b5c79a880cd" +checksum = "fb94d9ac780fdcf9b6b252253f7d8f221379b84bd3573131139b383df69f85e1" dependencies = [ "bytemuck", "font-types", @@ -5893,34 +5911,34 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", - "libredox 0.1.3", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -5934,13 +5952,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -5951,9 +5969,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "remove_dir_all" @@ -5984,7 +6002,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.31", "hyper-rustls 0.24.2", "ipnet", "js-sys", @@ -6014,9 +6032,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64 0.22.1", "bytes", @@ -6025,9 +6043,9 @@ dependencies = [ "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.5.0", "hyper-rustls 0.27.3", "hyper-util", "ipnet", @@ -6038,8 +6056,8 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.13", - "rustls-pemfile 2.1.2", + "rustls 0.23.15", + "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", @@ -6091,9 +6109,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.37" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] @@ -6135,17 +6153,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.5.0", + "bitflags 2.6.0", "serde", "serde_derive", ] -[[package]] -name = "roxmltree" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" - [[package]] name = "roxmltree" version = "0.20.0" @@ -6237,14 +6249,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -6262,9 +6274,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "log", "once_cell", @@ -6286,19 +6298,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -6323,9 +6334,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rustybuzz" @@ -6333,7 +6344,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytemuck", "libm", "smallvec", @@ -6388,7 +6399,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.2", + "parking_lot 0.12.3", ] [[package]] @@ -6422,7 +6433,7 @@ dependencies = [ "ab_glyph", "log", "memmap2", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "tiny-skia", ] @@ -6559,7 +6570,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -6573,9 +6584,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "610f75ff4a8e3cb29b85da56eabdd1bff5b06739059a4b8e2967fef32e5d9944" dependencies = [ "itoa", "memchr", @@ -6591,14 +6602,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -6617,15 +6628,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.6.0", "serde", "serde_derive", "serde_json", @@ -6635,14 +6646,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -6702,9 +6713,15 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" dependencies = [ - "dirs 4.0.0", + "dirs 5.0.1", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -6765,9 +6782,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skrifa" -version = "0.20.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abea4738067b1e628c6ce28b2c216c19e9ea95715cdb332680e821c3bec2ef23" +checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" dependencies = [ "bytemuck", "read-fonts", @@ -6797,40 +6814,15 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smithay-client-toolkit" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" -dependencies = [ - "bitflags 2.5.0", - "calloop 0.12.4", - "calloop-wayland-source 0.2.0", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix", - "thiserror", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols 0.31.2", - "wayland-protocols-wlr 0.2.0", - "wayland-scanner", - "xkeysym", -] - [[package]] name = "smithay-client-toolkit" version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.5.0", - "calloop 0.13.0", - "calloop-wayland-source 0.3.0", + "bitflags 2.6.0", + "calloop", + "calloop-wayland-source", "cursor-icon", "libc", "log", @@ -6841,37 +6833,37 @@ dependencies = [ "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols 0.32.4", - "wayland-protocols-wlr 0.3.4", + "wayland-protocols", + "wayland-protocols-wlr", "wayland-scanner", "xkeysym", ] [[package]] name = "smithay-clipboard" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "smithay-client-toolkit 0.18.1", + "smithay-client-toolkit", "wayland-backend", ] [[package]] name = "smol_str" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", @@ -6879,24 +6871,25 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61d5d17f23326fe0d9b0af282f73f3af666699420fd5f42629efd9c6e7dc166f" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "as-raw-xcb-connection", "bytemuck", "cfg_aliases 0.2.1", - "cocoa", - "core-graphics", + "core-graphics 0.24.0", "drm", "fastrand", "foreign-types", "js-sys", "log", "memmap2", - "objc", + "objc2", + "objc2-foundation", + "objc2-quartz-core", "raw-window-handle", - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", "rustix", "tiny-xlib", "wasm-bindgen", @@ -6904,7 +6897,7 @@ dependencies = [ "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "x11rb", ] @@ -6941,7 +6934,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -6977,9 +6970,9 @@ dependencies = [ [[package]] name = "ssh-key" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca9b366a80cf18bb6406f4cf4d10aebfb46140a8c0c33f666a144c5c76ecbafc" +checksum = "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" dependencies = [ "p256", "p384", @@ -7050,7 +7043,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -7063,20 +7056,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svg_fmt" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83ba502a3265efb76efb89b0a2f7782ad6f2675015d4ce37e4b547dda42b499" +checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" [[package]] name = "svgtypes" @@ -7090,9 +7083,9 @@ dependencies = [ [[package]] name = "swash" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93cdc334a50fcc2aa3f04761af3b28196280a6aaadb1ef11215c478ae32615ac" +checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" dependencies = [ "skrifa", "yazi", @@ -7112,9 +7105,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.61" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -7152,7 +7145,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -7184,14 +7177,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7220,7 +7214,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -7301,13 +7295,14 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" +checksum = "1d52f22673960ad13af14ff4025997312def1223bfa7c8e4949d099e6b3d5d1c" dependencies = [ "as-raw-xcb-connection", - "ctor", - "libloading 0.8.3", + "ctor-lite", + "libloading 0.8.5", + "pkg-config", "tracing", ] @@ -7322,9 +7317,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -7345,7 +7340,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2", @@ -7362,7 +7357,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -7381,16 +7376,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-socks" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", @@ -7412,9 +7407,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -7426,33 +7421,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.19.15", -] - -[[package]] -name = "toml" -version = "0.8.12" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit 0.22.22", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -7463,35 +7446,22 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.8", + "winnow 0.6.20", ] [[package]] @@ -7543,7 +7513,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a278cc2fb3cbf9fc4137d492e0900f14e615f9181b8c5c7d5d1f1822725c65b" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "caret", "derive_more", @@ -7689,7 +7659,7 @@ dependencies = [ "shellexpand", "strum 0.26.3", "thiserror", - "toml 0.8.12", + "toml", "tor-basic-utils", "tor-error", "tracing", @@ -7970,7 +7940,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b39f8f3dcad5504634b66a4ae209a2d0dd9936752f6e5a3722c8ff6831ab5e" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "derive_more", "digest", "futures", @@ -8004,7 +7974,7 @@ checksum = "d742d50881e12014880daf2b6c82deb74a00bda97582ab0a2a8ad55ae2ffa5cb" dependencies = [ "amplify", "base64ct", - "bitflags 2.5.0", + "bitflags 2.6.0", "cipher", "derive_builder_fork_arti", "derive_more", @@ -8208,33 +8178,11 @@ dependencies = [ "thiserror", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -8242,7 +8190,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -8256,7 +8203,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -8316,7 +8263,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -8337,11 +8284,26 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" +[[package]] +name = "ttf-parser" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5902c5d130972a0000f60860bfbf46f7ca3db5391eddfedd1b8728bd9dc96c0e" + [[package]] name = "typed-index-collections" -version = "3.2.0" +version = "3.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d844b11f547a6fb9dee7ed073d9860174917a072aabe05df6ee60dbe79e7afa" +dependencies = [ + "serde", +] + +[[package]] +name = "typeid" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcaa12ebb1130b157493e9ac334c70e7ddcb0e12367f925bf8f50e4681d367e" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] name = "typenum" @@ -8351,9 +8313,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uds_windows" @@ -8377,9 +8339,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-bidi-mirroring" @@ -8395,9 +8357,9 @@ checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-linebreak" @@ -8416,21 +8378,21 @@ dependencies = [ [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-script" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-vo" @@ -8440,15 +8402,15 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -8488,7 +8450,7 @@ dependencies = [ "kurbo 0.11.1", "log", "pico-args", - "roxmltree 0.20.0", + "roxmltree", "rustybuzz", "simplecss", "siphasher 1.0.1", @@ -8509,9 +8471,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] @@ -8530,9 +8492,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "visibility" @@ -8542,7 +8504,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] @@ -8587,34 +8549,35 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -8624,9 +8587,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8634,22 +8597,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-timer" @@ -8686,7 +8649,7 @@ version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "rustix", "wayland-backend", "wayland-scanner", @@ -8698,41 +8661,29 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.1" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb" dependencies = [ "rustix", "wayland-client", "xcursor", ] -[[package]] -name = "wayland-protocols" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - [[package]] name = "wayland-protocols" version = "0.32.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8744,23 +8695,10 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a0a41a6875e585172495f7a96dfa42ca7e0213868f4f15c313f7c33221a7eff" dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-protocols 0.32.4", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" -dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols 0.31.2", + "wayland-protocols", "wayland-scanner", ] @@ -8770,10 +8708,10 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols 0.32.4", + "wayland-protocols", "wayland-scanner", ] @@ -8808,9 +8746,9 @@ checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -8878,7 +8816,7 @@ dependencies = [ "js-sys", "log", "naga", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "profiling", "raw-window-handle", "smallvec", @@ -8899,14 +8837,14 @@ checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" dependencies = [ "arrayvec", "bit-vec", - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg_aliases 0.1.1", "codespan-reporting", - "indexmap 2.2.6", + "indexmap 2.6.0", "log", "naga", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "profiling", "raw-window-handle", "rustc-hash 1.1.0", @@ -8919,18 +8857,18 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.19.4" +version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" +checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.5.0", + "bitflags 2.6.0", "block", "cfg_aliases 0.1.1", - "core-graphics-types", + "core-graphics-types 0.1.3", "d3d12", "glow", "glutin_wgl_sys", @@ -8941,14 +8879,14 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.3", + "libloading 0.8.5", "log", "metal", "naga", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "profiling", "range-alloc", "raw-window-handle", @@ -8968,7 +8906,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "js-sys", "web-sys", ] @@ -8997,11 +8935,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -9296,14 +9234,14 @@ dependencies = [ "ahash 0.8.11", "android-activity", "atomic-waker", - "bitflags 2.5.0", + "bitflags 2.6.0", "block2", "bytemuck", - "calloop 0.13.0", + "calloop", "cfg_aliases 0.2.1", "concurrent-queue", - "core-foundation", - "core-graphics", + "core-foundation 0.9.4", + "core-graphics 0.23.2", "cursor-icon", "dpi", "js-sys", @@ -9321,7 +9259,7 @@ dependencies = [ "redox_syscall 0.4.1", "rustix", "sctk-adwaita", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "smol_str", "tracing", "unicode-segmentation", @@ -9329,7 +9267,7 @@ dependencies = [ "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols 0.32.4", + "wayland-protocols", "wayland-protocols-plasma", "web-sys", "web-time", @@ -9350,9 +9288,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.8" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -9405,7 +9343,7 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.3", + "libloading 0.8.5", "once_cell", "rustix", "x11rb-protocol", @@ -9441,18 +9379,18 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" [[package]] name = "xdg-home" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ "libc", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -9461,7 +9399,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "dlib", "log", "once_cell", @@ -9470,15 +9408,15 @@ dependencies = [ [[package]] name = "xkeysym" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "xmlwriter" @@ -9503,9 +9441,9 @@ checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" [[package]] name = "zbus" -version = "4.2.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5915716dff34abef1351d2b10305b019c8ef33dcf6c72d31a6e227d5d9d7a21" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ "async-broadcast", "async-executor", @@ -9541,14 +9479,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.2.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fceb36d0c1c4a6b98f3ce40f410e64e5a134707ed71892e1b178abc4c695d4" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", "zvariant_utils", ] @@ -9571,29 +9509,30 @@ checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -9606,14 +9545,14 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.79", ] [[package]] name = "zvariant" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877ef94e5e82b231d2a309c531f191a8152baba8241a7939ee04bd76b0171308" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" dependencies = [ "endi", "enumflags2", @@ -9624,24 +9563,24 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ca98581cc6a8120789d8f1f0997e9053837d6aa5346cbb43454d7121be6e39" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "1.1.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fa7291bdd68cd13c4f97cc9d78cbf16d96305856dfc7ac942aeff4c2de7d5a" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] diff --git a/Cargo.toml b/Cargo.toml index 994a02d..fee8d7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,43 +1,7 @@ -[package] -name = "harbor" -version = "0.1.0" -edition = "2021" +[workspace] +resolver = "2" -[features] -default = [] -vendored = ["rusqlite/bundled-sqlcipher-vendored-openssl"] - -[dependencies] -anyhow = "1.0.89" -log = "0.4" -pretty_env_logger = "0.5" # todo swap to a file logger -iced = { version = "0.13.1", features = ["debug", "tokio", "svg", "qr_code", "advanced"] } -lyon_algorithms = "1.0" -once_cell = "1.0" -tokio = { version = "1", features = ["full"] } -palette = "0.7" -config = "0.14.0" -serde = { version = "1.0.210", features = ["derive"] } -home = "0.5.9" -chrono = "0.4.38" -rusqlite = { version = "0.28.0", features = ["sqlcipher"] } -diesel = { version = "2.1.6", features = ["sqlite", "chrono", "r2d2"] } -diesel_migrations = { version = "2.1.0", features = ["sqlite"] } -uuid = { version = "1.8", features = ["v4"] } -async-trait = "0.1.77" -bincode = "1.3.3" -hex = "0.4.3" - -bitcoin = { version = "0.30.2", features = ["base64"] } -bip39 = "2.0.0" -fedimint-api-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-core = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-wallet-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-mint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-ln-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-bip39 = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} -fedimint-ln-common = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} - -[dev-dependencies] -tempdir = "0.3.7" +members = [ + "harbor-client", + "harbor-ui", +] diff --git a/harbor-client/Cargo.toml b/harbor-client/Cargo.toml new file mode 100644 index 0000000..028a608 --- /dev/null +++ b/harbor-client/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "harbor-client" +version = "0.1.0" +edition = "2021" + +[dependencies] +# todo: remove +iced = { version = "0.13.1", features = ["debug", "tokio", "svg", "qr_code", "advanced"] } + +anyhow = "1.0.89" +log = "0.4" +lyon_algorithms = "1.0" +once_cell = "1.0" +tokio = { version = "1", features = ["full"] } +palette = "0.7" +config = "0.14.0" +serde = { version = "1.0.210", features = ["derive"] } +home = "0.5.9" +chrono = "0.4.38" +rusqlite = { version = "0.28.0", features = ["sqlcipher"] } +diesel = { version = "2.1.6", features = ["sqlite", "chrono", "r2d2"] } +diesel_migrations = { version = "2.1.0", features = ["sqlite"] } +uuid = { version = "1.8", features = ["v4"] } +async-trait = "0.1.77" +bincode = "1.3.3" +hex = "0.4.3" + +bitcoin = { version = "0.30.2", features = ["base64"] } +bip39 = "2.0.0" +fedimint-api-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-core = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-wallet-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-mint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-ln-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-bip39 = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} +fedimint-ln-common = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33"} + +[dev-dependencies] +tempdir = "0.3.7" diff --git a/diesel.toml b/harbor-client/diesel.toml similarity index 100% rename from diesel.toml rename to harbor-client/diesel.toml diff --git a/migrations/.keep b/harbor-client/migrations/.keep similarity index 100% rename from migrations/.keep rename to harbor-client/migrations/.keep diff --git a/migrations/2024-05-13-234832_create_config/down.sql b/harbor-client/migrations/2024-05-13-234832_create_config/down.sql similarity index 100% rename from migrations/2024-05-13-234832_create_config/down.sql rename to harbor-client/migrations/2024-05-13-234832_create_config/down.sql diff --git a/migrations/2024-05-13-234832_create_config/up.sql b/harbor-client/migrations/2024-05-13-234832_create_config/up.sql similarity index 100% rename from migrations/2024-05-13-234832_create_config/up.sql rename to harbor-client/migrations/2024-05-13-234832_create_config/up.sql diff --git a/harbor-client/src/core.rs b/harbor-client/src/core.rs new file mode 100644 index 0000000..b4533dd --- /dev/null +++ b/harbor-client/src/core.rs @@ -0,0 +1,371 @@ +use anyhow::anyhow; +use bip39::Mnemonic; +use bitcoin::address::NetworkUnchecked; +use bitcoin::{Address, Network}; +use fedimint_core::config::{ClientConfig, FederationId}; +use fedimint_core::invite_code::InviteCode; +use fedimint_core::Amount; +use fedimint_ln_client::{LightningClientModule, PayType}; +use fedimint_ln_common::config::FeeToAmount; +use fedimint_ln_common::lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description}; +use fedimint_wallet_client::WalletClientModule; +use std::collections::HashMap; +use std::sync::atomic::AtomicBool; +use std::sync::Arc; +use std::time::Instant; + +use iced::futures::{channel::mpsc::Sender, SinkExt}; +use log::{error, trace}; +use tokio::sync::RwLock; +use uuid::Uuid; + +use crate::db::DBConnection; +use crate::fedimint_client::{ + select_gateway, spawn_internal_payment_subscription, spawn_invoice_payment_subscription, + spawn_invoice_receive_subscription, spawn_onchain_payment_subscription, + spawn_onchain_receive_subscription, FederationInviteOrId, FedimintClient, +}; +use crate::{CoreUIMsg, CoreUIMsgPacket, FederationItem}; + +#[derive(Clone)] +pub struct HarborCore { + pub network: Network, + pub mnemonic: Mnemonic, + pub tx: Sender, + pub clients: Arc>>, + pub storage: Arc, + pub stop: Arc, +} + +impl HarborCore { + pub async fn msg(&self, id: Option, msg: CoreUIMsg) { + self.tx + .clone() + .send(CoreUIMsgPacket { id, msg }) + .await + .unwrap(); + } + + // Sends updates to the UI to refelect the initial state + pub async fn init_ui_state(&self) { + for client in self.clients.read().await.values() { + let fed_balance = client.fedimint_client.get_balance().await; + self.msg( + None, + CoreUIMsg::FederationBalanceUpdated { + id: client.fedimint_client.federation_id(), + balance: fed_balance, + }, + ) + .await; + } + + let history = self.storage.get_transaction_history().unwrap(); + self.msg(None, CoreUIMsg::TransactionHistoryUpdated(history)) + .await; + + let federation_items = self.get_federation_items().await; + self.msg(None, CoreUIMsg::FederationListUpdated(federation_items)) + .await; + } + + async fn get_client(&self, federation_id: FederationId) -> FedimintClient { + let clients = self.clients.read().await; + clients + .get(&federation_id) + .expect("No client found for federation") + .clone() + } + + pub async fn send_lightning( + &self, + msg_id: Uuid, + federation_id: FederationId, + invoice: Bolt11Invoice, + ) -> anyhow::Result<()> { + if invoice.amount_milli_satoshis().is_none() { + return Err(anyhow!("Invoice must have an amount")); + } + let amount = Amount::from_msats(invoice.amount_milli_satoshis().expect("must have amount")); + + // todo go through all clients and select the first one that has enough balance + let client = self.get_client(federation_id).await.fedimint_client; + let lightning_module = client + .get_first_module::() + .expect("must have ln module"); + + let gateway = select_gateway(&client) + .await + .ok_or(anyhow!("Internal error: No gateway found for federation"))?; + + let fees = gateway.fees.to_amount(&amount); + + log::info!("Sending lightning invoice: {invoice}, paying fees: {fees}"); + + let outgoing = lightning_module + .pay_bolt11_invoice(Some(gateway), invoice.clone(), ()) + .await?; + + self.storage.create_lightning_payment( + outgoing.payment_type.operation_id(), + client.federation_id(), + invoice, + amount, + fees, + )?; + + match outgoing.payment_type { + PayType::Internal(op_id) => { + let sub = lightning_module.subscribe_internal_pay(op_id).await?; + spawn_internal_payment_subscription( + self.tx.clone(), + client.clone(), + self.storage.clone(), + op_id, + msg_id, + sub, + ) + .await; + } + PayType::Lightning(op_id) => { + let sub = lightning_module.subscribe_ln_pay(op_id).await?; + spawn_invoice_payment_subscription( + self.tx.clone(), + client.clone(), + self.storage.clone(), + op_id, + msg_id, + sub, + ) + .await; + } + } + + log::info!("Invoice sent"); + + Ok(()) + } + + pub async fn receive_lightning( + &self, + msg_id: Uuid, + federation_id: FederationId, + amount: Amount, + ) -> anyhow::Result { + let client = self.get_client(federation_id).await.fedimint_client; + let lightning_module = client + .get_first_module::() + .expect("must have ln module"); + + let gateway = select_gateway(&client) + .await + .ok_or(anyhow!("Internal error: No gateway found for federation"))?; + + let desc = Description::new(String::new()).expect("empty string is valid"); + let (op_id, invoice, preimage) = lightning_module + .create_bolt11_invoice( + amount, + Bolt11InvoiceDescription::Direct(&desc), + None, + (), + Some(gateway), + ) + .await?; + + log::info!("Invoice created: {invoice}"); + + self.storage.create_ln_receive( + op_id, + client.federation_id(), + invoice.clone(), + amount, + Amount::ZERO, // todo one day there will be receive fees + preimage, + )?; + + // Create subscription to operation if it exists + if let Ok(subscription) = lightning_module.subscribe_ln_receive(op_id).await { + spawn_invoice_receive_subscription( + self.tx.clone(), + client.clone(), + self.storage.clone(), + op_id, + msg_id, + subscription, + ) + .await; + } else { + error!("Could not create subscription to lightning receive"); + } + + Ok(invoice) + } + + /// Sends a given amount of sats to a given address, if the amount is None, send all funds + pub async fn send_onchain( + &self, + msg_id: Uuid, + federation_id: FederationId, + address: Address, + sats: Option, + ) -> anyhow::Result<()> { + // todo go through all clients and select the first one that has enough balance + let client = self.get_client(federation_id).await.fedimint_client; + let onchain = client + .get_first_module::() + .expect("must have wallet module"); + + // todo add manual fee selection + let (fees, amount) = match sats { + Some(sats) => { + let amount = bitcoin::Amount::from_sat(sats); + let fees = onchain.get_withdraw_fees(address.clone(), amount).await?; + (fees, amount) + } + None => { + let balance = client.get_balance().await; + + if balance.sats_round_down() == 0 { + return Err(anyhow!("No funds in wallet")); + } + + // get fees for the entire balance + let fees = onchain + .get_withdraw_fees( + address.clone(), + bitcoin::Amount::from_sat(balance.sats_round_down()), + ) + .await?; + + let fees_paid = Amount::from_sats(fees.amount().to_sat()); + let amount = balance.saturating_sub(fees_paid); + + if amount.sats_round_down() < 546 { + return Err(anyhow!("Not enough funds to send")); + } + + (fees, bitcoin::Amount::from_sat(amount.sats_round_down())) + } + }; + + let op_id = onchain.withdraw(address.clone(), amount, fees, ()).await?; + + self.storage.create_onchain_payment( + op_id, + client.federation_id(), + address, + amount.to_sat(), + fees.amount().to_sat(), + )?; + + let sub = onchain.subscribe_withdraw_updates(op_id).await?; + + spawn_onchain_payment_subscription( + self.tx.clone(), + client.clone(), + self.storage.clone(), + op_id, + msg_id, + sub, + ) + .await; + + Ok(()) + } + + pub async fn receive_onchain( + &self, + msg_id: Uuid, + federation_id: FederationId, + ) -> anyhow::Result
{ + let client = self.get_client(federation_id).await.fedimint_client; + let onchain = client + .get_first_module::() + .expect("must have wallet module"); + + let (op_id, address, _) = onchain.allocate_deposit_address_expert_only(()).await?; + + self.storage + .create_onchain_receive(op_id, client.federation_id(), address.clone())?; + + let sub = onchain.subscribe_deposit(op_id).await?; + + spawn_onchain_receive_subscription( + self.tx.clone(), + client.clone(), + self.storage.clone(), + op_id, + msg_id, + sub, + ) + .await; + + Ok(address) + } + + pub async fn get_federation_info( + &self, + invite_code: InviteCode, + ) -> anyhow::Result { + let download = Instant::now(); + let config = fedimint_api_client::api::net::Connector::Tor + .download_from_invite_code(&invite_code) + .await + .map_err(|e| { + error!("Could not download federation info: {e}"); + e + })?; + trace!( + "Downloaded federation info in: {}ms", + download.elapsed().as_millis() + ); + + Ok(config) + } + + pub async fn add_federation(&self, invite_code: InviteCode) -> anyhow::Result<()> { + let id = invite_code.federation_id(); + + let mut clients = self.clients.write().await; + if clients.get(&id).is_some() { + return Err(anyhow!("Federation already added")); + } + + let client = FedimintClient::new( + self.storage.clone(), + FederationInviteOrId::Invite(invite_code), + &self.mnemonic, + self.network, + self.stop.clone(), + ) + .await?; + + clients.insert(client.fedimint_client.federation_id(), client); + + Ok(()) + } + + pub async fn get_federation_items(&self) -> Vec { + let clients = self.clients.read().await; + + // Tell the UI about any clients we have + clients + .values() + .map(|c| FederationItem { + id: c.fedimint_client.federation_id(), + name: c + .fedimint_client + .get_meta("federation_name") + .unwrap_or("Unknown".to_string()), + // TODO: get the balance per fedimint + balance: 420, + guardians: None, + module_kinds: None, + }) + .collect::>() + } + + pub async fn get_seed_words(&self) -> String { + self.mnemonic.to_string() + } +} diff --git a/src/db.rs b/harbor-client/src/db.rs similarity index 98% rename from src/db.rs rename to harbor-client/src/db.rs index c216a6a..906b6a7 100644 --- a/src/db.rs +++ b/harbor-client/src/db.rs @@ -1,4 +1,4 @@ -use crate::components::TransactionItem; +use crate::db_models::transaction_item::TransactionItem; use crate::db_models::{ Fedimint, LightningPayment, LightningReceive, NewFedimint, NewProfile, OnChainPayment, OnChainReceive, Profile, @@ -20,8 +20,7 @@ use std::{sync::Arc, time::Duration}; pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); -#[allow(dead_code)] -pub(crate) fn check_password(url: &str, password: &str) -> anyhow::Result<()> { +pub fn check_password(url: &str, password: &str) -> anyhow::Result<()> { let conn = Connection::open_with_flags( url, OpenFlags::SQLITE_OPEN_READ_ONLY | OpenFlags::SQLITE_OPEN_URI, @@ -46,7 +45,7 @@ pub(crate) fn check_password(url: &str, password: &str) -> anyhow::Result<()> { } } -pub(crate) fn setup_db(url: &str, password: String) -> anyhow::Result> { +pub fn setup_db(url: &str, password: String) -> anyhow::Result> { let manager = ConnectionManager::::new(url); let pool = Pool::builder() @@ -148,7 +147,7 @@ pub trait DBConnection { fn get_transaction_history(&self) -> anyhow::Result>; } -pub(crate) struct SQLConnection { +pub struct SQLConnection { db: Pool>, } diff --git a/src/db_models/fedimint.rs b/harbor-client/src/db_models/fedimint.rs similarity index 100% rename from src/db_models/fedimint.rs rename to harbor-client/src/db_models/fedimint.rs diff --git a/src/db_models/lightning_payment.rs b/harbor-client/src/db_models/lightning_payment.rs similarity index 97% rename from src/db_models/lightning_payment.rs rename to harbor-client/src/db_models/lightning_payment.rs index db04921..612e4f7 100644 --- a/src/db_models/lightning_payment.rs +++ b/harbor-client/src/db_models/lightning_payment.rs @@ -1,4 +1,4 @@ -use crate::components::{TransactionDirection, TransactionItem, TransactionItemKind}; +use crate::db_models::transaction_item::{TransactionDirection, TransactionItem, TransactionItemKind}; use crate::db_models::schema::lightning_payments; use crate::db_models::PaymentStatus; use bitcoin::hashes::hex::FromHex; diff --git a/src/db_models/lightning_receive.rs b/harbor-client/src/db_models/lightning_receive.rs similarity index 97% rename from src/db_models/lightning_receive.rs rename to harbor-client/src/db_models/lightning_receive.rs index bf8d780..4b4c106 100644 --- a/src/db_models/lightning_receive.rs +++ b/harbor-client/src/db_models/lightning_receive.rs @@ -1,4 +1,4 @@ -use crate::components::{TransactionDirection, TransactionItem, TransactionItemKind}; +use crate::db_models::transaction_item::{TransactionDirection, TransactionItem, TransactionItemKind}; use crate::db_models::schema::lightning_receives; use crate::db_models::PaymentStatus; use bitcoin::hashes::hex::FromHex; diff --git a/src/db_models/mod.rs b/harbor-client/src/db_models/mod.rs similarity index 74% rename from src/db_models/mod.rs rename to harbor-client/src/db_models/mod.rs index 21d14c8..7e50d9d 100644 --- a/src/db_models/mod.rs +++ b/harbor-client/src/db_models/mod.rs @@ -16,7 +16,21 @@ pub use onchain_payment::*; pub mod onchain_receive; pub use onchain_receive::*; -pub mod schema; +pub(crate) mod schema; + +pub mod transaction_item; + +use fedimint_core::config::FederationId; +use fedimint_core::core::ModuleKind; + +#[derive(Debug, Clone)] +pub struct FederationItem { + pub id: FederationId, + pub name: String, + pub balance: u64, + pub guardians: Option>, + pub module_kinds: Option>, +} #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] pub enum PaymentStatus { diff --git a/src/db_models/onchain_payment.rs b/harbor-client/src/db_models/onchain_payment.rs similarity index 97% rename from src/db_models/onchain_payment.rs rename to harbor-client/src/db_models/onchain_payment.rs index 761f1db..ca1c3f0 100644 --- a/src/db_models/onchain_payment.rs +++ b/harbor-client/src/db_models/onchain_payment.rs @@ -1,4 +1,4 @@ -use crate::components::{TransactionDirection, TransactionItem, TransactionItemKind}; +use crate::db_models::transaction_item::{TransactionDirection, TransactionItem, TransactionItemKind}; use crate::db_models::schema::on_chain_payments; use crate::db_models::PaymentStatus; use bitcoin::address::NetworkUnchecked; diff --git a/src/db_models/onchain_receive.rs b/harbor-client/src/db_models/onchain_receive.rs similarity index 97% rename from src/db_models/onchain_receive.rs rename to harbor-client/src/db_models/onchain_receive.rs index 0198f95..eddd358 100644 --- a/src/db_models/onchain_receive.rs +++ b/harbor-client/src/db_models/onchain_receive.rs @@ -1,4 +1,4 @@ -use crate::components::{TransactionDirection, TransactionItem, TransactionItemKind}; +use crate::db_models::transaction_item::{TransactionDirection, TransactionItem, TransactionItemKind}; use crate::db_models::schema::on_chain_receives; use crate::db_models::PaymentStatus; use bitcoin::address::NetworkUnchecked; diff --git a/src/db_models/profile.rs b/harbor-client/src/db_models/profile.rs similarity index 100% rename from src/db_models/profile.rs rename to harbor-client/src/db_models/profile.rs diff --git a/src/db_models/schema.rs b/harbor-client/src/db_models/schema.rs similarity index 100% rename from src/db_models/schema.rs rename to harbor-client/src/db_models/schema.rs diff --git a/harbor-client/src/db_models/transaction_item.rs b/harbor-client/src/db_models/transaction_item.rs new file mode 100644 index 0000000..a221582 --- /dev/null +++ b/harbor-client/src/db_models/transaction_item.rs @@ -0,0 +1,39 @@ +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum TransactionItemKind { + Lightning, + Onchain, +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum TransactionDirection { + Incoming, + Outgoing, +} + +#[derive(Debug, Clone, Copy)] +pub struct TransactionItem { + pub kind: TransactionItemKind, + pub amount: u64, + pub direction: TransactionDirection, + pub timestamp: u64, +} + +impl TransactionItem { + pub fn make_dummy() -> Self { + Self { + kind: TransactionItemKind::Lightning, + amount: 100, + direction: TransactionDirection::Incoming, + timestamp: 0, + } + } + + pub fn make_dummy_onchain() -> Self { + Self { + kind: TransactionItemKind::Onchain, + amount: 100, + direction: TransactionDirection::Outgoing, + timestamp: 0, + } + } +} diff --git a/src/fedimint_client.rs b/harbor-client/src/fedimint_client.rs similarity index 86% rename from src/fedimint_client.rs rename to harbor-client/src/fedimint_client.rs index 8af377e..10c2c23 100644 --- a/src/fedimint_client.rs +++ b/harbor-client/src/fedimint_client.rs @@ -1,6 +1,5 @@ -use crate::bridge::{CoreUIMsg, ReceiveSuccessMsg, SendSuccessMsg}; -use crate::Message; use crate::{db::DBConnection, db_models::NewFedimint}; +use crate::{CoreUIMsg, CoreUIMsgPacket, ReceiveSuccessMsg, SendSuccessMsg}; use anyhow::anyhow; use async_trait::async_trait; use bip39::Mnemonic; @@ -39,7 +38,7 @@ use uuid::Uuid; #[allow(dead_code)] #[derive(Debug, Clone)] -pub(crate) struct FedimintClient { +pub struct FedimintClient { pub(crate) fedimint_client: ClientHandleArc, stop: Arc, } @@ -60,7 +59,7 @@ impl FederationInviteOrId { } impl FedimintClient { - pub(crate) async fn new( + pub async fn new( storage: Arc, invite_or_id: FederationInviteOrId, mnemonic: &Mnemonic, @@ -191,6 +190,10 @@ impl FedimintClient { stop, }) } + + pub fn federation_id(&self) -> FederationId { + self.fedimint_client.federation_id() + } } pub(crate) async fn select_gateway(client: &ClientHandleArc) -> Option { @@ -237,21 +240,21 @@ pub(crate) async fn select_gateway(client: &ClientHandleArc) -> Option, msg_id: Uuid, - sender: &mut Sender, + sender: &mut Sender, ) { if let Ok(history) = storage.get_transaction_history() { sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::TransactionHistoryUpdated(history), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::TransactionHistoryUpdated(history), + }) .await .unwrap(); } } pub(crate) async fn spawn_invoice_receive_subscription( - mut sender: Sender, + mut sender: Sender, client: ClientHandleArc, storage: Arc, operation_id: OperationId, @@ -265,10 +268,10 @@ pub(crate) async fn spawn_invoice_receive_subscription( LnReceiveState::Canceled { reason } => { error!("Payment canceled, reason: {:?}", reason); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::ReceiveFailed(reason.to_string()), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::ReceiveFailed(reason.to_string()), + }) .await .unwrap(); @@ -280,10 +283,10 @@ pub(crate) async fn spawn_invoice_receive_subscription( LnReceiveState::Claimed => { info!("Payment claimed"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::ReceiveSuccess(ReceiveSuccessMsg::Lightning), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::ReceiveSuccess(ReceiveSuccessMsg::Lightning), + }) .await .unwrap(); @@ -293,13 +296,13 @@ pub(crate) async fn spawn_invoice_receive_subscription( let new_balance = client.get_balance().await; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::FederationBalanceUpdated { + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::FederationBalanceUpdated { id: client.federation_id(), balance: new_balance, }, - )) + }) .await .unwrap(); @@ -314,7 +317,7 @@ pub(crate) async fn spawn_invoice_receive_subscription( } pub(crate) async fn spawn_invoice_payment_subscription( - mut sender: Sender, + mut sender: Sender, client: ClientHandleArc, storage: Arc, operation_id: OperationId, @@ -328,10 +331,10 @@ pub(crate) async fn spawn_invoice_payment_subscription( LnPayState::Canceled => { error!("Payment canceled"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendFailure("Canceled".to_string()), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendFailure("Canceled".to_string()), + }) .await .unwrap(); @@ -343,10 +346,10 @@ pub(crate) async fn spawn_invoice_payment_subscription( LnPayState::UnexpectedError { error_message } => { error!("Unexpected payment error: {:?}", error_message); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendFailure(error_message), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendFailure(error_message), + }) .await .unwrap(); @@ -361,10 +364,10 @@ pub(crate) async fn spawn_invoice_payment_subscription( FromHex::from_hex(&preimage).expect("Invalid preimage"); let params = SendSuccessMsg::Lightning { preimage }; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendSuccess(params), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendSuccess(params), + }) .await .unwrap(); @@ -374,13 +377,13 @@ pub(crate) async fn spawn_invoice_payment_subscription( let new_balance = client.get_balance().await; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::FederationBalanceUpdated { + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::FederationBalanceUpdated { id: client.federation_id(), balance: new_balance, }, - )) + }) .await .unwrap(); @@ -395,7 +398,7 @@ pub(crate) async fn spawn_invoice_payment_subscription( } pub(crate) async fn spawn_internal_payment_subscription( - mut sender: Sender, + mut sender: Sender, client: ClientHandleArc, storage: Arc, operation_id: OperationId, @@ -409,10 +412,10 @@ pub(crate) async fn spawn_internal_payment_subscription( InternalPayState::FundingFailed { error } => { error!("Funding failed: {error:?}"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::ReceiveFailed(error.to_string()), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::ReceiveFailed(error.to_string()), + }) .await .unwrap(); if let Err(e) = storage.mark_lightning_payment_as_failed(operation_id) { @@ -423,10 +426,10 @@ pub(crate) async fn spawn_internal_payment_subscription( InternalPayState::UnexpectedError(error_message) => { error!("Unexpected payment error: {error_message:?}"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendFailure(error_message), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendFailure(error_message), + }) .await .unwrap(); if let Err(e) = storage.mark_lightning_payment_as_failed(operation_id) { @@ -440,10 +443,10 @@ pub(crate) async fn spawn_internal_payment_subscription( preimage: preimage.0, }; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendSuccess(params), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendSuccess(params), + }) .await .unwrap(); @@ -454,13 +457,13 @@ pub(crate) async fn spawn_internal_payment_subscription( let new_balance = client.get_balance().await; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::FederationBalanceUpdated { + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::FederationBalanceUpdated { id: client.federation_id(), balance: new_balance, }, - )) + }) .await .unwrap(); @@ -475,7 +478,7 @@ pub(crate) async fn spawn_internal_payment_subscription( } pub(crate) async fn spawn_onchain_payment_subscription( - mut sender: Sender, + mut sender: Sender, client: ClientHandleArc, storage: Arc, operation_id: OperationId, @@ -490,10 +493,10 @@ pub(crate) async fn spawn_onchain_payment_subscription( WithdrawState::Failed(error) => { error!("Onchain payment failed: {error:?}"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendFailure(error), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendFailure(error), + }) .await .unwrap(); if let Err(e) = storage.mark_onchain_payment_as_failed(operation_id) { @@ -506,10 +509,10 @@ pub(crate) async fn spawn_onchain_payment_subscription( info!("Onchain payment success: {txid}"); let params = SendSuccessMsg::Onchain { txid }; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::SendSuccess(params), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::SendSuccess(params), + }) .await .unwrap(); @@ -519,13 +522,13 @@ pub(crate) async fn spawn_onchain_payment_subscription( let new_balance = client.get_balance().await; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::FederationBalanceUpdated { + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::FederationBalanceUpdated { id: client.federation_id(), balance: new_balance, }, - )) + }) .await .unwrap(); @@ -539,7 +542,7 @@ pub(crate) async fn spawn_onchain_payment_subscription( } pub(crate) async fn spawn_onchain_receive_subscription( - mut sender: Sender, + mut sender: Sender, client: ClientHandleArc, storage: Arc, operation_id: OperationId, @@ -554,10 +557,10 @@ pub(crate) async fn spawn_onchain_receive_subscription( DepositStateV2::Failed(error) => { error!("Onchain receive failed: {error:?}"); sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::ReceiveFailed(error), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::ReceiveFailed(error), + }) .await .unwrap(); @@ -575,10 +578,10 @@ pub(crate) async fn spawn_onchain_receive_subscription( let txid = btc_out_point.txid; let params = ReceiveSuccessMsg::Onchain { txid }; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::ReceiveSuccess(params), - )) + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::ReceiveSuccess(params), + }) .await .unwrap(); @@ -607,13 +610,13 @@ pub(crate) async fn spawn_onchain_receive_subscription( info!("Onchain receive claimed: {btc_deposited} from {btc_out_point:?}"); let new_balance = client.get_balance().await; sender - .send(Message::core_msg( - Some(msg_id), - CoreUIMsg::FederationBalanceUpdated { + .send(CoreUIMsgPacket { + id: Some(msg_id), + msg: CoreUIMsg::FederationBalanceUpdated { id: client.federation_id(), balance: new_balance, }, - )) + }) .await .unwrap(); diff --git a/harbor-client/src/lib.rs b/harbor-client/src/lib.rs new file mode 100644 index 0000000..cc9267a --- /dev/null +++ b/harbor-client/src/lib.rs @@ -0,0 +1,94 @@ +use crate::db_models::transaction_item::TransactionItem; +use crate::db_models::FederationItem; +use bitcoin::address::NetworkUnchecked; +use bitcoin::{Address, Txid}; +use fedimint_core::config::{ClientConfig, FederationId}; +use fedimint_core::invite_code::InviteCode; +use fedimint_core::Amount; +use fedimint_ln_common::lightning_invoice::Bolt11Invoice; +use uuid::Uuid; + +pub mod core; +pub mod db; +pub mod db_models; +pub mod fedimint_client; + +#[derive(Debug, Clone)] +pub struct UICoreMsgPacket { + pub id: Uuid, + pub msg: UICoreMsg, +} + +#[derive(Debug, Clone)] +pub enum UICoreMsg { + SendLightning { + federation_id: FederationId, + invoice: Bolt11Invoice, + }, + ReceiveLightning { + federation_id: FederationId, + amount: Amount, + }, + SendOnChain { + address: Address, + federation_id: FederationId, + amount_sats: Option, + }, + ReceiveOnChain { + federation_id: FederationId, + }, + GetFederationInfo(InviteCode), + AddFederation(InviteCode), + Unlock(String), + Init { + password: String, + seed: Option, + }, + GetSeedWords, +} + +#[derive(Debug, Clone, PartialEq)] +pub enum SendSuccessMsg { + Lightning { preimage: [u8; 32] }, + Onchain { txid: Txid }, +} + +#[derive(Debug, Clone, PartialEq)] +pub enum ReceiveSuccessMsg { + Lightning, + Onchain { txid: Txid }, +} + +#[derive(Debug, Clone)] +pub struct CoreUIMsgPacket { + pub id: Option, + pub msg: CoreUIMsg, +} + +#[derive(Debug, Clone)] +pub enum CoreUIMsg { + Sending, + SendSuccess(SendSuccessMsg), + SendFailure(String), + ReceiveGenerating, + ReceiveInvoiceGenerated(Bolt11Invoice), + ReceiveAddressGenerated(Address), + ReceiveSuccess(ReceiveSuccessMsg), + ReceiveFailed(String), + // todo probably want a way to incrementally add items to the history + TransactionHistoryUpdated(Vec), + FederationBalanceUpdated { id: FederationId, balance: Amount }, + AddFederationFailed(String), + FederationInfo(ClientConfig), + AddFederationSuccess, + FederationListUpdated(Vec), + NeedsInit, + Initing, + InitSuccess, + InitFailed(String), + Locked, + Unlocking, + UnlockSuccess, + UnlockFailed(String), + SeedWords(String), +} diff --git a/harbor-ui/.gitignore b/harbor-ui/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/harbor-ui/.gitignore @@ -0,0 +1 @@ +.env diff --git a/harbor-ui/Cargo.toml b/harbor-ui/Cargo.toml new file mode 100644 index 0000000..ce5eb34 --- /dev/null +++ b/harbor-ui/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "harbor-ui" +version = "0.1.0" +edition = "2021" + +[features] +default = [] +vendored = ["rusqlite/bundled-sqlcipher-vendored-openssl"] + +[dependencies] +harbor-client = { version = "0.1.0", path = "../harbor-client" } + +anyhow = "1.0.89" +log = "0.4" +pretty_env_logger = "0.5" # todo swap to a file logger +iced = { version = "0.13.1", features = ["debug", "tokio", "svg", "qr_code", "advanced"] } +lyon_algorithms = "1.0" +once_cell = "1.0" +tokio = { version = "1", features = ["full"] } +palette = "0.7" +config = "0.14.0" +serde = { version = "1.0.210", features = ["derive"] } +home = "0.5.9" +chrono = "0.4.38" +rusqlite = { version = "0.28.0", features = ["sqlcipher"] } +diesel = { version = "2.1.6", features = ["sqlite", "chrono", "r2d2"] } +diesel_migrations = { version = "2.1.0", features = ["sqlite"] } +uuid = { version = "1.8", features = ["v4"] } +async-trait = "0.1.77" +bincode = "1.3.3" +hex = "0.4.3" + +bitcoin = { version = "0.30.2", features = ["base64"] } +bip39 = "2.0.0" +fedimint-api-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-core = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-wallet-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-mint-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-ln-client = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-bip39 = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } +fedimint-ln-common = { git = "https://github.com/fedimint/fedimint/", rev = "54acaa63a45e6bd14e872cdaaf020e8c100d6b33" } + +[dev-dependencies] +tempdir = "0.3.7" diff --git a/assets/fonts/Inter-Bold.ttf b/harbor-ui/assets/fonts/Inter-Bold.ttf similarity index 100% rename from assets/fonts/Inter-Bold.ttf rename to harbor-ui/assets/fonts/Inter-Bold.ttf diff --git a/assets/fonts/Inter-Regular.ttf b/harbor-ui/assets/fonts/Inter-Regular.ttf similarity index 100% rename from assets/fonts/Inter-Regular.ttf rename to harbor-ui/assets/fonts/Inter-Regular.ttf diff --git a/assets/harbor_logo.svg b/harbor-ui/assets/harbor_logo.svg similarity index 100% rename from assets/harbor_logo.svg rename to harbor-ui/assets/harbor_logo.svg diff --git a/assets/icons/bolt.svg b/harbor-ui/assets/icons/bolt.svg similarity index 100% rename from assets/icons/bolt.svg rename to harbor-ui/assets/icons/bolt.svg diff --git a/assets/icons/chain.svg b/harbor-ui/assets/icons/chain.svg similarity index 100% rename from assets/icons/chain.svg rename to harbor-ui/assets/icons/chain.svg diff --git a/assets/icons/chevron_down.svg b/harbor-ui/assets/icons/chevron_down.svg similarity index 100% rename from assets/icons/chevron_down.svg rename to harbor-ui/assets/icons/chevron_down.svg diff --git a/assets/icons/copy.svg b/harbor-ui/assets/icons/copy.svg similarity index 100% rename from assets/icons/copy.svg rename to harbor-ui/assets/icons/copy.svg diff --git a/assets/icons/down_left.svg b/harbor-ui/assets/icons/down_left.svg similarity index 100% rename from assets/icons/down_left.svg rename to harbor-ui/assets/icons/down_left.svg diff --git a/assets/icons/eye.svg b/harbor-ui/assets/icons/eye.svg similarity index 100% rename from assets/icons/eye.svg rename to harbor-ui/assets/icons/eye.svg diff --git a/assets/icons/heart.svg b/harbor-ui/assets/icons/heart.svg similarity index 100% rename from assets/icons/heart.svg rename to harbor-ui/assets/icons/heart.svg diff --git a/assets/icons/home.svg b/harbor-ui/assets/icons/home.svg similarity index 100% rename from assets/icons/home.svg rename to harbor-ui/assets/icons/home.svg diff --git a/assets/icons/left_right.svg b/harbor-ui/assets/icons/left_right.svg similarity index 100% rename from assets/icons/left_right.svg rename to harbor-ui/assets/icons/left_right.svg diff --git a/assets/icons/people.svg b/harbor-ui/assets/icons/people.svg similarity index 100% rename from assets/icons/people.svg rename to harbor-ui/assets/icons/people.svg diff --git a/assets/icons/plus.svg b/harbor-ui/assets/icons/plus.svg similarity index 100% rename from assets/icons/plus.svg rename to harbor-ui/assets/icons/plus.svg diff --git a/assets/icons/qr.svg b/harbor-ui/assets/icons/qr.svg similarity index 100% rename from assets/icons/qr.svg rename to harbor-ui/assets/icons/qr.svg diff --git a/assets/icons/restart.svg b/harbor-ui/assets/icons/restart.svg similarity index 100% rename from assets/icons/restart.svg rename to harbor-ui/assets/icons/restart.svg diff --git a/assets/icons/settings.svg b/harbor-ui/assets/icons/settings.svg similarity index 100% rename from assets/icons/settings.svg rename to harbor-ui/assets/icons/settings.svg diff --git a/assets/icons/small_close.svg b/harbor-ui/assets/icons/small_close.svg similarity index 100% rename from assets/icons/small_close.svg rename to harbor-ui/assets/icons/small_close.svg diff --git a/assets/icons/squirrel.svg b/harbor-ui/assets/icons/squirrel.svg similarity index 100% rename from assets/icons/squirrel.svg rename to harbor-ui/assets/icons/squirrel.svg diff --git a/assets/icons/up_right.svg b/harbor-ui/assets/icons/up_right.svg similarity index 100% rename from assets/icons/up_right.svg rename to harbor-ui/assets/icons/up_right.svg diff --git a/src/core.rs b/harbor-ui/src/bridge.rs similarity index 52% rename from src/core.rs rename to harbor-ui/src/bridge.rs index 30a2695..5732f77 100644 --- a/src/core.rs +++ b/harbor-ui/src/bridge.rs @@ -1,398 +1,175 @@ -use anyhow::anyhow; -use bip39::Mnemonic; +use crate::conf::{generate_mnemonic, retrieve_mnemonic}; +use crate::{conf, Message}; use bitcoin::address::NetworkUnchecked; use bitcoin::{Address, Network}; -use fedimint_core::config::{ClientConfig, FederationId}; +use fedimint_core::config::FederationId; use fedimint_core::invite_code::InviteCode; use fedimint_core::Amount; -use fedimint_ln_client::{LightningClientModule, PayType}; -use fedimint_ln_common::config::FeeToAmount; -use fedimint_ln_common::lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description}; -use fedimint_wallet_client::WalletClientModule; -use iced::futures::Stream; +use fedimint_ln_common::lightning_invoice::Bolt11Invoice; +use harbor_client::core::HarborCore; +use harbor_client::db::{check_password, setup_db, DBConnection}; +use harbor_client::fedimint_client::{FederationInviteOrId, FedimintClient}; +use harbor_client::{CoreUIMsg, CoreUIMsgPacket, UICoreMsg, UICoreMsgPacket}; +use iced::futures::channel::mpsc::Sender; +use iced::futures::{SinkExt, Stream, StreamExt}; +use log::{error, warn}; use std::collections::HashMap; use std::path::PathBuf; use std::str::FromStr; use std::sync::atomic::AtomicBool; use std::sync::Arc; -use std::time::{Duration, Instant}; - -use iced::futures::{channel::mpsc::Sender, SinkExt}; -use log::{error, trace, warn}; -use tokio::sync::RwLock; +use std::time::Duration; +use tokio::sync::{mpsc, RwLock}; use tokio::task::spawn_blocking; use uuid::Uuid; -use crate::db::check_password; -use crate::fedimint_client::{ - spawn_onchain_payment_subscription, spawn_onchain_receive_subscription, FederationInviteOrId, -}; -use crate::{ - bridge::{self, CoreUIMsg, UICoreMsg}, - conf::{self, retrieve_mnemonic}, - db::DBConnection, - Message, -}; -use crate::{components::FederationItem, conf::generate_mnemonic}; -use crate::{ - db::setup_db, - fedimint_client::{ - select_gateway, spawn_internal_payment_subscription, spawn_invoice_payment_subscription, - spawn_invoice_receive_subscription, FedimintClient, - }, -}; - -const HARBOR_FILE_NAME: &str = "harbor.sqlite"; - -#[derive(Clone)] -struct HarborCore { - network: Network, - mnemonic: Mnemonic, - tx: Sender, - clients: Arc>>, - storage: Arc, - stop: Arc, -} - -impl HarborCore { - async fn msg(&self, id: Option, msg: CoreUIMsg) { - self.tx - .clone() - .send(Message::core_msg(id, msg)) - .await - .unwrap(); - } - - // Sends updates to the UI to refelect the initial state - async fn init_ui_state(&self) { - for client in self.clients.read().await.values() { - let fed_balance = client.fedimint_client.get_balance().await; - self.msg( - None, - CoreUIMsg::FederationBalanceUpdated { - id: client.fedimint_client.federation_id(), - balance: fed_balance, - }, - ) - .await; - } +pub const HARBOR_FILE_NAME: &str = "harbor.sqlite"; - let history = self.storage.get_transaction_history().unwrap(); - self.msg(None, CoreUIMsg::TransactionHistoryUpdated(history)) - .await; +#[derive(Debug)] +pub struct UIHandle { + ui_to_core_tx: mpsc::Sender, +} - let federation_items = self.get_federation_items().await; - self.msg(None, CoreUIMsg::FederationListUpdated(federation_items)) - .await; - } +#[derive(Debug, Clone)] +pub enum BridgeError { + SendFailed, + Unknown, +} - async fn get_client(&self, federation_id: FederationId) -> FedimintClient { - let clients = self.clients.read().await; - clients - .get(&federation_id) - .expect("No client found for federation") - .clone() +impl UIHandle { + pub async fn msg_send(&self, msg: UICoreMsgPacket) { + self.ui_to_core_tx.send(msg).await.unwrap(); } - async fn send_lightning( + pub async fn send_lightning( &self, - msg_id: Uuid, + id: Uuid, federation_id: FederationId, invoice: Bolt11Invoice, - ) -> anyhow::Result<()> { - if invoice.amount_milli_satoshis().is_none() { - return Err(anyhow!("Invoice must have an amount")); - } - let amount = Amount::from_msats(invoice.amount_milli_satoshis().expect("must have amount")); - - // todo go through all clients and select the first one that has enough balance - let client = self.get_client(federation_id).await.fedimint_client; - let lightning_module = client - .get_first_module::() - .expect("must have ln module"); - - let gateway = select_gateway(&client) - .await - .ok_or(anyhow!("Internal error: No gateway found for federation"))?; - - let fees = gateway.fees.to_amount(&amount); - - log::info!("Sending lightning invoice: {invoice}, paying fees: {fees}"); - - let outgoing = lightning_module - .pay_bolt11_invoice(Some(gateway), invoice.clone(), ()) - .await?; - - self.storage.create_lightning_payment( - outgoing.payment_type.operation_id(), - client.federation_id(), - invoice, - amount, - fees, - )?; - - match outgoing.payment_type { - PayType::Internal(op_id) => { - let sub = lightning_module.subscribe_internal_pay(op_id).await?; - spawn_internal_payment_subscription( - self.tx.clone(), - client.clone(), - self.storage.clone(), - op_id, - msg_id, - sub, - ) - .await; - } - PayType::Lightning(op_id) => { - let sub = lightning_module.subscribe_ln_pay(op_id).await?; - spawn_invoice_payment_subscription( - self.tx.clone(), - client.clone(), - self.storage.clone(), - op_id, - msg_id, - sub, - ) - .await; - } - } - - log::info!("Invoice sent"); - - Ok(()) + ) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::SendLightning { + federation_id, + invoice, + }, + id, + }) + .await; } - async fn receive_lightning( + pub async fn send_onchain( &self, - msg_id: Uuid, + id: Uuid, federation_id: FederationId, - amount: Amount, - ) -> anyhow::Result { - let client = self.get_client(federation_id).await.fedimint_client; - let lightning_module = client - .get_first_module::() - .expect("must have ln module"); - - let gateway = select_gateway(&client) - .await - .ok_or(anyhow!("Internal error: No gateway found for federation"))?; + address: Address, + amount_sats: Option, + ) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::SendOnChain { + federation_id, + address, + amount_sats, + }, + id, + }) + .await; + } - let desc = Description::new(String::new()).expect("empty string is valid"); - let (op_id, invoice, preimage) = lightning_module - .create_bolt11_invoice( + pub async fn receive(&self, id: Uuid, federation_id: FederationId, amount: u64) { + let amount = Amount::from_sats(amount); + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::ReceiveLightning { + federation_id, amount, - Bolt11InvoiceDescription::Direct(&desc), - None, - (), - Some(gateway), - ) - .await?; - - log::info!("Invoice created: {invoice}"); - - self.storage.create_ln_receive( - op_id, - client.federation_id(), - invoice.clone(), - amount, - Amount::ZERO, // todo one day there will be receive fees - preimage, - )?; - - // Create subscription to operation if it exists - if let Ok(subscription) = lightning_module.subscribe_ln_receive(op_id).await { - spawn_invoice_receive_subscription( - self.tx.clone(), - client.clone(), - self.storage.clone(), - op_id, - msg_id, - subscription, - ) - .await; - } else { - error!("Could not create subscription to lightning receive"); - } - - Ok(invoice) + }, + id, + }) + .await; } - /// Sends a given amount of sats to a given address, if the amount is None, send all funds - async fn send_onchain( - &self, - msg_id: Uuid, - federation_id: FederationId, - address: Address, - sats: Option, - ) -> anyhow::Result<()> { - // todo go through all clients and select the first one that has enough balance - let client = self.get_client(federation_id).await.fedimint_client; - let onchain = client - .get_first_module::() - .expect("must have wallet module"); - - // todo add manual fee selection - let (fees, amount) = match sats { - Some(sats) => { - let amount = bitcoin::Amount::from_sat(sats); - let fees = onchain.get_withdraw_fees(address.clone(), amount).await?; - (fees, amount) - } - None => { - let balance = client.get_balance().await; - - if balance.sats_round_down() == 0 { - return Err(anyhow!("No funds in wallet")); - } - - // get fees for the entire balance - let fees = onchain - .get_withdraw_fees( - address.clone(), - bitcoin::Amount::from_sat(balance.sats_round_down()), - ) - .await?; - - let fees_paid = Amount::from_sats(fees.amount().to_sat()); - let amount = balance.saturating_sub(fees_paid); - - if amount.sats_round_down() < 546 { - return Err(anyhow!("Not enough funds to send")); - } - - (fees, bitcoin::Amount::from_sat(amount.sats_round_down())) - } - }; - - let op_id = onchain.withdraw(address.clone(), amount, fees, ()).await?; - - self.storage.create_onchain_payment( - op_id, - client.federation_id(), - address, - amount.to_sat(), - fees.amount().to_sat(), - )?; - - let sub = onchain.subscribe_withdraw_updates(op_id).await?; - - spawn_onchain_payment_subscription( - self.tx.clone(), - client.clone(), - self.storage.clone(), - op_id, - msg_id, - sub, - ) + pub async fn receive_onchain(&self, id: Uuid, federation_id: FederationId) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::ReceiveOnChain { federation_id }, + id, + }) .await; + } - Ok(()) + pub async fn unlock(&self, id: Uuid, password: String) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::Unlock(password), + id, + }) + .await; } - async fn receive_onchain( - &self, - msg_id: Uuid, - federation_id: FederationId, - ) -> anyhow::Result
{ - let client = self.get_client(federation_id).await.fedimint_client; - let onchain = client - .get_first_module::() - .expect("must have wallet module"); - - let (op_id, address, _) = onchain.allocate_deposit_address_expert_only(()).await?; - - self.storage - .create_onchain_receive(op_id, client.federation_id(), address.clone())?; - - let sub = onchain.subscribe_deposit(op_id).await?; - - spawn_onchain_receive_subscription( - self.tx.clone(), - client.clone(), - self.storage.clone(), - op_id, - msg_id, - sub, - ) + pub async fn init(&self, id: Uuid, password: String) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::Init { + password, + seed: None, // FIXME: Use this + }, + id, + }) .await; + } - Ok(address) + pub async fn add_federation(&self, id: Uuid, invite: InviteCode) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::AddFederation(invite), + id, + }) + .await; } - async fn get_federation_info(&self, invite_code: InviteCode) -> anyhow::Result { - let download = Instant::now(); - let config = fedimint_api_client::api::net::Connector::Tor - .download_from_invite_code(&invite_code) - .await - .map_err(|e| { - error!("Could not download federation info: {e}"); - e - })?; - trace!( - "Downloaded federation info in: {}ms", - download.elapsed().as_millis() - ); - - Ok(config) + pub async fn peek_federation(&self, id: Uuid, invite: InviteCode) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::GetFederationInfo(invite), + id, + }) + .await; } - async fn add_federation(&self, invite_code: InviteCode) -> anyhow::Result<()> { - let id = invite_code.federation_id(); + pub async fn get_seed_words(&self, id: Uuid) { + self.msg_send(UICoreMsgPacket { + msg: UICoreMsg::GetSeedWords, + id, + }) + .await; + } +} - let mut clients = self.clients.write().await; - if clients.get(&id).is_some() { - return Err(anyhow!("Federation already added")); - } +impl CoreHandle { + pub async fn recv(&mut self) -> Option { + self.core_from_ui_rx.recv().await + } +} - let client = FedimintClient::new( - self.storage.clone(), - FederationInviteOrId::Invite(invite_code), - &self.mnemonic, - self.network, - self.stop.clone(), - ) - .await?; +#[derive(Debug)] +pub struct CoreHandle { + core_from_ui_rx: mpsc::Receiver, +} - clients.insert(client.fedimint_client.federation_id(), client); +pub fn create_handles() -> (UIHandle, CoreHandle) { + let (ui_to_core_tx, core_from_ui_rx) = mpsc::channel::(50); - Ok(()) - } + let ui_handle = UIHandle { ui_to_core_tx }; - async fn get_federation_items(&self) -> Vec { - let clients = self.clients.read().await; - - // Tell the UI about any clients we have - clients - .values() - .map(|c| FederationItem { - id: c.fedimint_client.federation_id(), - name: c - .fedimint_client - .get_meta("federation_name") - .unwrap_or("Unknown".to_string()), - // TODO: get the balance per fedimint - balance: 420, - guardians: None, - module_kinds: None, - }) - .collect::>() - } + let core_handle = CoreHandle { core_from_ui_rx }; - async fn get_seed_words(&self) -> String { - self.mnemonic.to_string() - } + (ui_handle, core_handle) } pub fn run_core() -> impl Stream { iced::stream::channel(100, |mut tx: Sender| async move { // Setup UI Handle - let (ui_handle, mut core_handle) = bridge::create_handles(); + let (ui_handle, mut core_handle) = create_handles(); let arc_ui_handle = Arc::new(ui_handle); tx.send(Message::UIHandlerLoaded(arc_ui_handle)) .await .expect("should send"); + // todo make configurable let network = Network::Signet; // Create the datadir if it doesn't exist @@ -502,12 +279,25 @@ pub fn run_core() -> impl Stream { .await .expect("Could not create fedimint client"); - clients.insert(client.fedimint_client.federation_id(), client); + clients.insert(client.federation_id(), client); } + let (core_tx, mut core_rx) = + iced::futures::channel::mpsc::channel::(128); + + let mut tx_clone = tx.clone(); + tokio::spawn(async move { + while let Some(rev) = core_rx.next().await { + tx_clone + .send(Message::CoreMessage(rev)) + .await + .expect("should send"); + } + }); + let core = HarborCore { storage: db.clone(), - tx: tx.clone(), + tx: core_tx, mnemonic, network, clients: Arc::new(RwLock::new(clients)), @@ -543,9 +333,22 @@ pub fn run_core() -> impl Stream { } let db = db.expect("no error"); + let (core_tx, mut core_rx) = + iced::futures::channel::mpsc::channel::(128); + + let mut tx_clone = tx.clone(); + tokio::spawn(async move { + while let Some(rev) = core_rx.next().await { + tx_clone + .send(Message::CoreMessage(rev)) + .await + .expect("should send"); + } + }); + let core = HarborCore { storage: db.clone(), - tx: tx.clone(), + tx: core_tx, mnemonic: generate_mnemonic(db.clone(), seed) .expect("should generate words"), network, @@ -568,7 +371,7 @@ pub fn run_core() -> impl Stream { }) } -async fn process_core(core_handle: &mut bridge::CoreHandle, core: &HarborCore) { +async fn process_core(core_handle: &mut CoreHandle, core: &HarborCore) { // Initialize the ui's state core.init_ui_state().await; diff --git a/src/components/button.rs b/harbor-ui/src/components/button.rs similarity index 100% rename from src/components/button.rs rename to harbor-ui/src/components/button.rs diff --git a/src/components/caption_text.rs b/harbor-ui/src/components/caption_text.rs similarity index 100% rename from src/components/caption_text.rs rename to harbor-ui/src/components/caption_text.rs diff --git a/src/components/colors.rs b/harbor-ui/src/components/colors.rs similarity index 100% rename from src/components/colors.rs rename to harbor-ui/src/components/colors.rs diff --git a/src/components/easing.rs b/harbor-ui/src/components/easing.rs similarity index 100% rename from src/components/easing.rs rename to harbor-ui/src/components/easing.rs diff --git a/src/components/federation_item.rs b/harbor-ui/src/components/federation_item.rs similarity index 87% rename from src/components/federation_item.rs rename to harbor-ui/src/components/federation_item.rs index 580acd0..6bd90c9 100644 --- a/src/components/federation_item.rs +++ b/harbor-ui/src/components/federation_item.rs @@ -1,23 +1,13 @@ -use fedimint_core::{config::FederationId, core::ModuleKind}; use iced::{ widget::{column, row, text}, Alignment, Element, }; - +use harbor_client::db_models::FederationItem; use crate::Message; use super::{bold_text, h_button, regular_text, subtitle, truncate_text}; use super::{format_amount, map_icon, SvgIcon}; -#[derive(Debug, Clone)] -pub struct FederationItem { - pub id: FederationId, - pub name: String, - pub balance: u64, - pub guardians: Option>, - pub module_kinds: Option>, -} - pub fn h_federation_item(item: &FederationItem, show_button: bool) -> Element { let FederationItem { id, diff --git a/src/components/header.rs b/harbor-ui/src/components/header.rs similarity index 100% rename from src/components/header.rs rename to harbor-ui/src/components/header.rs diff --git a/src/components/icon.rs b/harbor-ui/src/components/icon.rs similarity index 100% rename from src/components/icon.rs rename to harbor-ui/src/components/icon.rs diff --git a/src/components/input.rs b/harbor-ui/src/components/input.rs similarity index 100% rename from src/components/input.rs rename to harbor-ui/src/components/input.rs diff --git a/src/components/layout.rs b/harbor-ui/src/components/layout.rs similarity index 100% rename from src/components/layout.rs rename to harbor-ui/src/components/layout.rs diff --git a/src/components/mini_copy.rs b/harbor-ui/src/components/mini_copy.rs similarity index 100% rename from src/components/mini_copy.rs rename to harbor-ui/src/components/mini_copy.rs diff --git a/src/components/mod.rs b/harbor-ui/src/components/mod.rs similarity index 100% rename from src/components/mod.rs rename to harbor-ui/src/components/mod.rs diff --git a/src/components/rules.rs b/harbor-ui/src/components/rules.rs similarity index 100% rename from src/components/rules.rs rename to harbor-ui/src/components/rules.rs diff --git a/src/components/screen_header.rs b/harbor-ui/src/components/screen_header.rs similarity index 91% rename from src/components/screen_header.rs rename to harbor-ui/src/components/screen_header.rs index cd31463..95df8b3 100644 --- a/src/components/screen_header.rs +++ b/harbor-ui/src/components/screen_header.rs @@ -2,9 +2,10 @@ use iced::{ widget::{column, row, text}, Alignment, Element, Length, }; +use harbor_client::db_models::FederationItem; use crate::{HarborWallet, Message}; -use super::{format_amount, hr, map_icon, vr, FederationItem, SvgIcon}; +use super::{format_amount, hr, map_icon, vr, SvgIcon}; pub fn h_screen_header(harbor: &HarborWallet, show_balance: bool) -> Element { if let Some(item) = harbor.active_federation.as_ref() { diff --git a/src/components/sidebar.rs b/harbor-ui/src/components/sidebar.rs similarity index 100% rename from src/components/sidebar.rs rename to harbor-ui/src/components/sidebar.rs diff --git a/src/components/spinner.rs b/harbor-ui/src/components/spinner.rs similarity index 100% rename from src/components/spinner.rs rename to harbor-ui/src/components/spinner.rs diff --git a/src/components/styles.rs b/harbor-ui/src/components/styles.rs similarity index 100% rename from src/components/styles.rs rename to harbor-ui/src/components/styles.rs diff --git a/src/components/toast.rs b/harbor-ui/src/components/toast.rs similarity index 100% rename from src/components/toast.rs rename to harbor-ui/src/components/toast.rs diff --git a/src/components/transaction_item.rs b/harbor-ui/src/components/transaction_item.rs similarity index 61% rename from src/components/transaction_item.rs rename to harbor-ui/src/components/transaction_item.rs index a24cc7d..b311f22 100644 --- a/src/components/transaction_item.rs +++ b/harbor-ui/src/components/transaction_item.rs @@ -1,52 +1,14 @@ +use crate::Message; +use harbor_client::db_models::transaction_item::{ + TransactionDirection, TransactionItem, TransactionItemKind, +}; use iced::{ widget::{column, row, svg, text}, Element, }; -use crate::Message; - use super::{format_amount, format_timestamp, map_icon, subtitle, MUTINY_GREEN, MUTINY_RED}; -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum TransactionItemKind { - Lightning, - Onchain, -} - -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum TransactionDirection { - Incoming, - Outgoing, -} - -#[derive(Debug, Clone, Copy)] -pub struct TransactionItem { - pub kind: TransactionItemKind, - pub amount: u64, - pub direction: TransactionDirection, - pub timestamp: u64, -} - -impl TransactionItem { - pub fn make_dummy() -> Self { - Self { - kind: TransactionItemKind::Lightning, - amount: 100, - direction: TransactionDirection::Incoming, - timestamp: 0, - } - } - - pub fn make_dummy_onchain() -> Self { - Self { - kind: TransactionItemKind::Onchain, - amount: 100, - direction: TransactionDirection::Outgoing, - timestamp: 0, - } - } -} - pub fn h_transaction_item(item: &TransactionItem) -> Element { let TransactionItem { kind, diff --git a/src/components/util.rs b/harbor-ui/src/components/util.rs similarity index 100% rename from src/components/util.rs rename to harbor-ui/src/components/util.rs diff --git a/src/conf.rs b/harbor-ui/src/conf.rs similarity index 95% rename from src/conf.rs rename to harbor-ui/src/conf.rs index 91c7811..f430862 100644 --- a/src/conf.rs +++ b/harbor-ui/src/conf.rs @@ -1,13 +1,13 @@ use anyhow::anyhow; use bip39::{Language, Mnemonic}; use bitcoin::Network; +use harbor_client::db::DBConnection; +use harbor_client::db_models::NewProfile; use log::{error, info}; use std::path::PathBuf; use std::str::FromStr; use std::sync::Arc; -use crate::{db::DBConnection, db_models::NewProfile}; - /// The directory where all application data is stored /// Defaults to ~/.harbor, if we're on a test network /// Otherwise defaults to ~/.harbor/ diff --git a/src/main.rs b/harbor-ui/src/main.rs similarity index 99% rename from src/main.rs rename to harbor-ui/src/main.rs index 5ada2b4..c42d99a 100644 --- a/src/main.rs +++ b/harbor-ui/src/main.rs @@ -1,8 +1,6 @@ use bitcoin::address::NetworkUnchecked; use bitcoin::Address; -use bridge::{CoreUIMsg, CoreUIMsgPacket, ReceiveSuccessMsg, SendSuccessMsg}; -use components::{FederationItem, Toast, ToastManager, ToastStatus, TransactionItem}; -use core::run_core; +use components::{Toast, ToastManager, ToastStatus}; use fedimint_core::config::FederationId; use fedimint_core::core::ModuleKind; use fedimint_core::invite_code::InviteCode; @@ -21,16 +19,15 @@ use std::collections::HashMap; use std::str::FromStr; use std::sync::Arc; use uuid::Uuid; - +use harbor_client::db_models::FederationItem; +use harbor_client::{CoreUIMsg, CoreUIMsgPacket, ReceiveSuccessMsg, SendSuccessMsg}; +use harbor_client::db_models::transaction_item::TransactionItem; +use crate::bridge::run_core; use crate::components::focus_input_id; pub mod bridge; pub mod components; pub mod conf; -pub mod core; -pub mod db; -pub mod db_models; -mod fedimint_client; pub mod routes; // This starts the program. Importantly, it registers the update and view methods, along with a subscription. diff --git a/src/routes/donate.rs b/harbor-ui/src/routes/donate.rs similarity index 100% rename from src/routes/donate.rs rename to harbor-ui/src/routes/donate.rs diff --git a/src/routes/history.rs b/harbor-ui/src/routes/history.rs similarity index 100% rename from src/routes/history.rs rename to harbor-ui/src/routes/history.rs diff --git a/src/routes/home.rs b/harbor-ui/src/routes/home.rs similarity index 100% rename from src/routes/home.rs rename to harbor-ui/src/routes/home.rs diff --git a/src/routes/mints.rs b/harbor-ui/src/routes/mints.rs similarity index 100% rename from src/routes/mints.rs rename to harbor-ui/src/routes/mints.rs diff --git a/src/routes/mod.rs b/harbor-ui/src/routes/mod.rs similarity index 100% rename from src/routes/mod.rs rename to harbor-ui/src/routes/mod.rs diff --git a/src/routes/receive.rs b/harbor-ui/src/routes/receive.rs similarity index 99% rename from src/routes/receive.rs rename to harbor-ui/src/routes/receive.rs index baf481e..c18db21 100644 --- a/src/routes/receive.rs +++ b/harbor-ui/src/routes/receive.rs @@ -2,8 +2,7 @@ use iced::widget::container::Style; use iced::widget::{column, container, qr_code, radio, row, text}; use iced::Color; use iced::{Border, Element, Font}; - -use crate::bridge::ReceiveSuccessMsg; +use harbor_client::ReceiveSuccessMsg; use crate::components::{ basic_layout, h_button, h_caption_text, h_header, h_input, h_screen_header, mini_copy, SvgIcon, }; diff --git a/src/routes/send.rs b/harbor-ui/src/routes/send.rs similarity index 100% rename from src/routes/send.rs rename to harbor-ui/src/routes/send.rs diff --git a/src/routes/settings.rs b/harbor-ui/src/routes/settings.rs similarity index 100% rename from src/routes/settings.rs rename to harbor-ui/src/routes/settings.rs diff --git a/src/routes/transfer.rs b/harbor-ui/src/routes/transfer.rs similarity index 100% rename from src/routes/transfer.rs rename to harbor-ui/src/routes/transfer.rs diff --git a/src/routes/unlock.rs b/harbor-ui/src/routes/unlock.rs similarity index 100% rename from src/routes/unlock.rs rename to harbor-ui/src/routes/unlock.rs diff --git a/src/routes/welcome.rs b/harbor-ui/src/routes/welcome.rs similarity index 100% rename from src/routes/welcome.rs rename to harbor-ui/src/routes/welcome.rs diff --git a/justfile b/justfile index de244f9..217530e 100644 --- a/justfile +++ b/justfile @@ -5,10 +5,10 @@ set dotenv-load := true FEATURE_FLAG := if env('USE_VENDOR_FEATURE', '0') == "1" { "--features vendored" } else { "" } run: - RUST_LOG=harbor=debug,iced_wgpu=error,wgpu_core=error,info cargo run {{FEATURE_FLAG}} + cd harbor-ui && RUST_LOG=harbor=debug,iced_wgpu=error,wgpu_core=error,info cargo run {{FEATURE_FLAG}} watch: - RUST_LOG=harbor=debug,iced_wgpu=error,wgpu_core=error,info cargo watch -x "run {{FEATURE_FLAG}}" + cd harbor-ui && RUST_LOG=harbor=debug,iced_wgpu=error,wgpu_core=error,info cargo watch -x "run {{FEATURE_FLAG}}" test: cargo test {{FEATURE_FLAG}} @@ -20,4 +20,4 @@ clippy: cargo clippy --all-features --tests -- -D warnings reset-db: - diesel migration revert --all --database-url=harbor.sqlite && diesel migration run --database-url=harbor.sqlite + cd harbor-client && diesel migration revert --all --database-url=harbor.sqlite && diesel migration run --database-url=harbor.sqlite diff --git a/src/bridge.rs b/src/bridge.rs deleted file mode 100644 index 5497df3..0000000 --- a/src/bridge.rs +++ /dev/null @@ -1,224 +0,0 @@ -use crate::components::{FederationItem, TransactionItem}; -use bitcoin::address::NetworkUnchecked; -use bitcoin::{Address, Txid}; -use fedimint_core::config::{ClientConfig, FederationId}; -use fedimint_core::invite_code::InviteCode; -use fedimint_core::Amount; -use fedimint_ln_common::lightning_invoice::Bolt11Invoice; -use tokio::sync::mpsc; -use uuid::Uuid; - -#[derive(Debug, Clone)] -pub struct UICoreMsgPacket { - pub id: Uuid, - pub msg: UICoreMsg, -} - -#[derive(Debug, Clone)] -pub enum UICoreMsg { - SendLightning { - federation_id: FederationId, - invoice: Bolt11Invoice, - }, - ReceiveLightning { - federation_id: FederationId, - amount: Amount, - }, - SendOnChain { - address: Address, - federation_id: FederationId, - amount_sats: Option, - }, - ReceiveOnChain { - federation_id: FederationId, - }, - GetFederationInfo(InviteCode), - AddFederation(InviteCode), - Unlock(String), - Init { - password: String, - seed: Option, - }, - GetSeedWords, -} - -#[derive(Debug, Clone, PartialEq)] -pub enum SendSuccessMsg { - Lightning { preimage: [u8; 32] }, - Onchain { txid: Txid }, -} - -#[derive(Debug, Clone, PartialEq)] -pub enum ReceiveSuccessMsg { - Lightning, - Onchain { txid: Txid }, -} - -#[derive(Debug, Clone)] -pub struct CoreUIMsgPacket { - pub id: Option, - pub msg: CoreUIMsg, -} - -#[derive(Debug, Clone)] -pub enum CoreUIMsg { - Sending, - SendSuccess(SendSuccessMsg), - SendFailure(String), - ReceiveGenerating, - ReceiveInvoiceGenerated(Bolt11Invoice), - ReceiveAddressGenerated(Address), - ReceiveSuccess(ReceiveSuccessMsg), - ReceiveFailed(String), - // todo probably want a way to incrementally add items to the history - TransactionHistoryUpdated(Vec), - FederationBalanceUpdated { id: FederationId, balance: Amount }, - AddFederationFailed(String), - FederationInfo(ClientConfig), - AddFederationSuccess, - FederationListUpdated(Vec), - NeedsInit, - Initing, - InitSuccess, - InitFailed(String), - Locked, - Unlocking, - UnlockSuccess, - UnlockFailed(String), - SeedWords(String), -} - -#[derive(Debug)] -pub struct UIHandle { - ui_to_core_tx: mpsc::Sender, -} - -#[derive(Debug, Clone)] -pub enum BridgeError { - SendFailed, - Unknown, -} - -impl UIHandle { - pub async fn msg_send(&self, msg: UICoreMsgPacket) { - self.ui_to_core_tx.send(msg).await.unwrap(); - } - - pub async fn send_lightning( - &self, - id: Uuid, - federation_id: FederationId, - invoice: Bolt11Invoice, - ) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::SendLightning { - federation_id, - invoice, - }, - id, - }) - .await; - } - - pub async fn send_onchain( - &self, - id: Uuid, - federation_id: FederationId, - address: Address, - amount_sats: Option, - ) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::SendOnChain { - federation_id, - address, - amount_sats, - }, - id, - }) - .await; - } - - pub async fn receive(&self, id: Uuid, federation_id: FederationId, amount: u64) { - let amount = Amount::from_sats(amount); - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::ReceiveLightning { - federation_id, - amount, - }, - id, - }) - .await; - } - - pub async fn receive_onchain(&self, id: Uuid, federation_id: FederationId) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::ReceiveOnChain { federation_id }, - id, - }) - .await; - } - - pub async fn unlock(&self, id: Uuid, password: String) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::Unlock(password), - id, - }) - .await; - } - - pub async fn init(&self, id: Uuid, password: String) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::Init { - password, - seed: None, // FIXME: Use this - }, - id, - }) - .await; - } - - pub async fn add_federation(&self, id: Uuid, invite: InviteCode) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::AddFederation(invite), - id, - }) - .await; - } - - pub async fn peek_federation(&self, id: Uuid, invite: InviteCode) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::GetFederationInfo(invite), - id, - }) - .await; - } - - pub async fn get_seed_words(&self, id: Uuid) { - self.msg_send(UICoreMsgPacket { - msg: UICoreMsg::GetSeedWords, - id, - }) - .await; - } -} - -impl CoreHandle { - pub async fn recv(&mut self) -> Option { - self.core_from_ui_rx.recv().await - } -} - -#[derive(Debug)] -pub struct CoreHandle { - core_from_ui_rx: mpsc::Receiver, -} - -pub fn create_handles() -> (UIHandle, CoreHandle) { - let (ui_to_core_tx, core_from_ui_rx) = mpsc::channel::(50); - - let ui_handle = UIHandle { ui_to_core_tx }; - - let core_handle = CoreHandle { core_from_ui_rx }; - - (ui_handle, core_handle) -}