import { IConnections, ICredentialsDecrypted, ICredentialsEncrypted, ICredentialType, IDataObject, GenericValue, IWorkflowSettings as IWorkflowSettingsWorkflow, INode, INodeCredentials, INodeIssues, INodeParameters, INodePropertyOptions, INodeTypeDescription, INodeTypeNameVersion, IRunExecutionData, IRun, IRunData, ITaskData, ITelemetrySettings, WorkflowExecuteMode, } from 'n8n-workflow'; declare module 'jsplumb' { interface PaintStyle { stroke?: string; fill?: string; strokeWidth?: number; outlineStroke?: string; outlineWidth?: number; } interface Anchor { lastReturnValue: number[]; } interface Connection { __meta?: { sourceNodeName: string, sourceOutputIndex: number, targetNodeName: string, targetOutputIndex: number, }; canvas?: HTMLElement; connector?: { setTargetEndpoint: (endpoint: Endpoint) => void; resetTargetEndpoint: () => void; bounds: { minX: number; maxX: number; minY: number; maxY: number; } }; // bind(event: string, (connection: Connection): void;): void; // tslint:disable-line:no-any bind(event: string, callback: Function): void; removeOverlay(name: string): void; removeOverlays(): void; setParameter(name: string, value: any): void; // tslint:disable-line:no-any setPaintStyle(arg0: PaintStyle): void; addOverlay(arg0: any[]): void; // tslint:disable-line:no-any setConnector(arg0: any[]): void; // tslint:disable-line:no-any getUuids(): [string, string]; } interface Endpoint { endpoint: any; // tslint:disable-line:no-any elementId: string; __meta?: { nodeName: string, nodeId: string, index: number, totalEndpoints: number; }; getUuid(): string; getOverlay(name: string): any; // tslint:disable-line:no-any repaint(params?: object): void; } interface N8nPlusEndpoint extends Endpoint { setSuccessOutput(message: string): void; clearSuccessOutput(): void; } interface Overlay { setVisible(visible: boolean): void; setLocation(location: number): void; canvas?: HTMLElement; } interface OnConnectionBindInfo { originalSourceEndpoint: Endpoint; originalTargetEndpoint: Endpoint; getParameters(): { index: number }; } } // EndpointOptions from jsplumb seems incomplete and wrong so we define an own one export interface IEndpointOptions { anchor?: any; // tslint:disable-line:no-any createEndpoint?: boolean; dragAllowedWhenFull?: boolean; dropOptions?: any; // tslint:disable-line:no-any dragProxy?: any; // tslint:disable-line:no-any endpoint?: string; endpointStyle?: object; endpointHoverStyle?: object; isSource?: boolean; isTarget?: boolean; maxConnections?: number; overlays?: any; // tslint:disable-line:no-any parameters?: any; // tslint:disable-line:no-any uuid?: string; enabled?: boolean; cssClass?: string; } export interface IUpdateInformation { name: string; key: string; value: string | number; // with null makes problems in NodeSettings.vue node?: string; oldValue?: string | number; } export interface INodeUpdatePropertiesInformation { name: string; // Node-Name properties: { [key: string]: IDataObject; }; } export type XYPosition = [number, number]; export type MessageType = 'success' | 'warning' | 'info' | 'error'; export interface INodeUi extends INode { position: XYPosition; color?: string; notes?: string; issues?: INodeIssues; name: string; } export interface INodeTypesMaxCount { [key: string]: { exist: number; max: number; nodeNames: string[]; }; } export interface IExternalHooks { run(eventName: string, metadata?: IDataObject): Promise; } export interface IRestApi { getActiveWorkflows(): Promise; getActivationError(id: string): Promise; getCurrentExecutions(filter: object): Promise; getPastExecutions(filter: object, limit: number, lastId?: string | number, firstId?: string | number): Promise; stopCurrentExecution(executionId: string): Promise; makeRestApiRequest(method: string, endpoint: string, data?: any): Promise; // tslint:disable-line:no-any getNodeTranslationHeaders(): Promise; getNodeTypes(onlyLatest?: boolean): Promise; getNodesInformation(nodeInfos: INodeTypeNameVersion[]): Promise; getNodeParameterOptions(nodeTypeAndVersion: INodeTypeNameVersion, path: string, methodName: string, currentNodeParameters: INodeParameters, credentials?: INodeCredentials): Promise; removeTestWebhook(workflowId: string): Promise; runWorkflow(runData: IStartRunData): Promise; createNewWorkflow(sendData: IWorkflowDataUpdate): Promise; updateWorkflow(id: string, data: IWorkflowDataUpdate): Promise; deleteWorkflow(name: string): Promise; getWorkflow(id: string): Promise; getWorkflows(filter?: object): Promise; getWorkflowFromUrl(url: string): Promise; getExecution(id: string): Promise; deleteExecutions(sendData: IExecutionDeleteFilter): Promise; retryExecution(id: string, loadWorkflow?: boolean): Promise; getTimezones(): Promise; getBinaryBufferString(dataPath: string): Promise; } export interface INodeTranslationHeaders { data: { [key: string]: { displayName: string; description: string; }, }; } export interface IBinaryDisplayData { index: number; key: string; node: string; outputIndex: number; runIndex: number; } export interface IStartRunData { workflowData: IWorkflowData; startNodes?: string[]; destinationNode?: string; runData?: IRunData; } export interface IRunDataUi { node?: string; workflowData: IWorkflowData; } export interface ITableData { columns: string[]; data: GenericValue[][]; } export interface IVariableItemSelected { variable: string; } export interface IVariableSelectorOption { name: string; key?: string; value?: string; options?: IVariableSelectorOption[] | null; allowParentSelect?: boolean; dataType?: string; } // Simple version of n8n-workflow.Workflow export interface IWorkflowData { id?: string | number; name?: string; active?: boolean; nodes: INode[]; connections: IConnections; settings?: IWorkflowSettings; tags?: string[]; } export interface IWorkflowDataUpdate { id?: string | number; name?: string; nodes?: INode[]; connections?: IConnections; settings?: IWorkflowSettings; active?: boolean; tags?: ITag[] | string[]; // string[] when store or requested, ITag[] from API response } export interface IWorkflowTemplate { id: string; name: string; workflow: { nodes: INodeUi[]; connections: IConnections; }; } // 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 } // Identical to cli.Interfaces.ts export interface IWorkflowShortResponse { id: string; name: string; active: boolean; createdAt: number | string; updatedAt: number | string; tags: ITag[]; } // Identical or almost identical to cli.Interfaces.ts export interface IActivationError { time: number; error: { message: string; }; } export interface ICredentialsResponse extends ICredentialsEncrypted { id: string; createdAt: number | string; updatedAt: number | string; } export interface ICredentialsBase { createdAt: number | string; updatedAt: number | string; } export interface ICredentialsDecryptedResponse extends ICredentialsBase, ICredentialsDecrypted{ id: string; } export interface IExecutionBase { id?: number | string; finished: boolean; mode: WorkflowExecuteMode; 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; } export interface IExecutionShortResponse { id: string; workflowData: { id: string; name: string; }; mode: WorkflowExecuteMode; finished: boolean; startedAt: Date; stoppedAt: Date; executionTime?: number; } export interface IExecutionsListResponse { count: number; results: IExecutionsSummary[]; estimated: boolean; } export interface IExecutionsCurrentSummaryExtended { id: string; finished?: boolean; mode: WorkflowExecuteMode; retryOf?: string; retrySuccessId?: string; startedAt: Date; stoppedAt?: Date; workflowId: string; workflowName?: string; } export interface IExecutionsStopData { finished?: boolean; mode: WorkflowExecuteMode; startedAt: Date; stoppedAt: Date; } export interface IExecutionsSummary { id: string; mode: WorkflowExecuteMode; finished?: boolean; retryOf?: string; retrySuccessId?: string; waitTill?: Date; startedAt: Date; stoppedAt?: Date; workflowId: string; workflowName?: string; } export interface IExecutionDeleteFilter { deleteBefore?: Date; filters?: IDataObject; ids?: string[]; } export type IPushDataType = IPushData['type']; export type IPushData = | PushDataExecutionFinished | PushDataExecutionStarted | PushDataExecuteAfter | PushDataExecuteBefore | PushDataConsoleMessage | PushDataTestWebhook; type PushDataExecutionFinished = { data: IPushDataExecutionFinished; type: 'executionFinished'; }; type PushDataExecutionStarted = { data: IPushDataExecutionStarted; type: 'executionStarted'; }; type PushDataExecuteAfter = { data: IPushDataNodeExecuteAfter; type: 'nodeExecuteAfter'; }; type PushDataExecuteBefore = { data: IPushDataNodeExecuteBefore; type: 'nodeExecuteBefore'; }; type PushDataConsoleMessage = { data: IPushDataConsoleMessage; type: 'sendConsoleMessage'; }; type PushDataTestWebhook = { data: IPushDataTestWebhook; type: 'testWebhookDeleted' | 'testWebhookReceived'; }; export interface IPushDataExecutionStarted { executionId: string; mode: WorkflowExecuteMode; startedAt: Date; retryOf?: string; workflowId: string; workflowName?: string; } export interface IPushDataExecutionFinished { data: IRun; executionId: string; retryOf?: string; } export interface IPushDataExecutionStarted { executionId: string; } export interface IPushDataNodeExecuteAfter { data: ITaskData; executionId: string; nodeName: string; } export interface IPushDataNodeExecuteBefore { executionId: string; nodeName: string; } export interface IPushDataTestWebhook { executionId: string; workflowId: string; } export interface IPushDataConsoleMessage { source: string; messages: string[]; } export interface IVersionNotificationSettings { enabled: boolean; endpoint: string; infoUrl: string; } export type IPersonalizationSurveyKeys = 'codingSkill' | 'companyIndustry' | 'companySize' | 'otherCompanyIndustry' | 'otherWorkArea' | 'workArea'; export type IPersonalizationSurveyAnswers = { codingSkill: string | null; companyIndustry: string[]; companySize: string | null; otherCompanyIndustry: string | null; otherWorkArea: string | null; workArea: string[] | string | null; }; export interface IPersonalizationSurvey { answers?: IPersonalizationSurveyAnswers; shouldShow: boolean; } export interface IN8nPrompts { message: string; title: string; showContactPrompt: boolean; showValueSurvey: boolean; } export interface IN8nValueSurveyData { [key: string]: string; } export interface IN8nPromptResponse { updated: boolean; } export interface IN8nUISettings { endpointWebhook: string; endpointWebhookTest: string; saveDataErrorExecution: string; saveDataSuccessExecution: string; saveManualExecutions: boolean; timezone: string; executionTimeout: number; maxExecutionTimeout: number; oauthCallbackUrls: { oauth1: string; oauth2: string; }; urlBaseWebhook: string; versionCli: string; n8nMetadata?: { [key: string]: string | number | undefined; }; versionNotifications: IVersionNotificationSettings; instanceId: string; personalizationSurvey?: IPersonalizationSurvey; telemetry: ITelemetrySettings; defaultLocale: string; } export interface IWorkflowSettings extends IWorkflowSettingsWorkflow { errorWorkflow?: string; saveDataErrorExecution?: string; saveDataSuccessExecution?: string; saveManualExecutions?: boolean; timezone?: string; executionTimeout?: number; } export interface ITimeoutHMS { hours: number; minutes: number; seconds: number; } export type WorkflowTitleStatus = 'EXECUTING' | 'IDLE' | 'ERROR'; export type MenuItemType = 'link'; export type MenuItemPosition = 'top' | 'bottom'; export interface IMenuItem { id: string; type: MenuItemType; position?: MenuItemPosition; properties: ILinkMenuItemProperties; } export interface ILinkMenuItemProperties { title: string; icon: string; href: string; newWindow?: boolean; } export interface ISubcategoryItemProps { subcategory: string; description: string; } export interface INodeItemProps { subcategory: string; nodeType: INodeTypeDescription; } export interface ICategoryItemProps { expanded: boolean; } export interface INodeCreateElement { type: 'node' | 'category' | 'subcategory'; category: string; key: string; includedByTrigger?: boolean; includedByRegular?: boolean; properties: ISubcategoryItemProps | INodeItemProps | ICategoryItemProps; } export interface ICategoriesWithNodes { [category: string]: { [subcategory: string]: { regularCount: number; triggerCount: number; nodes: INodeCreateElement[]; }; }; } export interface ITag { id: string; name: string; usageCount?: number; } export interface ITagRow { tag?: ITag; usage?: string; create?: boolean; disable?: boolean; update?: boolean; delete?: 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; defaults: INodeParameters; iconData: { type: string; icon?: string; fileBuffer?: string; }; } export interface IRootState { activeExecutions: IExecutionsCurrentSummaryExtended[]; activeWorkflows: string[]; activeActions: string[]; activeNode: string | null; baseUrl: string; credentialTextRenderKeys: { nodeType: string; credentialType: string; } | null; defaultLocale: string; endpointWebhook: string; endpointWebhookTest: string; executionId: string | null; executingNode: string | null; 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; lastSelectedNode: string | null; lastSelectedNodeOutputIndex: number | null; nodeIndex: Array; nodeTypes: INodeTypeDescription[]; nodeViewOffsetPosition: XYPosition; nodeViewMoveInProgress: boolean; selectedNodes: INodeUi[]; sessionId: string; urlBaseWebhook: string; workflow: IWorkflowDb; sidebarMenuItems: IMenuItem[]; instanceId: string; telemetry: ITelemetrySettings | null; } 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 }; isLoading: boolean; fetchedAll: boolean; fetchedUsageCount: boolean; } export interface IModalState { open: boolean; mode?: string | null; activeId?: string | null; } export interface IUiState { sidebarMenuCollapsed: boolean; modalStack: string[]; modals: { [key: string]: IModalState; }; isPageLoading: boolean; } export interface ISettingsState { settings: IN8nUISettings; promptsData: IN8nPrompts; } export interface IVersionsState { versionNotificationSettings: IVersionNotificationSettings; nextVersions: IVersion[]; currentVersion: IVersion | undefined; } export interface IWorkflowsState { } export interface IRestApiContext { baseUrl: string; sessionId: string; } export interface IZoomConfig { scale: number; offset: XYPosition; } export interface IBounds { minX: number; minY: number; maxX: number; maxY: number; }