diff --git a/keyserver/addons/rust-node-addon/rust-binding-types.js b/keyserver/addons/rust-node-addon/rust-binding-types.js --- a/keyserver/addons/rust-node-addon/rust-binding-types.js +++ b/keyserver/addons/rust-node-addon/rust-binding-types.js @@ -83,6 +83,12 @@ authAccessToken: string, userIds: $ReadOnlyArray, ) => Promise, + +privilegedDeleteUsers: ( + authUserId: string, + authDeviceId: string, + authAccessToken: string, + userIds: $ReadOnlyArray, + ) => Promise, }; export type { RustNativeBindingAPI }; diff --git a/keyserver/addons/rust-node-addon/src/identity_client/mod.rs b/keyserver/addons/rust-node-addon/src/identity_client/mod.rs --- a/keyserver/addons/rust-node-addon/src/identity_client/mod.rs +++ b/keyserver/addons/rust-node-addon/src/identity_client/mod.rs @@ -6,6 +6,7 @@ pub mod login; pub mod nonce; pub mod prekey; +mod privileged_delete_users; pub mod register_user; pub mod remove_reserved_usernames; pub mod upload_one_time_keys; @@ -20,7 +21,7 @@ use generated::CODE_VERSION; use grpc_clients::identity::authenticated::ChainedInterceptedAuthClient; use grpc_clients::identity::protos::authenticated::{ - InboundKeyInfo, UploadOneTimeKeysRequest, + InboundKeyInfo, PrivilegedDeleteUsersRequest, UploadOneTimeKeysRequest, }; use grpc_clients::identity::protos::unauthenticated as client_proto; use grpc_clients::identity::shared::CodeVersionLayer; diff --git a/keyserver/addons/rust-node-addon/src/identity_client/privileged_delete_users.rs b/keyserver/addons/rust-node-addon/src/identity_client/privileged_delete_users.rs new file mode 100644 --- /dev/null +++ b/keyserver/addons/rust-node-addon/src/identity_client/privileged_delete_users.rs @@ -0,0 +1,27 @@ +use super::*; + +#[napi] +#[instrument(skip_all)] +pub async fn privileged_delete_users( + auth_user_id: String, + auth_device_id: String, + auth_access_token: String, + user_ids: Vec, +) -> Result<()> { + let mut identity_client = get_authenticated_identity_client( + auth_user_id, + auth_device_id, + auth_access_token, + ) + .await?; + + let privileged_delete_users_request = + PrivilegedDeleteUsersRequest { user_ids }; + + identity_client + .privileged_delete_users(privileged_delete_users_request) + .await + .map_err(handle_grpc_error)?; + + Ok(()) +}