Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: remove the option to trigger transition from the UI #2489

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -13,8 +13,6 @@ import {
MfaServiceInterface,
GenerateUuid,
CreateDecryptedBackupFile,
GetTransitionStatus,
StartTransition,
} from '@standardnotes/services'
import { VaultLockServiceInterface } from './../VaultLock/VaultLockServiceInterface'
import { HistoryServiceInterface } from './../History/HistoryServiceInterface'
Expand Down Expand Up @@ -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
Expand Down
@@ -1,5 +1,4 @@
export enum InternalFeature {
Vaults = 'vaults',
HomeServer = 'home-server',
Transition = 'transition',
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions packages/services/src/Domain/index.ts
Expand Up @@ -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'
Expand Down
10 changes: 0 additions & 10 deletions packages/snjs/lib/Application/Application.ts
Expand Up @@ -80,8 +80,6 @@ import {
GenerateUuid,
CreateDecryptedBackupFile,
CreateEncryptedBackupFile,
GetTransitionStatus,
StartTransition,
WebSocketsService,
} from '@standardnotes/services'
import {
Expand Down Expand Up @@ -1140,14 +1138,6 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli
return this.dependencies.get<SetHost>(TYPES.SetHost)
}

get getTransitionStatus(): GetTransitionStatus {
return this.dependencies.get<GetTransitionStatus>(TYPES.GetTransitionStatus)
}

get startTransition(): StartTransition {
return this.dependencies.get<StartTransition>(TYPES.StartTransition)
}

public get legacyApi(): LegacyApiService {
return this.dependencies.get<LegacyApiService>(TYPES.LegacyApiService)
}
Expand Down
11 changes: 0 additions & 11 deletions packages/snjs/lib/Application/Dependencies/Dependencies.ts
Expand Up @@ -140,8 +140,6 @@ import {
CreateDecryptedBackupFile,
CreateEncryptedBackupFile,
SyncLocalVaultsWithRemoteSharedVaults,
GetTransitionStatus,
StartTransition,
WebSocketsService,
} from '@standardnotes/services'
import { ItemManager } from '../../Services/Items/ItemManager'
Expand All @@ -155,7 +153,6 @@ import {
AuthenticatorApiService,
AuthenticatorServer,
HttpService,
HttpServiceInterface,
RevisionApiService,
RevisionServer,
SharedVaultInvitesServer,
Expand Down Expand Up @@ -1027,14 +1024,6 @@ export class Dependencies {
)
})

this.factory.set(TYPES.GetTransitionStatus, () => {
return new GetTransitionStatus(this.get<HttpServiceInterface>(TYPES.HttpService))
})

this.factory.set(TYPES.StartTransition, () => {
return new StartTransition(this.get<HttpServiceInterface>(TYPES.HttpService))
})

this.factory.set(TYPES.ListRevisions, () => {
return new ListRevisions(this.get<RevisionManager>(TYPES.RevisionManager))
})
Expand Down
2 changes: 0 additions & 2 deletions packages/snjs/lib/Application/Dependencies/Types.ts
Expand Up @@ -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'),
Expand Down
4 changes: 0 additions & 4 deletions packages/snjs/mocha/lib/factory.js
Expand Up @@ -245,16 +245,13 @@ export async function awaitFunctionInvokation(object, functionName) {
})
}

export const ServerTransitionDelay = 1.5

/**
* Signing out of an application deinits it.
* A new one must be created.
*/
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 {
Expand All @@ -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,
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/javascripts/Application/DevMode.ts
Expand Up @@ -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 */
Expand Down
@@ -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'
Expand All @@ -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<Props> = ({ 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<NodeJS.Timer | null>(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)

Expand All @@ -101,19 +33,6 @@ const Sync: FunctionComponent<Props> = ({ 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 (
<PreferencesGroup>
<PreferencesSegment>
Expand All @@ -132,35 +51,6 @@ const Sync: FunctionComponent<Props> = ({ application }: Props) => {
</div>
</div>
</PreferencesSegment>
{showTransitionSegment && (
<>
<HorizontalSeparator classes="my-4" />
<PreferencesSegment>
<div className="flex flex-row items-center">
<div className="flex flex-grow flex-col">
<Title>Transition Account</Title>
<Text>
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.
</Text>
{isTransitionInProgress && (
<Text>
<span className="font-bold">Transition status:</span> {transitionStatus}
</Text>
)}
{!isTransitionInProgress && (
<Button
className="mt-3 min-w-20"
label="Start transition"
disabled={isTransitionInProgress}
onClick={doTransition}
/>
)}
</div>
</div>
</PreferencesSegment>
</>
)}
</PreferencesGroup>
)
}
Expand Down
4 changes: 0 additions & 4 deletions packages/web/src/javascripts/FeatureTrunk.ts
Expand Up @@ -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)
}