From d6a3e69d8cf0185f8f56b96ec065219e22190e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Tue, 12 Sep 2023 09:25:05 +0200 Subject: [PATCH] chore: remove the option to trigger transition from the UI (#2489) --- .../Application/ApplicationInterface.ts | 4 - .../InternalFeatures/InternalFeature.ts | 1 - .../GetTransitionStatus.spec.ts | 34 ------ .../GetTransitionStatus.ts | 17 --- .../StartTransition/StartTransition.spec.ts | 33 ------ .../StartTransition/StartTransition.ts | 17 --- packages/services/src/Domain/index.ts | 2 - packages/snjs/lib/Application/Application.ts | 10 -- .../Application/Dependencies/Dependencies.ts | 11 -- .../lib/Application/Dependencies/Types.ts | 2 - packages/snjs/mocha/lib/factory.js | 4 - .../src/javascripts/Application/DevMode.ts | 1 - .../Preferences/Panes/Account/Sync.tsx | 112 +----------------- packages/web/src/javascripts/FeatureTrunk.ts | 4 - 14 files changed, 1 insertion(+), 251 deletions(-) delete mode 100644 packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.spec.ts delete mode 100644 packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.ts delete mode 100644 packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.spec.ts delete mode 100644 packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.ts diff --git a/packages/services/src/Domain/Application/ApplicationInterface.ts b/packages/services/src/Domain/Application/ApplicationInterface.ts index b5ef604da..28c145686 100644 --- a/packages/services/src/Domain/Application/ApplicationInterface.ts +++ b/packages/services/src/Domain/Application/ApplicationInterface.ts @@ -13,8 +13,6 @@ import { MfaServiceInterface, GenerateUuid, CreateDecryptedBackupFile, - GetTransitionStatus, - StartTransition, } from '@standardnotes/services' import { VaultLockServiceInterface } from './../VaultLock/VaultLockServiceInterface' import { HistoryServiceInterface } from './../History/HistoryServiceInterface' @@ -78,8 +76,6 @@ export interface ApplicationInterface { get generateUuid(): GenerateUuid get getHost(): GetHost get setHost(): SetHost - get getTransitionStatus(): GetTransitionStatus - get startTransition(): StartTransition // Services get alerts(): AlertService diff --git a/packages/services/src/Domain/InternalFeatures/InternalFeature.ts b/packages/services/src/Domain/InternalFeatures/InternalFeature.ts index 7da14d61f..817c91961 100644 --- a/packages/services/src/Domain/InternalFeatures/InternalFeature.ts +++ b/packages/services/src/Domain/InternalFeatures/InternalFeature.ts @@ -1,5 +1,4 @@ export enum InternalFeature { Vaults = 'vaults', HomeServer = 'home-server', - Transition = 'transition', } diff --git a/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.spec.ts b/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.spec.ts deleted file mode 100644 index 4e24f1bb5..000000000 --- a/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { HttpServiceInterface } from '@standardnotes/api' - -import { GetTransitionStatus } from './GetTransitionStatus' - -describe('GetTransitionStatus', () => { - let httpService: HttpServiceInterface - - const createUseCase = () => new GetTransitionStatus(httpService) - - beforeEach(() => { - httpService = { - get: jest.fn(), - } as unknown as HttpServiceInterface - }) - - it('should get transition status', async () => { - const useCase = createUseCase() - ;(httpService.get as jest.Mock).mockResolvedValueOnce({ status: 200, data: { status: 'TO-DO' } }) - - const result = await useCase.execute() - - expect(result.isFailed()).toBe(false) - expect(result.getValue()).toBe('TO-DO') - }) - - it('should fail to get transition status', async () => { - const useCase = createUseCase() - ;(httpService.get as jest.Mock).mockResolvedValueOnce({ status: 400 }) - - const result = await useCase.execute() - - expect(result.isFailed()).toBe(true) - }) -}) diff --git a/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.ts b/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.ts deleted file mode 100644 index 9c85683df..000000000 --- a/packages/services/src/Domain/UseCase/Transition/GetTransitionStatus/GetTransitionStatus.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Result, UseCaseInterface } from '@standardnotes/domain-core' -import { HttpServiceInterface } from '@standardnotes/api' -import { HttpStatusCode } from '@standardnotes/responses' - -export class GetTransitionStatus implements UseCaseInterface<'TO-DO' | 'STARTED' | 'FINISHED' | 'FAILED'> { - constructor(private httpService: HttpServiceInterface) {} - - async execute(): Promise> { - const response = await this.httpService.get('/v1/users/transition-status') - - if (response.status !== HttpStatusCode.Success) { - return Result.fail('Failed to get transition status') - } - - return Result.ok((response.data as { status: 'TO-DO' | 'STARTED' | 'FINISHED' | 'FAILED' }).status) - } -} diff --git a/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.spec.ts b/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.spec.ts deleted file mode 100644 index 8493c4003..000000000 --- a/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.spec.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { HttpServiceInterface } from '@standardnotes/api' - -import { StartTransition } from './StartTransition' - -describe('StartTransition', () => { - let httpService: HttpServiceInterface - - const createUseCase = () => new StartTransition(httpService) - - beforeEach(() => { - httpService = { - post: jest.fn(), - } as unknown as HttpServiceInterface - }) - - it('should start transition', async () => { - const useCase = createUseCase() - ;(httpService.post as jest.Mock).mockResolvedValueOnce({ status: 200 }) - - const result = await useCase.execute() - - expect(result.isFailed()).toBe(false) - }) - - it('should fail to start transition', async () => { - const useCase = createUseCase() - ;(httpService.post as jest.Mock).mockResolvedValueOnce({ status: 400 }) - - const result = await useCase.execute() - - expect(result.isFailed()).toBe(true) - }) -}) diff --git a/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.ts b/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.ts deleted file mode 100644 index ab5b5c4f3..000000000 --- a/packages/services/src/Domain/UseCase/Transition/StartTransition/StartTransition.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { HttpServiceInterface } from '@standardnotes/api' -import { Result, UseCaseInterface } from '@standardnotes/domain-core' -import { HttpStatusCode } from '@standardnotes/responses' - -export class StartTransition implements UseCaseInterface { - constructor(private httpService: HttpServiceInterface) {} - - async execute(): Promise> { - const response = await this.httpService.post('/v1/items/transition') - - if (response.status !== HttpStatusCode.Success) { - return Result.fail('Failed to start transition') - } - - return Result.ok() - } -} diff --git a/packages/services/src/Domain/index.ts b/packages/services/src/Domain/index.ts index d738d6195..7fa5380db 100644 --- a/packages/services/src/Domain/index.ts +++ b/packages/services/src/Domain/index.ts @@ -187,8 +187,6 @@ export * from './Sync/SyncOptions' export * from './Sync/SyncQueueStrategy' export * from './Sync/SyncServiceInterface' export * from './Sync/SyncSource' -export * from './UseCase/Transition/GetTransitionStatus/GetTransitionStatus' -export * from './UseCase/Transition/StartTransition/StartTransition' export * from './UseCase/ChangeAndSaveItem' export * from './UseCase/DiscardItemsLocally' export * from './UseCase/GenerateUuid' diff --git a/packages/snjs/lib/Application/Application.ts b/packages/snjs/lib/Application/Application.ts index d6062cf2a..8abfe211c 100644 --- a/packages/snjs/lib/Application/Application.ts +++ b/packages/snjs/lib/Application/Application.ts @@ -80,8 +80,6 @@ import { GenerateUuid, CreateDecryptedBackupFile, CreateEncryptedBackupFile, - GetTransitionStatus, - StartTransition, WebSocketsService, } from '@standardnotes/services' import { @@ -1140,14 +1138,6 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli return this.dependencies.get(TYPES.SetHost) } - get getTransitionStatus(): GetTransitionStatus { - return this.dependencies.get(TYPES.GetTransitionStatus) - } - - get startTransition(): StartTransition { - return this.dependencies.get(TYPES.StartTransition) - } - public get legacyApi(): LegacyApiService { return this.dependencies.get(TYPES.LegacyApiService) } diff --git a/packages/snjs/lib/Application/Dependencies/Dependencies.ts b/packages/snjs/lib/Application/Dependencies/Dependencies.ts index 1de484c48..022de1042 100644 --- a/packages/snjs/lib/Application/Dependencies/Dependencies.ts +++ b/packages/snjs/lib/Application/Dependencies/Dependencies.ts @@ -140,8 +140,6 @@ import { CreateDecryptedBackupFile, CreateEncryptedBackupFile, SyncLocalVaultsWithRemoteSharedVaults, - GetTransitionStatus, - StartTransition, WebSocketsService, } from '@standardnotes/services' import { ItemManager } from '../../Services/Items/ItemManager' @@ -155,7 +153,6 @@ import { AuthenticatorApiService, AuthenticatorServer, HttpService, - HttpServiceInterface, RevisionApiService, RevisionServer, SharedVaultInvitesServer, @@ -1027,14 +1024,6 @@ export class Dependencies { ) }) - this.factory.set(TYPES.GetTransitionStatus, () => { - return new GetTransitionStatus(this.get(TYPES.HttpService)) - }) - - this.factory.set(TYPES.StartTransition, () => { - return new StartTransition(this.get(TYPES.HttpService)) - }) - this.factory.set(TYPES.ListRevisions, () => { return new ListRevisions(this.get(TYPES.RevisionManager)) }) diff --git a/packages/snjs/lib/Application/Dependencies/Types.ts b/packages/snjs/lib/Application/Dependencies/Types.ts index e9a93f3f7..e145da9c9 100644 --- a/packages/snjs/lib/Application/Dependencies/Types.ts +++ b/packages/snjs/lib/Application/Dependencies/Types.ts @@ -171,8 +171,6 @@ export const TYPES = { AuthorizeVaultDeletion: Symbol.for('AuthorizeVaultDeletion'), CreateDecryptedBackupFile: Symbol.for('CreateDecryptedBackupFile'), CreateEncryptedBackupFile: Symbol.for('CreateEncryptedBackupFile'), - GetTransitionStatus: Symbol.for('GetTransitionStatus'), - StartTransition: Symbol.for('StartTransition'), // Mappers SessionStorageMapper: Symbol.for('SessionStorageMapper'), diff --git a/packages/snjs/mocha/lib/factory.js b/packages/snjs/mocha/lib/factory.js index 6d76fd45b..5d4e919fd 100644 --- a/packages/snjs/mocha/lib/factory.js +++ b/packages/snjs/mocha/lib/factory.js @@ -245,8 +245,6 @@ export async function awaitFunctionInvokation(object, functionName) { }) } -export const ServerTransitionDelay = 1.5 - /** * Signing out of an application deinits it. * A new one must be created. @@ -254,7 +252,6 @@ export const ServerTransitionDelay = 1.5 export async function signOutApplicationAndReturnNew(application) { const isRealCrypto = application.crypto instanceof SNWebCrypto await application.user.signOut() - await sleep(ServerTransitionDelay, 'transition triggered during sign out') if (isRealCrypto) { return createInitAppWithRealCrypto() } else { @@ -265,7 +262,6 @@ export async function signOutApplicationAndReturnNew(application) { export async function signOutAndBackIn(application, email, password) { const isRealCrypto = application.crypto instanceof SNWebCrypto await application.user.signOut() - await sleep(ServerTransitionDelay, 'transition triggered during sign out') const newApplication = isRealCrypto ? await createInitAppWithRealCrypto() : await createInitAppWithFakeCrypto() await this.loginToApplication({ application: newApplication, diff --git a/packages/web/src/javascripts/Application/DevMode.ts b/packages/web/src/javascripts/Application/DevMode.ts index 536e25c18..f62fc7711 100644 --- a/packages/web/src/javascripts/Application/DevMode.ts +++ b/packages/web/src/javascripts/Application/DevMode.ts @@ -5,7 +5,6 @@ export class DevMode { constructor(private application: WebApplicationInterface) { InternalFeatureService.get().enableFeature(InternalFeature.Vaults) InternalFeatureService.get().enableFeature(InternalFeature.HomeServer) - InternalFeatureService.get().enableFeature(InternalFeature.Transition) } /** Valid only when running a mock event publisher on port 3124 */ diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Sync.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Sync.tsx index 3e816f093..4c15753ea 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Sync.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Sync.tsx @@ -1,4 +1,4 @@ -import { FunctionComponent, useCallback, useEffect, useState } from 'react' +import { FunctionComponent, useState } from 'react' import { observer } from 'mobx-react-lite' import { Text, Title } from '@/Components/Preferences/PreferencesComponents/Content' @@ -9,83 +9,15 @@ import { WebApplication } from '@/Application/WebApplication' import { formatLastSyncDate } from '@/Utils/DateUtils' import PreferencesGroup from '../../PreferencesComponents/PreferencesGroup' import PreferencesSegment from '../../PreferencesComponents/PreferencesSegment' -import HorizontalSeparator from '@/Components/Shared/HorizontalSeparator' -import { featureTrunkTransitionEnabled } from '@/FeatureTrunk' type Props = { application: WebApplication } const Sync: FunctionComponent = ({ application }: Props) => { - const TRANSITION_STATUS_REFRESH_INTERVAL = 5000 - const [isSyncingInProgress, setIsSyncingInProgress] = useState(false) - const [isTransitionInProgress, setIsTransitionInProgress] = useState(false) - const [showTransitionSegment, setShowTransitionSegment] = useState(false) - const [transitionStatus, setTransitionStatus] = useState('') - const [transitionStatusIntervalRef, setTransitionStatusIntervalRef] = useState(null) const [lastSyncDate, setLastSyncDate] = useState(formatLastSyncDate(application.sync.getLastSyncDate() as Date)) - const setupTransitionStatusRefresh = useCallback(async () => { - const interval = setInterval(async () => { - const statusOrError = await application.getTransitionStatus.execute() - if (statusOrError.isFailed()) { - await application.alerts.alert(statusOrError.getError()) - return - } - const status = statusOrError.getValue() - - setTransitionStatus(status) - }, TRANSITION_STATUS_REFRESH_INTERVAL) - - setTransitionStatusIntervalRef(interval) - }, [application, setTransitionStatus, setTransitionStatusIntervalRef]) - - useEffect(() => { - if (!featureTrunkTransitionEnabled()) { - return - } - - async function checkTransitionStatus() { - const statusOrError = await application.getTransitionStatus.execute() - if (statusOrError.isFailed()) { - await application.alerts.alert(statusOrError.getError()) - return - } - const status = statusOrError.getValue() - - if (status === 'FINISHED') { - if (transitionStatusIntervalRef) { - clearInterval(transitionStatusIntervalRef) - } - setIsTransitionInProgress(false) - setTransitionStatus(status) - setShowTransitionSegment(false) - - return - } - - setShowTransitionSegment(true) - setTransitionStatus(status) - - if (status === 'STARTED') { - setIsTransitionInProgress(true) - if (!transitionStatusIntervalRef) { - await setupTransitionStatusRefresh() - } - } - } - - void checkTransitionStatus() - }, [ - application, - setIsTransitionInProgress, - setTransitionStatus, - setShowTransitionSegment, - setupTransitionStatusRefresh, - transitionStatusIntervalRef, - ]) - const doSynchronization = async () => { setIsSyncingInProgress(true) @@ -101,19 +33,6 @@ const Sync: FunctionComponent = ({ application }: Props) => { } } - const doTransition = useCallback(async () => { - const resultOrError = await application.startTransition.execute() - if (resultOrError.isFailed()) { - await application.alerts.alert(resultOrError.getError()) - - return - } - - setIsTransitionInProgress(true) - - await setupTransitionStatusRefresh() - }, [application, setupTransitionStatusRefresh]) - return ( @@ -132,35 +51,6 @@ const Sync: FunctionComponent = ({ application }: Props) => { - {showTransitionSegment && ( - <> - - -
-
- Transition Account - - Transition your account to our new infrastructure in order to enable new features and improve your - overall experience. Depending on the amount of data you have, this process may take a few moments. - - {isTransitionInProgress && ( - - Transition status: {transitionStatus} - - )} - {!isTransitionInProgress && ( -
-
-
- - )}
) } diff --git a/packages/web/src/javascripts/FeatureTrunk.ts b/packages/web/src/javascripts/FeatureTrunk.ts index d8695a42b..515d29b86 100644 --- a/packages/web/src/javascripts/FeatureTrunk.ts +++ b/packages/web/src/javascripts/FeatureTrunk.ts @@ -15,7 +15,3 @@ export function featureTrunkVaultsEnabled(): boolean { export function featureTrunkHomeServerEnabled(): boolean { return InternalFeatureService.get().isFeatureEnabled(InternalFeature.HomeServer) } - -export function featureTrunkTransitionEnabled(): boolean { - return InternalFeatureService.get().isFeatureEnabled(InternalFeature.Transition) -}