diff --git a/Cargo.lock b/Cargo.lock index b3bb18c6c..cafdcbb3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,13 +4,19 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" 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" @@ -184,9 +190,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "bb42b2197bf15ccb092b62c74515dbd8b86d0effd934795f6687c93b6e679a2c" dependencies = [ "brotli", "flate2", @@ -343,10 +349,10 @@ dependencies = [ "serde_path_to_error", "serde_urlencoded", "sha1", - "sync_wrapper 0.1.2", + "sync_wrapper", "tokio", "tokio-tungstenite 0.20.1", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", ] @@ -370,17 +376,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "88fb5a785d6b44fd9d6700935608639af1b8356de1e55d5f7c2740f4faa15d82" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -599,9 +605,9 @@ dependencies = [ [[package]] name = "brotli" -version = "7.0.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -610,9 +616,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -629,9 +635,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bytecount" @@ -686,18 +692,14 @@ dependencies = [ name = "cashu" version = "0.6.0" dependencies = [ - "anyhow", - "async-trait", "bip39", "bitcoin 0.32.5", "cbor-diag", "ciborium", - "futures", "instant", "lightning-invoice", "once_cell", "rand", - "reqwest", "serde", "serde_json", "serde_with", @@ -763,8 +765,8 @@ dependencies = [ "bech32 0.9.1", "bip39", "bitcoin 0.32.5", - "cashu", "cbor-diag", + "cdk-common", "ciborium", "criterion", "futures", @@ -777,7 +779,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "sync_wrapper 0.1.2", + "sync_wrapper", "thiserror 1.0.69", "tokio", "tokio-tungstenite 0.19.0", @@ -846,6 +848,35 @@ dependencies = [ "uuid", ] +[[package]] +name = "cdk-common" +version = "0.6.0" +dependencies = [ + "anyhow", + "async-trait", + "bip39", + "bitcoin 0.32.5", + "cashu", + "cbor-diag", + "ciborium", + "futures", + "instant", + "lightning-invoice", + "once_cell", + "paste", + "quote", + "rand", + "reqwest", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.9", + "tracing", + "url", + "utoipa", + "uuid", +] + [[package]] name = "cdk-fake-wallet" version = "0.6.0" @@ -985,7 +1016,7 @@ name = "cdk-redb" version = "0.6.0" dependencies = [ "async-trait", - "cashu", + "cdk-common", "lightning-invoice", "redb", "serde", @@ -1016,7 +1047,7 @@ version = "0.6.0" dependencies = [ "async-trait", "bitcoin 0.32.5", - "cashu", + "cdk-common", "lightning-invoice", "serde_json", "sqlx", @@ -1050,12 +1081,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - [[package]] name = "chacha20" version = "0.9.1" @@ -1265,16 +1290,6 @@ 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.7" @@ -1535,7 +1550,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1585,7 +1600,7 @@ dependencies = [ "tokio-stream", "tonic", "tonic-build", - "tower 0.4.13", + "tower", ] [[package]] @@ -1601,7 +1616,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.2", ] [[package]] @@ -1777,9 +1792,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" [[package]] name = "glob" @@ -1820,11 +1835,10 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" dependencies = [ - "cfg-if", "crunchy", ] @@ -2072,21 +2086,19 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", "http 1.2.0", "hyper 1.5.2", "hyper-util", - "rustls 0.23.20", - "rustls-native-certs 0.8.1", + "rustls 0.22.4", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.25.0", "tower-service", - "webpki-roots 0.26.7", ] [[package]] @@ -2638,6 +2650,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + [[package]] name = "miniz_oxide" version = "0.8.2" @@ -2660,20 +2682,20 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "moka" -version = "0.11.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa6e72583bf6830c956235bff0d5afec8cf2952f579ebad18ae7821a917d950f" +checksum = "36506f2f935238463605f3bb13b362f1949daafc3b347d05d60ae08836db2bd2" dependencies = [ "async-io", "async-lock", @@ -2681,6 +2703,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "futures-util", + "num_cpus", "once_cell", "parking_lot 0.12.3", "quanta", @@ -2866,14 +2889,21 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.36.7" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "memchr", + "hermit-abi 0.3.9", + "libc", ] +[[package]] +name = "object" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" + [[package]] name = "once_cell" version = "1.20.2" @@ -3316,58 +3346,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "quinn" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.23.20", - "socket2 0.5.8", - "thiserror 2.0.9", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" -dependencies = [ - "bytes", - "getrandom", - "rand", - "ring 0.17.8", - "rustc-hash", - "rustls 0.23.20", - "rustls-pki-types", - "slab", - "thiserror 2.0.9", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.5.8", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "quote" version = "1.0.38" @@ -3500,14 +3478,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", ] [[package]] @@ -3521,13 +3499,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax 0.7.5", ] [[package]] @@ -3538,15 +3516,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ "async-compression", "base64 0.22.1", @@ -3557,7 +3535,7 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.5.2", - "hyper-rustls 0.27.5", + "hyper-rustls 0.26.0", "hyper-util", "ipnet", "js-sys", @@ -3566,27 +3544,25 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "quinn", - "rustls 0.23.20", - "rustls-native-certs 0.8.1", + "rustls 0.22.4", + "rustls-native-certs 0.7.3", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.25.0", "tokio-socks", "tokio-util", - "tower 0.5.2", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots 0.26.7", - "windows-registry", + "winreg", ] [[package]] @@ -3692,12 +3668,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" - [[package]] name = "rustc_version" version = "0.4.1" @@ -3731,7 +3701,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.14", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -3758,6 +3728,20 @@ dependencies = [ "sct", ] +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + [[package]] name = "rustls" version = "0.23.20" @@ -3781,19 +3765,20 @@ dependencies = [ "openssl-probe", "rustls-pemfile 1.0.4", "schannel", - "security-framework 2.11.1", + "security-framework", ] [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", + "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework 3.1.0", + "security-framework", ] [[package]] @@ -3819,9 +3804,6 @@ name = "rustls-pki-types" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" -dependencies = [ - "web-time", -] [[package]] name = "rustls-webpki" @@ -3968,20 +3950,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d3f8c9bfcc3cbb6b0179eb57042d75b1582bdc65c3cb95f3fa999509c03cbc" -dependencies = [ - "bitflags 2.6.0", - "core-foundation 0.10.0", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -4080,17 +4049,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3" dependencies = [ - "base64 0.22.1", + "base64 0.21.7", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", "serde", - "serde_derive", "serde_json", "serde_with_macros", "time", @@ -4098,9 +4065,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65" dependencies = [ "darling", "proc-macro2", @@ -4356,7 +4323,7 @@ dependencies = [ "serde_json", "thiserror 1.0.69", "tokio", - "tower 0.4.13", + "tower", "tower-http", ] @@ -4411,15 +4378,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - [[package]] name = "synstructure" version = "0.13.1" @@ -4448,7 +4406,7 @@ dependencies = [ "getrandom", "once_cell", "rustix 0.38.42", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4569,20 +4527,21 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.42.0" +version = "1.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" dependencies = [ "backtrace", "bytes", "libc", "mio", + "num_cpus", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2 0.5.8", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -4597,9 +4556,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", @@ -4627,6 +4586,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.1" @@ -4651,9 +4621,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -4705,9 +4675,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", @@ -4749,7 +4719,7 @@ dependencies = [ "tokio", "tokio-rustls 0.24.1", "tokio-stream", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", "tracing", @@ -4788,21 +4758,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", -] - [[package]] name = "tower-http" version = "0.4.4" @@ -4820,7 +4775,7 @@ dependencies = [ "pin-project-lite", "tokio", "tokio-util", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", ] @@ -5262,16 +5217,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "webpki" version = "0.22.4" @@ -5322,7 +5267,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -5340,36 +5285,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-registry" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" -dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result", - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -5518,6 +5433,16 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -5647,28 +5572,30 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ + "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", + "libc", "pkg-config", ] diff --git a/crates/cashu/Cargo.toml b/crates/cashu/Cargo.toml index 97a202d45..93326e137 100644 --- a/crates/cashu/Cargo.toml +++ b/crates/cashu/Cargo.toml @@ -10,7 +10,6 @@ swagger = ["dep:utoipa"] bench = [] [dependencies] -async-trait = "0.1" bitcoin = { version = "0.32.2", features = [ "base64", "serde", @@ -27,18 +26,6 @@ tracing = "0.1" url = "2.3" uuid = { version = "1", features = ["v4", "serde"] } utoipa = { version = "4", optional = true } -futures = "0.3.31" -anyhow = "1.0" -reqwest = { version = "0.12", default-features = false, features = [ - "json", - "rustls-tls", - "rustls-tls-native-roots", - "socks", - "zstd", - "brotli", - "gzip", - "deflate", -] } serde_json = "1" serde_with = "3" diff --git a/crates/cashu/src/lib.rs b/crates/cashu/src/lib.rs index 0da4c8744..aa59f1d48 100644 --- a/crates/cashu/src/lib.rs +++ b/crates/cashu/src/lib.rs @@ -1,29 +1,14 @@ -//! Cashu shared types and functions. +//! CDK common types and traits //! -//! This crate is the base foundation to build things that can interact with the CDK (Cashu -//! Development Kit) and their internal crates. -//! -//! This is meant to contain the shared types, traits and common functions that are used across the -//! internal crates. - pub mod amount; -pub mod common; -pub mod database; pub mod dhke; -pub mod error; -pub mod lightning; pub mod mint; pub mod mint_url; pub mod nuts; -pub mod pub_sub; pub mod secret; -pub mod signatory; pub mod util; -pub mod wallet; -// re-exporting external crates pub use lightning_invoice::{self, Bolt11Invoice}; -pub use {bitcoin, reqwest}; pub use self::amount::Amount; pub use self::nuts::*; diff --git a/crates/cashu/src/nuts/nut17/mod.rs b/crates/cashu/src/nuts/nut17/mod.rs index 396f0a220..4a1674d2e 100644 --- a/crates/cashu/src/nuts/nut17/mod.rs +++ b/crates/cashu/src/nuts/nut17/mod.rs @@ -1,6 +1,4 @@ //! Specific Subscription for the cdk crate -use std::str::FromStr; - use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; use uuid::Uuid; @@ -9,45 +7,20 @@ use super::PublicKey; use crate::nuts::{ CurrencyUnit, MeltQuoteBolt11Response, MintQuoteBolt11Response, PaymentMethod, ProofState, }; -use crate::pub_sub::index::{Index, Indexable, SubscriptionGlobalId}; -use crate::pub_sub::SubId; pub mod ws; /// Subscription Parameter according to the standard #[derive(Debug, Clone, Serialize, Eq, PartialEq, Hash, Deserialize)] -pub struct Params { +#[serde(bound = "I: DeserializeOwned + Serialize")] +pub struct Params { /// Kind pub kind: Kind, /// Filters pub filters: Vec, /// Subscription Id #[serde(rename = "subId")] - pub id: SubId, -} - -impl TryFrom for Vec> { - type Error = Error; - - fn try_from(val: Params) -> Result { - let sub_id: SubscriptionGlobalId = Default::default(); - val.filters - .into_iter() - .map(|filter| { - let idx = match val.kind { - Kind::Bolt11MeltQuote => { - Notification::MeltQuoteBolt11(Uuid::from_str(&filter)?) - } - Kind::Bolt11MintQuote => { - Notification::MintQuoteBolt11(Uuid::from_str(&filter)?) - } - Kind::ProofState => Notification::ProofState(PublicKey::from_str(&filter)?), - }; - - Ok(Index::from((idx, val.id.clone(), sub_id))) - }) - .collect::>() - } + pub id: I, } /// Check state Settings @@ -106,24 +79,6 @@ pub enum NotificationPayload { MintQuoteBolt11Response(MintQuoteBolt11Response), } -impl Indexable for NotificationPayload { - type Type = Notification; - - fn to_indexes(&self) -> Vec> { - match self { - NotificationPayload::ProofState(proof_state) => { - vec![Index::from(Notification::ProofState(proof_state.y))] - } - NotificationPayload::MeltQuoteBolt11Response(melt_quote) => { - vec![Index::from(Notification::MeltQuoteBolt11(melt_quote.quote))] - } - NotificationPayload::MintQuoteBolt11Response(mint_quote) => { - vec![Index::from(Notification::MintQuoteBolt11(mint_quote.quote))] - } - } - } -} - impl From for NotificationPayload { fn from(proof_state: ProofState) -> NotificationPayload { NotificationPayload::ProofState(proof_state) @@ -165,8 +120,8 @@ pub enum Kind { ProofState, } -impl AsRef for Params { - fn as_ref(&self) -> &SubId { +impl AsRef for Params { + fn as_ref(&self) -> &I { &self.id } } diff --git a/crates/cashu/src/nuts/nut17/ws.rs b/crates/cashu/src/nuts/nut17/ws.rs index 1a5e70e2c..a15c52ffc 100644 --- a/crates/cashu/src/nuts/nut17/ws.rs +++ b/crates/cashu/src/nuts/nut17/ws.rs @@ -2,32 +2,32 @@ use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; -use uuid::Uuid; use super::{NotificationPayload, Params}; -use crate::pub_sub::SubId; /// JSON RPC version pub const JSON_RPC_VERSION: &str = "2.0"; /// The response to a subscription request #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct WsSubscribeResponse { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub struct WsSubscribeResponse { /// Status pub status: String, /// Subscription ID #[serde(rename = "subId")] - pub sub_id: SubId, + pub sub_id: I, } /// The response to an unsubscription request #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct WsUnsubscribeResponse { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub struct WsUnsubscribeResponse { /// Status pub status: String, /// Subscription ID #[serde(rename = "subId")] - pub sub_id: SubId, + pub sub_id: I, } /// The notification @@ -35,87 +35,74 @@ pub struct WsUnsubscribeResponse { /// This is the notification that is sent to the client when an event matches a /// subscription #[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(bound = "T: Serialize + DeserializeOwned")] -pub struct NotificationInner { +#[serde(bound = "T: Serialize + DeserializeOwned, I: Serialize + DeserializeOwned")] +pub struct NotificationInner { /// The subscription ID #[serde(rename = "subId")] - pub sub_id: SubId, + pub sub_id: I, /// The notification payload pub payload: NotificationPayload, } -impl From> for NotificationInner { - fn from(value: NotificationInner) -> Self { - NotificationInner { - sub_id: value.sub_id, - payload: match value.payload { - NotificationPayload::ProofState(pk) => NotificationPayload::ProofState(pk), - NotificationPayload::MeltQuoteBolt11Response(quote) => { - NotificationPayload::MeltQuoteBolt11Response(quote.to_string_id()) - } - NotificationPayload::MintQuoteBolt11Response(quote) => { - NotificationPayload::MintQuoteBolt11Response(quote.to_string_id()) - } - }, - } - } -} - /// Responses from the web socket server #[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(bound = "I: Serialize + DeserializeOwned")] #[serde(untagged)] -pub enum WsResponseResult { +pub enum WsResponseResult { /// A response to a subscription request - Subscribe(WsSubscribeResponse), + Subscribe(WsSubscribeResponse), /// Unsubscribe - Unsubscribe(WsUnsubscribeResponse), + Unsubscribe(WsUnsubscribeResponse), } -impl From for WsResponseResult { - fn from(response: WsSubscribeResponse) -> Self { +impl From> for WsResponseResult { + fn from(response: WsSubscribeResponse) -> Self { WsResponseResult::Subscribe(response) } } -impl From for WsResponseResult { - fn from(response: WsUnsubscribeResponse) -> Self { +impl From> for WsResponseResult { + fn from(response: WsUnsubscribeResponse) -> Self { WsResponseResult::Unsubscribe(response) } } /// The request to unsubscribe #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct WsUnsubscribeRequest { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub struct WsUnsubscribeRequest { /// Subscription ID #[serde(rename = "subId")] - pub sub_id: SubId, + pub sub_id: I, } /// The inner method of the websocket request #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "method", content = "params")] -pub enum WsMethodRequest { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub enum WsMethodRequest { /// Subscribe method - Subscribe(Params), + Subscribe(Params), /// Unsubscribe method - Unsubscribe(WsUnsubscribeRequest), + Unsubscribe(WsUnsubscribeRequest), } /// Websocket request #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct WsRequest { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub struct WsRequest { /// JSON RPC version pub jsonrpc: String, /// The method body #[serde(flatten)] - pub method: WsMethodRequest, + pub method: WsMethodRequest, /// The request ID pub id: usize, } -impl From<(WsMethodRequest, usize)> for WsRequest { - fn from((method, id): (WsMethodRequest, usize)) -> Self { +impl From<(WsMethodRequest, usize)> for WsRequest { + fn from((method, id): (WsMethodRequest, usize)) -> Self { WsRequest { jsonrpc: JSON_RPC_VERSION.to_owned(), method, @@ -146,11 +133,12 @@ pub struct WsErrorBody { /// Websocket response #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct WsResponse { +#[serde(bound = "I: Serialize + DeserializeOwned")] +pub struct WsResponse { /// JSON RPC version pub jsonrpc: String, /// The result - pub result: WsResponseResult, + pub result: WsResponseResult, /// The request ID pub id: usize, } @@ -168,18 +156,19 @@ pub struct WsErrorResponse { /// Message from the server to the client #[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(bound = "I: Serialize + DeserializeOwned")] #[serde(untagged)] -pub enum WsMessageOrResponse { +pub enum WsMessageOrResponse { /// A response to a request - Response(WsResponse), + Response(WsResponse), /// An error response ErrorResponse(WsErrorResponse), /// A notification - Notification(WsNotification>), + Notification(WsNotification>), } -impl From<(usize, Result)> for WsMessageOrResponse { - fn from((id, result): (usize, Result)) -> Self { +impl From<(usize, Result, WsErrorBody>)> for WsMessageOrResponse { + fn from((id, result): (usize, Result, WsErrorBody>)) -> Self { match result { Ok(result) => WsMessageOrResponse::Response(WsResponse { jsonrpc: JSON_RPC_VERSION.to_owned(), @@ -194,23 +183,3 @@ impl From<(usize, Result)> for WsMessageOrRespons } } } - -impl From> for WsMessageOrResponse { - fn from(notification: NotificationInner) -> Self { - WsMessageOrResponse::Notification(WsNotification { - jsonrpc: JSON_RPC_VERSION.to_owned(), - method: "subscribe".to_string(), - params: notification.into(), - }) - } -} - -impl From> for WsMessageOrResponse { - fn from(notification: NotificationInner) -> Self { - WsMessageOrResponse::Notification(WsNotification { - jsonrpc: JSON_RPC_VERSION.to_owned(), - method: "subscribe".to_string(), - params: notification, - }) - } -} diff --git a/crates/cashu/src/signatory.rs b/crates/cashu/src/signatory.rs deleted file mode 100644 index 6c626b581..000000000 --- a/crates/cashu/src/signatory.rs +++ /dev/null @@ -1,53 +0,0 @@ -//! Signatory -//! -//! Types to define new signatory instances and their types - -use std::collections::HashMap; - -use bitcoin::bip32::DerivationPath; - -use crate::nuts::nut00::{BlindSignature, BlindedMessage, Proof}; -use crate::{CurrencyUnit, Id, KeySet, KeysResponse, KeysetResponse}; - -#[derive(thiserror::Error, Debug)] -pub enum Error {} - -#[async_trait::async_trait] -/// Signatory trait -pub trait Signatory { - /// Blind sign a message - async fn blind_sign(&self, blinded_message: B) -> Result - where - B: Into; - - /// Verify [`Proof`] meets conditions and is signed - async fn verify_proof

(&self, proof: P) -> Result<(), Error> - where - P: Into; - - /// Retrieve a keyset by id - async fn keyset(&self, keyset_id: I) -> Result, Error> - where - I: Into; - - /// Retrieve the public keys of a keyset - async fn keyset_pubkeys(&self, keyset_id: Id) -> Result; - - /// Retrieve the public keys of the active keyset for distribution to wallet - /// clients - async fn pubkeys(&self) -> Result; - - /// Return a list of all supported keysets - async fn keysets(&self) -> Result; - - /// Add current keyset to inactive keysets - /// Generate new keyset - async fn rotate_keyset( - &self, - unit: CurrencyUnit, - derivation_path_index: u32, - max_order: u8, - input_fee_ppk: u64, - custom_paths: HashMap, - ) -> Result<(), Error>; -} diff --git a/crates/cdk-axum/src/ws/mod.rs b/crates/cdk-axum/src/ws/mod.rs index d29b45ec8..6357134f9 100644 --- a/crates/cdk-axum/src/ws/mod.rs +++ b/crates/cdk-axum/src/ws/mod.rs @@ -1,11 +1,12 @@ use std::collections::HashMap; use axum::extract::ws::{Message, WebSocket}; -use cdk::nuts::nut17::ws::{ - NotificationInner, WsErrorBody, WsMessageOrResponse, WsMethodRequest, WsRequest, -}; use cdk::nuts::nut17::NotificationPayload; use cdk::pub_sub::SubId; +use cdk::ws::{ + notification_to_ws_message, NotificationInner, WsErrorBody, WsMessageOrResponse, + WsMethodRequest, WsRequest, +}; use futures::StreamExt; use tokio::sync::mpsc; use uuid::Uuid; @@ -62,10 +63,10 @@ pub async fn main_websocket(mut socket: WebSocket, state: MintState) { // unsubscribed from the subscription manager, just ignore it. continue; } - let notification: WsMessageOrResponse= NotificationInner { + let notification = notification_to_ws_message(NotificationInner { sub_id, payload, - }.into(); + }); let message = match serde_json::to_string(¬ification) { Ok(message) => message, Err(err) => { diff --git a/crates/cdk-axum/src/ws/subscribe.rs b/crates/cdk-axum/src/ws/subscribe.rs index 30f25e30b..e675bf40d 100644 --- a/crates/cdk-axum/src/ws/subscribe.rs +++ b/crates/cdk-axum/src/ws/subscribe.rs @@ -1,5 +1,5 @@ -use cdk::nuts::nut17::ws::{WsResponseResult, WsSubscribeResponse}; -use cdk::nuts::nut17::Params; +use cdk::subscription::{IndexableParams, Params}; +use cdk::ws::{WsResponseResult, WsSubscribeResponse}; use super::{WsContext, WsError}; @@ -15,6 +15,8 @@ pub(crate) async fn handle( return Err(WsError::InvalidParams); } + let params: IndexableParams = params.into(); + let mut subscription = context .state .mint diff --git a/crates/cdk-axum/src/ws/unsubscribe.rs b/crates/cdk-axum/src/ws/unsubscribe.rs index 0689e2011..0442a109f 100644 --- a/crates/cdk-axum/src/ws/unsubscribe.rs +++ b/crates/cdk-axum/src/ws/unsubscribe.rs @@ -1,4 +1,4 @@ -use cdk::nuts::nut17::ws::{WsResponseResult, WsUnsubscribeRequest, WsUnsubscribeResponse}; +use cdk::ws::{WsResponseResult, WsUnsubscribeRequest, WsUnsubscribeResponse}; use super::{WsContext, WsError}; diff --git a/crates/cdk-common/Cargo.toml b/crates/cdk-common/Cargo.toml new file mode 100644 index 000000000..945db6f24 --- /dev/null +++ b/crates/cdk-common/Cargo.toml @@ -0,0 +1,53 @@ +[package] +name = "cdk-common" +version = "0.6.0" +edition = "2021" +description = "CDK common types and traits" +rust-version = "1.63.0" # MSRV + +[features] +swagger = ["dep:utoipa", "cashu/swagger"] +bench = [] + +[dependencies] +async-trait = "0.1" +bitcoin = { version = "0.32.2", features = [ + "base64", + "serde", + "rand", + "rand-std", +] } +cashu = { path = "../cashu", version = "0.6.0" } +cbor-diag = "0.1.12" +ciborium = { version = "0.2.2", default-features = false, features = ["std"] } +once_cell = "1.20.2" +serde = { version = "1", features = ["derive"] } +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } +thiserror = "2" +tracing = "0.1" +url = "2.3" +uuid = { version = "1", features = ["v4", "serde"] } +utoipa = { version = "4", optional = true } +futures = "0.3.31" +anyhow = "1.0" +reqwest = { version = "0.12", default-features = false, features = [ + "json", + "rustls-tls", + "rustls-tls-native-roots", + "socks", + "zstd", + "brotli", + "gzip", + "deflate", +] } +serde_json = "1" +serde_with = "3" +paste = "1.0.15" +quote = "1.0.38" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +instant = { version = "0.1", features = ["wasm-bindgen", "inaccurate"] } + +[dev-dependencies] +rand = "0.8.5" +bip39 = "2.0" diff --git a/crates/cashu/src/common.rs b/crates/cdk-common/src/common.rs similarity index 100% rename from crates/cashu/src/common.rs rename to crates/cdk-common/src/common.rs diff --git a/crates/cashu/src/database.rs b/crates/cdk-common/src/database.rs similarity index 100% rename from crates/cashu/src/database.rs rename to crates/cdk-common/src/database.rs diff --git a/crates/cashu/src/error.rs b/crates/cdk-common/src/error.rs similarity index 100% rename from crates/cashu/src/error.rs rename to crates/cdk-common/src/error.rs diff --git a/crates/cdk-common/src/lib.rs b/crates/cdk-common/src/lib.rs new file mode 100644 index 000000000..93d0add85 --- /dev/null +++ b/crates/cdk-common/src/lib.rs @@ -0,0 +1,23 @@ +//! Cashu shared types and functions. +//! +//! This crate is the base foundation to build things that can interact with the CDK (Cashu +//! Development Kit) and their internal crates. +//! +//! This is meant to contain the shared types, traits and common functions that are used across the +//! internal crates. + +pub mod common; +pub mod database; +pub mod error; +pub mod lightning; +pub mod pub_sub; +pub mod subscription; +pub mod wallet; +pub mod ws; + +// re-exporting external crates +pub use cashu::amount::{self, Amount}; +pub use cashu::lightning_invoice::{self, Bolt11Invoice}; +pub use cashu::nuts::{self, *}; +pub use cashu::{dhke, mint, mint_url, secret, util, SECP256K1}; +pub use {bitcoin, reqwest}; diff --git a/crates/cashu/src/lightning.rs b/crates/cdk-common/src/lightning.rs similarity index 100% rename from crates/cashu/src/lightning.rs rename to crates/cdk-common/src/lightning.rs diff --git a/crates/cashu/src/pub_sub/index.rs b/crates/cdk-common/src/pub_sub/index.rs similarity index 100% rename from crates/cashu/src/pub_sub/index.rs rename to crates/cdk-common/src/pub_sub/index.rs diff --git a/crates/cashu/src/pub_sub/mod.rs b/crates/cdk-common/src/pub_sub/mod.rs similarity index 100% rename from crates/cashu/src/pub_sub/mod.rs rename to crates/cdk-common/src/pub_sub/mod.rs diff --git a/crates/cdk-common/src/subscription.rs b/crates/cdk-common/src/subscription.rs new file mode 100644 index 000000000..3d62270c4 --- /dev/null +++ b/crates/cdk-common/src/subscription.rs @@ -0,0 +1,74 @@ +//! Subscription types and traits +use std::str::FromStr; + +use cashu::nut17::{self, Error, Kind, Notification}; +use cashu::{NotificationPayload, PublicKey}; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +use crate::pub_sub::index::{Index, Indexable, SubscriptionGlobalId}; +use crate::pub_sub::SubId; + +/// Subscription parameters. +/// +/// This is a concrete type alias for `nut17::Params`. +pub type Params = nut17::Params; + +/// Wrapper around `nut17::Params` to implement `Indexable` for `Notification`. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct IndexableParams(Params); + +impl From for IndexableParams { + fn from(params: Params) -> Self { + Self(params) + } +} + +impl TryFrom for Vec> { + type Error = Error; + fn try_from(params: IndexableParams) -> Result { + let sub_id: SubscriptionGlobalId = Default::default(); + let params = params.0; + params + .filters + .into_iter() + .map(|filter| { + let idx = match params.kind { + Kind::Bolt11MeltQuote => { + Notification::MeltQuoteBolt11(Uuid::from_str(&filter)?) + } + Kind::Bolt11MintQuote => { + Notification::MintQuoteBolt11(Uuid::from_str(&filter)?) + } + Kind::ProofState => Notification::ProofState(PublicKey::from_str(&filter)?), + }; + + Ok(Index::from((idx, params.id.clone(), sub_id))) + }) + .collect::>() + } +} + +impl AsRef for IndexableParams { + fn as_ref(&self) -> &SubId { + &self.0.id + } +} + +impl Indexable for NotificationPayload { + type Type = Notification; + + fn to_indexes(&self) -> Vec> { + match self { + NotificationPayload::ProofState(proof_state) => { + vec![Index::from(Notification::ProofState(proof_state.y))] + } + NotificationPayload::MeltQuoteBolt11Response(melt_quote) => { + vec![Index::from(Notification::MeltQuoteBolt11(melt_quote.quote))] + } + NotificationPayload::MintQuoteBolt11Response(mint_quote) => { + vec![Index::from(Notification::MintQuoteBolt11(mint_quote.quote))] + } + } + } +} diff --git a/crates/cashu/src/wallet.rs b/crates/cdk-common/src/wallet.rs similarity index 100% rename from crates/cashu/src/wallet.rs rename to crates/cdk-common/src/wallet.rs diff --git a/crates/cdk-common/src/ws.rs b/crates/cdk-common/src/ws.rs new file mode 100644 index 000000000..e2bbc9075 --- /dev/null +++ b/crates/cdk-common/src/ws.rs @@ -0,0 +1,47 @@ +//! Websocket types and functions for the CDK. +//! +//! This module extends the `cashu` crate with types and functions for the CDK, using the correct +//! expected ID types. +use cashu::nut17::ws::JSON_RPC_VERSION; +use cashu::nut17::{self}; +use cashu::NotificationPayload; +use uuid::Uuid; + +use crate::pub_sub::SubId; + +pub type WsUnsubscribeRequest = nut17::ws::WsUnsubscribeRequest; +pub type WsNotification = nut17::ws::WsNotification; +pub type WsSubscribeResponse = nut17::ws::WsSubscribeResponse; +pub type WsResponseResult = nut17::ws::WsResponseResult; +pub type WsUnsubscribeResponse = nut17::ws::WsUnsubscribeResponse; +pub type WsRequest = nut17::ws::WsRequest; +pub type WsResponse = nut17::ws::WsResponse; +pub type WsMethodRequest = nut17::ws::WsMethodRequest; +pub type WsErrorBody = nut17::ws::WsErrorBody; +pub type WsMessageOrResponse = nut17::ws::WsMessageOrResponse; +pub type NotificationInner = nut17::ws::NotificationInner; + +pub fn notification_uuid_to_notification_string( + notification: NotificationInner, +) -> NotificationInner { + nut17::ws::NotificationInner { + sub_id: notification.sub_id, + payload: match notification.payload { + NotificationPayload::ProofState(pk) => NotificationPayload::ProofState(pk), + NotificationPayload::MeltQuoteBolt11Response(quote) => { + NotificationPayload::MeltQuoteBolt11Response(quote.to_string_id()) + } + NotificationPayload::MintQuoteBolt11Response(quote) => { + NotificationPayload::MintQuoteBolt11Response(quote.to_string_id()) + } + }, + } +} + +pub fn notification_to_ws_message(notification: NotificationInner) -> WsMessageOrResponse { + nut17::ws::WsMessageOrResponse::Notification(nut17::ws::WsNotification { + jsonrpc: JSON_RPC_VERSION.to_owned(), + method: "subscribe".to_string(), + params: notification_uuid_to_notification_string(notification), + }) +} diff --git a/crates/cdk-integration-tests/tests/mint.rs b/crates/cdk-integration-tests/tests/mint.rs index 96892cc45..10cd5a164 100644 --- a/crates/cdk-integration-tests/tests/mint.rs +++ b/crates/cdk-integration-tests/tests/mint.rs @@ -11,11 +11,11 @@ use cdk::cdk_database::mint_memory::MintMemoryDatabase; use cdk::dhke::construct_proofs; use cdk::mint::MintQuote; use cdk::nuts::nut00::ProofsMethods; -use cdk::nuts::nut17::Params; use cdk::nuts::{ CurrencyUnit, Id, MintBolt11Request, MintInfo, NotificationPayload, Nuts, PreMintSecrets, ProofState, Proofs, SecretKey, SpendingConditions, State, SwapRequest, }; +use cdk::subscription::{IndexableParams, Params}; use cdk::types::QuoteTTL; use cdk::util::unix_time; use cdk::Mint; @@ -232,11 +232,14 @@ pub async fn test_p2pk_swap() -> Result<()> { let mut listener = mint .pubsub_manager - .try_subscribe(Params { - kind: cdk::nuts::nut17::Kind::ProofState, - filters: public_keys_to_listen.clone(), - id: "test".into(), - }) + .try_subscribe::( + Params { + kind: cdk::nuts::nut17::Kind::ProofState, + filters: public_keys_to_listen.clone(), + id: "test".into(), + } + .into(), + ) .await .expect("valid subscription"); diff --git a/crates/cdk-redb/Cargo.toml b/crates/cdk-redb/Cargo.toml index 9da5fd18b..06ed9a828 100644 --- a/crates/cdk-redb/Cargo.toml +++ b/crates/cdk-redb/Cargo.toml @@ -17,7 +17,7 @@ wallet = [] [dependencies] async-trait = "0.1" -cashu = { path = "../cashu", version = "0.6.0", default-features = false } +cdk-common = { path = "../cdk-common", version = "0.6.0" } redb = "2.1.0" thiserror = "1" tracing = { version = "0.1", default-features = false, features = [ diff --git a/crates/cdk-redb/src/error.rs b/crates/cdk-redb/src/error.rs index a5eb33c2d..a4a51a001 100644 --- a/crates/cdk-redb/src/error.rs +++ b/crates/cdk-redb/src/error.rs @@ -33,22 +33,22 @@ pub enum Error { ParseInt(#[from] ParseIntError), /// CDK Database Error #[error(transparent)] - CDKDatabase(#[from] cashu::database::Error), + CDKDatabase(#[from] cdk_common::database::Error), /// CDK Mint Url Error #[error(transparent)] - CDKMintUrl(#[from] cashu::mint_url::Error), + CDKMintUrl(#[from] cdk_common::mint_url::Error), /// CDK Error #[error(transparent)] - CDK(#[from] cashu::error::Error), + CDK(#[from] cdk_common::error::Error), /// NUT00 Error #[error(transparent)] - CDKNUT00(#[from] cashu::nuts::nut00::Error), + CDKNUT00(#[from] cdk_common::nuts::nut00::Error), /// NUT02 Error #[error(transparent)] - CDKNUT02(#[from] cashu::nuts::nut02::Error), + CDKNUT02(#[from] cdk_common::nuts::nut02::Error), /// DHKE Error #[error(transparent)] - DHKE(#[from] cashu::dhke::Error), + DHKE(#[from] cdk_common::dhke::Error), /// Unknown Mint Info #[error("Unknown mint info")] UnknownMintInfo, @@ -60,7 +60,7 @@ pub enum Error { UnknownDatabaseVersion, } -impl From for cashu::database::Error { +impl From for cdk_common::database::Error { fn from(e: Error) -> Self { Self::Database(Box::new(e)) } diff --git a/crates/cdk-redb/src/migrations.rs b/crates/cdk-redb/src/migrations.rs index 28fd6746b..0a40068d1 100644 --- a/crates/cdk-redb/src/migrations.rs +++ b/crates/cdk-redb/src/migrations.rs @@ -1,8 +1,8 @@ use std::collections::HashMap; use std::sync::Arc; -use cashu::mint_url::MintUrl; -use cashu::{Amount, CurrencyUnit, MeltQuoteState, MintQuoteState}; +use cdk_common::mint_url::MintUrl; +use cdk_common::{Amount, CurrencyUnit, MeltQuoteState, MintQuoteState}; use redb::{Database, ReadableTable, TableDefinition}; use serde::{Deserialize, Serialize}; diff --git a/crates/cdk-redb/src/mint/migrations.rs b/crates/cdk-redb/src/mint/migrations.rs index 03ea33384..3dafb99a5 100644 --- a/crates/cdk-redb/src/mint/migrations.rs +++ b/crates/cdk-redb/src/mint/migrations.rs @@ -3,9 +3,9 @@ use std::collections::HashMap; use std::str::FromStr; use std::sync::Arc; -use cashu::mint::MintQuote; -use cashu::mint_url::MintUrl; -use cashu::{Amount, CurrencyUnit, MintQuoteState, Proof, State}; +use cdk_common::mint::MintQuote; +use cdk_common::mint_url::MintUrl; +use cdk_common::{Amount, CurrencyUnit, MintQuoteState, Proof, State}; use lightning_invoice::Bolt11Invoice; use redb::{ Database, MultimapTableDefinition, ReadableMultimapTable, ReadableTable, TableDefinition, diff --git a/crates/cdk-redb/src/mint/mod.rs b/crates/cdk-redb/src/mint/mod.rs index 93f6a47a6..89385f45b 100644 --- a/crates/cdk-redb/src/mint/mod.rs +++ b/crates/cdk-redb/src/mint/mod.rs @@ -7,12 +7,12 @@ use std::str::FromStr; use std::sync::Arc; use async_trait::async_trait; -use cashu::common::LnKey; -use cashu::database::{self, MintDatabase}; -use cashu::dhke::hash_to_curve; -use cashu::mint::{self, MintKeySetInfo, MintQuote}; -use cashu::nut00::ProofsMethods; -use cashu::{ +use cdk_common::common::LnKey; +use cdk_common::database::{self, MintDatabase}; +use cdk_common::dhke::hash_to_curve; +use cdk_common::mint::{self, MintKeySetInfo, MintQuote}; +use cdk_common::nut00::ProofsMethods; +use cdk_common::{ BlindSignature, CurrencyUnit, Id, MeltBolt11Request, MeltQuoteState, MintQuoteState, Proof, Proofs, PublicKey, State, }; diff --git a/crates/cdk-redb/src/wallet/migrations.rs b/crates/cdk-redb/src/wallet/migrations.rs index 03a1e8e6c..27f113325 100644 --- a/crates/cdk-redb/src/wallet/migrations.rs +++ b/crates/cdk-redb/src/wallet/migrations.rs @@ -3,7 +3,7 @@ use std::ops::Deref; use std::str::FromStr; use std::sync::Arc; -use cashu::mint_url::MintUrl; +use cdk_common::mint_url::MintUrl; use redb::{ Database, MultimapTableDefinition, ReadableMultimapTable, ReadableTable, TableDefinition, }; diff --git a/crates/cdk-redb/src/wallet/mod.rs b/crates/cdk-redb/src/wallet/mod.rs index 6c88cf001..ff7a84788 100644 --- a/crates/cdk-redb/src/wallet/mod.rs +++ b/crates/cdk-redb/src/wallet/mod.rs @@ -7,12 +7,12 @@ use std::str::FromStr; use std::sync::Arc; use async_trait::async_trait; -use cashu::common::ProofInfo; -use cashu::database::WalletDatabase; -use cashu::mint_url::MintUrl; -use cashu::util::unix_time; -use cashu::wallet::{self, MintQuote}; -use cashu::{ +use cdk_common::common::ProofInfo; +use cdk_common::database::WalletDatabase; +use cdk_common::mint_url::MintUrl; +use cdk_common::util::unix_time; +use cdk_common::wallet::{self, MintQuote}; +use cdk_common::{ database, CurrencyUnit, Id, KeySetInfo, Keys, MintInfo, PublicKey, SpendingConditions, State, }; use redb::{Database, MultimapTableDefinition, ReadableTable, TableDefinition}; diff --git a/crates/cdk-sqlite/Cargo.toml b/crates/cdk-sqlite/Cargo.toml index 784a8b110..df0523d39 100644 --- a/crates/cdk-sqlite/Cargo.toml +++ b/crates/cdk-sqlite/Cargo.toml @@ -17,7 +17,7 @@ wallet = [] [dependencies] async-trait = "0.1" -cashu = { path = "../cashu", version = "0.6.0", default-features = false } +cdk-common = { path = "../cdk-common", version = "0.6.0" } bitcoin = { version = "0.32.2", default-features = false } sqlx = { version = "0.6.3", default-features = false, features = [ "runtime-tokio-rustls", diff --git a/crates/cdk-sqlite/src/mint/error.rs b/crates/cdk-sqlite/src/mint/error.rs index 027b92418..e4c185fda 100644 --- a/crates/cdk-sqlite/src/mint/error.rs +++ b/crates/cdk-sqlite/src/mint/error.rs @@ -10,31 +10,31 @@ pub enum Error { SQLX(#[from] sqlx::Error), /// NUT00 Error #[error(transparent)] - CDKNUT00(#[from] cashu::nuts::nut00::Error), + CDKNUT00(#[from] cdk_common::nuts::nut00::Error), /// NUT01 Error #[error(transparent)] - CDKNUT01(#[from] cashu::nuts::nut01::Error), + CDKNUT01(#[from] cdk_common::nuts::nut01::Error), /// NUT02 Error #[error(transparent)] - CDKNUT02(#[from] cashu::nuts::nut02::Error), + CDKNUT02(#[from] cdk_common::nuts::nut02::Error), /// NUT04 Error #[error(transparent)] - CDKNUT04(#[from] cashu::nuts::nut04::Error), + CDKNUT04(#[from] cdk_common::nuts::nut04::Error), /// NUT05 Error #[error(transparent)] - CDKNUT05(#[from] cashu::nuts::nut05::Error), + CDKNUT05(#[from] cdk_common::nuts::nut05::Error), /// NUT07 Error #[error(transparent)] - CDKNUT07(#[from] cashu::nuts::nut07::Error), + CDKNUT07(#[from] cdk_common::nuts::nut07::Error), /// Secret Error #[error(transparent)] - CDKSECRET(#[from] cashu::secret::Error), + CDKSECRET(#[from] cdk_common::secret::Error), /// BIP32 Error #[error(transparent)] BIP32(#[from] bitcoin::bip32::Error), /// Mint Url Error #[error(transparent)] - MintUrl(#[from] cashu::mint_url::Error), + MintUrl(#[from] cdk_common::mint_url::Error), /// Could Not Initialize Database #[error("Could not initialize database")] CouldNotInitialize, @@ -46,7 +46,7 @@ pub enum Error { Serde(#[from] serde_json::Error), } -impl From for cashu::database::Error { +impl From for cdk_common::database::Error { fn from(e: Error) -> Self { Self::Database(Box::new(e)) } diff --git a/crates/cdk-sqlite/src/mint/mod.rs b/crates/cdk-sqlite/src/mint/mod.rs index 4b71b2a02..d0c6dbe0e 100644 --- a/crates/cdk-sqlite/src/mint/mod.rs +++ b/crates/cdk-sqlite/src/mint/mod.rs @@ -7,14 +7,14 @@ use std::time::Duration; use async_trait::async_trait; use bitcoin::bip32::DerivationPath; -use cashu::common::LnKey; -use cashu::database::{self, MintDatabase}; -use cashu::mint::{self, MintKeySetInfo, MintQuote}; -use cashu::mint_url::MintUrl; -use cashu::nut00::ProofsMethods; -use cashu::nut05::QuoteState; -use cashu::secret::Secret; -use cashu::{ +use cdk_common::common::LnKey; +use cdk_common::database::{self, MintDatabase}; +use cdk_common::mint::{self, MintKeySetInfo, MintQuote}; +use cdk_common::mint_url::MintUrl; +use cdk_common::nut00::ProofsMethods; +use cdk_common::nut05::QuoteState; +use cdk_common::secret::Secret; +use cdk_common::{ Amount, BlindSignature, BlindSignatureDleq, CurrencyUnit, Id, MeltBolt11Request, MeltQuoteState, MintQuoteState, PaymentMethod, Proof, Proofs, PublicKey, SecretKey, State, }; diff --git a/crates/cdk-sqlite/src/wallet/error.rs b/crates/cdk-sqlite/src/wallet/error.rs index e76458a2c..66514cfea 100644 --- a/crates/cdk-sqlite/src/wallet/error.rs +++ b/crates/cdk-sqlite/src/wallet/error.rs @@ -13,28 +13,28 @@ pub enum Error { Serde(#[from] serde_json::Error), /// NUT00 Error #[error(transparent)] - CDKNUT00(#[from] cashu::nuts::nut00::Error), + CDKNUT00(#[from] cdk_common::nuts::nut00::Error), /// NUT01 Error #[error(transparent)] - CDKNUT01(#[from] cashu::nuts::nut01::Error), + CDKNUT01(#[from] cdk_common::nuts::nut01::Error), /// NUT02 Error #[error(transparent)] - CDKNUT02(#[from] cashu::nuts::nut02::Error), + CDKNUT02(#[from] cdk_common::nuts::nut02::Error), /// NUT04 Error #[error(transparent)] - CDKNUT04(#[from] cashu::nuts::nut04::Error), + CDKNUT04(#[from] cdk_common::nuts::nut04::Error), /// NUT05 Error #[error(transparent)] - CDKNUT05(#[from] cashu::nuts::nut05::Error), + CDKNUT05(#[from] cdk_common::nuts::nut05::Error), /// NUT07 Error #[error(transparent)] - CDKNUT07(#[from] cashu::nuts::nut07::Error), + CDKNUT07(#[from] cdk_common::nuts::nut07::Error), /// Secret Error #[error(transparent)] - CDKSECRET(#[from] cashu::secret::Error), + CDKSECRET(#[from] cdk_common::secret::Error), /// Mint Url #[error(transparent)] - MintUrl(#[from] cashu::mint_url::Error), + MintUrl(#[from] cdk_common::mint_url::Error), /// BIP32 Error #[error(transparent)] BIP32(#[from] bitcoin::bip32::Error), @@ -46,7 +46,7 @@ pub enum Error { InvalidDbPath, } -impl From for cashu::database::Error { +impl From for cdk_common::database::Error { fn from(e: Error) -> Self { Self::Database(Box::new(e)) } diff --git a/crates/cdk-sqlite/src/wallet/mod.rs b/crates/cdk-sqlite/src/wallet/mod.rs index 31e18f35f..fa2bb4899 100644 --- a/crates/cdk-sqlite/src/wallet/mod.rs +++ b/crates/cdk-sqlite/src/wallet/mod.rs @@ -5,13 +5,13 @@ use std::path::Path; use std::str::FromStr; use async_trait::async_trait; -use cashu::common::ProofInfo; -use cashu::database::WalletDatabase; -use cashu::mint_url::MintUrl; -use cashu::nuts::{MeltQuoteState, MintQuoteState}; -use cashu::secret::Secret; -use cashu::wallet::{self, MintQuote}; -use cashu::{ +use cdk_common::common::ProofInfo; +use cdk_common::database::WalletDatabase; +use cdk_common::mint_url::MintUrl; +use cdk_common::nuts::{MeltQuoteState, MintQuoteState}; +use cdk_common::secret::Secret; +use cdk_common::wallet::{self, MintQuote}; +use cdk_common::{ database, Amount, CurrencyUnit, Id, KeySetInfo, Keys, MintInfo, Proof, PublicKey, SecretKey, SpendingConditions, State, }; diff --git a/crates/cdk/Cargo.toml b/crates/cdk/Cargo.toml index 6b28d8181..4d023221a 100644 --- a/crates/cdk/Cargo.toml +++ b/crates/cdk/Cargo.toml @@ -14,14 +14,14 @@ license = "MIT" default = ["mint", "wallet"] mint = ["dep:futures"] # We do not commit to a MSRV with swagger enabled -swagger = ["mint", "dep:utoipa", "cashu/swagger"] +swagger = ["mint", "dep:utoipa", "cdk-common/swagger"] wallet = ["dep:reqwest"] bench = [] http_subscription = [] [dependencies] -cashu = { path = "../cashu", version = "0.6.0", default-features = false } +cdk-common = { path = "../cdk-common", version = "0.6.0" } cbor-diag = "0.1.12" arc-swap = "1.7.1" async-trait = "0.1" diff --git a/crates/cdk/src/cdk_database/mint_memory.rs b/crates/cdk/src/cdk_database/mint_memory.rs index 2cec6948b..86ec3577e 100644 --- a/crates/cdk/src/cdk_database/mint_memory.rs +++ b/crates/cdk/src/cdk_database/mint_memory.rs @@ -4,9 +4,9 @@ use std::collections::HashMap; use std::sync::Arc; use async_trait::async_trait; -use cashu::database::{Error, MintDatabase}; -use cashu::mint::MintKeySetInfo; -use cashu::nut00::ProofsMethods; +use cdk_common::database::{Error, MintDatabase}; +use cdk_common::mint::MintKeySetInfo; +use cdk_common::nut00::ProofsMethods; use tokio::sync::{Mutex, RwLock}; use uuid::Uuid; diff --git a/crates/cdk/src/cdk_database/mod.rs b/crates/cdk/src/cdk_database/mod.rs index 0aeeb6156..e2ec6458a 100644 --- a/crates/cdk/src/cdk_database/mod.rs +++ b/crates/cdk/src/cdk_database/mod.rs @@ -6,6 +6,6 @@ pub mod mint_memory; pub mod wallet_memory; /// re-export types -pub use cashu::database::{Error, MintDatabase, WalletDatabase}; +pub use cdk_common::database::{Error, MintDatabase, WalletDatabase}; #[cfg(feature = "wallet")] pub use wallet_memory::WalletMemoryDatabase; diff --git a/crates/cdk/src/cdk_database/wallet_memory.rs b/crates/cdk/src/cdk_database/wallet_memory.rs index fd1b5be46..5c2785db4 100644 --- a/crates/cdk/src/cdk_database/wallet_memory.rs +++ b/crates/cdk/src/cdk_database/wallet_memory.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; use std::sync::Arc; use async_trait::async_trait; -use cashu::database::{Error, WalletDatabase}; +use cdk_common::database::{Error, WalletDatabase}; use tokio::sync::RwLock; use crate::mint_url::MintUrl; diff --git a/crates/cdk/src/lib.rs b/crates/cdk/src/lib.rs index 0cd7bf965..9fffadb3a 100644 --- a/crates/cdk/src/lib.rs +++ b/crates/cdk/src/lib.rs @@ -15,11 +15,11 @@ pub mod pub_sub; /// Re-export amount type #[doc(hidden)] -pub use cashu::{ +pub use cdk_common::{ amount, common as types, dhke, error::{self, Error}, - lightning as cdk_lightning, lightning_invoice, mint_url, nuts, secret, util, Amount, - Bolt11Invoice, + lightning as cdk_lightning, lightning_invoice, mint_url, nuts, secret, subscription, util, ws, + Amount, Bolt11Invoice, }; pub mod fees; diff --git a/crates/cdk/src/mint/builder.rs b/crates/cdk/src/mint/builder.rs index 286e64ef3..d40e2b122 100644 --- a/crates/cdk/src/mint/builder.rs +++ b/crates/cdk/src/mint/builder.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use std::sync::Arc; use anyhow::anyhow; -use cashu::database::{self, MintDatabase}; +use cdk_common::database::{self, MintDatabase}; use super::nut17::SupportedMethods; use super::nut19::{self, CachedEndpoint}; diff --git a/crates/cdk/src/mint/melt.rs b/crates/cdk/src/mint/melt.rs index 99d4ff4f8..f2679b522 100644 --- a/crates/cdk/src/mint/melt.rs +++ b/crates/cdk/src/mint/melt.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use std::str::FromStr; use anyhow::bail; -use cashu::nut00::ProofsMethods; +use cdk_common::nut00::ProofsMethods; use lightning_invoice::Bolt11Invoice; use tracing::instrument; use uuid::Uuid; diff --git a/crates/cdk/src/mint/mod.rs b/crates/cdk/src/mint/mod.rs index b57a8682a..0d7a16478 100644 --- a/crates/cdk/src/mint/mod.rs +++ b/crates/cdk/src/mint/mod.rs @@ -6,9 +6,9 @@ use std::sync::Arc; use bitcoin::bip32::{ChildNumber, DerivationPath, Xpriv}; use bitcoin::secp256k1::{self, Secp256k1}; -use cashu::common::{LnKey, QuoteTTL}; -use cashu::database::{self, MintDatabase}; -use cashu::mint::MintKeySetInfo; +use cdk_common::common::{LnKey, QuoteTTL}; +use cdk_common::database::{self, MintDatabase}; +use cdk_common::mint::MintKeySetInfo; use config::SwappableConfig; use futures::StreamExt; use serde::{Deserialize, Serialize}; @@ -39,7 +39,7 @@ pub mod subscription; mod swap; pub use builder::{MintBuilder, MintMeltLimits}; -pub use cashu::mint::{MeltQuote, MintQuote}; +pub use cdk_common::mint::{MeltQuote, MintQuote}; /// Cashu Mint #[derive(Clone)] @@ -566,7 +566,7 @@ mod tests { use std::collections::HashSet; use bitcoin::Network; - use cashu::common::{LnKey, QuoteTTL}; + use cdk_common::common::{LnKey, QuoteTTL}; use secp256k1::Secp256k1; use uuid::Uuid; diff --git a/crates/cdk/src/mint/subscription/manager.rs b/crates/cdk/src/mint/subscription/manager.rs index 3e246ae6d..4df11330f 100644 --- a/crates/cdk/src/mint/subscription/manager.rs +++ b/crates/cdk/src/mint/subscription/manager.rs @@ -2,9 +2,9 @@ use std::ops::Deref; use std::sync::Arc; -use cashu::database::{self, MintDatabase}; -use cashu::nut17::Notification; -use cashu::NotificationPayload; +use cdk_common::database::{self, MintDatabase}; +use cdk_common::nut17::Notification; +use cdk_common::NotificationPayload; use uuid::Uuid; use super::OnSubscription; @@ -84,19 +84,21 @@ mod test { use tokio::time::sleep; use super::*; - use crate::nuts::nut17::{Kind, Params}; + use crate::nuts::nut17::Kind; use crate::nuts::{PublicKey, State}; + use crate::subscription::{IndexableParams, Params}; #[tokio::test] async fn active_and_drop() { let manager = PubSubManager::default(); - let params = Params { + let params: IndexableParams = Params { kind: Kind::ProofState, filters: vec![ "02a9acc1e48c25eeeb9289b5031cc57da9fe72f3fe2861d264bdc074209b107ba2".to_owned(), ], id: "uno".into(), - }; + } + .into(); // Although the same param is used, two subscriptions are created, that // is because each index is unique, thanks to `Unique`, it is the @@ -125,25 +127,31 @@ mod test { let manager = PubSubManager::default(); let mut subscriptions = [ manager - .try_subscribe(Params { - kind: Kind::ProofState, - filters: vec![ - "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104" - .to_string(), - ], - id: "uno".into(), - }) + .try_subscribe::( + Params { + kind: Kind::ProofState, + filters: vec![ + "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104" + .to_string(), + ], + id: "uno".into(), + } + .into(), + ) .await .expect("valid subscription"), manager - .try_subscribe(Params { - kind: Kind::ProofState, - filters: vec![ - "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104" - .to_string(), - ], - id: "dos".into(), - }) + .try_subscribe::( + Params { + kind: Kind::ProofState, + filters: vec![ + "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104" + .to_string(), + ], + id: "dos".into(), + } + .into(), + ) .await .expect("valid subscription"), ]; @@ -184,7 +192,7 @@ mod test { async fn json_test() { let manager = PubSubManager::default(); let mut subscription = manager - .try_subscribe::( + .try_subscribe::( serde_json::from_str(r#"{"kind":"proof_state","filters":["02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104"],"subId":"uno"}"#) .expect("valid json"), ) diff --git a/crates/cdk/src/mint/subscription/on_subscription.rs b/crates/cdk/src/mint/subscription/on_subscription.rs index d2723ee15..08d1f1696 100644 --- a/crates/cdk/src/mint/subscription/on_subscription.rs +++ b/crates/cdk/src/mint/subscription/on_subscription.rs @@ -3,10 +3,10 @@ //! This module contains the code that is triggered when a new subscription is created. use std::sync::Arc; -use cashu::database::{self, MintDatabase}; -use cashu::nut17::Notification; -use cashu::pub_sub::OnNewSubscription; -use cashu::NotificationPayload; +use cdk_common::database::{self, MintDatabase}; +use cdk_common::nut17::Notification; +use cdk_common::pub_sub::OnNewSubscription; +use cdk_common::NotificationPayload; use uuid::Uuid; use crate::nuts::{MeltQuoteBolt11Response, MintQuoteBolt11Response, ProofState, PublicKey}; diff --git a/crates/cdk/src/pub_sub/mod.rs b/crates/cdk/src/pub_sub.rs similarity index 98% rename from crates/cdk/src/pub_sub/mod.rs rename to crates/cdk/src/pub_sub.rs index 1bccc636a..532a14cc0 100644 --- a/crates/cdk/src/pub_sub/mod.rs +++ b/crates/cdk/src/pub_sub.rs @@ -15,9 +15,9 @@ use std::ops::{Deref, DerefMut}; use std::sync::atomic::{self, AtomicUsize}; use std::sync::Arc; -pub use cashu::pub_sub::index::{Index, Indexable, SubscriptionGlobalId}; -use cashu::pub_sub::OnNewSubscription; -pub use cashu::pub_sub::SubId; +pub use cdk_common::pub_sub::index::{Index, Indexable, SubscriptionGlobalId}; +use cdk_common::pub_sub::OnNewSubscription; +pub use cdk_common::pub_sub::SubId; use tokio::sync::{mpsc, RwLock}; use tokio::task::JoinHandle; diff --git a/crates/cdk/src/wallet/mod.rs b/crates/cdk/src/wallet/mod.rs index e09543d14..68dd25995 100644 --- a/crates/cdk/src/wallet/mod.rs +++ b/crates/cdk/src/wallet/mod.rs @@ -6,7 +6,8 @@ use std::sync::Arc; use bitcoin::bip32::Xpriv; use bitcoin::Network; -use cashu::database::{self, WalletDatabase}; +use cdk_common::database::{self, WalletDatabase}; +use cdk_common::subscription::Params; use client::MintConnector; use getrandom::getrandom; pub use multi_mint_wallet::MultiMintWallet; @@ -20,7 +21,7 @@ use crate::error::Error; use crate::fees::calculate_fee; use crate::mint_url::MintUrl; use crate::nuts::nut00::token::Token; -use crate::nuts::nut17::{Kind, Params}; +use crate::nuts::nut17::Kind; use crate::nuts::{ nut10, CurrencyUnit, Id, Keys, MintInfo, MintQuoteState, PreMintSecrets, Proof, Proofs, RestoreRequest, SpendingConditions, State, @@ -41,7 +42,7 @@ pub mod subscription; mod swap; pub mod util; -pub use cashu::wallet as types; +pub use cdk_common::wallet as types; use crate::nuts::nut00::ProofsMethods; diff --git a/crates/cdk/src/wallet/multi_mint_wallet.rs b/crates/cdk/src/wallet/multi_mint_wallet.rs index 1af72c0d3..59c3f3954 100644 --- a/crates/cdk/src/wallet/multi_mint_wallet.rs +++ b/crates/cdk/src/wallet/multi_mint_wallet.rs @@ -7,7 +7,7 @@ use std::collections::{BTreeMap, HashMap}; use std::str::FromStr; use std::sync::Arc; -use cashu::wallet::WalletKey; +use cdk_common::wallet::WalletKey; use tokio::sync::Mutex; use tracing::instrument; diff --git a/crates/cdk/src/wallet/subscription/mod.rs b/crates/cdk/src/wallet/subscription/mod.rs index 79ee1b7b2..31544dd1a 100644 --- a/crates/cdk/src/wallet/subscription/mod.rs +++ b/crates/cdk/src/wallet/subscription/mod.rs @@ -9,12 +9,12 @@ use std::collections::HashMap; use std::fmt::Debug; use std::sync::Arc; +use cdk_common::subscription::Params; use tokio::sync::{mpsc, RwLock}; use tokio::task::JoinHandle; use tracing::error; use crate::mint_url::MintUrl; -use crate::nuts::nut17::Params; use crate::pub_sub::SubId; use crate::wallet::client::MintConnector; diff --git a/crates/cdk/src/wallet/subscription/ws.rs b/crates/cdk/src/wallet/subscription/ws.rs index 22c3a70e6..f90cbe06e 100644 --- a/crates/cdk/src/wallet/subscription/ws.rs +++ b/crates/cdk/src/wallet/subscription/ws.rs @@ -2,6 +2,8 @@ use std::collections::{HashMap, HashSet}; use std::sync::atomic::AtomicUsize; use std::sync::Arc; +use cdk_common::subscription::Params; +use cdk_common::ws::{WsMessageOrResponse, WsMethodRequest, WsRequest, WsUnsubscribeRequest}; use futures::{SinkExt, StreamExt}; use tokio::sync::{mpsc, RwLock}; use tokio_tungstenite::connect_async; @@ -10,10 +12,6 @@ use tokio_tungstenite::tungstenite::Message; use super::http::http_main; use super::WsSubscriptionBody; use crate::mint_url::MintUrl; -use crate::nuts::nut17::ws::{ - WsMessageOrResponse, WsMethodRequest, WsRequest, WsUnsubscribeRequest, -}; -use crate::nuts::nut17::Params; use crate::pub_sub::SubId; use crate::wallet::client::MintConnector;