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
@@ -22,7 +22,11 @@
   peerToPeerMessageTypes,
   type PeerToPeerMessage,
 } from '../types/tunnelbroker/peer-to-peer-message-types.js';
-import { secondaryDeviceLogoutP2PMessageValidator } from '../types/tunnelbroker/user-actions-peer-to-peer-message-types.js';
+import {
+  userActionsP2PMessageTypes,
+  userActionP2PMessageValidator,
+  type UserActionP2PMessage,
+} from '../types/tunnelbroker/user-actions-peer-to-peer-message-types.js';
 import { getConfig } from '../utils/config.js';
 import { getContentSigningKey } from '../utils/crypto-utils.js';
 import { getMessageForException } from '../utils/errors.js';
@@ -134,22 +138,41 @@
 
           try {
             const parsedMessageToDevice = JSON.parse(decrypted);
+            if (!userActionP2PMessageValidator.is(parsedMessageToDevice)) {
+              return;
+            }
+            const userActionMessage: UserActionP2PMessage =
+              parsedMessageToDevice;
+
             if (
-              !secondaryDeviceLogoutP2PMessageValidator.is(
-                parsedMessageToDevice,
-              )
+              userActionMessage.type ===
+              userActionsP2PMessageTypes.LOG_OUT_PRIMARY_DEVICE
             ) {
-              return;
+              console.log(
+                'Received primary device logout message from',
+                message.senderInfo.deviceID,
+              );
+            } else if (
+              userActionMessage.type ===
+              userActionsP2PMessageTypes.LOG_OUT_SECONDARY_DEVICE
+            ) {
+              const { userID, deviceID: deviceIDToLogOut } = message.senderInfo;
+              await removeDeviceFromDeviceList(
+                identityClient,
+                userID,
+                deviceIDToLogOut,
+              );
+              await broadcastDeviceListUpdates(
+                allPeerDevices.filter(
+                  deviceID => deviceID !== deviceIDToLogOut,
+                ),
+              );
+            } else {
+              console.warn(
+                'Unsupported P2P user action message:',
+                userActionMessage.type,
+              );
             }
-            const { userID, deviceID: deviceIDToLogOut } = message.senderInfo;
-            await removeDeviceFromDeviceList(
-              identityClient,
-              userID,
-              deviceIDToLogOut,
-            );
-            await broadcastDeviceListUpdates(
-              allPeerDevices.filter(deviceID => deviceID !== deviceIDToLogOut),
-            );
           } catch (e) {
             console.log(e);
           }
diff --git a/lib/types/tunnelbroker/user-actions-peer-to-peer-message-types.js b/lib/types/tunnelbroker/user-actions-peer-to-peer-message-types.js
--- a/lib/types/tunnelbroker/user-actions-peer-to-peer-message-types.js
+++ b/lib/types/tunnelbroker/user-actions-peer-to-peer-message-types.js
@@ -1,13 +1,22 @@
 // @flow
 
-import type { TInterface } from 'tcomb';
+import t, { type TInterface, type TUnion } from 'tcomb';
 
 import { tShape, tString } from '../../utils/validation-utils.js';
 
 export const userActionsP2PMessageTypes = Object.freeze({
+  LOG_OUT_PRIMARY_DEVICE: 'LOG_OUT_PRIMARY_DEVICE',
   LOG_OUT_SECONDARY_DEVICE: 'LOG_OUT_SECONDARY_DEVICE',
 });
 
+export type PrimaryDeviceLogoutP2PMessage = {
+  +type: 'LOG_OUT_PRIMARY_DEVICE',
+};
+export const primaryDeviceLogoutP2PMessageValidator: TInterface<PrimaryDeviceLogoutP2PMessage> =
+  tShape<PrimaryDeviceLogoutP2PMessage>({
+    type: tString(userActionsP2PMessageTypes.LOG_OUT_PRIMARY_DEVICE),
+  });
+
 export type SecondaryDeviceLogoutP2PMessage = {
   +type: 'LOG_OUT_SECONDARY_DEVICE',
   // there is `senderID` so we don't have to add deviceID here
@@ -17,7 +26,12 @@
     type: tString(userActionsP2PMessageTypes.LOG_OUT_SECONDARY_DEVICE),
   });
 
-export type UserActionP2PMessage = SecondaryDeviceLogoutP2PMessage;
+export type UserActionP2PMessage =
+  | PrimaryDeviceLogoutP2PMessage
+  | SecondaryDeviceLogoutP2PMessage;
 
-export const userActionP2PMessageValidator: TInterface<UserActionP2PMessage> =
-  secondaryDeviceLogoutP2PMessageValidator;
+export const userActionP2PMessageValidator: TUnion<UserActionP2PMessage> =
+  t.union([
+    primaryDeviceLogoutP2PMessageValidator,
+    secondaryDeviceLogoutP2PMessageValidator,
+  ]);