diff --git a/lib/actions/aux-user-actions.js b/lib/actions/aux-user-actions.js --- a/lib/actions/aux-user-actions.js +++ b/lib/actions/aux-user-actions.js @@ -8,9 +8,12 @@ const setPeerDeviceListsActionType = 'SET_PEER_DEVICE_LISTS'; +const removePeerUsersActionType = 'REMOVE_PEER_USERS'; + export { setAuxUserFIDsActionType, addAuxUserFIDsActionType, clearAuxUserFIDsActionType, setPeerDeviceListsActionType, + removePeerUsersActionType, }; diff --git a/lib/reducers/aux-user-reducer.js b/lib/reducers/aux-user-reducer.js --- a/lib/reducers/aux-user-reducer.js +++ b/lib/reducers/aux-user-reducer.js @@ -4,6 +4,7 @@ setAuxUserFIDsActionType, addAuxUserFIDsActionType, clearAuxUserFIDsActionType, + removePeerUsersActionType, setPeerDeviceListsActionType, } from '../actions/aux-user-actions.js'; import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js'; @@ -182,6 +183,18 @@ }); } + return { + auxUserStore: processStoreOps(state, removeUsersOps), + auxUserStoreOperations: removeUsersOps, + }; + } else if (action.type === removePeerUsersActionType) { + const removeUsersOps: RemoveAuxUserInfosOperation[] = [ + { + type: 'remove_aux_user_infos', + payload: { ids: action.payload.userIDs }, + }, + ]; + return { auxUserStore: processStoreOps(state, removeUsersOps), auxUserStoreOperations: removeUsersOps, diff --git a/lib/reducers/user-reducer.js b/lib/reducers/user-reducer.js --- a/lib/reducers/user-reducer.js +++ b/lib/reducers/user-reducer.js @@ -3,6 +3,7 @@ import _isEqual from 'lodash/fp/isEqual.js'; import _keyBy from 'lodash/fp/keyBy.js'; +import { removePeerUsersActionType } from '../actions/aux-user-actions.js'; import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js'; import { legacySiweAuthActionTypes } from '../actions/siwe-actions.js'; import { @@ -533,6 +534,24 @@ newInconsistencies, userStoreOps, ]; + } else if ( + action.type === removePeerUsersActionType && + !relyingOnAuthoritativeKeyserver + ) { + const userStoreOps: UserStoreOperation[] = [ + { + type: 'remove_users', + payload: { ids: action.payload.userIDs }, + }, + ]; + + return [ + { + userInfos: processUserStoreOps(state.userInfos, userStoreOps), + }, + [], + userStoreOps, + ]; } else if (action.type === updateUserAvatarActionTypes.success) { const newUserInfos = _keyBy(userInfo => userInfo.id)( action.payload.updates.userInfos, diff --git a/lib/tunnelbroker/use-peer-to-peer-message-handler.js b/lib/tunnelbroker/use-peer-to-peer-message-handler.js --- a/lib/tunnelbroker/use-peer-to-peer-message-handler.js +++ b/lib/tunnelbroker/use-peer-to-peer-message-handler.js @@ -4,6 +4,7 @@ import _isEqual from 'lodash/fp/isEqual.js'; import * as React from 'react'; +import { removePeerUsersActionType } from '../actions/aux-user-actions.js'; import { invalidateTunnelbrokerDeviceToken } from '../actions/tunnelbroker-actions.js'; import { logOutActionTypes, useLogOut } from '../actions/user-actions.js'; import { @@ -62,6 +63,7 @@ ); const allPeerDevices = useSelector(getAllPeerDevices); + const dispatch = useDispatch(); const dispatchActionPromise = useDispatchActionPromise(); const primaryDeviceRequestedLogOut = useLogOut(primaryRequestLogoutOptions); @@ -119,7 +121,10 @@ primaryDeviceRequestedLogOut(), ); } else { - // TODO: update peer list + dispatch({ + type: removePeerUsersActionType, + payload: { userIDs: [senderInfo.userID] }, + }); } } else { console.warn( @@ -131,6 +136,7 @@ [ allPeerDevices, broadcastDeviceListUpdates, + dispatch, dispatchActionPromise, getAuthMetadata, identityClient, diff --git a/lib/types/aux-user-types.js b/lib/types/aux-user-types.js --- a/lib/types/aux-user-types.js +++ b/lib/types/aux-user-types.js @@ -27,6 +27,8 @@ +farcasterUsers: $ReadOnlyArray, }; +export type RemovePeerUsersPayload = { +userIDs: $ReadOnlyArray }; + export type SetPeerDeviceListsPayload = { +deviceLists: UsersRawDeviceLists, +usersPlatformDetails: { diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -22,6 +22,7 @@ AuxUserStore, SetAuxUserFIDsPayload, AddAuxUserFIDsPayload, + RemovePeerUsersPayload, SetPeerDeviceListsPayload, } from './aux-user-types.js'; import type { @@ -1439,6 +1440,10 @@ +type: 'CLEAR_AUX_USER_FIDS', +payload?: void, } + | { + +type: 'REMOVE_PEER_USERS', + +payload: RemovePeerUsersPayload, + } | { +type: 'SET_PEER_DEVICE_LISTS', +payload: SetPeerDeviceListsPayload,