diff --git a/lib/shared/device-list-utils.js b/lib/shared/device-list-utils.js --- a/lib/shared/device-list-utils.js +++ b/lib/shared/device-list-utils.js @@ -124,7 +124,7 @@ return { valid: true, deviceList }; } -async function createAndSignInitialDeviceList( +async function createAndSignSingletonDeviceList( primaryDeviceID: string, ): Promise { const initialDeviceList = composeRawDeviceList([primaryDeviceID]); @@ -220,7 +220,7 @@ export { verifyAndGetDeviceList, - createAndSignInitialDeviceList, + createAndSignSingletonDeviceList, fetchLatestDeviceList, addDeviceToDeviceList, removeDeviceFromDeviceList, diff --git a/lib/shared/device-list-utils.test.js b/lib/shared/device-list-utils.test.js --- a/lib/shared/device-list-utils.test.js +++ b/lib/shared/device-list-utils.test.js @@ -1,7 +1,7 @@ // @flow import { - createAndSignInitialDeviceList, + createAndSignSingletonDeviceList, verifyAndGetDeviceList, addDeviceToDeviceList, removeDeviceFromDeviceList, @@ -152,14 +152,14 @@ }); }); -describe(createAndSignInitialDeviceList, () => { +describe(createAndSignSingletonDeviceList, () => { it('creates initial device list', async () => { const signMessage = jest .fn<[string], string>() .mockResolvedValue('mock_signature'); mockOlmAPISign(signMessage); - const payload = await createAndSignInitialDeviceList('device1'); + const payload = await createAndSignSingletonDeviceList('device1'); expect(payload.curPrimarySignature).toStrictEqual('mock_signature'); const raw = rawDeviceListFromSignedList(payload); 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 @@ -124,6 +124,9 @@ // primary device +deletePasswordUser?: (password: string) => Promise; +logOut: () => Promise; + // This log out type is specific to primary device, and web cannot be a + // primary device + +logOutPrimaryDevice?: () => Promise; +logOutSecondaryDevice: () => Promise; +getKeyserverKeys: string => Promise; // Users cannot register from web diff --git a/native/identity-service/identity-service-context-provider.react.js b/native/identity-service/identity-service-context-provider.react.js --- a/native/identity-service/identity-service-context-provider.react.js +++ b/native/identity-service/identity-service-context-provider.react.js @@ -3,7 +3,7 @@ import * as React from 'react'; import { getOneTimeKeyValues } from 'lib/shared/crypto-utils.js'; -import { createAndSignInitialDeviceList } from 'lib/shared/device-list-utils.js'; +import { createAndSignSingletonDeviceList } from 'lib/shared/device-list-utils.js'; import { IdentityClientContext } from 'lib/shared/identity-client-context.js'; import { type IdentityKeysBlob, @@ -133,6 +133,21 @@ } = await getAuthMetadata(); return commRustModule.logOut(userID, deviceID, token); }, + logOutPrimaryDevice: async () => { + const { + deviceID, + userID, + accessToken: token, + } = await getAuthMetadata(); + const signedDeviceList = + await createAndSignSingletonDeviceList(deviceID); + return commRustModule.logOutPrimaryDevice( + userID, + deviceID, + token, + JSON.stringify(signedDeviceList), + ); + }, logOutSecondaryDevice: async () => { const { deviceID, @@ -339,7 +354,7 @@ commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER), commCoreModule.validateAndGetPrekeys(), ]); - const initialDeviceList = await createAndSignInitialDeviceList( + const initialDeviceList = await createAndSignSingletonDeviceList( primaryIdentityPublicKeys.ed25519, ); const registrationResult = await commRustModule.registerPasswordUser( @@ -378,7 +393,7 @@ commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER), commCoreModule.validateAndGetPrekeys(), ]); - const initialDeviceList = await createAndSignInitialDeviceList( + const initialDeviceList = await createAndSignSingletonDeviceList( primaryIdentityPublicKeys.ed25519, ); const registrationResult = @@ -442,7 +457,7 @@ commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER), commCoreModule.validateAndGetPrekeys(), ]); - const initialDeviceList = await createAndSignInitialDeviceList( + const initialDeviceList = await createAndSignSingletonDeviceList( primaryIdentityPublicKeys.ed25519, ); const registrationResult = await commRustModule.registerWalletUser(