public async Task <CacheItem> ExecuteAsync(JwtContainer jwtContainer, CacheItem relatedItem)
        {
            var userData = _jwtService.GetDataFromJwt <UserProfileData>(jwtContainer.Jwt).Data;

            await _recoveryHandler.RemoveConnectionsAsync(userData.PublicKey);

            // TODO: remove? classic flow
            if (!_coreConfiguration.OverwriteFields)
            {
                userData.Profile = null;
            }

            // TODO: code duplication
            var recoveryToken = !string.IsNullOrEmpty(userData.RecoveryData) ? Guid.NewGuid().ToString("N") : null;

            await _recoveryHandler.OnRecoverAsync(userData.DID, new OwnIdConnection
            {
                PublicKey     = userData.PublicKey,
                RecoveryToken = recoveryToken,
                RecoveryData  = userData.RecoveryData,
                AuthType      = relatedItem.AuthCookieType == CookieType.Passcode
                    ? ConnectionAuthType.Passcode
                    : ConnectionAuthType.Basic
            });

            return(await _cacheItemRepository.UpdateAsync(relatedItem.Context, item =>
            {
                item.RecoveryToken = recoveryToken;
                item.RecoveryData = userData.RecoveryData;
                item.FinishFlow(relatedItem.DID, userData.PublicKey);
            }));
        }