diff --git a/src/api.rs b/src/api.rs index f04c98c..8383144 100644 --- a/src/api.rs +++ b/src/api.rs @@ -23,7 +23,7 @@ use sdk_common::crypto::{ decrypt_with_key, encrypt_with_key, generate_key, AeadCore, Aes256Gcm, AnkSharedSecretHash, KeyInit, AAD }; use sdk_common::process::{check_tx_for_process_updates, lock_processes, Process, ProcessState}; -use sdk_common::serialization::{OutPointMemberMap, OutPointProcessMap}; +use sdk_common::serialization::{OutPointMemberMap, OutPointProcessMap, ciborium_deserialize as common_deserialize}; use sdk_common::signature::{AnkHash, AnkMessageHash, AnkValidationNoHash, AnkValidationYesHash, Proof}; use sdk_common::sp_client::bitcoin::blockdata::fee_rate; use sdk_common::sp_client::bitcoin::consensus::{deserialize, serialize}; @@ -378,14 +378,8 @@ pub fn dump_process_cache() -> ApiResult { } #[wasm_bindgen] -pub fn set_process_cache(processes: String) -> ApiResult<()> { - let processes: Map = serde_json::from_str(&processes)?; - - let parsed_processes: anyhow::Result> = processes.into_iter() - .map(|(key, value)| { - Ok((OutPoint::from_str(&key)?, serde_json::from_value(value)?)) - }) - .collect(); +pub fn set_process_cache(processes: JsValue) -> ApiResult<()> { + let parsed_processes: HashMap = serde_wasm_bindgen::from_value(processes)?; let mut cached_processes = lock_processes()?; @@ -394,7 +388,7 @@ pub fn set_process_cache(processes: String) -> ApiResult<()> { return Err(ApiError::new("Processes cache is not empty".to_owned())); } - *cached_processes = parsed_processes?; + *cached_processes = parsed_processes; Ok(()) } @@ -674,16 +668,13 @@ fn create_diffs(device: &MutexGuard, process: &Process, new_state: &Proc let process_id = process.get_process_id()?.to_string(); let mut diffs = vec![]; for (field, hash) in new_state_commitments.iter() { - let description_field = new_public_data.get(field); - let has_description = description_field.as_ref().is_some_and(|v| v.is_string()); - let description = if has_description { description_field.unwrap().as_str().map(|s| s.to_owned()) } else { None }; let need_validation = fields_to_validate.contains(field); diffs.push(UserDiff { process_id: process_id.clone(), state_id: new_state_id.to_lower_hex_string(), value_commitment: hash.to_lower_hex_string(), field: field.to_owned(), - description, + description: None, // TODO we don't use that for now, we'll see later notify_user: false, need_validation, validation_status: DiffStatus::None, @@ -1695,5 +1686,24 @@ pub fn decrypt_data(key: &[u8], data: &[u8]) -> ApiResult { // decrypt the data let clear = decrypt_with_key(&key_buf, data)?; - Ok(String::from_utf8(clear)?) + Ok(clear) +} + +#[wasm_bindgen] +pub fn encode_pcd(data: JsValue) -> ApiResult { + let value: Value = serde_wasm_bindgen::from_value(data)?; + let res = TryInto::::try_into(value)?; + Ok(res) +} + +#[wasm_bindgen] +pub fn encode_value(value: JsValue) -> ApiResult> { + let res = sdk_common::serialization::ciborium_serialize(&serde_wasm_bindgen::from_value(value)?)?; + Ok(res) +} + +#[wasm_bindgen] +pub fn decode_value(value: Vec) -> ApiResult { + let res: Value = sdk_common::serialization::ciborium_deserialize(&value)?; + Ok(serde_wasm_bindgen::to_value(&res)?) }