diff --git a/crates/cdk-cli/Cargo.toml b/crates/cdk-cli/Cargo.toml index cdd09e46..87ced3a8 100644 --- a/crates/cdk-cli/Cargo.toml +++ b/crates/cdk-cli/Cargo.toml @@ -25,7 +25,7 @@ tracing.workspace = true tracing-subscriber.workspace = true rand.workspace = true home.workspace = true -nostr-sdk = { version = "0.32.0", default-features = false, features = [ +nostr-sdk = { version = "0.33.0", default-features = false, features = [ "nip04", "nip44" ]} diff --git a/crates/cdk-rexie/Cargo.toml b/crates/cdk-rexie/Cargo.toml index b1b41dc7..33375fdf 100644 --- a/crates/cdk-rexie/Cargo.toml +++ b/crates/cdk-rexie/Cargo.toml @@ -15,7 +15,7 @@ default = ["wallet"] wallet = ["cdk/wallet"] [dependencies] -rexie = "0.5.0" +rexie = "0.6.0" cdk = { workspace = true, default-features = false } async-trait.workspace = true tokio.workspace = true diff --git a/crates/cdk-rexie/src/wallet.rs b/crates/cdk-rexie/src/wallet.rs index 26081888..bbd84273 100644 --- a/crates/cdk-rexie/src/wallet.rs +++ b/crates/cdk-rexie/src/wallet.rs @@ -46,6 +46,9 @@ pub enum Error { /// NUT00 Error #[error(transparent)] NUT00(cdk::nuts::nut00::Error), + #[error("Not found")] + /// Not Found + NotFound, } impl From for cdk::cdk_database::Error { fn from(e: Error) -> Self { @@ -149,7 +152,7 @@ impl WalletDatabase for WalletRexieDatabase { let mint_url = serde_wasm_bindgen::to_value(&mint_url).map_err(Error::from)?; - mints_store.delete(&mint_url).await.map_err(Error::from)?; + mints_store.delete(mint_url).await.map_err(Error::from)?; transaction.done().await.map_err(Error::from)?; @@ -166,10 +169,11 @@ impl WalletDatabase for WalletRexieDatabase { let mints_store = transaction.store(MINTS).map_err(Error::from)?; let mint_url = serde_wasm_bindgen::to_value(&mint_url).map_err(Error::from)?; - let mint_info = mints_store.get(&mint_url).await.map_err(Error::from)?; - - let mint_info: Option = - serde_wasm_bindgen::from_value(mint_info).map_err(Error::from)?; + let mint_info = mints_store + .get(mint_url) + .await + .map_err(Error::from)? + .and_then(|m| serde_wasm_bindgen::from_value(m).ok()); Ok(mint_info) } @@ -184,7 +188,7 @@ impl WalletDatabase for WalletRexieDatabase { let mints_store = transaction.store(MINTS).map_err(Error::from)?; let mints = mints_store - .get_all(None, None, None, None) + .scan(None, None, None, None) .await .map_err(Error::from)?; @@ -265,13 +269,11 @@ impl WalletDatabase for WalletRexieDatabase { let mint_url = serde_wasm_bindgen::to_value(&mint_url).map_err(Error::from)?; - let mint_keysets = mint_keysets_store - .get(&mint_url) + let mut mint_keysets = mint_keysets_store + .get(mint_url.clone()) .await - .map_err(Error::from)?; - - let mut mint_keysets: Option> = - serde_wasm_bindgen::from_value(mint_keysets).map_err(Error::from)?; + .map_err(Error::from)? + .and_then(|m| serde_wasm_bindgen::from_value(m).ok()); let new_keyset_ids: Vec = keysets.iter().map(|k| k.id).collect(); @@ -315,10 +317,11 @@ impl WalletDatabase for WalletRexieDatabase { let mints_store = transaction.store(MINT_KEYSETS).map_err(Error::from)?; let mint_url = serde_wasm_bindgen::to_value(&mint_url).map_err(Error::from)?; - let mint_keysets = mints_store.get(&mint_url).await.map_err(Error::from)?; - - let mint_keysets: Option> = - serde_wasm_bindgen::from_value(mint_keysets).map_err(Error::from)?; + let mint_keysets: Option> = mints_store + .get(mint_url) + .await + .map_err(Error::from)? + .and_then(|m| serde_wasm_bindgen::from_value(m).ok()); let keysets_store = transaction.store(KEYSETS).map_err(Error::from)?; @@ -329,13 +332,17 @@ impl WalletDatabase for WalletRexieDatabase { for mint_keyset in mint_keysets { let id = serde_wasm_bindgen::to_value(&mint_keyset).map_err(Error::from)?; - let keyset = keysets_store.get(&id).await.map_err(Error::from)?; - - let keyset = serde_wasm_bindgen::from_value(keyset).map_err(Error::from)?; + let keyset = keysets_store + .get(id) + .await + .map_err(Error::from)? + .and_then(|k| serde_wasm_bindgen::from_value(k).ok()); keysets.push(keyset); } + let keysets = keysets.iter().flatten().cloned().collect(); + Some(keysets) } None => None, @@ -356,9 +363,13 @@ impl WalletDatabase for WalletRexieDatabase { let keyset_id = serde_wasm_bindgen::to_value(keyset_id).map_err(Error::from)?; - let keyset = keysets_store.get(&keyset_id).await.map_err(Error::from)?; + let keyset = keysets_store + .get(keyset_id) + .await + .map_err(Error::from)? + .and_then(|k| serde_wasm_bindgen::from_value(k).ok()); - Ok(serde_wasm_bindgen::from_value(keyset).map_err(Error::from)?) + Ok(keyset) } async fn add_mint_quote(&self, quote: MintQuote) -> Result<(), Self::Err> { @@ -393,10 +404,11 @@ impl WalletDatabase for WalletRexieDatabase { let quotes_store = transaction.store(MINT_QUOTES).map_err(Error::from)?; let quote_id = serde_wasm_bindgen::to_value("e_id).map_err(Error::from)?; - let quote = quotes_store.get("e_id).await.map_err(Error::from)?; - - let quote: Option = - serde_wasm_bindgen::from_value(quote).map_err(Error::from)?; + let quote = quotes_store + .get(quote_id) + .await + .map_err(Error::from)? + .and_then(|q| serde_wasm_bindgen::from_value(q).ok()); Ok(quote) } @@ -411,7 +423,7 @@ impl WalletDatabase for WalletRexieDatabase { let quotes_store = transaction.store(MINT_QUOTES).map_err(Error::from)?; let quotes = quotes_store - .get_all(None, None, None, None) + .scan(None, None, None, None) .await .map_err(Error::from)?; @@ -432,7 +444,7 @@ impl WalletDatabase for WalletRexieDatabase { let quote_id = serde_wasm_bindgen::to_value("e_id).map_err(Error::from)?; - quotes_store.delete("e_id).await.map_err(Error::from)?; + quotes_store.delete(quote_id).await.map_err(Error::from)?; transaction.done().await.map_err(Error::from)?; @@ -471,10 +483,11 @@ impl WalletDatabase for WalletRexieDatabase { let quotes_store = transaction.store(MELT_QUOTES).map_err(Error::from)?; let quote_id = serde_wasm_bindgen::to_value("e_id).map_err(Error::from)?; - let keysets = quotes_store.get("e_id).await.map_err(Error::from)?; - - let quote: Option = - serde_wasm_bindgen::from_value(keysets).map_err(Error::from)?; + let quote = quotes_store + .get(quote_id) + .await + .map_err(Error::from)? + .and_then(|q| serde_wasm_bindgen::from_value(q).ok()); Ok(quote) } @@ -490,7 +503,7 @@ impl WalletDatabase for WalletRexieDatabase { let quote_id = serde_wasm_bindgen::to_value("e_id).map_err(Error::from)?; - quotes_store.delete("e_id).await.map_err(Error::from)?; + quotes_store.delete(quote_id).await.map_err(Error::from)?; transaction.done().await.map_err(Error::from)?; @@ -529,9 +542,11 @@ impl WalletDatabase for WalletRexieDatabase { let keys_store = transaction.store(MINT_KEYS).map_err(Error::from)?; let keyset_id = serde_wasm_bindgen::to_value(id).map_err(Error::from)?; - let keys = keys_store.get(&keyset_id).await.map_err(Error::from)?; - - let keys: Option = serde_wasm_bindgen::from_value(keys).map_err(Error::from)?; + let keys = keys_store + .get(keyset_id) + .await + .map_err(Error::from)? + .and_then(|k| serde_wasm_bindgen::from_value(k).ok()); Ok(keys) } @@ -546,7 +561,7 @@ impl WalletDatabase for WalletRexieDatabase { let keys_store = transaction.store(MINT_KEYS).map_err(Error::from)?; let keyset_id = serde_wasm_bindgen::to_value(id).map_err(Error::from)?; - keys_store.delete(&keyset_id).await.map_err(Error::from)?; + keys_store.delete(keyset_id).await.map_err(Error::from)?; Ok(()) } @@ -592,7 +607,7 @@ impl WalletDatabase for WalletRexieDatabase { let proofs_store = transaction.store(PROOFS).map_err(Error::from)?; let proofs = proofs_store - .get_all(None, None, None, None) + .scan(None, None, None, None) .await .map_err(Error::from)?; @@ -634,7 +649,7 @@ impl WalletDatabase for WalletRexieDatabase { for proof in proofs { let y = serde_wasm_bindgen::to_value(&proof.y()?).map_err(Error::from)?; - proofs_store.delete(&y).await.map_err(Error::from)?; + proofs_store.delete(y).await.map_err(Error::from)?; } transaction.done().await.map_err(Error::from)?; @@ -653,8 +668,12 @@ impl WalletDatabase for WalletRexieDatabase { let y = serde_wasm_bindgen::to_value(&y).map_err(Error::from)?; - let proof = proofs_store.get(&y).await.map_err(Error::from)?; - let mut proof: ProofInfo = serde_wasm_bindgen::from_value(proof).map_err(Error::from)?; + let mut proof: ProofInfo = proofs_store + .get(y.clone()) + .await + .map_err(Error::from)? + .and_then(|p| serde_wasm_bindgen::from_value(p).ok()) + .ok_or(Error::NotFound)?; proof.state = state; @@ -681,9 +700,11 @@ impl WalletDatabase for WalletRexieDatabase { let keyset_id = serde_wasm_bindgen::to_value(keyset_id).map_err(Error::from)?; - let current_count = counter_store.get(&keyset_id).await.map_err(Error::from)?; - let current_count: Option = - serde_wasm_bindgen::from_value(current_count).map_err(Error::from)?; + let current_count: Option = counter_store + .get(keyset_id.clone()) + .await + .map_err(Error::from)? + .and_then(|c| serde_wasm_bindgen::from_value(c).ok()); let new_count = current_count.unwrap_or_default() + count; @@ -710,9 +731,11 @@ impl WalletDatabase for WalletRexieDatabase { let keyset_id = serde_wasm_bindgen::to_value(keyset_id).map_err(Error::from)?; - let current_count = counter_store.get(&keyset_id).await.map_err(Error::from)?; - let current_count: Option = - serde_wasm_bindgen::from_value(current_count).map_err(Error::from)?; + let current_count = counter_store + .get(keyset_id) + .await + .map_err(Error::from)? + .and_then(|c| serde_wasm_bindgen::from_value(c).ok()); Ok(current_count) } @@ -759,11 +782,10 @@ impl WalletDatabase for WalletRexieDatabase { let verifying_key = serde_wasm_bindgen::to_value(verifying_key).map_err(Error::from)?; let last_checked = nostr_last_check_store - .get(&verifying_key) + .get(verifying_key) .await - .map_err(Error::from)?; - let last_checked: Option = - serde_wasm_bindgen::from_value(last_checked).map_err(Error::from)?; + .map_err(Error::from)? + .and_then(|l| serde_wasm_bindgen::from_value(l).ok()); Ok(last_checked) }