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 @@ -1,7 +1,10 @@ // @flow import type { SignedIdentityKeysBlob } from 'lib/types/crypto-types.js'; -import type { InboundKeyInfoResponse } from 'lib/types/identity-service-types.js'; +import type { + InboundKeyInfoResponse, + FarcasterUser, +} from 'lib/types/identity-service-types.js'; import type { IdentityInfo } from '../../src/user/identity.js'; @@ -55,6 +58,9 @@ userId: string, deviceId: string, ) => Promise, + +getFarcasterUsers: ( + farcasterIds: $ReadOnlyArray, + ) => Promise<$ReadOnlyArray>, }; export type { RustNativeBindingAPI }; diff --git a/keyserver/addons/rust-node-addon/src/identity_client/get_farcaster_users.rs b/keyserver/addons/rust-node-addon/src/identity_client/get_farcaster_users.rs new file mode 100644 --- /dev/null +++ b/keyserver/addons/rust-node-addon/src/identity_client/get_farcaster_users.rs @@ -0,0 +1,43 @@ +use super::*; +use grpc_clients::identity::protos::unauth::GetFarcasterUsersRequest; +use tracing::debug; + +#[napi] +#[instrument(skip_all)] +pub async fn get_farcaster_users( + farcaster_ids: Vec, +) -> Result> { + let mut identity_client = get_identity_client().await?; + + let request = GetFarcasterUsersRequest { farcaster_ids }; + + debug!("Getting Farcaster users from Identity service"); + let response = identity_client + .get_farcaster_users(request) + .await + .map_err(handle_grpc_error)?; + + let mapped_response: Vec = response + .into_inner() + .farcaster_users + .into_iter() + .map(|farcaster_user| FarcasterUser { + user_id: farcaster_user.user_id, + username: farcaster_user.username, + farcaster_id: farcaster_user.farcaster_id, + }) + .collect(); + + Ok(mapped_response) +} + +// This struct should not be altered without also updating FarcasterUser in +// lib/types/identity-service-types.js +#[napi(object)] +pub struct FarcasterUser { + #[napi(js_name = "userID")] + pub user_id: String, + pub username: String, + #[napi(js_name = "farcasterID")] + pub farcaster_id: String, +} 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 @@ -1,5 +1,6 @@ pub mod add_reserved_usernames; pub mod config; +pub mod get_farcaster_users; pub mod get_inbound_keys_for_user; pub mod login; pub mod prekey; diff --git a/lib/types/identity-service-types.js b/lib/types/identity-service-types.js --- a/lib/types/identity-service-types.js +++ b/lib/types/identity-service-types.js @@ -24,8 +24,8 @@ +accessToken: string, }; -// This type should not be altered without also updating -// OutboundKeyInfoResponse in native/native_rust_library/src/lib.rs +// This type should not be altered without also updating OutboundKeyInfoResponse +// in native/native_rust_library/src/identity/x3dh.rs export type OutboundKeyInfoResponse = { +payload: string, +payloadSignature: string, @@ -38,8 +38,8 @@ +oneTimeNotifPrekey: ?string, }; -// This type should not be altered without also updating -// InboundKeyInfoResponse in native/native_rust_library/src/lib.rs +// This type should not be altered without also updating InboundKeyInfoResponse +// in native/native_rust_library/src/identity/x3dh.rs export type InboundKeyInfoResponse = { +payload: string, +payloadSignature: string, @@ -93,6 +93,8 @@ +walletAddress?: ?string, }; +// This type should not be altered without also updating FarcasterUser in +// keyserver/addons/rust-node-addon/src/identity_client/get_farcaster_users.rs export type FarcasterUser = { +userID: string, +username: string,