Cesar Rodas před 4 dny
rodič
revize
8a1a88467a

+ 109 - 45
Cargo.lock.msrv

@@ -348,6 +348,16 @@ dependencies = [
 ]
 
 [[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
 name = "async-compat"
 version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -534,9 +544,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
 
 [[package]]
 name = "aws-lc-rs"
-version = "1.15.3"
+version = "1.15.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86"
+checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256"
 dependencies = [
  "aws-lc-sys",
  "zeroize",
@@ -544,9 +554,9 @@ dependencies = [
 
 [[package]]
 name = "aws-lc-sys"
-version = "0.36.0"
+version = "0.37.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8"
+checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a"
 dependencies = [
  "cc",
  "cmake",
@@ -1160,9 +1170,9 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.2.53"
+version = "1.2.54"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932"
+checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583"
 dependencies = [
  "find-msvc-tools",
  "jobserver",
@@ -1202,7 +1212,6 @@ dependencies = [
  "nostr-sdk",
  "rand 0.9.2",
  "regex",
- "reqwest",
  "ring 0.17.14",
  "rustls 0.23.36",
  "serde",
@@ -1262,7 +1271,6 @@ dependencies = [
  "home",
  "lightning 0.2.0",
  "nostr-sdk",
- "reqwest",
  "serde",
  "serde_json",
  "serde_with",
@@ -1299,6 +1307,7 @@ dependencies = [
  "bitcoin 0.32.8",
  "cashu",
  "cbor-diag",
+ "cdk-http-client",
  "cdk-prometheus",
  "ciborium",
  "criterion",
@@ -1334,7 +1343,6 @@ dependencies = [
  "futures",
  "lightning 0.2.0",
  "lightning-invoice 0.34.0",
- "reqwest",
  "serde",
  "serde_json",
  "thiserror 2.0.18",
@@ -1354,11 +1362,13 @@ dependencies = [
  "bip39",
  "cdk",
  "cdk-common",
+ "cdk-npubcash",
  "cdk-postgres",
  "cdk-sql-common",
  "cdk-sqlite",
  "futures",
  "log",
+ "nostr-sdk",
  "once_cell",
  "rand 0.9.2",
  "serde",
@@ -1373,6 +1383,20 @@ dependencies = [
 ]
 
 [[package]]
+name = "cdk-http-client"
+version = "0.14.0"
+dependencies = [
+ "mockito",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+ "tokio",
+ "url",
+]
+
+[[package]]
 name = "cdk-integration-tests"
 version = "0.14.0"
 dependencies = [
@@ -1388,6 +1412,7 @@ dependencies = [
  "cdk-common",
  "cdk-fake-wallet",
  "cdk-ffi",
+ "cdk-http-client",
  "cdk-ldk-node",
  "cdk-lnd",
  "cdk-mintd",
@@ -1401,7 +1426,6 @@ dependencies = [
  "ln-regtest-rs",
  "once_cell",
  "rand 0.9.2",
- "reqwest",
  "serde",
  "serde_json",
  "tokio",
@@ -1552,10 +1576,10 @@ dependencies = [
  "cashu",
  "cdk",
  "cdk-common",
+ "cdk-http-client",
  "cdk-sqlite",
  "chrono",
  "nostr-sdk",
- "reqwest",
  "rustls 0.23.36",
  "serde",
  "serde_json",
@@ -1910,6 +1934,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
 
 [[package]]
+name = "colored"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
 name = "combine"
 version = "4.6.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2323,12 +2356,12 @@ dependencies = [
 
 [[package]]
 name = "deranged"
-version = "0.5.5"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
+checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
 dependencies = [
  "powerfmt",
- "serde_core",
+ "serde",
 ]
 
 [[package]]
@@ -3618,7 +3651,7 @@ dependencies = [
  "libc",
  "percent-encoding",
  "pin-project-lite",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "tokio",
  "tower-service",
  "tracing",
@@ -4041,9 +4074,9 @@ dependencies = [
 
 [[package]]
 name = "libm"
-version = "0.2.15"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
 
 [[package]]
 name = "libredox"
@@ -4491,10 +4524,35 @@ dependencies = [
 ]
 
 [[package]]
+name = "mockito"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e0603425789b4a70fcc4ac4f5a46a566c116ee3e2a6b768dc623f7719c611de"
+dependencies = [
+ "assert-json-diff",
+ "bytes",
+ "colored",
+ "futures-core",
+ "http 1.4.0",
+ "http-body 1.0.1",
+ "http-body-util",
+ "hyper 1.8.1",
+ "hyper-util",
+ "log",
+ "pin-project-lite",
+ "rand 0.9.2",
+ "regex",
+ "serde_json",
+ "serde_urlencoded",
+ "similar",
+ "tokio",
+]
+
+[[package]]
 name = "moka"
-version = "0.12.12"
+version = "0.12.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3dec6bd31b08944e08b58fd99373893a6c17054d6f3ea5006cc894f4f4eee2a"
+checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e"
 dependencies = [
  "async-lock",
  "crossbeam-channel",
@@ -5636,7 +5694,7 @@ dependencies = [
  "quinn-udp",
  "rustc-hash",
  "rustls 0.23.36",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "thiserror 2.0.18",
  "tokio",
  "tracing",
@@ -5673,16 +5731,16 @@ dependencies = [
  "cfg_aliases",
  "libc",
  "once_cell",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "tracing",
  "windows-sys 0.60.2",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.43"
+version = "1.0.44"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
+checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
 dependencies = [
  "proc-macro2",
 ]
@@ -6701,6 +6759,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
 
 [[package]]
+name = "similar"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
+
+[[package]]
 name = "simple_asn1"
 version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6763,9 +6827,9 @@ dependencies = [
 
 [[package]]
 name = "socket2"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0"
 dependencies = [
  "libc",
  "windows-sys 0.60.2",
@@ -7104,30 +7168,30 @@ dependencies = [
 
 [[package]]
 name = "time"
-version = "0.3.45"
+version = "0.3.41"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd"
+checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
 dependencies = [
  "deranged",
  "itoa",
  "num-conv",
  "powerfmt",
- "serde_core",
+ "serde",
  "time-core",
  "time-macros",
 ]
 
 [[package]]
 name = "time-core"
-version = "0.1.7"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca"
+checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
 
 [[package]]
 name = "time-macros"
-version = "0.2.25"
+version = "0.2.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd"
+checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
 dependencies = [
  "num-conv",
  "time-core",
@@ -7245,7 +7309,7 @@ dependencies = [
  "parking_lot",
  "pin-project-lite",
  "signal-hook-registry",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "tokio-macros",
  "windows-sys 0.61.2",
 ]
@@ -7301,7 +7365,7 @@ dependencies = [
  "postgres-protocol",
  "postgres-types",
  "rand 0.9.2",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "tokio",
  "tokio-util",
  "whoami",
@@ -7547,7 +7611,7 @@ dependencies = [
  "hyper-util",
  "percent-encoding",
  "pin-project",
- "socket2 0.6.1",
+ "socket2 0.6.2",
  "sync_wrapper 1.0.2",
  "tokio",
  "tokio-rustls 0.26.4",
@@ -8542,9 +8606,9 @@ dependencies = [
 
 [[package]]
 name = "typed-index-collections"
-version = "3.3.0"
+version = "3.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fd393dbd1e7b23e0cab7396570309b4068aa504e9dac2cd41d827583b4e9ab7"
+checksum = "898160f1dfd383b4e92e17f0512a7d62f3c51c44937b23b6ffc3a1614a8eaccd"
 dependencies = [
  "bincode",
  "serde",
@@ -8884,9 +8948,9 @@ dependencies = [
 
 [[package]]
 name = "uuid"
-version = "1.19.0"
+version = "1.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
+checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f"
 dependencies = [
  "getrandom 0.3.4",
  "js-sys",
@@ -9678,18 +9742,18 @@ dependencies = [
 
 [[package]]
 name = "zerocopy"
-version = "0.8.33"
+version = "0.8.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd"
+checksum = "71ddd76bcebeed25db614f82bf31a9f4222d3fbba300e6fb6c00afa26cbd4d9d"
 dependencies = [
  "zerocopy-derive",
 ]
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.8.33"
+version = "0.8.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1"
+checksum = "d8187381b52e32220d50b255276aa16a084ec0a9017a0ca2152a1f55c539758d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -9792,9 +9856,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3"
 
 [[package]]
 name = "zmij"
-version = "1.0.16"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65"
+checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439"
 
 [[package]]
 name = "zopfli"

+ 1 - 1
crates/cdk-common/src/lib.rs

@@ -33,11 +33,11 @@ pub use cashu::nuts::{self, *};
 #[cfg(feature = "mint")]
 pub use cashu::quote_id::{self, *};
 pub use cashu::{dhke, ensure_cdk, mint_url, secret, util, SECP256K1};
-pub use error::Error;
 /// Re-export cdk-http-client types
 #[cfg(feature = "http")]
 pub use cdk_http_client::{
     fetch, HttpClient, HttpClientBuilder, HttpError, RawResponse, RequestBuilder, Response,
 };
+pub use error::Error;
 /// Re-export parking_lot for reuse
 pub use parking_lot;

+ 6 - 10
crates/cdk-http-client/src/client.rs

@@ -285,18 +285,16 @@ mod tests {
 
         #[test]
         fn test_builder_proxy() {
-            let proxy_url =
-                url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
+            let proxy_url = url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
             let result = HttpClientBuilder::default().proxy(proxy_url).build();
             assert!(result.is_ok());
         }
 
         #[test]
         fn test_builder_proxy_with_valid_matcher() {
-            let proxy_url =
-                url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
-            let result = HttpClientBuilder::default()
-                .proxy_with_matcher(proxy_url, r".*\.example\.com$");
+            let proxy_url = url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
+            let result =
+                HttpClientBuilder::default().proxy_with_matcher(proxy_url, r".*\.example\.com$");
             assert!(result.is_ok());
 
             let builder = result.expect("Valid matcher should succeed");
@@ -306,8 +304,7 @@ mod tests {
 
         #[test]
         fn test_builder_proxy_with_invalid_matcher() {
-            let proxy_url =
-                url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
+            let proxy_url = url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
             // Invalid regex pattern (unclosed bracket)
             let result = HttpClientBuilder::default().proxy_with_matcher(proxy_url, r"[invalid");
             assert!(result.is_err());
@@ -321,8 +318,7 @@ mod tests {
 
         #[test]
         fn test_builder_chained_config() {
-            let proxy_url =
-                url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
+            let proxy_url = url::Url::parse("http://localhost:8080").expect("Valid proxy URL");
             let result = HttpClientBuilder::default()
                 .danger_accept_invalid_certs(true)
                 .proxy(proxy_url)

+ 4 - 1
crates/cdk-http-client/src/error.rs

@@ -119,7 +119,10 @@ mod tests {
 
         match http_error {
             HttpError::Serialization(msg) => {
-                assert!(msg.contains("expected"), "Error message should describe JSON error");
+                assert!(
+                    msg.contains("expected"),
+                    "Error message should describe JSON error"
+                );
             }
             _ => panic!("Expected HttpError::Serialization"),
         }

+ 16 - 4
crates/cdk-http-client/tests/integration.rs

@@ -454,7 +454,10 @@ async fn test_raw_response_text() {
         .get_raw(&server.url())
         .await
         .expect("Request should succeed");
-    let text = response.text().await.expect("Text extraction should succeed");
+    let text = response
+        .text()
+        .await
+        .expect("Text extraction should succeed");
 
     assert_eq!(text, "Hello, World!");
 
@@ -502,7 +505,10 @@ async fn test_raw_response_bytes() {
         .get_raw(&server.url())
         .await
         .expect("Request should succeed");
-    let bytes = response.bytes().await.expect("Bytes extraction should succeed");
+    let bytes = response
+        .bytes()
+        .await
+        .expect("Bytes extraction should succeed");
 
     assert_eq!(bytes, vec![0x01, 0x02, 0x03, 0x04]);
 
@@ -532,7 +538,10 @@ async fn test_request_builder_send() {
 
     assert_eq!(response.status(), 200);
     assert_eq!(
-        response.text().await.expect("Text extraction should succeed"),
+        response
+            .text()
+            .await
+            .expect("Text extraction should succeed"),
         "builder response"
     );
 
@@ -596,7 +605,10 @@ async fn test_request_builder_with_headers() {
 
     assert_eq!(response.status(), 200);
     assert_eq!(
-        response.text().await.expect("Text extraction should succeed"),
+        response
+            .text()
+            .await
+            .expect("Text extraction should succeed"),
         "headers received"
     );
 

+ 1 - 1
crates/cdk-integration-tests/tests/fake_auth.rs

@@ -14,8 +14,8 @@ use cdk::nuts::{
 };
 use cdk::wallet::{AuthHttpClient, AuthMintConnector, HttpClient, MintConnector, WalletBuilder};
 use cdk::{Error, OidcClient};
-use cdk_http_client::HttpClient as CommonHttpClient;
 use cdk_fake_wallet::create_fake_invoice;
+use cdk_http_client::HttpClient as CommonHttpClient;
 use cdk_integration_tests::fund_wallet;
 use cdk_sqlite::wallet::memory;
 

+ 1 - 1
crates/cdk-integration-tests/tests/nutshell_wallet.rs

@@ -1,7 +1,7 @@
 use std::time::Duration;
 
-use cdk_http_client::HttpClient;
 use cdk_fake_wallet::create_fake_invoice;
+use cdk_http_client::HttpClient;
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 use tokio::time::sleep;

+ 2 - 3
crates/cdk/src/lib.rs

@@ -75,12 +75,11 @@ pub type Result<T, E = Box<dyn std::error::Error>> = std::result::Result<T, E>;
 
 /// Re-export subscription
 pub use cdk_common::subscription;
-/// Re-export HTTP client types from cdk-http-client (via cdk-common)
 #[cfg(any(feature = "wallet", feature = "mint"))]
 pub mod http_client {
-    //! HTTP client abstraction
+    //! Re-export HTTP client types from cdk-http-client (via cdk-common)
     //!
-    //! Re-exports from [`cdk_http_client`] for making HTTP requests.
+    //! HTTP client abstraction for making HTTP requests.
     pub use cdk_common::{
         fetch, HttpClient, HttpClientBuilder, HttpError, RawResponse, RequestBuilder, Response,
     };

+ 1 - 2
crates/cdk/src/wallet/mint_connector/transport.rs

@@ -1,8 +1,7 @@
 //! HTTP Transport trait with a default implementation
 use std::fmt::Debug;
 
-use cdk_common::{HttpClient, HttpClientBuilder};
-use cdk_common::AuthToken;
+use cdk_common::{AuthToken, HttpClient, HttpClientBuilder};
 #[cfg(all(feature = "bip353", not(target_arch = "wasm32")))]
 use hickory_resolver::config::ResolverConfig;
 #[cfg(all(feature = "bip353", not(target_arch = "wasm32")))]

+ 1 - 2
crates/cdk/src/wallet/payment_request.rs

@@ -8,8 +8,7 @@ use std::str::FromStr;
 
 use anyhow::Result;
 use bitcoin::hashes::sha256::Hash as Sha256Hash;
-use cdk_common::HttpClient;
-use cdk_common::{Amount, PaymentRequest, PaymentRequestPayload, TransportType};
+use cdk_common::{Amount, HttpClient, PaymentRequest, PaymentRequestPayload, TransportType};
 #[cfg(feature = "nostr")]
 use nostr_sdk::nips::nip19::Nip19Profile;
 #[cfg(feature = "nostr")]