mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
refactor(editor): Migrate versions api to @n8n/rest-client-api (no-changelog) (#16147)
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
export * from './browser';
|
export * from './browser';
|
||||||
|
export * from './instance';
|
||||||
|
|
||||||
export const LICENSE_FEATURES = {
|
export const LICENSE_FEATURES = {
|
||||||
SHARING: 'feat:sharing',
|
SHARING: 'feat:sharing',
|
||||||
@@ -96,9 +97,3 @@ export const LDAP_DEFAULT_CONFIGURATION: LdapConfig = {
|
|||||||
searchPageSize: 0,
|
searchPageSize: 0,
|
||||||
searchTimeout: 60,
|
searchTimeout: 60,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const INSTANCE_TYPES = ['main', 'webhook', 'worker'] as const;
|
|
||||||
export type InstanceType = (typeof INSTANCE_TYPES)[number];
|
|
||||||
|
|
||||||
export const INSTANCE_ROLES = ['unset', 'leader', 'follower'] as const;
|
|
||||||
export type InstanceRole = (typeof INSTANCE_ROLES)[number];
|
|
||||||
|
|||||||
7
packages/@n8n/constants/src/instance.ts
Normal file
7
packages/@n8n/constants/src/instance.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export const INSTANCE_ID_HEADER = 'n8n-instance-id';
|
||||||
|
|
||||||
|
export const INSTANCE_TYPES = ['main', 'webhook', 'worker'] as const;
|
||||||
|
export type InstanceType = (typeof INSTANCE_TYPES)[number];
|
||||||
|
|
||||||
|
export const INSTANCE_ROLES = ['unset', 'leader', 'follower'] as const;
|
||||||
|
export type InstanceRole = (typeof INSTANCE_ROLES)[number];
|
||||||
@@ -10,4 +10,5 @@ export * from './orchestration';
|
|||||||
export * from './roles';
|
export * from './roles';
|
||||||
export * from './sso';
|
export * from './sso';
|
||||||
export * from './ui';
|
export * from './ui';
|
||||||
|
export * from './versions';
|
||||||
export * from './webhooks';
|
export * from './webhooks';
|
||||||
|
|||||||
39
packages/frontend/@n8n/rest-api-client/src/api/versions.ts
Normal file
39
packages/frontend/@n8n/rest-api-client/src/api/versions.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { INSTANCE_ID_HEADER } from '@n8n/constants';
|
||||||
|
import type { INodeParameters } from 'n8n-workflow';
|
||||||
|
|
||||||
|
import { get } from '../utils';
|
||||||
|
|
||||||
|
export interface VersionNode {
|
||||||
|
name: string;
|
||||||
|
displayName: string;
|
||||||
|
icon: string;
|
||||||
|
iconUrl?: string;
|
||||||
|
defaults: INodeParameters;
|
||||||
|
iconData: {
|
||||||
|
type: string;
|
||||||
|
icon?: string;
|
||||||
|
fileBuffer?: string;
|
||||||
|
};
|
||||||
|
typeVersion?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Version {
|
||||||
|
name: string;
|
||||||
|
nodes: VersionNode[];
|
||||||
|
createdAt: string;
|
||||||
|
description: string;
|
||||||
|
documentationUrl: string;
|
||||||
|
hasBreakingChange: boolean;
|
||||||
|
hasSecurityFix: boolean;
|
||||||
|
hasSecurityIssue: boolean;
|
||||||
|
securityIssueFixVersion: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getNextVersions(
|
||||||
|
endpoint: string,
|
||||||
|
version: string,
|
||||||
|
instanceId: string,
|
||||||
|
): Promise<Version[]> {
|
||||||
|
const headers = { [INSTANCE_ID_HEADER as string]: instanceId };
|
||||||
|
return await get(endpoint, version, {}, headers);
|
||||||
|
}
|
||||||
@@ -45,6 +45,7 @@ import type {
|
|||||||
ITaskData,
|
ITaskData,
|
||||||
ISourceData,
|
ISourceData,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
import type { Version, VersionNode } from '@n8n/rest-api-client/api/versions';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
AI_NODE_CREATOR_VIEW,
|
AI_NODE_CREATOR_VIEW,
|
||||||
@@ -900,33 +901,7 @@ export interface ITagRow {
|
|||||||
canDelete?: boolean;
|
canDelete?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IVersion {
|
export interface ITemplatesNode extends VersionNode {
|
||||||
name: string;
|
|
||||||
nodes: IVersionNode[];
|
|
||||||
createdAt: string;
|
|
||||||
description: string;
|
|
||||||
documentationUrl: string;
|
|
||||||
hasBreakingChange: boolean;
|
|
||||||
hasSecurityFix: boolean;
|
|
||||||
hasSecurityIssue: boolean;
|
|
||||||
securityIssueFixVersion: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IVersionNode {
|
|
||||||
name: string;
|
|
||||||
displayName: string;
|
|
||||||
icon: string;
|
|
||||||
iconUrl?: string;
|
|
||||||
defaults: INodeParameters;
|
|
||||||
iconData: {
|
|
||||||
type: string;
|
|
||||||
icon?: string;
|
|
||||||
fileBuffer?: string;
|
|
||||||
};
|
|
||||||
typeVersion?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ITemplatesNode extends IVersionNode {
|
|
||||||
id: number;
|
id: number;
|
||||||
categories?: ITemplatesCategory[];
|
categories?: ITemplatesCategory[];
|
||||||
}
|
}
|
||||||
@@ -1164,8 +1139,8 @@ export interface ITemplateState {
|
|||||||
|
|
||||||
export interface IVersionsState {
|
export interface IVersionsState {
|
||||||
versionNotificationSettings: IVersionNotificationSettings;
|
versionNotificationSettings: IVersionNotificationSettings;
|
||||||
nextVersions: IVersion[];
|
nextVersions: Version[];
|
||||||
currentVersion: IVersion | undefined;
|
currentVersion: Version | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IWorkflowsMap {
|
export interface IWorkflowsMap {
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
import type { IVersion } from '@/Interface';
|
|
||||||
import { INSTANCE_ID_HEADER } from '@/constants';
|
|
||||||
import { get } from '@n8n/rest-api-client';
|
|
||||||
|
|
||||||
export async function getNextVersions(
|
|
||||||
endpoint: string,
|
|
||||||
version: string,
|
|
||||||
instanceId: string,
|
|
||||||
): Promise<IVersion[]> {
|
|
||||||
const headers = { [INSTANCE_ID_HEADER as string]: instanceId };
|
|
||||||
return await get(endpoint, version, {}, headers);
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { IVersionNode, SimplifiedNodeType } from '@/Interface';
|
import type { SimplifiedNodeType } from '@/Interface';
|
||||||
import { getNodeIconSource, type NodeIconSource } from '@/utils/nodeIcon';
|
import { getNodeIconSource, type NodeIconSource } from '@/utils/nodeIcon';
|
||||||
import { N8nNodeIcon } from '@n8n/design-system';
|
import { N8nNodeIcon } from '@n8n/design-system';
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
import type { VersionNode } from '@n8n/rest-api-client/api/versions';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
size?: number;
|
size?: number;
|
||||||
@@ -15,7 +16,7 @@ type Props = {
|
|||||||
// NodeIcon needs iconSource OR nodeType, would be better with an intersection type
|
// NodeIcon needs iconSource OR nodeType, would be better with an intersection type
|
||||||
// but it breaks Vue template type checking
|
// but it breaks Vue template type checking
|
||||||
iconSource?: NodeIconSource;
|
iconSource?: NodeIconSource;
|
||||||
nodeType?: SimplifiedNodeType | IVersionNode | null;
|
nodeType?: SimplifiedNodeType | VersionNode | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
|||||||
@@ -3,16 +3,16 @@ import NodeIcon from './NodeIcon.vue';
|
|||||||
import TimeAgo from './TimeAgo.vue';
|
import TimeAgo from './TimeAgo.vue';
|
||||||
import Badge from './Badge.vue';
|
import Badge from './Badge.vue';
|
||||||
import WarningTooltip from './WarningTooltip.vue';
|
import WarningTooltip from './WarningTooltip.vue';
|
||||||
import type { IVersion, IVersionNode } from '@/Interface';
|
import type { Version, VersionNode } from '@n8n/rest-api-client/api/versions';
|
||||||
import { useI18n } from '@n8n/i18n';
|
import { useI18n } from '@n8n/i18n';
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
version: IVersion;
|
version: Version;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const i18n = useI18n();
|
const i18n = useI18n();
|
||||||
|
|
||||||
const nodeName = (node: IVersionNode): string => {
|
const nodeName = (node: VersionNode): string => {
|
||||||
return node !== null ? node.displayName : i18n.baseText('versionCard.unknown');
|
return node !== null ? node.displayName : i18n.baseText('versionCard.unknown');
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -324,9 +324,6 @@ export const NODE_CONNECTION_TYPE_ALLOW_MULTIPLE: NodeConnectionType[] = [
|
|||||||
NodeConnectionTypes.Main,
|
NodeConnectionTypes.Main,
|
||||||
];
|
];
|
||||||
|
|
||||||
// General
|
|
||||||
export const INSTANCE_ID_HEADER = 'n8n-instance-id';
|
|
||||||
|
|
||||||
/** PERSONALIZATION SURVEY */
|
/** PERSONALIZATION SURVEY */
|
||||||
export const EMAIL_KEY = 'email';
|
export const EMAIL_KEY = 'email';
|
||||||
export const WORK_AREA_KEY = 'workArea';
|
export const WORK_AREA_KEY = 'workArea';
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
import type { IVersionNotificationSettings } from '@n8n/api-types';
|
import type { IVersionNotificationSettings } from '@n8n/api-types';
|
||||||
import * as versionsApi from '@/api/versions';
|
import * as versionsApi from '@n8n/rest-api-client/api/versions';
|
||||||
import { VERSIONS_MODAL_KEY } from '@/constants';
|
import { VERSIONS_MODAL_KEY } from '@/constants';
|
||||||
import { STORES } from '@n8n/stores';
|
import { STORES } from '@n8n/stores';
|
||||||
import type { IVersion } from '@/Interface';
|
import type { Version } from '@n8n/rest-api-client/api/versions';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { useRootStore } from '@n8n/stores/useRootStore';
|
import { useRootStore } from '@n8n/stores/useRootStore';
|
||||||
import { useToast } from '@/composables/useToast';
|
import { useToast } from '@/composables/useToast';
|
||||||
import { useUIStore } from '@/stores/ui.store';
|
import { useUIStore } from '@/stores/ui.store';
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
|
|
||||||
type SetVersionParams = { versions: IVersion[]; currentVersion: string };
|
type SetVersionParams = { versions: Version[]; currentVersion: string };
|
||||||
|
|
||||||
export const useVersionsStore = defineStore(STORES.VERSIONS, () => {
|
export const useVersionsStore = defineStore(STORES.VERSIONS, () => {
|
||||||
const versionNotificationSettings = ref({ enabled: false, endpoint: '', infoUrl: '' });
|
const versionNotificationSettings = ref({ enabled: false, endpoint: '', infoUrl: '' });
|
||||||
const nextVersions = ref<IVersion[]>([]);
|
const nextVersions = ref<Version[]>([]);
|
||||||
const currentVersion = ref<IVersion | undefined>();
|
const currentVersion = ref<Version | undefined>();
|
||||||
|
|
||||||
const { showToast } = useToast();
|
const { showToast } = useToast();
|
||||||
const uiStore = useUIStore();
|
const uiStore = useUIStore();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { type INodeTypeDescription } from 'n8n-workflow';
|
import { type INodeTypeDescription } from 'n8n-workflow';
|
||||||
import type { IVersionNode } from '../Interface';
|
import type { VersionNode } from '@n8n/rest-api-client/api/versions';
|
||||||
import { useRootStore } from '@n8n/stores/useRootStore';
|
import { useRootStore } from '@n8n/stores/useRootStore';
|
||||||
import { useUIStore } from '../stores/ui.store';
|
import { useUIStore } from '../stores/ui.store';
|
||||||
import { getThemedValue } from './nodeTypesUtils';
|
import { getThemedValue } from './nodeTypesUtils';
|
||||||
@@ -20,7 +20,7 @@ type IconNodeTypeDescription = Pick<
|
|||||||
INodeTypeDescription,
|
INodeTypeDescription,
|
||||||
'icon' | 'iconUrl' | 'iconColor' | 'defaults' | 'badgeIconUrl' | 'name'
|
'icon' | 'iconUrl' | 'iconColor' | 'defaults' | 'badgeIconUrl' | 'name'
|
||||||
>;
|
>;
|
||||||
type IconVersionNode = Pick<IVersionNode, 'icon' | 'iconUrl' | 'iconData' | 'defaults' | 'name'>;
|
type IconVersionNode = Pick<VersionNode, 'icon' | 'iconUrl' | 'iconData' | 'defaults' | 'name'>;
|
||||||
export type IconNodeType = IconNodeTypeDescription | IconVersionNode;
|
export type IconNodeType = IconNodeTypeDescription | IconVersionNode;
|
||||||
|
|
||||||
export const getNodeIcon = (nodeType: IconNodeType): string | null => {
|
export const getNodeIcon = (nodeType: IconNodeType): string | null => {
|
||||||
|
|||||||
Reference in New Issue
Block a user