import type { AI_NODE_CREATOR_VIEW, CREDENTIAL_EDIT_MODAL_KEY, SignInType, FAKE_DOOR_FEATURES, TRIGGER_NODE_CREATOR_VIEW, REGULAR_NODE_CREATOR_VIEW, AI_OTHERS_NODE_CREATOR_VIEW, ROLE, } from '@/constants'; import type { IMenuItem, NodeCreatorTag } from 'n8n-design-system'; import type { GenericValue, IConnections, ICredentialsDecrypted, ICredentialsEncrypted, ICredentialType, IDataObject, INode, INodeIssues, INodeParameters, INodeTypeDescription, IPinData, IRunExecutionData, IRun, IRunData, ITaskData, IWorkflowSettings as IWorkflowSettingsWorkflow, WorkflowExecuteMode, PublicInstalledPackage, INodeTypeNameVersion, ILoadOptions, INodeCredentials, INodeListSearchItems, NodeParameterValueType, IDisplayOptions, ExecutionSummary, FeatureFlags, ExecutionStatus, ITelemetryTrackProperties, IUserManagementSettings, WorkflowSettings, IUserSettings, IN8nUISettings, BannerName, INodeExecutionData, INodeProperties, NodeConnectionType, INodeCredentialsDetails, StartNodeData, } from 'n8n-workflow'; import type { BulkCommand, Undoable } from '@/models/history'; import type { PartialBy, TupleToUnion } from '@/utils/typeHelpers'; import type { Component } from 'vue'; import type { Scope } from '@n8n/permissions'; import type { NotificationOptions as ElementNotificationOptions } from 'element-plus'; import type { ProjectSharingData } from '@/types/projects.types'; import type { Connection } from '@jsplumb/core'; import type { BaseTextKey } from './plugins/i18n'; export * from 'n8n-design-system/types'; declare global { interface Window { posthog?: { init( key: string, options?: { api_host?: string; autocapture?: boolean; disable_session_recording?: boolean; debug?: boolean; bootstrap?: { distinctId?: string; isIdentifiedID?: boolean; featureFlags: FeatureFlags; }; session_recording?: { maskAllInputs?: boolean; maskInputFn?: ((text: string, element?: HTMLElement) => string) | null; }; }, ): void; isFeatureEnabled?(flagName: string): boolean; getFeatureFlag?(flagName: string): boolean | string; identify?( id: string, userProperties?: Record, userPropertiesOnce?: Record, ): void; reset?(resetDeviceId?: boolean): void; onFeatureFlags?(callback: (keys: string[], map: FeatureFlags) => void): void; reloadFeatureFlags?(): void; capture?(event: string, properties: IDataObject): void; register?(metadata: IDataObject): void; people?: { set?(metadata: IDataObject): void; }; debug?(): void; }; analytics?: { identify(userId: string): void; track(event: string, properties?: ITelemetryTrackProperties): void; page(category: string, name: string, properties?: ITelemetryTrackProperties): void; }; featureFlags?: { getAll: () => FeatureFlags; getVariant: (name: string) => string | boolean | undefined; override: (name: string, value: string) => void; }; // eslint-disable-next-line @typescript-eslint/naming-convention Cypress: unknown; Sentry?: { captureException: (error: Error, metadata?: unknown) => void; }; } } /** String that represents a timestamp in the ISO8601 format, i.e. YYYY-MM-DDTHH:MM:SS.sssZ */ export type Iso8601String = string; export type EndpointStyle = { width?: number; height?: number; fill?: string; stroke?: string; outlineStroke?: string; lineWidth?: number; hover?: boolean; showOutputLabel?: boolean; size?: string; hoverMessage?: string; }; export interface IUpdateInformation { name: string; key?: string; value: T; node?: string; oldValue?: string | number; type?: 'optionsOrderChanged'; } export interface INodeUpdatePropertiesInformation { name: string; // Node-Name properties: { position: XYPosition; [key: string]: IDataObject | XYPosition; }; } export type XYPosition = [number, number]; export interface INodeUi extends INode { position: XYPosition; color?: string; notes?: string; issues?: INodeIssues; name: string; pinData?: IDataObject; } export interface INodeTypesMaxCount { [key: string]: { exist: number; max: number; nodeNames: string[]; }; } export interface INodeTranslationHeaders { data: { [key: string]: { displayName: string; description: string; }; }; } export interface IAiDataContent { data: INodeExecutionData[] | null; inOut: 'input' | 'output'; type: NodeConnectionType; metadata: { executionTime: number; startTime: number; }; } export interface IAiData { data: IAiDataContent[]; node: string; runIndex: number; } export interface IStartRunData { workflowData: IWorkflowData; startNodes?: StartNodeData[]; destinationNode?: string; runData?: IRunData; } export interface ITableData { columns: string[]; data: GenericValue[][]; hasJson: { [key: string]: boolean }; } // Simple version of n8n-workflow.Workflow export interface IWorkflowData { id?: string; name?: string; active?: boolean; nodes: INode[]; connections: IConnections; settings?: IWorkflowSettings; tags?: string[]; pinData?: IPinData; versionId?: string; meta?: WorkflowMetadata; } export interface IWorkflowDataUpdate { id?: string; name?: string; nodes?: INode[]; connections?: IConnections; settings?: IWorkflowSettings; active?: boolean; tags?: ITag[] | string[]; // string[] when store or requested, ITag[] from API response pinData?: IPinData; versionId?: string; meta?: WorkflowMetadata; } export interface IWorkflowToShare extends IWorkflowDataUpdate { meta: WorkflowMetadata; } export interface NewWorkflowResponse { name: string; onboardingFlowEnabled?: boolean; defaultSettings: IWorkflowSettings; } export interface IWorkflowTemplateNode extends Pick< INodeUi, 'name' | 'type' | 'position' | 'parameters' | 'typeVersion' | 'webhookId' | 'id' | 'disabled' > { // The credentials in a template workflow have a different type than in a regular workflow credentials?: IWorkflowTemplateNodeCredentials; } export interface IWorkflowTemplateNodeCredentials { [key: string]: string | INodeCredentialsDetails; } export interface IWorkflowTemplate { id: number; name: string; workflow: Pick & { nodes: IWorkflowTemplateNode[]; }; } export interface INewWorkflowData { name: string; onboardingFlowEnabled: boolean; } export interface WorkflowMetadata { onboardingId?: string; templateId?: string; instanceId?: string; templateCredsSetupCompleted?: boolean; } // Almost identical to cli.Interfaces.ts export interface IWorkflowDb { id: string; name: string; active: boolean; createdAt: number | string; updatedAt: number | string; nodes: INodeUi[]; connections: IConnections; settings?: IWorkflowSettings; tags?: ITag[] | string[]; // string[] when store or requested, ITag[] from API response pinData?: IPinData; sharedWithProjects?: ProjectSharingData[]; homeProject?: ProjectSharingData; scopes?: Scope[]; versionId: string; usedCredentials?: IUsedCredential[]; meta?: WorkflowMetadata; } // Identical to cli.Interfaces.ts export interface IWorkflowShortResponse { id: string; name: string; active: boolean; createdAt: number | string; updatedAt: number | string; tags: ITag[]; } export interface IWorkflowsShareResponse { id: string; createdAt: number | string; updatedAt: number | string; sharedWithProjects?: ProjectSharingData[]; homeProject?: ProjectSharingData; } // Identical or almost identical to cli.Interfaces.ts export interface IActivationError { time: number; error: { message: string; }; } export interface IShareCredentialsPayload { shareWithIds: string[]; } export interface IShareWorkflowsPayload { shareWithIds: string[]; } export interface ICredentialsResponse extends ICredentialsEncrypted { id: string; createdAt: Iso8601String; updatedAt: Iso8601String; sharedWithProjects?: ProjectSharingData[]; homeProject?: ProjectSharingData; currentUserHasAccess?: boolean; scopes?: Scope[]; ownedBy?: Pick; } export interface ICredentialsBase { createdAt: Iso8601String; updatedAt: Iso8601String; } export interface ICredentialsDecryptedResponse extends ICredentialsBase, ICredentialsDecrypted { id: string; } export interface IExecutionBase { id?: string; finished: boolean; mode: WorkflowExecuteMode; status: ExecutionStatus; retryOf?: string; retrySuccessId?: string; startedAt: Date; stoppedAt?: Date; workflowId?: string; // To be able to filter executions easily // } export interface IExecutionFlatted extends IExecutionBase { data: string; workflowData: IWorkflowDb; } export interface IExecutionFlattedResponse extends IExecutionFlatted { id: string; } export interface IExecutionPushResponse { executionId?: string; waitingForWebhook?: boolean; } export interface IExecutionResponse extends IExecutionBase { id: string; data?: IRunExecutionData; workflowData: IWorkflowDb; executedNode?: string; } export type ExecutionSummaryWithScopes = ExecutionSummary & { scopes: Scope[] }; export interface IExecutionsListResponse { count: number; results: ExecutionSummaryWithScopes[]; estimated: boolean; } export interface IExecutionsCurrentSummaryExtended { id: string; finished?: boolean; status: ExecutionStatus; mode: WorkflowExecuteMode; retryOf?: string | null; retrySuccessId?: string | null; startedAt: Date; stoppedAt?: Date; workflowId: string; workflowName?: string; } export interface IExecutionsStopData { finished?: boolean; mode: WorkflowExecuteMode; startedAt: Date; stoppedAt: Date; status: ExecutionStatus; } export interface IExecutionDeleteFilter { deleteBefore?: Date; filters?: ExecutionsQueryFilter; ids?: string[]; } export type IPushData = | PushDataExecutionFinished | PushDataExecutionStarted | PushDataExecuteAfter | PushDataExecuteBefore | PushDataNodeDescriptionUpdated | PushDataConsoleMessage | PushDataReloadNodeType | PushDataRemoveNodeType | PushDataTestWebhook | PushDataExecutionRecovered | PushDataWorkerStatusMessage | PushDataActiveWorkflowAdded | PushDataActiveWorkflowRemoved | PushDataWorkflowFailedToActivate; export type PushDataActiveWorkflowAdded = { data: IActiveWorkflowAdded; type: 'workflowActivated'; }; export type PushDataActiveWorkflowRemoved = { data: IActiveWorkflowRemoved; type: 'workflowDeactivated'; }; export type PushDataWorkflowFailedToActivate = { data: IWorkflowFailedToActivate; type: 'workflowFailedToActivate'; }; export type PushDataExecutionRecovered = { data: IPushDataExecutionRecovered; type: 'executionRecovered'; }; export type PushDataExecutionFinished = { data: IPushDataExecutionFinished; type: 'executionFinished'; }; export type PushDataExecutionStarted = { data: IPushDataExecutionStarted; type: 'executionStarted'; }; export type PushDataExecuteAfter = { data: IPushDataNodeExecuteAfter; type: 'nodeExecuteAfter'; }; export type PushDataExecuteBefore = { data: IPushDataNodeExecuteBefore; type: 'nodeExecuteBefore'; }; export type PushDataNodeDescriptionUpdated = { data: {}; type: 'nodeDescriptionUpdated'; }; export type PushDataConsoleMessage = { data: IPushDataConsoleMessage; type: 'sendConsoleMessage'; }; export type PushDataReloadNodeType = { data: IPushDataReloadNodeType; type: 'reloadNodeType'; }; export type PushDataRemoveNodeType = { data: IPushDataRemoveNodeType; type: 'removeNodeType'; }; export type PushDataTestWebhook = { data: IPushDataTestWebhook; type: 'testWebhookDeleted' | 'testWebhookReceived'; }; export type PushDataWorkerStatusMessage = { data: IPushDataWorkerStatusMessage; type: 'sendWorkerStatusMessage'; }; export interface IPushDataExecutionStarted { executionId: string; mode: WorkflowExecuteMode; startedAt: Date; retryOf?: string; workflowId: string; workflowName?: string; } export interface IPushDataExecutionRecovered { executionId: string; } export interface IPushDataExecutionFinished { data: IRun; executionId: string; retryOf?: string; } export interface IActiveWorkflowAdded { workflowId: string; } export interface IActiveWorkflowRemoved { workflowId: string; } export interface IWorkflowFailedToActivate { workflowId: string; errorMessage: string; } export interface IPushDataUnsavedExecutionFinished { executionId: string; data: { finished: true; stoppedAt: Date }; } export interface IPushDataExecutionStarted { executionId: string; } export interface IPushDataNodeExecuteAfter { data: ITaskData; executionId: string; nodeName: string; } export interface IPushDataNodeExecuteBefore { executionId: string; nodeName: string; } export interface IPushDataReloadNodeType { name: string; version: number; } export interface IPushDataRemoveNodeType { name: string; version: number; } export interface IPushDataTestWebhook { executionId: string; workflowId: string; } export interface IPushDataConsoleMessage { source: string; messages: string[]; } export interface WorkerJobStatusSummary { jobId: string; executionId: string; retryOf?: string; startedAt: Date; mode: WorkflowExecuteMode; workflowName: string; workflowId: string; status: ExecutionStatus; } export interface IPushDataWorkerStatusPayload { workerId: string; runningJobsSummary: WorkerJobStatusSummary[]; freeMem: number; totalMem: number; uptime: number; loadAvg: number[]; cpus: string; arch: string; platform: NodeJS.Platform; hostname: string; interfaces: Array<{ family: 'IPv4' | 'IPv6'; address: string; internal: boolean; }>; version: string; } export interface IPushDataWorkerStatusMessage { workerId: string; status: IPushDataWorkerStatusPayload; } export type IPersonalizationSurveyAnswersV1 = { codingSkill?: string | null; companyIndustry?: string[] | null; companySize?: string | null; otherCompanyIndustry?: string | null; otherWorkArea?: string | null; workArea?: string[] | string | null; }; export type IPersonalizationSurveyAnswersV2 = { version: 'v2'; automationGoal?: string | null; codingSkill?: string | null; companyIndustryExtended?: string[] | null; companySize?: string | null; companyType?: string | null; customerType?: string | null; mspFocus?: string[] | null; mspFocusOther?: string | null; otherAutomationGoal?: string | null; otherCompanyIndustryExtended?: string[] | null; }; export type IPersonalizationSurveyAnswersV3 = { version: 'v3'; automationGoal?: string | null; otherAutomationGoal?: string | null; companyIndustryExtended?: string[] | null; otherCompanyIndustryExtended?: string[] | null; companySize?: string | null; companyType?: string | null; automationGoalSm?: string[] | null; automationGoalSmOther?: string | null; usageModes?: string[] | null; email?: string | null; }; export type IPersonalizationSurveyAnswersV4 = { version: 'v4'; automationGoalDevops?: string[] | null; automationGoalDevopsOther?: string | null; companyIndustryExtended?: string[] | null; otherCompanyIndustryExtended?: string[] | null; companySize?: string | null; companyType?: string | null; automationGoalSm?: string[] | null; automationGoalSmOther?: string | null; usageModes?: string[] | null; email?: string | null; role?: string | null; roleOther?: string | null; reportedSource?: string | null; reportedSourceOther?: string | null; }; export type IPersonalizationLatestVersion = IPersonalizationSurveyAnswersV4; export type IPersonalizationSurveyVersions = | IPersonalizationSurveyAnswersV1 | IPersonalizationSurveyAnswersV2 | IPersonalizationSurveyAnswersV3 | IPersonalizationSurveyAnswersV4; export type Roles = typeof ROLE; export type IRole = Roles[keyof Roles]; export type InvitableRoleName = Roles['Member' | 'Admin']; export interface IUserResponse { id: string; firstName?: string; lastName?: string; email?: string; createdAt?: string; role?: IRole; globalScopes?: Scope[]; personalizationAnswers?: IPersonalizationSurveyVersions | null; isPending: boolean; signInType?: SignInType; settings?: IUserSettings; } export interface CurrentUserResponse extends IUserResponse { featureFlags?: FeatureFlags; } export interface IUser extends IUserResponse { isDefaultUser: boolean; isPendingUser: boolean; inviteAcceptUrl?: string; fullName?: string; createdAt?: string; mfaEnabled: boolean; } export interface IVersionNotificationSettings { enabled: boolean; endpoint: string; infoUrl: string; } export interface IUserListAction { label: string; value: string; guard?: (user: IUser) => boolean; } export interface IN8nPrompts { message?: string; title?: string; showContactPrompt?: boolean; } export const enum UserManagementAuthenticationMethod { Email = 'email', Ldap = 'ldap', Saml = 'saml', } export interface IPermissionGroup { loginStatus?: ILogInStatus[]; role?: IRole[]; } export interface IPermissionAllowGroup extends IPermissionGroup { shouldAllow?: () => boolean; } export interface IPermissionDenyGroup extends IPermissionGroup { shouldDeny?: () => boolean; } export interface IPermissions { allow?: IPermissionAllowGroup; deny?: IPermissionDenyGroup; } export interface IUserPermissions { [category: string]: { [permission: string]: IPermissions; }; } export interface ITemplatesCollection { id: number; name: string; nodes: ITemplatesNode[]; workflows: Array<{ id: number }>; } interface ITemplatesImage { id: number; url: string; } interface ITemplatesCollectionExtended extends ITemplatesCollection { description: string | null; image: ITemplatesImage[]; categories: ITemplatesCategory[]; createdAt: string; } export interface ITemplatesCollectionFull extends ITemplatesCollectionExtended { full: true; } export interface ITemplatesCollectionResponse extends ITemplatesCollectionExtended { workflows: ITemplatesWorkflow[]; } /** * A template without the actual workflow definition */ export interface ITemplatesWorkflow { id: number; createdAt: string; name: string; nodes: ITemplatesNode[]; totalViews: number; user: { username: string; }; } export interface ITemplatesWorkflowInfo { nodeCount: number; nodeTypes: { [key: string]: { count: number; }; }; } export type TemplateSearchFacet = { field_name: string; sampled: boolean; stats: { total_values: number; }; counts: Array<{ count: number; highlighted: string; value: string; }>; }; export interface ITemplatesWorkflowResponse extends ITemplatesWorkflow, IWorkflowTemplate { description: string | null; image: ITemplatesImage[]; categories: ITemplatesCategory[]; workflowInfo: ITemplatesWorkflowInfo; } /** * A template with also the full workflow definition */ export interface ITemplatesWorkflowFull extends ITemplatesWorkflowResponse { full: true; } export interface ITemplatesQuery { categories: string[]; search: string; } export interface ITemplatesCategory { id: number; name: string; } export type WorkflowCallerPolicyDefaultOption = 'any' | 'none' | 'workflowsFromAList'; export interface IWorkflowSettings extends IWorkflowSettingsWorkflow { errorWorkflow?: string; saveManualExecutions?: boolean; timezone?: string; executionTimeout?: number; maxExecutionTimeout?: number; callerIds?: string; callerPolicy?: WorkflowSettings.CallerPolicy; executionOrder: NonNullable; } export interface ITimeoutHMS { hours: number; minutes: number; seconds: number; } export type WorkflowTitleStatus = 'EXECUTING' | 'IDLE' | 'ERROR' | 'DEBUG'; export type ExtractActionKeys = T extends SimplifiedNodeType ? T['name'] : never; export type ActionsRecord = { [K in ExtractActionKeys]: ActionTypeDescription[]; }; export type SimplifiedNodeType = Pick< INodeTypeDescription, | 'displayName' | 'description' | 'name' | 'group' | 'icon' | 'iconUrl' | 'iconColor' | 'badgeIconUrl' | 'codex' | 'defaults' | 'outputs' > & { tag?: string; }; export interface SubcategoryItemProps { description?: string; iconType?: string; icon?: string; iconProps?: { color?: string; }; panelClass?: string; title?: string; subcategory?: string; defaults?: INodeParameters; forceIncludeNodes?: string[]; sections?: string[]; } export interface ViewItemProps { title: string; description: string; icon: string; tag?: NodeCreatorTag; borderless?: boolean; } export interface LabelItemProps { key: string; } export interface LinkItemProps { url: string; key: string; newTab?: boolean; title: string; description: string; icon: string; tag?: NodeCreatorTag; } export interface ActionTypeDescription extends SimplifiedNodeType { displayOptions?: IDisplayOptions; values?: IDataObject; actionKey: string; codex: { label: string; categories: string[]; }; } export interface CategoryItemProps { name: string; count: number; } export interface CreateElementBase { uuid?: string; key: string; } export interface NodeCreateElement extends CreateElementBase { type: 'node'; subcategory: string; properties: SimplifiedNodeType; } export interface CategoryCreateElement extends CreateElementBase { type: 'category'; subcategory: string; properties: CategoryItemProps; } export interface SubcategoryCreateElement extends CreateElementBase { type: 'subcategory'; properties: SubcategoryItemProps; } export interface SectionCreateElement extends CreateElementBase { type: 'section'; title: string; children: INodeCreateElement[]; } export interface ViewCreateElement extends CreateElementBase { type: 'view'; properties: ViewItemProps; } export interface LabelCreateElement extends CreateElementBase { type: 'label'; subcategory: string; properties: LabelItemProps; } export interface LinkCreateElement extends CreateElementBase { type: 'link'; properties: LinkItemProps; } export interface ActionCreateElement extends CreateElementBase { type: 'action'; subcategory: string; properties: ActionTypeDescription; } export type INodeCreateElement = | NodeCreateElement | CategoryCreateElement | SubcategoryCreateElement | SectionCreateElement | ViewCreateElement | LabelCreateElement | ActionCreateElement | LinkCreateElement; export interface SubcategorizedNodeTypes { [subcategory: string]: INodeCreateElement[]; } export interface ITag { id: string; name: string; usageCount?: number; createdAt?: string; updatedAt?: string; } export interface ITagRow { tag?: ITag; usage?: string; create?: boolean; disable?: boolean; update?: boolean; delete?: boolean; canDelete?: boolean; } export interface IVersion { 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; categories?: ITemplatesCategory[]; } export interface INodeMetadata { parametersLastUpdatedAt?: number; pristine: boolean; } export interface IUsedCredential { id: string; name: string; credentialType: string; currentUserHasAccess: boolean; homeProject?: ProjectSharingData; sharedWithProjects?: ProjectSharingData[]; } export interface WorkflowsState { activeExecutions: IExecutionsCurrentSummaryExtended[]; activeWorkflows: string[]; activeWorkflowExecution: ExecutionSummary | null; currentWorkflowExecutions: ExecutionSummary[]; activeExecutionId: string | null; executingNode: string[]; executionWaitingForWebhook: boolean; finishedExecutionsCount: number; nodeMetadata: NodeMetadataMap; subWorkflowExecutionError: Error | null; usedCredentials: Record; workflow: IWorkflowDb; workflowExecutionData: IExecutionResponse | null; workflowExecutionPairedItemMappings: { [itemId: string]: Set }; workflowsById: IWorkflowsMap; chatMessages: string[]; isInDebugMode?: boolean; } export interface RootState { baseUrl: string; restEndpoint: string; defaultLocale: string; endpointForm: string; endpointFormTest: string; endpointFormWaiting: string; endpointWebhook: string; endpointWebhookTest: string; pushConnectionActive: boolean; timezone: string; executionTimeout: number; maxExecutionTimeout: number; versionCli: string; oauthCallbackUrls: object; n8nMetadata: { [key: string]: string | number | undefined; }; pushRef: string; urlBaseWebhook: string; urlBaseEditor: string; instanceId: string; isNpmAvailable: boolean; binaryDataMode: 'default' | 'filesystem' | 's3'; } export interface NodeMetadataMap { [nodeName: string]: INodeMetadata; } export interface IRootState { activeExecutions: IExecutionsCurrentSummaryExtended[]; activeWorkflows: string[]; activeActions: string[]; activeCredentialType: string | null; baseUrl: string; defaultLocale: string; endpointForm: string; endpointFormTest: string; endpointFormWaiting: string; endpointWebhook: string; endpointWebhookTest: string; executionId: string | null; executingNode: string[]; executionWaitingForWebhook: boolean; pushConnectionActive: boolean; saveDataErrorExecution: string; saveDataSuccessExecution: string; saveManualExecutions: boolean; timezone: string; stateIsDirty: boolean; executionTimeout: number; maxExecutionTimeout: number; versionCli: string; oauthCallbackUrls: object; n8nMetadata: object; workflowExecutionData: IExecutionResponse | null; workflowExecutionPairedItemMappings: { [itemId: string]: Set }; lastSelectedNode: string | null; lastSelectedNodeOutputIndex: number | null; nodeViewOffsetPosition: XYPosition; nodeViewMoveInProgress: boolean; selectedNodes: INodeUi[]; pushRef: string; urlBaseEditor: string; urlBaseWebhook: string; workflow: IWorkflowDb; workflowsById: IWorkflowsMap; sidebarMenuItems: IMenuItem[]; instanceId: string; nodeMetadata: NodeMetadataMap; isNpmAvailable: boolean; subworkflowExecutionError: Error | null; binaryDataMode: string; } export interface CommunityPackageMap { [name: string]: PublicInstalledPackage; } export interface ICredentialTypeMap { [name: string]: ICredentialType; } export interface ICredentialMap { [name: string]: ICredentialsResponse; } export interface ICredentialsState { credentialTypes: ICredentialTypeMap; credentials: ICredentialMap; } export interface ITagsState { tags: { [id: string]: ITag }; loading: boolean; fetchedAll: boolean; fetchedUsageCount: boolean; } export type Modals = { [CREDENTIAL_EDIT_MODAL_KEY]: NewCredentialsModal; [key: string]: ModalState; }; export type ModalKey = keyof Modals; export type ModalState = { open: boolean; mode?: string | null; data?: Record; activeId?: string | null; curlCommand?: string; httpNodeParameters?: string; }; export interface NewCredentialsModal extends ModalState { showAuthSelector?: boolean; } export type IRunDataDisplayMode = 'table' | 'json' | 'binary' | 'schema' | 'html' | 'ai'; export type NodePanelType = 'input' | 'output'; export interface TargetItem { nodeName: string; itemIndex: number; runIndex: number; outputIndex: number; } export interface NDVState { activeNodeName: string | null; mainPanelDimensions: { [key: string]: { [key: string]: number } }; pushRef: string; input: { displayMode: IRunDataDisplayMode; nodeName?: string; run?: number; branch?: number; data: { isEmpty: boolean; }; }; output: { branch?: number; displayMode: IRunDataDisplayMode; data: { isEmpty: boolean; }; editMode: { enabled: boolean; value: string; }; }; focusedMappableInput: string; focusedInputPath: string; mappingTelemetry: { [key: string]: string | number | boolean }; hoveringItem: null | TargetItem; expressionOutputItemIndex: number; draggable: { isDragging: boolean; type: string; data: string; dimensions: DOMRect | null; activeTarget: { id: string; stickyPosition: null | XYPosition } | null; }; isMappingOnboarded: boolean; isTableHoverOnboarded: boolean; isAutocompleteOnboarded: boolean; highlightDraggables: boolean; } export interface NotificationOptions extends Partial { message: string | ElementNotificationOptions['message']; } export type IFakeDoor = { id: FAKE_DOOR_FEATURES; featureName: BaseTextKey; icon?: string; infoText?: BaseTextKey; actionBoxTitle: BaseTextKey; actionBoxDescription: BaseTextKey; actionBoxButtonLabel?: BaseTextKey; linkURL: string; uiLocations: IFakeDoorLocation[]; }; export type IFakeDoorLocation = | 'settings' | 'settings/users' | 'credentialsModal' | 'workflowShareModal'; export type NodeFilterType = | typeof REGULAR_NODE_CREATOR_VIEW | typeof TRIGGER_NODE_CREATOR_VIEW | typeof AI_NODE_CREATOR_VIEW | typeof AI_OTHERS_NODE_CREATOR_VIEW; export type NodeCreatorOpenSource = | '' | 'context_menu' | 'no_trigger_execution_tooltip' | 'plus_endpoint' | 'add_input_endpoint' | 'trigger_placeholder_button' | 'tab' | 'node_connection_action' | 'node_connection_drop' | 'notice_error_message' | 'add_node_button'; export interface INodeCreatorState { itemsFilter: string; showScrim: boolean; rootViewHistory: NodeFilterType[]; selectedView: NodeFilterType; openSource: NodeCreatorOpenSource; } export interface ISettingsState { initialized: boolean; settings: IN8nUISettings; userManagement: IUserManagementSettings; templatesEndpointHealthy: boolean; api: { enabled: boolean; latestVersion: number; path: string; swaggerUi: { enabled: boolean; }; }; ldap: { loginLabel: string; loginEnabled: boolean; }; saml: { loginLabel: string; loginEnabled: boolean; }; mfa: { enabled: boolean; }; saveDataErrorExecution: WorkflowSettings.SaveDataExecution; saveDataSuccessExecution: WorkflowSettings.SaveDataExecution; saveManualExecutions: boolean; saveDataProgressExecution: boolean; } export type NodeTypesByTypeNameAndVersion = { [nodeType: string]: { [version: number]: INodeTypeDescription; }; }; export interface INodeTypesState { nodeTypes: NodeTypesByTypeNameAndVersion; } export interface ITemplateState { categories: ITemplatesCategory[]; collections: { [id: string]: ITemplatesCollection }; workflows: { [id: string]: ITemplatesWorkflow | ITemplatesWorkflowFull }; workflowSearches: { [search: string]: { workflowIds: string[]; totalWorkflows: number; loadingMore?: boolean; categories?: ITemplatesCategory[]; }; }; collectionSearches: { [search: string]: { collectionIds: string[]; }; }; currentSessionId: string; previousSessionId: string; currentN8nPath: string; } export interface IVersionsState { versionNotificationSettings: IVersionNotificationSettings; nextVersions: IVersion[]; currentVersion: IVersion | undefined; } export interface IWorkflowsState { currentWorkflowExecutions: ExecutionSummary[]; activeWorkflowExecution: ExecutionSummary | null; finishedExecutionsCount: number; } export interface IWorkflowsMap { [name: string]: IWorkflowDb; } export interface CommunityNodesState { availablePackageCount: number; installedPackages: CommunityPackageMap; } export interface IRestApiContext { baseUrl: string; pushRef: string; } export interface IZoomConfig { scale: number; offset: XYPosition; origin?: XYPosition; } export interface IBounds { minX: number; minY: number; maxX: number; maxY: number; } export type ILogInStatus = 'LoggedIn' | 'LoggedOut'; export interface IInviteResponse { user: { id: string; email: string; emailSent: boolean; inviteAcceptUrl: string; }; error?: string; } export interface ITab { value: string | number; label?: string; href?: string; icon?: string; align?: 'right'; tooltip?: string; } export interface ITabBarItem { value: string; label: string; disabled?: boolean; } export interface IResourceLocatorResultExpanded extends INodeListSearchItems { linkAlt?: string; } export interface CurlToJSONResponse { 'parameters.url': string; 'parameters.authentication': string; 'parameters.method': string; 'parameters.sendHeaders': boolean; 'parameters.headerParameters.parameters.0.name': string; 'parameters.headerParameters.parameters.0.value': string; 'parameters.sendQuery': boolean; 'parameters.sendBody': boolean; } export interface HistoryState { redoStack: Undoable[]; undoStack: Undoable[]; currentBulkAction: BulkCommand | null; bulkInProgress: boolean; } export type Basic = string | number | boolean; export type Primitives = Basic | bigint | symbol; export type Optional = T | undefined | null; export type SchemaType = | 'string' | 'number' | 'boolean' | 'bigint' | 'symbol' | 'array' | 'object' | 'function' | 'null' | 'undefined'; export interface ILdapSyncData { id: number; startedAt: string; endedAt: string; created: number; updated: number; disabled: number; scanned: number; status: string; error: string; runMode: string; } export interface ILdapSyncTable { status: string; endedAt: string; runTime: string; runMode: string; details: string; } export interface ILdapConfig { loginEnabled: boolean; loginLabel: string; connectionUrl: string; allowUnauthorizedCerts: boolean; connectionSecurity: string; connectionPort: number; baseDn: string; bindingAdminDn: string; bindingAdminPassword: string; firstNameAttribute: string; lastNameAttribute: string; emailAttribute: string; loginIdAttribute: string; ldapIdAttribute: string; userFilter: string; synchronizationEnabled: boolean; synchronizationInterval: number; // minutes searchPageSize: number; searchTimeout: number; } export type Schema = { type: SchemaType; key?: string; value: string | Schema[]; path: string }; export type UsageState = { loading: boolean; data: { usage: { executions: { limit: number; // -1 for unlimited, from license value: number; warningThreshold: number; // hardcoded value in BE }; }; license: { planId: string; // community planName: string; // defaults to Community }; managementToken?: string; }; }; export type NodeAuthenticationOption = { name: string; value: string; displayOptions?: IDisplayOptions; }; export declare namespace DynamicNodeParameters { interface BaseRequest { path: string; nodeTypeAndVersion: INodeTypeNameVersion; currentNodeParameters: INodeParameters; methodName?: string; credentials?: INodeCredentials; } interface OptionsRequest extends BaseRequest { loadOptions?: ILoadOptions; } interface ResourceLocatorResultsRequest extends BaseRequest { methodName: string; filter?: string; paginationToken?: string; } interface ResourceMapperFieldsRequest extends BaseRequest { methodName: string; } interface ActionResultRequest extends BaseRequest { handler: string; payload: IDataObject | string | undefined; } } export interface EnvironmentVariable { id: string; key: string; value: string; } export type ExecutionFilterMetadata = { key: string; value: string; }; export type ExecutionFilterType = { status: string; workflowId: string; startDate: string | Date; endDate: string | Date; tags: string[]; metadata: ExecutionFilterMetadata[]; }; export type ExecutionsQueryFilter = { status?: ExecutionStatus[]; workflowId?: string; finished?: boolean; waitTill?: boolean; metadata?: Array<{ key: string; value: string }>; startedAfter?: string; startedBefore?: string; }; export type SamlAttributeMapping = { email: string; firstName: string; lastName: string; userPrincipalName: string; }; export type SamlLoginBinding = 'post' | 'redirect'; export type SamlSignatureConfig = { prefix: 'ds'; location: { reference: '/samlp:Response/saml:Issuer'; action: 'after'; }; }; export type SamlPreferencesLoginEnabled = { loginEnabled: boolean; }; export type SamlPreferences = { mapping?: SamlAttributeMapping; metadata?: string; metadataUrl?: string; ignoreSSL?: boolean; loginBinding?: SamlLoginBinding; acsBinding?: SamlLoginBinding; authnRequestsSigned?: boolean; loginLabel?: string; wantAssertionsSigned?: boolean; wantMessageSigned?: boolean; signatureConfig?: SamlSignatureConfig; } & PartialBy; export type SamlPreferencesExtractedData = { entityID: string; returnUrl: string; }; export type SshKeyTypes = ['ed25519', 'rsa']; export type SourceControlPreferences = { connected: boolean; repositoryUrl: string; branchName: string; branches: string[]; branchReadOnly: boolean; branchColor: string; publicKey?: string; keyGeneratorType?: TupleToUnion; currentBranch?: string; }; export interface SourceControlStatus { ahead: number; behind: number; conflicted: string[]; created: string[]; current: string; deleted: string[]; detached: boolean; files: Array<{ path: string; index: string; working_dir: string; }>; modified: string[]; not_added: string[]; renamed: string[]; staged: string[]; tracking: null; } export interface SourceControlAggregatedFile { conflict: boolean; file: string; id: string; location: string; name: string; status: string; type: string; updatedAt?: string; } export declare namespace Cloud { export interface PlanData { planId: number; monthlyExecutionsLimit: number; activeWorkflowsLimit: number; credentialsLimit: number; isActive: boolean; displayName: string; expirationDate: string; metadata: PlanMetadata; } export interface PlanMetadata { version: 'v1'; group: 'opt-out' | 'opt-in' | 'trial'; slug: 'pro-1' | 'pro-2' | 'starter' | 'trial-1'; trial?: Trial; } interface Trial { length: number; gracePeriod: number; } export type UserAccount = { confirmed: boolean; username: string; email: string; hasEarlyAccess?: boolean; role?: string; }; } export interface CloudPlanState { initialized: boolean; data: Cloud.PlanData | null; usage: InstanceUsage | null; loadingPlan: boolean; } export interface InstanceUsage { timeframe?: string; executions: number; activeWorkflows: number; } export type CloudPlanAndUsageData = Cloud.PlanData & { usage: InstanceUsage }; export interface ExternalSecretsProviderSecret { key: string; } export type ExternalSecretsProviderData = Record; export type ExternalSecretsProviderProperty = INodeProperties; export type ExternalSecretsProviderState = 'connected' | 'tested' | 'initializing' | 'error'; export interface ExternalSecretsProvider { icon: string; name: string; displayName: string; connected: boolean; connectedAt: string | false; state: ExternalSecretsProviderState; data?: ExternalSecretsProviderData; properties?: ExternalSecretsProviderProperty[]; } export type CloudUpdateLinkSourceType = | 'advanced-permissions' | 'canvas-nav' | 'custom-data-filter' | 'workflow_sharing' | 'credential_sharing' | 'settings-n8n-api' | 'audit-logs' | 'ldap' | 'log-streaming' | 'source-control' | 'sso' | 'usage_page' | 'settings-users' | 'variables' | 'community-nodes' | 'workflow-history' | 'worker-view' | 'external-secrets' | 'rbac' | 'debug'; export type UTMCampaign = | 'upgrade-custom-data-filter' | 'upgrade-canvas-nav' | 'upgrade-workflow-sharing' | 'upgrade-credentials-sharing' | 'upgrade-api' | 'upgrade-audit-logs' | 'upgrade-ldap' | 'upgrade-log-streaming' | 'upgrade-source-control' | 'upgrade-sso' | 'open' | 'upgrade-users' | 'upgrade-variables' | 'upgrade-community-nodes' | 'upgrade-workflow-history' | 'upgrade-advanced-permissions' | 'upgrade-worker-view' | 'upgrade-external-secrets' | 'upgrade-rbac' | 'upgrade-debug'; export type N8nBanners = { [key in BannerName]: { priority: number; component: Component; }; }; export type AddedNode = { type: string; openDetail?: boolean; isAutoAdd?: boolean; } & Partial; export type AddedNodeConnection = { from: { nodeIndex: number; outputIndex?: number; type?: NodeConnectionType }; to: { nodeIndex: number; inputIndex?: number; type?: NodeConnectionType }; }; export type AddedNodesAndConnections = { nodes: AddedNode[]; connections: AddedNodeConnection[]; }; export type ToggleNodeCreatorOptions = { createNodeActive: boolean; source?: NodeCreatorOpenSource; nodeCreatorView?: NodeFilterType; }; export type AppliedThemeOption = 'light' | 'dark'; export type ThemeOption = AppliedThemeOption | 'system'; export type NewConnectionInfo = { sourceId: string; index: number; eventSource: NodeCreatorOpenSource; connection?: Connection; nodeCreatorView?: NodeFilterType; outputType?: NodeConnectionType; endpointUuid?: string; }; export type EnterpriseEditionFeatureKey = | 'AdvancedExecutionFilters' | 'Sharing' | 'Ldap' | 'LogStreaming' | 'Variables' | 'Saml' | 'SourceControl' | 'ExternalSecrets' | 'AuditLogs' | 'DebugInEditor' | 'WorkflowHistory' | 'WorkerView' | 'AdvancedPermissions'; export type EnterpriseEditionFeatureValue = keyof Omit; export interface IN8nPromptResponse { updated: boolean; }