Add roles as argument to request_data

This commit is contained in:
NicolasCantu 2025-03-04 14:49:10 +01:00
parent 8d2c34b13b
commit 544e8989c6

View File

@ -1396,35 +1396,27 @@ pub fn update_process(
} }
#[wasm_bindgen] #[wasm_bindgen]
pub fn request_data(process_id: String, state_ids: Vec<String>) -> ApiResult<ApiReturn> { pub fn request_data(process_id: String, state_ids: Vec<String>, roles: JsValue) -> ApiResult<ApiReturn> {
let process_id = OutPoint::from_str(&process_id)?; let process_id = OutPoint::from_str(&process_id)?;
let local_device = lock_local_device()?; let local_device = lock_local_device()?;
let sender = local_device.to_member(); let sender = local_device.to_member();
let sp_wallet = local_device.get_wallet(); let sp_wallet = local_device.get_wallet();
let local_address = sp_wallet.get_client().get_receiving_address(); let local_address = sp_wallet.get_client().get_receiving_address();
let roles: Vec<BTreeMap<String, RoleDefinition>> = serde_wasm_bindgen::from_value(roles)?;
let mut send_to: HashSet<SilentPaymentAddress> = HashSet::new(); let mut send_to: HashSet<SilentPaymentAddress> = HashSet::new();
let processes = lock_processes()?; for role in roles {
let process = processes.get(&process_id).ok_or(ApiError::new("Unknown process".to_owned()))?; for (_, role_def) in role {
for state_id in &state_ids { let members = &role_def.members;
if let Ok(state) = process.get_state_for_id(&state_id) { if !members.contains(&sender) {
let roles = &state.roles; continue;
for (_, role_def) in roles { }
let members = &role_def.members; for member in members {
if !members.contains(&sender) { for address in member.get_addresses() {
continue; if address == local_address { continue };
} send_to.insert(SilentPaymentAddress::try_from(address).unwrap());
for member in members {
for address in member.get_addresses() {
if address == local_address { continue };
send_to.insert(SilentPaymentAddress::try_from(address).unwrap());
}
} }
} }
} else {
// Ignoring unknown state
log::error!("Unknown state");
continue;
} }
} }