diff --git a/keyserver/addons/rust-node-addon/src/identity_client/find_user_identities.rs b/keyserver/addons/rust-node-addon/src/identity_client/find_user_identities.rs --- a/keyserver/addons/rust-node-addon/src/identity_client/find_user_identities.rs +++ b/keyserver/addons/rust-node-addon/src/identity_client/find_user_identities.rs @@ -54,6 +54,8 @@ pub eth_identity: Option, #[napi(js_name = "farcasterID")] pub farcaster_id: Option, + #[napi(js_name = "hasFarcasterDCsToken")] + pub has_farcaster_dcs_token: bool, } // This struct should not be altered without also updating EthereumIdentity in @@ -84,6 +86,7 @@ username: proto_identity.username, eth_identity: proto_identity.eth_identity.map(EthereumIdentity::from), farcaster_id: proto_identity.farcaster_id, + has_farcaster_dcs_token: proto_identity.has_farcaster_dcs_token, } } } 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 @@ -293,6 +293,7 @@ +username: string, +ethIdentity: ?EthereumIdentity, +farcasterID: ?string, + +hasFarcasterDCsToken: boolean, }; export type Identities = { +[userID: string]: Identity, @@ -307,6 +308,7 @@ username: t.String, ethIdentity: t.maybe(ethereumIdentityValidator), farcasterID: t.maybe(t.String), + hasFarcasterDCsToken: t.Boolean, }); export const identitiesValidator: TDict = t.dict( t.String, diff --git a/native/native_rust_library/src/identity/find_user_identities.rs b/native/native_rust_library/src/identity/find_user_identities.rs --- a/native/native_rust_library/src/identity/find_user_identities.rs +++ b/native/native_rust_library/src/identity/find_user_identities.rs @@ -55,6 +55,8 @@ pub eth_identity: Option, #[serde(rename = "farcasterID")] pub farcaster_id: Option, + #[serde(rename = "hasFarcasterDCsToken")] + pub has_farcaster_dcs_token: bool, } impl TryFrom for UserIdentities { @@ -78,6 +80,7 @@ username: identity.username, eth_identity, farcaster_id: identity.farcaster_id, + has_farcaster_dcs_token: identity.has_farcaster_dcs_token, }, ) }) diff --git a/services/identity/src/grpc_utils.rs b/services/identity/src/grpc_utils.rs --- a/services/identity/src/grpc_utils.rs +++ b/services/identity/src/grpc_utils.rs @@ -343,6 +343,7 @@ username, eth_identity: None, farcaster_id: value.farcaster_id, + has_farcaster_dcs_token: value.farcaster_dcs_token.is_some(), }, DBIdentifier::WalletAddress(eth_identity) => Identity { username: eth_identity.wallet_address.clone(), @@ -352,6 +353,7 @@ siwe_signature: eth_identity.social_proof.signature, }), farcaster_id: value.farcaster_id, + has_farcaster_dcs_token: value.farcaster_dcs_token.is_some(), }, } } diff --git a/shared/protos/identity_auth.proto b/shared/protos/identity_auth.proto --- a/shared/protos/identity_auth.proto +++ b/shared/protos/identity_auth.proto @@ -126,6 +126,7 @@ string username = 1; optional EthereumIdentity eth_identity = 2; optional string farcaster_id = 3; + bool has_farcaster_dcs_token = 4; } // UploadOneTimeKeys diff --git a/web/grpc/identity-service-client-wrapper.js b/web/grpc/identity-service-client-wrapper.js --- a/web/grpc/identity-service-client-wrapper.js +++ b/web/grpc/identity-service-client-wrapper.js @@ -693,6 +693,7 @@ ethIdentity: identityObject.ethIdentity, username: identityObject.username, farcasterID: identityObject.farcasterId, + hasFarcasterDCsToken: identityObject.hasFarcasterDcsToken, }, }; }); diff --git a/web/protobufs/identity-auth-structs.cjs b/web/protobufs/identity-auth-structs.cjs --- a/web/protobufs/identity-auth-structs.cjs +++ b/web/protobufs/identity-auth-structs.cjs @@ -974,7 +974,8 @@ var f, obj = { username: jspb.Message.getFieldWithDefault(msg, 1, ""), ethIdentity: (f = msg.getEthIdentity()) && proto.identity.auth.EthereumIdentity.toObject(includeInstance, f), - farcasterId: jspb.Message.getFieldWithDefault(msg, 3, "") + farcasterId: jspb.Message.getFieldWithDefault(msg, 3, ""), + hasFarcasterDcsToken: jspb.Message.getBooleanFieldWithDefault(msg, 4, false) }; if (includeInstance) { @@ -1024,6 +1025,10 @@ var value = /** @type {string} */ (reader.readString()); msg.setFarcasterId(value); break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setHasFarcasterDcsToken(value); + break; default: reader.skipField(); break; @@ -1075,6 +1080,13 @@ f ); } + f = message.getHasFarcasterDcsToken(); + if (f) { + writer.writeBool( + 4, + f + ); + } }; @@ -1169,6 +1181,24 @@ }; +/** + * optional bool has_farcaster_dcs_token = 4; + * @return {boolean} + */ +proto.identity.auth.Identity.prototype.getHasFarcasterDcsToken = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.identity.auth.Identity} returns this + */ +proto.identity.auth.Identity.prototype.setHasFarcasterDcsToken = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + /** * List of repeated fields within this message type. diff --git a/web/protobufs/identity-auth-structs.cjs.flow b/web/protobufs/identity-auth-structs.cjs.flow --- a/web/protobufs/identity-auth-structs.cjs.flow +++ b/web/protobufs/identity-auth-structs.cjs.flow @@ -47,6 +47,9 @@ hasFarcasterId(): boolean; clearFarcasterId(): Identity; + getHasFarcasterDcsToken(): boolean; + setHasFarcasterDcsToken(value: boolean): Identity; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): IdentityObject; static toObject(includeInstance: boolean, msg: Identity): IdentityObject; @@ -59,6 +62,7 @@ username: string, ethIdentity: ?EthereumIdentityObject, farcasterId: ?string, + hasFarcasterDcsToken: boolean, } declare export class UploadOneTimeKeysRequest extends Message {