diff --git a/native/native_rust_library/src/identity.rs b/native/native_rust_library/src/identity.rs --- a/native/native_rust_library/src/identity.rs +++ b/native/native_rust_library/src/identity.rs @@ -1,3 +1,69 @@ +use grpc_clients::identity::get_unauthenticated_client; +use grpc_clients::identity::protos::unauth::Empty; + +use crate::utils::jsi_callbacks::{ + handle_bool_result_as_callback, handle_string_result_as_callback, +}; +use crate::{Error, RUNTIME}; +use crate::{CODE_VERSION, DEVICE_TYPE, IDENTITY_SOCKET_ADDR}; + pub mod exact_user_search; pub mod farcaster; pub mod wallet_registration; + +pub mod ffi { + use super::*; + + pub use exact_user_search::ffi::*; + pub use farcaster::ffi::*; + pub use wallet_registration::ffi::*; + + pub fn generate_nonce(promise_id: u32) { + RUNTIME.spawn(async move { + let result = fetch_nonce().await; + handle_string_result_as_callback(result, promise_id); + }); + } + + pub fn version_supported(promise_id: u32) { + RUNTIME.spawn(async move { + let result = version_supported_helper().await; + handle_bool_result_as_callback(result, promise_id); + }); + } +} + +async fn fetch_nonce() -> Result { + let mut identity_client = get_unauthenticated_client( + IDENTITY_SOCKET_ADDR, + CODE_VERSION, + DEVICE_TYPE.as_str_name().to_lowercase(), + ) + .await?; + let nonce = identity_client + .generate_nonce(Empty {}) + .await? + .into_inner() + .nonce; + Ok(nonce) +} + +async fn version_supported_helper() -> Result { + let mut identity_client = get_unauthenticated_client( + IDENTITY_SOCKET_ADDR, + CODE_VERSION, + DEVICE_TYPE.as_str_name().to_lowercase(), + ) + .await?; + let response = identity_client.ping(Empty {}).await; + match response { + Ok(_) => Ok(true), + Err(e) => { + if grpc_clients::error::is_version_unsupported(&e) { + Ok(false) + } else { + Err(e.into()) + } + } + } +} diff --git a/native/native_rust_library/src/identity/exact_user_search.rs b/native/native_rust_library/src/identity/exact_user_search.rs --- a/native/native_rust_library/src/identity/exact_user_search.rs +++ b/native/native_rust_library/src/identity/exact_user_search.rs @@ -19,26 +19,30 @@ is_reserved: bool, } -#[instrument] -pub fn find_user_id_for_wallet_address( - wallet_address: String, - promise_id: u32, -) { - RUNTIME.spawn(async move { - let result = - find_user_id_helper(RequestIdentifier::WalletAddress(wallet_address)) - .await; - handle_string_result_as_callback(result, promise_id); - }); -} +pub mod ffi { + use super::*; + + #[instrument] + pub fn find_user_id_for_wallet_address( + wallet_address: String, + promise_id: u32, + ) { + RUNTIME.spawn(async move { + let result = + find_user_id_helper(RequestIdentifier::WalletAddress(wallet_address)) + .await; + handle_string_result_as_callback(result, promise_id); + }); + } -#[instrument] -pub fn find_user_id_for_username(username: String, promise_id: u32) { - RUNTIME.spawn(async move { - let result = - find_user_id_helper(RequestIdentifier::Username(username)).await; - handle_string_result_as_callback(result, promise_id); - }); + #[instrument] + pub fn find_user_id_for_username(username: String, promise_id: u32) { + RUNTIME.spawn(async move { + let result = + find_user_id_helper(RequestIdentifier::Username(username)).await; + handle_string_result_as_callback(result, promise_id); + }); + } } async fn find_user_id_helper( diff --git a/native/native_rust_library/src/identity/farcaster.rs b/native/native_rust_library/src/identity/farcaster.rs --- a/native/native_rust_library/src/identity/farcaster.rs +++ b/native/native_rust_library/src/identity/farcaster.rs @@ -21,6 +21,49 @@ farcaster_id: String, } +pub mod ffi { + use super::*; + + pub fn get_farcaster_users(farcaster_ids: Vec, promise_id: u32) { + RUNTIME.spawn(async move { + let result = get_farcaster_users_helper(farcaster_ids).await; + handle_string_result_as_callback(result, promise_id); + }); + } + + pub fn link_farcaster_account( + user_id: String, + device_id: String, + access_token: String, + farcaster_id: String, + promise_id: u32, + ) { + RUNTIME.spawn(async move { + let result = link_farcaster_account_helper( + user_id, + device_id, + access_token, + farcaster_id, + ) + .await; + handle_void_result_as_callback(result, promise_id); + }); + } + + pub fn unlink_farcaster_account( + user_id: String, + device_id: String, + access_token: String, + promise_id: u32, + ) { + RUNTIME.spawn(async move { + let result = + unlink_farcaster_account_helper(user_id, device_id, access_token).await; + handle_void_result_as_callback(result, promise_id); + }); + } +} + pub fn farcaster_id_string_to_option(input: &str) -> Option { if input.is_empty() { None @@ -29,13 +72,6 @@ } } -pub fn get_farcaster_users(farcaster_ids: Vec, promise_id: u32) { - RUNTIME.spawn(async move { - let result = get_farcaster_users_helper(farcaster_ids).await; - handle_string_result_as_callback(result, promise_id); - }); -} - async fn get_farcaster_users_helper( farcaster_ids: Vec, ) -> Result { @@ -66,25 +102,6 @@ Ok(serde_json::to_string(&mapped_response)?) } -pub fn link_farcaster_account( - user_id: String, - device_id: String, - access_token: String, - farcaster_id: String, - promise_id: u32, -) { - RUNTIME.spawn(async move { - let result = link_farcaster_account_helper( - user_id, - device_id, - access_token, - farcaster_id, - ) - .await; - handle_void_result_as_callback(result, promise_id); - }); -} - async fn link_farcaster_account_helper( user_id: String, device_id: String, @@ -111,19 +128,6 @@ Ok(()) } -pub fn unlink_farcaster_account( - user_id: String, - device_id: String, - access_token: String, - promise_id: u32, -) { - RUNTIME.spawn(async move { - let result = - unlink_farcaster_account_helper(user_id, device_id, access_token).await; - handle_void_result_as_callback(result, promise_id); - }); -} - async fn unlink_farcaster_account_helper( user_id: String, device_id: String, diff --git a/native/native_rust_library/src/identity/wallet_registration.rs b/native/native_rust_library/src/identity/wallet_registration.rs --- a/native/native_rust_library/src/identity/wallet_registration.rs +++ b/native/native_rust_library/src/identity/wallet_registration.rs @@ -12,38 +12,42 @@ }; use tracing::instrument; -#[instrument] -pub fn register_wallet_user( - siwe_message: String, - siwe_signature: String, - key_payload: String, - key_payload_signature: String, - content_prekey: String, - content_prekey_signature: String, - notif_prekey: String, - notif_prekey_signature: String, - content_one_time_keys: Vec, - notif_one_time_keys: Vec, - farcaster_id: String, - promise_id: u32, -) { - RUNTIME.spawn(async move { - let wallet_user_info = WalletUserInfo { - siwe_message, - siwe_signature, - key_payload, - key_payload_signature, - content_prekey, - content_prekey_signature, - notif_prekey, - notif_prekey_signature, - content_one_time_keys, - notif_one_time_keys, - farcaster_id: farcaster_id_string_to_option(&farcaster_id), - }; - let result = register_wallet_user_helper(wallet_user_info).await; - handle_string_result_as_callback(result, promise_id); - }); +pub mod ffi { + use super::*; + + #[instrument] + pub fn register_wallet_user( + siwe_message: String, + siwe_signature: String, + key_payload: String, + key_payload_signature: String, + content_prekey: String, + content_prekey_signature: String, + notif_prekey: String, + notif_prekey_signature: String, + content_one_time_keys: Vec, + notif_one_time_keys: Vec, + farcaster_id: String, + promise_id: u32, + ) { + RUNTIME.spawn(async move { + let wallet_user_info = WalletUserInfo { + siwe_message, + siwe_signature, + key_payload, + key_payload_signature, + content_prekey, + content_prekey_signature, + notif_prekey, + notif_prekey_signature, + content_one_time_keys, + notif_one_time_keys, + farcaster_id: farcaster_id_string_to_option(&farcaster_id), + }; + let result = register_wallet_user_helper(wallet_user_info).await; + handle_string_result_as_callback(result, promise_id); + }); + } } async fn register_wallet_user_helper( diff --git a/native/native_rust_library/src/lib.rs b/native/native_rust_library/src/lib.rs --- a/native/native_rust_library/src/lib.rs +++ b/native/native_rust_library/src/lib.rs @@ -30,17 +30,9 @@ mod utils; use crate::argon2_tools::compute_backup_key_str; -use crate::identity::exact_user_search::{ - find_user_id_for_username, find_user_id_for_wallet_address, -}; -use crate::identity::farcaster::{ - farcaster_id_string_to_option, get_farcaster_users, link_farcaster_account, - unlink_farcaster_account, -}; -use crate::identity::wallet_registration::register_wallet_user; +use crate::identity::farcaster::farcaster_id_string_to_option; use crate::utils::jsi_callbacks::{ - handle_bool_result_as_callback, handle_string_result_as_callback, - handle_void_result_as_callback, + handle_string_result_as_callback, handle_void_result_as_callback, }; mod generated { @@ -65,6 +57,7 @@ // ffi uses use backup::ffi::*; +use identity::ffi::*; use utils::future_manager::ffi::*; #[cxx::bridge] @@ -439,55 +432,6 @@ } } -fn generate_nonce(promise_id: u32) { - RUNTIME.spawn(async move { - let result = fetch_nonce().await; - handle_string_result_as_callback(result, promise_id); - }); -} - -async fn fetch_nonce() -> Result { - let mut identity_client = get_unauthenticated_client( - IDENTITY_SOCKET_ADDR, - CODE_VERSION, - DEVICE_TYPE.as_str_name().to_lowercase(), - ) - .await?; - let nonce = identity_client - .generate_nonce(Empty {}) - .await? - .into_inner() - .nonce; - Ok(nonce) -} - -fn version_supported(promise_id: u32) { - RUNTIME.spawn(async move { - let result = version_supported_helper().await; - handle_bool_result_as_callback(result, promise_id); - }); -} - -async fn version_supported_helper() -> Result { - let mut identity_client = get_unauthenticated_client( - IDENTITY_SOCKET_ADDR, - CODE_VERSION, - DEVICE_TYPE.as_str_name().to_lowercase(), - ) - .await?; - let response = identity_client.ping(Empty {}).await; - match response { - Ok(_) => Ok(true), - Err(e) => { - if grpc_clients::error::is_version_unsupported(&e) { - Ok(false) - } else { - Err(e.into()) - } - } - } -} - fn get_keyserver_keys( user_id: String, device_id: String,