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]
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 local_device = lock_local_device()?;
let sender = local_device.to_member();
let sp_wallet = local_device.get_wallet();
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 processes = lock_processes()?;
let process = processes.get(&process_id).ok_or(ApiError::new("Unknown process".to_owned()))?;
for state_id in &state_ids {
if let Ok(state) = process.get_state_for_id(&state_id) {
let roles = &state.roles;
for (_, role_def) in roles {
let members = &role_def.members;
if !members.contains(&sender) {
continue;
}
for member in members {
for address in member.get_addresses() {
if address == local_address { continue };
send_to.insert(SilentPaymentAddress::try_from(address).unwrap());
}
for role in roles {
for (_, role_def) in role {
let members = &role_def.members;
if !members.contains(&sender) {
continue;
}
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;
}
}