sos_database/storage/
mod.rsuse crate::Result;
use async_trait::async_trait;
use indexmap::IndexSet;
use sos_sdk::{
crypto::{AccessKey, Cipher, KeyDerivation},
events::{AccountEventLog, FolderEventLog},
signer::ecdsa::Address,
vault::{Summary, Vault, VaultFlags, VaultId},
};
use std::sync::Arc;
use tokio::sync::RwLock;
mod client;
#[cfg(feature = "files")]
pub mod files;
pub use client::ClientStorage;
use sos_sdk::events::DeviceEventLog;
#[cfg(feature = "files")]
use {sos_core::ExternalFile, sos_sdk::events::FileEventLog};
#[derive(Debug, Default)]
pub struct NewFolderOptions {
pub flags: VaultFlags,
pub key: Option<AccessKey>,
pub cipher: Option<Cipher>,
pub kdf: Option<KeyDerivation>,
}
#[derive(Default)]
pub struct AccountPack {
pub address: Address,
pub identity_vault: Vault,
pub folders: Vec<Vault>,
}
#[derive(Default, Clone)]
pub struct AccessOptions {
pub folder: Option<Summary>,
#[cfg(feature = "files")]
pub file_progress: Option<tokio::sync::mpsc::Sender<files::FileProgress>>,
}
impl From<Summary> for AccessOptions {
fn from(value: Summary) -> Self {
Self {
folder: Some(value),
#[cfg(feature = "files")]
file_progress: None,
}
}
}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
pub trait StorageEventLogs {
async fn identity_log(&self) -> Result<Arc<RwLock<FolderEventLog>>>;
async fn account_log(&self) -> Result<Arc<RwLock<AccountEventLog>>>;
async fn device_log(&self) -> Result<Arc<RwLock<DeviceEventLog>>>;
#[cfg(feature = "files")]
async fn file_log(&self) -> Result<Arc<RwLock<FileEventLog>>>;
#[cfg(feature = "files")]
async fn canonical_files(&self) -> Result<IndexSet<ExternalFile>> {
use sos_sdk::events::FileReducer;
let files = self.file_log().await?;
let event_log = files.read().await;
let reducer = FileReducer::new(&event_log);
Ok(reducer.reduce(None).await?)
}
async fn folder_details(&self) -> Result<IndexSet<Summary>>;
async fn folder_log(
&self,
id: &VaultId,
) -> Result<Arc<RwLock<FolderEventLog>>>;
}