mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
refactor(editor): Move settings api to @n8n/rest-api-client (no-changelog) (#16186)
This commit is contained in:
1
packages/@n8n/constants/src/api.ts
Normal file
1
packages/@n8n/constants/src/api.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const N8N_IO_BASE_URL = 'https://api.n8n.io/api/';
|
||||
1
packages/@n8n/constants/src/community-nodes.ts
Normal file
1
packages/@n8n/constants/src/community-nodes.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const NPM_COMMUNITY_NODE_SEARCH_API_URL = 'https://api.npms.io/v2/';
|
||||
@@ -1,4 +1,6 @@
|
||||
export * from './api';
|
||||
export * from './browser';
|
||||
export * from './community-nodes';
|
||||
export * from './instance';
|
||||
|
||||
export const LICENSE_FEATURES = {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { NPM_COMMUNITY_NODE_SEARCH_API_URL } from '@n8n/constants';
|
||||
import type { PublicInstalledPackage } from 'n8n-workflow';
|
||||
|
||||
import type { IRestApiContext } from '../types';
|
||||
@@ -29,3 +30,12 @@ export async function updatePackage(
|
||||
): Promise<PublicInstalledPackage> {
|
||||
return await makeRestApiRequest(context, 'PATCH', '/community-packages', { name });
|
||||
}
|
||||
|
||||
export async function getAvailableCommunityPackageCount(): Promise<number> {
|
||||
const response = await get(
|
||||
NPM_COMMUNITY_NODE_SEARCH_API_URL,
|
||||
'search?q=keywords:n8n-community-node-package',
|
||||
);
|
||||
|
||||
return response.total || 0;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,9 @@ export * from './mfa';
|
||||
export * from './nodeTypes';
|
||||
export * from './npsSurvey';
|
||||
export * from './orchestration';
|
||||
export * from './prompts';
|
||||
export * from './roles';
|
||||
export * from './settings';
|
||||
export * from './sso';
|
||||
export * from './ui';
|
||||
export * from './versions';
|
||||
|
||||
35
packages/frontend/@n8n/rest-api-client/src/api/prompts.ts
Normal file
35
packages/frontend/@n8n/rest-api-client/src/api/prompts.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { N8N_IO_BASE_URL } from '@n8n/constants';
|
||||
|
||||
import { get, post } from '../utils';
|
||||
|
||||
export interface N8nPrompts {
|
||||
message?: string;
|
||||
title?: string;
|
||||
showContactPrompt?: boolean;
|
||||
}
|
||||
|
||||
export interface N8nPromptResponse {
|
||||
updated: boolean;
|
||||
}
|
||||
|
||||
export async function getPromptsData(instanceId: string, userId: string): Promise<N8nPrompts> {
|
||||
return await get(
|
||||
N8N_IO_BASE_URL,
|
||||
'/prompts',
|
||||
{},
|
||||
{ 'n8n-instance-id': instanceId, 'n8n-user-id': userId },
|
||||
);
|
||||
}
|
||||
|
||||
export async function submitContactInfo(
|
||||
instanceId: string,
|
||||
userId: string,
|
||||
email: string,
|
||||
): Promise<N8nPromptResponse> {
|
||||
return await post(
|
||||
N8N_IO_BASE_URL,
|
||||
'/prompt',
|
||||
{ email },
|
||||
{ 'n8n-instance-id': instanceId, 'n8n-user-id': userId },
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { FrontendSettings } from '@n8n/api-types';
|
||||
|
||||
import type { IRestApiContext } from '../types';
|
||||
import { makeRestApiRequest } from '../utils';
|
||||
|
||||
export async function getSettings(context: IRestApiContext): Promise<FrontendSettings> {
|
||||
return await makeRestApiRequest(context, 'GET', '/settings');
|
||||
}
|
||||
@@ -605,12 +605,6 @@ export interface IUserListAction {
|
||||
guard?: (user: IUser) => boolean;
|
||||
}
|
||||
|
||||
export interface IN8nPrompts {
|
||||
message?: string;
|
||||
title?: string;
|
||||
showContactPrompt?: boolean;
|
||||
}
|
||||
|
||||
export const enum UserManagementAuthenticationMethod {
|
||||
Email = 'email',
|
||||
Ldap = 'ldap',
|
||||
@@ -1433,10 +1427,6 @@ export type EnterpriseEditionFeatureKey =
|
||||
|
||||
export type EnterpriseEditionFeatureValue = keyof Omit<FrontendSettings['enterprise'], 'projects'>;
|
||||
|
||||
export interface IN8nPromptResponse {
|
||||
updated: boolean;
|
||||
}
|
||||
|
||||
export type InputPanel = {
|
||||
nodeName?: string;
|
||||
run?: number;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
import type { IN8nPrompts, IN8nPromptResponse } from '../Interface';
|
||||
import type { IRestApiContext } from '@n8n/rest-api-client';
|
||||
import { makeRestApiRequest, get, post } from '@n8n/rest-api-client';
|
||||
import { N8N_IO_BASE_URL, NPM_COMMUNITY_NODE_SEARCH_API_URL } from '@/constants';
|
||||
import type { FrontendSettings } from '@n8n/api-types';
|
||||
|
||||
export async function getSettings(context: IRestApiContext): Promise<FrontendSettings> {
|
||||
return await makeRestApiRequest(context, 'GET', '/settings');
|
||||
}
|
||||
|
||||
export async function getPromptsData(instanceId: string, userId: string): Promise<IN8nPrompts> {
|
||||
return await get(
|
||||
N8N_IO_BASE_URL,
|
||||
'/prompts',
|
||||
{},
|
||||
{ 'n8n-instance-id': instanceId, 'n8n-user-id': userId },
|
||||
);
|
||||
}
|
||||
|
||||
export async function submitContactInfo(
|
||||
instanceId: string,
|
||||
userId: string,
|
||||
email: string,
|
||||
): Promise<IN8nPromptResponse> {
|
||||
return await post(
|
||||
N8N_IO_BASE_URL,
|
||||
'/prompt',
|
||||
{ email },
|
||||
{ 'n8n-instance-id': instanceId, 'n8n-user-id': userId },
|
||||
);
|
||||
}
|
||||
|
||||
export async function getAvailableCommunityPackageCount(): Promise<number> {
|
||||
const response = await get(
|
||||
NPM_COMMUNITY_NODE_SEARCH_API_URL,
|
||||
'search?q=keywords:n8n-community-node-package',
|
||||
);
|
||||
|
||||
return response.total || 0;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import type { IN8nPromptResponse, ModalKey } from '@/Interface';
|
||||
import type { N8nPromptResponse } from '@n8n/rest-api-client/api/prompts';
|
||||
import type { ModalKey } from '@/Interface';
|
||||
import { VALID_EMAIL_REGEX } from '@/constants';
|
||||
import Modal from '@/components/Modal.vue';
|
||||
import { useSettingsStore } from '@/stores/settings.store';
|
||||
@@ -55,7 +56,7 @@ const closeDialog = () => {
|
||||
|
||||
const send = async () => {
|
||||
if (isEmailValid.value) {
|
||||
const response = (await settingsStore.submitContactInfo(email.value)) as IN8nPromptResponse;
|
||||
const response = (await settingsStore.submitContactInfo(email.value)) as N8nPromptResponse;
|
||||
|
||||
if (response.updated) {
|
||||
telemetry.track('User closed email modal', {
|
||||
|
||||
@@ -96,7 +96,6 @@ export const BREAKPOINT_MD = 992;
|
||||
export const BREAKPOINT_LG = 1200;
|
||||
export const BREAKPOINT_XL = 1920;
|
||||
|
||||
export const N8N_IO_BASE_URL = 'https://api.n8n.io/api/';
|
||||
export const DOCS_DOMAIN = 'docs.n8n.io';
|
||||
export const BUILTIN_NODES_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/builtin/`;
|
||||
export const BUILTIN_CREDENTIALS_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/builtin/credentials/`;
|
||||
@@ -104,7 +103,6 @@ export const DATA_PINNING_DOCS_URL = `https://${DOCS_DOMAIN}/data/data-pinning/`
|
||||
export const DATA_EDITING_DOCS_URL = `https://${DOCS_DOMAIN}/data/data-editing/`;
|
||||
export const SCHEMA_PREVIEW_DOCS_URL = `https://${DOCS_DOMAIN}/data/schema-preview/`;
|
||||
export const MFA_DOCS_URL = `https://${DOCS_DOMAIN}/user-management/two-factor-auth/`;
|
||||
export const NPM_COMMUNITY_NODE_SEARCH_API_URL = 'https://api.npms.io/v2/';
|
||||
export const NPM_PACKAGE_DOCS_BASE_URL = 'https://www.npmjs.com/package/';
|
||||
export const NPM_KEYWORD_SEARCH_URL =
|
||||
'https://www.npmjs.com/search?q=keywords%3An8n-community-node-package';
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as communityNodesApi from '@n8n/rest-api-client/api/communityNodes';
|
||||
import { getAvailableCommunityPackageCount } from '@/api/settings';
|
||||
import { defineStore } from 'pinia';
|
||||
import { useRootStore } from '@n8n/stores/useRootStore';
|
||||
import type { PublicInstalledPackage } from 'n8n-workflow';
|
||||
@@ -29,7 +28,7 @@ export const useCommunityNodesStore = defineStore(STORES.COMMUNITY_NODES, () =>
|
||||
|
||||
const fetchAvailableCommunityPackageCount = async (): Promise<void> => {
|
||||
if (availablePackageCount.value === -1) {
|
||||
availablePackageCount.value = await getAvailableCommunityPackageCount();
|
||||
availablePackageCount.value = await communityNodesApi.getAvailableCommunityPackageCount();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ import { useRootStore } from '@n8n/stores/useRootStore';
|
||||
import type { IUserSettings, NpsSurveyState } from 'n8n-workflow';
|
||||
import { useSettingsStore } from './settings.store';
|
||||
import { updateNpsSurveyState } from '@n8n/rest-api-client/api/npsSurvey';
|
||||
import type { IN8nPrompts } from '@/Interface';
|
||||
import { getPromptsData } from '@/api/settings';
|
||||
import type { N8nPrompts } from '@n8n/rest-api-client/api/prompts';
|
||||
import { getPromptsData } from '@n8n/rest-api-client/api/prompts';
|
||||
import { assert } from '@n8n/utils/assert';
|
||||
|
||||
export const MAXIMUM_TIMES_TO_SHOW_SURVEY_IF_IGNORED = 3;
|
||||
@@ -26,7 +26,7 @@ export const useNpsSurveyStore = defineStore('npsSurvey', () => {
|
||||
const shouldShowNpsSurveyNext = ref<boolean>(false);
|
||||
const currentSurveyState = ref<NpsSurveyState | undefined>();
|
||||
const currentUserId = ref<string | undefined>();
|
||||
const promptsData = ref<IN8nPrompts | undefined>();
|
||||
const promptsData = ref<N8nPrompts | undefined>();
|
||||
|
||||
function setupNpsSurveyOnLogin(userId: string, settings?: IUserSettings): void {
|
||||
currentUserId.value = userId;
|
||||
|
||||
@@ -13,7 +13,7 @@ const { sessionStarted } = vi.hoisted(() => ({
|
||||
sessionStarted: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('@/api/settings', () => ({
|
||||
vi.mock('@n8n/rest-api-client/api/settings', () => ({
|
||||
getSettings,
|
||||
}));
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@ import type { IUserManagementSettings, FrontendSettings } from '@n8n/api-types';
|
||||
|
||||
import * as eventsApi from '@n8n/rest-api-client/api/events';
|
||||
import * as ldapApi from '@n8n/rest-api-client/api/ldap';
|
||||
import * as settingsApi from '@/api/settings';
|
||||
import * as settingsApi from '@n8n/rest-api-client/api/settings';
|
||||
import * as promptsApi from '@n8n/rest-api-client/api/prompts';
|
||||
import { testHealthEndpoint } from '@/api/templates';
|
||||
import type { LdapConfig } from '@n8n/rest-api-client/api/ldap';
|
||||
import {
|
||||
@@ -332,7 +333,7 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => {
|
||||
const submitContactInfo = async (email: string) => {
|
||||
try {
|
||||
const usersStore = useUsersStore();
|
||||
return await settingsApi.submitContactInfo(
|
||||
return await promptsApi.submitContactInfo(
|
||||
settings.value.instanceId,
|
||||
usersStore.currentUserId || '',
|
||||
email,
|
||||
|
||||
Reference in New Issue
Block a user