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 @@ -327,13 +327,23 @@ export const identityDeviceTypeToPlatform: { +[identityDeviceType: IdentityDeviceType]: Platform, -} = { +} = Object.freeze({ [identityDeviceTypes.WEB]: 'web', [identityDeviceTypes.ANDROID]: 'android', [identityDeviceTypes.IOS]: 'ios', [identityDeviceTypes.WINDOWS]: 'windows', [identityDeviceTypes.MAC_OS]: 'macos', -}; +}); + +export const platformToIdentityDeviceType: { + +[platform: Platform]: IdentityDeviceType, +} = Object.freeze({ + web: identityDeviceTypes.WEB, + android: identityDeviceTypes.ANDROID, + ios: identityDeviceTypes.IOS, + windows: identityDeviceTypes.WINDOWS, + macos: identityDeviceTypes.MAC_OS, +}); export const identityDeviceTypeValidator: TEnums = t.enums.of( values(identityDeviceTypes), 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 @@ -20,7 +20,6 @@ type IdentityAuthResult, type IdentityNewDeviceKeyUpload, type IdentityExistingDeviceKeyUpload, - identityDeviceTypes, identityAuthResultValidator, type UserDevicesOlmInboundKeys, type DeviceOlmInboundKeys, @@ -34,6 +33,7 @@ type PeersDeviceLists, peersDeviceListsValidator, type IdentityPlatformDetails, + platformToIdentityDeviceType, } from 'lib/types/identity-service-types.js'; import { getMessageForException } from 'lib/utils/errors.js'; import { assertWithValidator } from 'lib/utils/validation-utils.js'; @@ -58,6 +58,7 @@ class IdentityServiceClientWrapper implements IdentityServiceClient { overridedOpaqueFilepath: string; + platformDetails: PlatformDetails; authClient: ?IdentityAuthClient.IdentityClientServicePromiseClient; unauthClient: IdentityUnauthClient.IdentityClientServicePromiseClient; getNewDeviceKeyUpload: () => Promise; @@ -71,6 +72,7 @@ getExistingDeviceKeyUpload: () => Promise, ) { this.overridedOpaqueFilepath = overridedOpaqueFilepath; + this.platformDetails = platformDetails; if (authLayer) { this.authClient = IdentityServiceClientWrapper.createAuthClient( platformDetails, @@ -356,6 +358,7 @@ const startRequestBytes = opaqueLogin.start(password); const deviceKeyUpload = authExistingDeviceKeyUpload( + this.platformDetails, identityDeviceKeyUpload, ); @@ -418,6 +421,7 @@ ) => { const identityDeviceKeyUpload = await this.getExistingDeviceKeyUpload(); const deviceKeyUpload = authExistingDeviceKeyUpload( + this.platformDetails, identityDeviceKeyUpload, ); @@ -453,7 +457,10 @@ nonceChallengeResponse, ) => { const identityDeviceKeyUpload = await this.getNewDeviceKeyUpload(); - const deviceKeyUpload = authNewDeviceKeyUpload(identityDeviceKeyUpload); + const deviceKeyUpload = authNewDeviceKeyUpload( + this.platformDetails, + identityDeviceKeyUpload, + ); const { nonce, nonceSignature } = nonceChallengeResponse; const request = new SecondaryDeviceKeysUploadRequest(); @@ -750,6 +757,7 @@ } function authNewDeviceKeyUpload( + platformDetails: PlatformDetails, uploadData: IdentityNewDeviceKeyUpload, ): DeviceKeyUpload { const { @@ -776,6 +784,7 @@ const notifPrekeyUpload = createPrekey(notifPrekey, notifPrekeySignature); const deviceKeyUpload = createDeviceKeyUpload( + platformDetails, identityKeyInfo, contentPrekeyUpload, notifPrekeyUpload, @@ -787,6 +796,7 @@ } function authExistingDeviceKeyUpload( + platformDetails: PlatformDetails, uploadData: IdentityExistingDeviceKeyUpload, ): DeviceKeyUpload { const { @@ -811,6 +821,7 @@ const notifPrekeyUpload = createPrekey(notifPrekey, notifPrekeySignature); const deviceKeyUpload = createDeviceKeyUpload( + platformDetails, identityKeyInfo, contentPrekeyUpload, notifPrekeyUpload, @@ -837,6 +848,7 @@ } function createDeviceKeyUpload( + platformDetails: PlatformDetails, identityKeyInfo: IdentityKeyInfo, contentPrekeyUpload: Prekey, notifPrekeyUpload: Prekey, @@ -849,7 +861,9 @@ deviceKeyUpload.setNotifUpload(notifPrekeyUpload); deviceKeyUpload.setOneTimeContentPrekeysList([...contentOneTimeKeys]); deviceKeyUpload.setOneTimeNotifPrekeysList([...notifOneTimeKeys]); - deviceKeyUpload.setDeviceType(identityDeviceTypes.WEB); + deviceKeyUpload.setDeviceType( + platformToIdentityDeviceType[platformDetails.platform], + ); return deviceKeyUpload; } diff --git a/web/grpc/interceptor.js b/web/grpc/interceptor.js --- a/web/grpc/interceptor.js +++ b/web/grpc/interceptor.js @@ -33,7 +33,14 @@ if (majorDesktopVersion) { metadata['major_desktop_version'] = majorDesktopVersion.toString(); } - metadata['device_type'] = deviceType; + + let identityDeviceType; + if (deviceType === 'macos') { + identityDeviceType = 'mac_os'; + } else { + identityDeviceType = deviceType; + } + metadata['device_type'] = identityDeviceType; return invoker(request); }