Add encode/decode api

This commit is contained in:
NicolasCantu 2025-06-03 18:57:48 +02:00
parent 90d87e7d9a
commit e72e0d9fe8

View File

@ -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<String> {
}
#[wasm_bindgen]
pub fn set_process_cache(processes: String) -> ApiResult<()> {
let processes: Map<String, Value> = serde_json::from_str(&processes)?;
let parsed_processes: anyhow::Result<HashMap<OutPoint, Process>> = 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<OutPoint, Process> = 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<Device>, 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<String> {
// 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<Pcd> {
let value: Value = serde_wasm_bindgen::from_value(data)?;
let res = TryInto::<Pcd>::try_into(value)?;
Ok(res)
}
#[wasm_bindgen]
pub fn encode_value(value: JsValue) -> ApiResult<Vec<u8>> {
let res = sdk_common::serialization::ciborium_serialize(&serde_wasm_bindgen::from_value(value)?)?;
Ok(res)
}
#[wasm_bindgen]
pub fn decode_value(value: Vec<u8>) -> ApiResult<JsValue> {
let res: Value = sdk_common::serialization::ciborium_deserialize(&value)?;
Ok(serde_wasm_bindgen::to_value(&res)?)
}