UNPKG

n8n

Version:

n8n Workflow Automation Tool

705 lines (704 loc) 19.2 kB
import type { AuthenticationMethod, ProjectRelation } from '@n8n/api-types'; import type { AuthProviderType, User, IWorkflowDb } from '@n8n/db'; import type { CancellationReason, IPersonalizationSurveyAnswersV4, IRun, IWorkflowBase, IWorkflowExecutionDataProcess, JsonValue, WorkflowExecuteMode, WorkflowSettings } from 'n8n-workflow'; import type { ConcurrencyQueueType } from '../../concurrency/concurrency-control.service'; import type { TokenExchangeFailureReason } from '../../modules/token-exchange/token-exchange.types'; import type { AiEventMap } from './ai.event-map'; export type WorkflowActionSource = 'ui' | 'api' | 'n8n-mcp' | 'n8n-ai'; export type UserLike = { id: string; email?: string; firstName?: string; lastName?: string; role?: { slug: string; }; }; export type ProjectSummary = { id: string; name: string; }; export type RelayEventMap = { 'server-started': {}; 'session-started': { pushRef?: string; }; 'instance-stopped': {}; 'instance-owner-setup': { userId: string; }; 'first-production-workflow-succeeded': { projectId: string; workflowId: string; userId: string | null; }; 'instance-first-production-workflow-failed': { projectId: string; workflowId: string; workflowName: string; userId: string; }; 'first-workflow-data-loaded': { userId: string; workflowId: string; nodeType: string; nodeId: string; credentialType?: string; credentialId?: string; }; 'workflow-created': { user: UserLike; workflow: IWorkflowBase; publicApi: boolean; projectId: string; projectType: string; uiContext?: string; source?: WorkflowActionSource; }; 'workflow-deleted': { user: UserLike; workflowId: string; publicApi: boolean; }; 'workflow-archived': { user: UserLike; workflowId: string; publicApi: boolean; }; 'workflow-unarchived': { user: UserLike; workflowId: string; publicApi: boolean; }; 'workflow-saved': { user: UserLike; workflow: IWorkflowDb; publicApi: boolean; previousWorkflow?: IWorkflowDb; aiBuilderAssisted?: boolean; settingsChanged?: Record<string, { from: JsonValue; to: JsonValue; }>; source?: WorkflowActionSource; }; 'workflow-activated': { user: UserLike; workflowId: string; workflow: IWorkflowDb; publicApi: boolean; source?: WorkflowActionSource; }; 'workflow-deactivated': { user: UserLike; workflowId: string; workflow: IWorkflowDb; publicApi: boolean; deactivatedVersionId: string | null; source?: WorkflowActionSource; }; 'workflow-pre-execute': { executionId: string; data: IWorkflowExecutionDataProcess | IWorkflowBase; mode: WorkflowExecuteMode; projectId?: string; projectName?: string; }; 'workflow-post-execute': { executionId: string; userId?: string; workflow: IWorkflowBase; runData?: IRun; projectId?: string; projectName?: string; }; 'workflow-sharing-updated': { workflowId: string; userIdSharer: string; userIdList: string[]; }; 'workflow-executed': { user?: UserLike; workflowId: string; workflowName: string; executionId: string; source: 'user-manual' | 'user-retry' | 'webhook' | 'trigger' | 'error' | 'cli' | 'integrated' | 'evaluation' | 'chat'; }; 'workflow-version-updated': { user: UserLike; workflowId: string; workflowName: string; versionId: string; versionName?: string | null; versionDescription?: string | null; }; 'node-pre-execute': { executionId: string; workflow: IWorkflowBase; nodeId?: string; nodeName: string; nodeType?: string; }; 'node-post-execute': { executionId: string; workflow: IWorkflowBase; nodeId?: string; nodeName: string; nodeType?: string; }; 'user-submitted-personalization-survey': { userId: string; answers: IPersonalizationSurveyAnswersV4; }; 'user-deleted': { user: UserLike; publicApi: boolean; targetUserOldStatus: 'active' | 'invited'; migrationStrategy?: 'transfer_data' | 'delete_data'; targetUserId?: string; migrationUserId?: string; }; 'user-invited': { user: UserLike; targetUserId: string[]; publicApi: boolean; emailSent: boolean; inviteeRole: string; }; 'user-reinvited': { user: UserLike; targetUserId: string[]; }; 'user-updated': { user: UserLike; fieldsChanged: string[]; }; 'user-mfa-enabled': { user: UserLike; }; 'user-mfa-disabled': { user: UserLike; disableMethod: 'mfaCode' | 'recoveryCode'; }; 'user-signed-up': { user: UserLike; userType: AuthProviderType; wasDisabledLdapUser: boolean; }; 'user-logged-in': { user: UserLike; authenticationMethod: AuthenticationMethod; }; 'user-login-failed': { userEmail: string; authenticationMethod: AuthenticationMethod; reason?: string; }; 'user-changed-role': { userId: string; targetUserId: string; publicApi: boolean; targetUserNewRole: string; }; 'user-retrieved-user': { userId: string; publicApi: boolean; }; 'user-retrieved-all-users': { userId: string; publicApi: boolean; }; 'user-retrieved-execution': { userId: string; publicApi: boolean; }; 'user-retrieved-all-executions': { userId: string; publicApi: boolean; }; 'user-retried-execution': { userId: string; publicApi: boolean; }; 'user-retrieved-workflow': { userId: string; publicApi: boolean; }; 'user-retrieved-workflow-version': { userId: string; publicApi: boolean; }; 'user-retrieved-all-workflows': { userId: string; publicApi: boolean; }; 'user-invite-email-click': { inviter: UserLike; invitee: UserLike; }; 'user-password-reset-email-click': { user: UserLike; }; 'user-password-reset-request-click': { user: UserLike; }; 'user-transactional-email-sent': { userId: string; messageType: 'Reset password' | 'New user invite' | 'Resend invite' | 'Workflow auto-deactivated' | 'Workflow shared' | 'Credentials shared' | 'Project shared'; publicApi: boolean; }; 'public-api-key-created': { user: UserLike; publicApi: boolean; }; 'public-api-key-deleted': { user: UserLike; publicApi: boolean; }; 'public-api-invoked': { userId: string; path: string; method: string; apiVersion: string; userAgent?: string; }; 'email-failed': { user: UserLike; messageType: 'Reset password' | 'New user invite' | 'Resend invite' | 'Workflow shared' | 'Workflow auto-deactivated' | 'Credentials shared' | 'Project shared'; publicApi: boolean; }; 'credentials-created': { user: UserLike; credentialType: string; credentialId: string; publicApi: boolean; projectId?: string; projectType?: string; uiContext?: string; isDynamic?: boolean; usesExternalSecrets?: boolean; }; 'credentials-shared': { user: UserLike; credentialType: string; credentialId: string; userIdSharer: string; userIdsShareesAdded: string[]; shareesRemoved: number | null; }; 'credentials-updated': { user: UserLike; credentialType: string; credentialId: string; isDynamic?: boolean; usesExternalSecrets?: boolean; }; 'credentials-deleted': { user: UserLike; credentialType: string; credentialId: string; }; 'community-package-installed': { user: UserLike; inputString: string; packageName: string; success: boolean; packageVersion?: string; packageNodeNames?: string[]; packageAuthor?: string; packageAuthorEmail?: string; failureReason?: string; }; 'community-package-updated': { user: UserLike; packageName: string; packageVersionCurrent: string; packageVersionNew: string; packageNodeNames: string[]; packageAuthor?: string; packageAuthorEmail?: string; }; 'community-package-deleted': { user: UserLike; packageName: string; packageVersion: string; packageNodeNames: string[]; packageAuthor?: string; packageAuthorEmail?: string; }; 'execution-throttled': { executionId: string; type: ConcurrencyQueueType; }; 'execution-started-during-bootup': { executionId: string; }; 'execution-cancelled': { executionId: string; workflowId?: string; workflowName?: string; reason: CancellationReason; }; 'execution-deleted': { user: UserLike; executionIds: string[]; deleteBefore?: Date; }; 'execution-waiting': { executionId: string; workflowId: string; }; 'execution-resumed': { executionId: string; workflowId: string; resumeSource: 'webhook'; responseAt: Date; }; 'execution-data-revealed': { user: UserLike; executionId: string; workflowId: string; ipAddress: string; userAgent: string; redactionPolicy: WorkflowSettings.RedactionPolicy; }; 'execution-data-reveal-failure': { user: UserLike; executionId: string; workflowId: string; ipAddress: string; userAgent: string; redactionPolicy: WorkflowSettings.RedactionPolicy; rejectionReason: string; }; 'team-project-updated': { userId: string; role: string; members: ProjectRelation[]; projectId: string; }; 'team-project-deleted': { userId: string; role: string; projectId: string; removalType: 'transfer' | 'delete'; targetProjectId?: string; }; 'team-project-created': { userId: string; role: string; uiContext?: string; }; 'source-control-settings-updated': { branchName: string; readOnlyInstance: boolean; repoType: 'github' | 'gitlab' | 'other'; connected: boolean; connectionType: 'ssh' | 'https'; }; 'source-control-user-started-pull-ui': { userId?: string; workflowUpdates: number; workflowConflicts: number; credConflicts: number; }; 'source-control-user-finished-pull-ui': { userId?: string; workflowUpdates: number; }; 'source-control-user-pulled-api': { workflowUpdates: number; forced: boolean; }; 'source-control-user-started-push-ui': { userId?: string; workflowsEligible: number; workflowsEligibleWithConflicts: number; credsEligible: number; credsEligibleWithConflicts: number; variablesEligible: number; }; 'source-control-user-finished-push-ui': { userId: string; workflowsEligible: number; workflowsPushed: number; credsPushed: number; variablesPushed: number; }; 'license-renewal-attempted': { success: boolean; }; 'license-community-plus-registered': { userId: User['id']; email: string; licenseKey: string; }; 'variable-created': { user: UserLike; variableId: string; variableKey: string; projectId?: string; }; 'variable-updated': { user: UserLike; variableId: string; variableKey: string; projectId?: string; }; 'variable-deleted': { user: UserLike; variableId: string; variableKey: string; projectId?: string; }; 'external-secrets-provider-settings-saved': { userId?: string; vaultType: string; isValid: boolean; isNew: boolean; errorMessage?: string; }; 'external-secrets-provider-reloaded': { vaultType: string; }; 'external-secrets-connection-created': { userId: string; userRole?: string; providerKey: string; vaultType: string; projects: ProjectSummary[]; }; 'external-secrets-connection-updated': { userId: string; userRole?: string; providerKey: string; vaultType: string; projects: ProjectSummary[]; }; 'external-secrets-connection-deleted': { userId: string; userRole?: string; providerKey: string; vaultType: string; projects: ProjectSummary[]; }; 'external-secrets-connection-tested': { userId: string; userRole?: string; providerKey: string; vaultType: string; projects: ProjectSummary[]; isValid: boolean; errorMessage?: string; }; 'external-secrets-connection-reloaded': { userId: string; userRole?: string; providerKey: string; vaultType: string; projects: ProjectSummary[]; }; 'external-secrets-system-roles-toggled': { userId: string; enabled: boolean; }; 'ldap-general-sync-finished': { type: string; succeeded: boolean; usersSynced: number; error: string; }; 'ldap-settings-updated': { userId: string; loginIdAttribute: string; firstNameAttribute: string; lastNameAttribute: string; emailAttribute: string; ldapIdAttribute: string; searchPageSize: number; searchTimeout: number; synchronizationEnabled: boolean; synchronizationInterval: number; loginLabel: string; loginEnabled: boolean; }; 'ldap-login-sync-failed': { error: string; }; 'login-failed-due-to-ldap-disabled': { userId: string; }; 'sso-user-project-access-updated': { projectsRemoved: number; projectsAdded: number; userId: string; }; 'sso-user-instance-role-updated': { role: string; userId: string; }; 'expression-mapping-roles-resolved': { userId: string; userEmail: string; provider: 'oidc' | 'saml' | 'ldap'; instanceRole: { role: string; previousRole: string; changed: boolean; matchedRuleId: string | null; expression: string | null; isFallback: boolean; }; projectRoles: Array<{ projectId: string; role: string; previousRole: string | null; changed: boolean; matchedRuleId: string; expression: string; }>; removedProjectIds: string[]; }; 'role-mapping-rule-created': { user: UserLike; ruleId: string; ruleType: 'instance' | 'project'; expression: string; role: string; }; 'role-mapping-rule-updated': { user: UserLike; ruleId: string; ruleType: 'instance' | 'project'; patchedFields: string[]; }; 'role-mapping-rule-deleted': { user: UserLike; ruleId: string; ruleType: 'instance' | 'project'; }; 'role-mapping-rules-bulk-deleted': { ruleType: 'instance' | 'project'; count: number; reason: 'strategy-switch'; }; 'token-exchange-succeeded': { subject: string; actor?: string; scopes?: string; resource?: string; grantType: string; kid?: string; issuer: string; tokenId?: string; clientIp: string; }; 'token-exchange-failed': { subject?: string; failureReason: TokenExchangeFailureReason; grantType: string; clientIp: string; }; 'embed-login': { subject: string; issuer: string; kid: string; clientIp: string; }; 'embed-login-failed': { failureReason: TokenExchangeFailureReason; clientIp: string; }; 'token-exchange-identity-linked': { userId: string; sub: string; email: string; kid: string; issuer: string; }; 'token-exchange-user-provisioned': { userId: string; sub: string; email: string; role: string; kid: string; issuer: string; }; 'token-exchange-role-updated': { userId: string; previousRole: string; newRole: string; kid: string; issuer: string; }; 'runner-task-requested': { taskId: string; nodeId: string; workflowId: string; executionId: string; }; 'runner-response-received': { taskId: string; nodeId: string; workflowId: string; executionId: string; }; 'job-enqueued': { executionId: string; workflowId: string; hostId: string; jobId: string; }; 'job-dequeued': { executionId: string; workflowId: string; hostId: string; jobId: string; }; 'job-stalled': { executionId: string; workflowId: string; hostId: string; jobId: string; }; 'history-compacted': { workflowsProcessed: number; totalVersionsSeen: number; totalVersionsDeleted: number; errorCount: number; durationMs: number; windowStartIso: string; windowEndIso: string; compactionStartTime: Date; }; 'data-table-deleted': { dataTableId: string; projectId: string; }; 'folder-deleted': { folderId: string; projectId: string; }; 'instance-policies-updated': { user: UserLike; settingName: '2fa_enforcement' | 'workflow_publishing' | 'workflow_sharing'; value: boolean; }; 'custom-role-created': { userId: string; roleSlug: string; scopes: string[]; }; 'custom-role-updated': { userId: string; roleSlug: string; scopes: string[]; }; 'custom-role-deleted': { userId: string; roleSlug: string; }; 'instance-ai-settings-updated': { mcpSettingsChanged: boolean; }; } & AiEventMap;