Files
n8n-enterprise-unlocked/packages/frontend/editor-ui/src/init.ts

155 lines
4.5 KiB
TypeScript

import { h } from 'vue';
import { useCloudPlanStore } from '@/stores/cloudPlan.store';
import { useNodeTypesStore } from '@/stores/nodeTypes.store';
import { useRootStore } from '@n8n/stores/useRootStore';
import { useSettingsStore } from '@/stores/settings.store';
import { useSourceControlStore } from '@/stores/sourceControl.store';
import { useUsersStore } from '@/stores/users.store';
import { useExternalHooks } from '@/composables/useExternalHooks';
import { useVersionsStore } from '@/stores/versions.store';
import { useProjectsStore } from '@/stores/projects.store';
import { useRolesStore } from './stores/roles.store';
import { useInsightsStore } from '@/features/insights/insights.store';
import { useToast } from '@/composables/useToast';
import { useI18n } from '@n8n/i18n';
import SourceControlInitializationErrorMessage from '@/components/SourceControlInitializationErrorMessage.vue';
import { useSSOStore } from '@/stores/sso.store';
import { EnterpriseEditionFeature } from '@/constants';
import type { UserManagementAuthenticationMethod } from '@/Interface';
import { useUIStore } from '@/stores/ui.store';
import type { BannerName } from '@n8n/api-types';
export const state = {
initialized: false,
};
let authenticatedFeaturesInitialized = false;
/**
* Initializes the core application stores and hooks
* This is called once, when the first route is loaded.
*/
export async function initializeCore() {
if (state.initialized) {
return;
}
const settingsStore = useSettingsStore();
const usersStore = useUsersStore();
const versionsStore = useVersionsStore();
const ssoStore = useSSOStore();
const uiStore = useUIStore();
await settingsStore.initialize();
ssoStore.initialize({
authenticationMethod: settingsStore.userManagement
.authenticationMethod as UserManagementAuthenticationMethod,
config: settingsStore.settings.sso,
features: {
saml: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Saml],
ldap: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Ldap],
oidc: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Oidc],
},
});
const banners: BannerName[] = [];
if (settingsStore.isEnterpriseFeatureEnabled.showNonProdBanner) {
banners.push('NON_PRODUCTION_LICENSE');
}
if (
!(settingsStore.settings.banners?.dismissed || []).includes('V1') &&
settingsStore.settings.versionCli.startsWith('1.')
) {
banners.push('V1');
}
uiStore.initialize({
banners,
});
versionsStore.initialize(settingsStore.settings.versionNotifications);
void useExternalHooks().run('app.mount');
if (!settingsStore.isPreviewMode) {
await usersStore.initialize({
quota: settingsStore.userManagement.quota,
});
void versionsStore.checkForNewVersions();
}
state.initialized = true;
}
/**
* Initializes the features of the application that require an authenticated user
*/
export async function initializeAuthenticatedFeatures(
initialized: boolean = authenticatedFeaturesInitialized,
) {
if (initialized) {
return;
}
const usersStore = useUsersStore();
if (!usersStore.currentUser) {
return;
}
const i18n = useI18n();
const toast = useToast();
const sourceControlStore = useSourceControlStore();
const settingsStore = useSettingsStore();
const rootStore = useRootStore();
const nodeTypesStore = useNodeTypesStore();
const cloudPlanStore = useCloudPlanStore();
const projectsStore = useProjectsStore();
const rolesStore = useRolesStore();
const insightsStore = useInsightsStore();
if (sourceControlStore.isEnterpriseSourceControlEnabled) {
try {
await sourceControlStore.getPreferences();
} catch (e) {
toast.showMessage({
title: i18n.baseText('settings.sourceControl.connection.error'),
message: h(SourceControlInitializationErrorMessage),
type: 'error',
duration: 0,
});
console.error('Failed to initialize source control store', e);
}
}
if (settingsStore.isTemplatesEnabled) {
try {
await settingsStore.testTemplatesEndpoint();
} catch (e) {}
}
if (rootStore.defaultLocale !== 'en') {
await nodeTypesStore.getNodeTranslationHeaders();
}
if (settingsStore.isCloudDeployment) {
try {
await cloudPlanStore.initialize();
} catch (e) {
console.error('Failed to initialize cloud plan store:', e);
}
}
if (insightsStore.isSummaryEnabled) {
void insightsStore.weeklySummary.execute();
}
await Promise.all([
projectsStore.getMyProjects(),
projectsStore.getPersonalProject(),
projectsStore.getProjectsCount(),
rolesStore.fetchRoles(),
]);
authenticatedFeaturesInitialized = true;
}