From ed3bc154b05314c432c89bfebee04d4dda58c5e1 Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Wed, 10 May 2023 18:10:03 +0300 Subject: [PATCH] refactor(editor): Stricter linting for promises and async functions (no-changelog) (#4642) --- packages/editor-ui/.eslintrc.js | 3 -- packages/editor-ui/src/App.vue | 14 ++++---- .../editor-ui/src/__tests__/server/index.ts | 2 +- packages/editor-ui/src/__tests__/utils.ts | 15 +++++--- packages/editor-ui/src/api/api-keys.ts | 8 ++--- packages/editor-ui/src/api/communityNodes.ts | 6 ++-- packages/editor-ui/src/api/credentials.ee.ts | 2 +- packages/editor-ui/src/api/credentials.ts | 6 ++-- packages/editor-ui/src/api/curlHelper.ts | 4 +-- packages/editor-ui/src/api/environments.ee.ts | 15 +++----- packages/editor-ui/src/api/ldap.ts | 12 +++---- packages/editor-ui/src/api/nodeTypes.ts | 2 +- packages/editor-ui/src/api/settings.ts | 10 +++--- packages/editor-ui/src/api/sso.ts | 12 +++---- packages/editor-ui/src/api/tags.ts | 8 ++--- packages/editor-ui/src/api/templates.ts | 14 ++++---- packages/editor-ui/src/api/usage.ts | 8 ++--- packages/editor-ui/src/api/users.ts | 28 ++++++++------- packages/editor-ui/src/api/versionControl.ts | 14 ++++---- packages/editor-ui/src/api/versions.ts | 4 +-- .../editor-ui/src/api/workflow-webhooks.ts | 6 ++-- packages/editor-ui/src/api/workflows.ee.ts | 2 +- packages/editor-ui/src/api/workflows.ts | 14 ++++---- .../src/components/CollectionParameter.vue | 2 +- .../src/components/CredentialCard.vue | 4 +-- .../CredentialEdit/CredentialEdit.vue | 14 ++++---- .../CredentialEdit/CredentialSharing.ee.vue | 4 +-- .../src/components/CredentialsSelectModal.vue | 2 +- .../ExecutionsInfoAccordion.vue | 2 +- .../ExecutionsView/ExecutionsLandingPage.vue | 2 +- .../ExecutionsView/ExecutionsList.vue | 10 +++--- .../src/components/ExpressionEdit.vue | 4 +-- .../components/FixedCollectionParameter.vue | 2 +- .../editor-ui/src/components/GoBackButton.vue | 2 +- .../src/components/MainHeader/MainHeader.vue | 9 +++-- .../components/MainHeader/WorkflowDetails.vue | 4 +-- .../editor-ui/src/components/MainSidebar.vue | 6 ++-- .../src/components/NDVDraggablePanels.vue | 2 +- packages/editor-ui/src/components/Node.vue | 2 +- .../src/components/Node/NodeCreation.vue | 2 +- .../Node/NodeCreator/Modes/ActionsMode.vue | 4 +-- .../Node/NodeCreator/Panel/NodesListPanel.vue | 6 ++-- .../Node/NodeCreator/Panel/SearchBar.vue | 4 ++- .../__tests__/NodesListPanel.test.ts | 8 ++--- .../NodeCreator/composables/useActions.ts | 2 +- .../composables/useKeyboardNavigation.ts | 2 +- .../src/components/NodeDetailsView.vue | 4 +-- .../src/components/NodeExecuteButton.vue | 6 ++-- .../editor-ui/src/components/NodeSettings.vue | 6 ++-- .../src/components/ParameterInput.vue | 6 ++-- .../src/components/ParameterInputList.vue | 6 ++-- .../src/components/PersonalizationModal.vue | 4 +-- .../ResourceLocator/ResourceLocator.vue | 6 ++-- packages/editor-ui/src/components/RunData.vue | 10 +++--- .../editor-ui/src/components/RunDataJson.vue | 4 +-- .../src/components/RunDataSchema.vue | 2 +- .../editor-ui/src/components/RunDataTable.vue | 2 +- .../EventDestinationCard.ee.vue | 6 ++-- .../EventDestinationSettingsModal.ee.vue | 16 ++++----- .../EventSelection.ee.vue | 4 +-- .../SettingsLogStreaming/Helpers.ee.ts | 2 +- .../src/components/SettingsSidebar.vue | 18 +++++----- .../editor-ui/src/components/TagsDropdown.vue | 4 +-- .../components/TagsManager/TagsManager.vue | 4 +-- .../src/components/TemplateDetails.vue | 4 +-- .../components/UserActivationSurveyModal.vue | 2 +- .../src/components/WorkflowActivator.vue | 2 +- .../editor-ui/src/components/WorkflowCard.vue | 2 +- .../src/components/WorkflowShareModal.ee.vue | 8 ++--- .../__tests__/PersonalizationModal.spec.ts | 4 +-- .../layouts/ResourcesListLayout.vue | 2 +- .../src/composables/useExternalHooks.ts | 2 +- .../src/composables/useHistoryHelper.ts | 8 ++--- .../editor-ui/src/composables/useMessage.ts | 12 +++---- .../editor-ui/src/composables/useToast.ts | 2 +- .../src/composables/useUpgradeLink.ts | 2 +- packages/editor-ui/src/main.ts | 4 +-- .../editor-ui/src/mixins/pushConnection.ts | 10 +++--- packages/editor-ui/src/mixins/showMessage.ts | 2 +- .../editor-ui/src/mixins/workflowActivate.ts | 2 +- .../editor-ui/src/mixins/workflowHelpers.ts | 2 +- packages/editor-ui/src/mixins/workflowRun.ts | 4 +-- .../completions/datatype.completions.ts | 3 +- .../luxon.instance.docs.ts | 2 +- .../luxon.static.docs.ts | 2 +- .../editor-ui/src/stores/credentials.store.ts | 18 +++++----- .../editor-ui/src/stores/nodeTypes.store.ts | 2 +- .../editor-ui/src/stores/settings.store.ts | 10 +++--- packages/editor-ui/src/stores/sso.store.ts | 14 ++++---- .../editor-ui/src/stores/templates.store.ts | 2 +- packages/editor-ui/src/stores/ui.store.ts | 8 ++--- packages/editor-ui/src/stores/usage.store.ts | 2 +- packages/editor-ui/src/stores/users.store.ts | 4 +-- .../editor-ui/src/stores/workflows.store.ts | 16 ++++----- packages/editor-ui/src/utils/apiUtils.ts | 4 +-- .../editor-ui/src/utils/nodeTypesUtils.ts | 6 ++-- .../editor-ui/src/views/CredentialsView.vue | 2 +- packages/editor-ui/src/views/ErrorView.vue | 2 +- packages/editor-ui/src/views/NodeView.vue | 34 +++++++++---------- .../editor-ui/src/views/SettingsApiView.vue | 4 +-- .../src/views/SettingsCommunityNodesView.vue | 6 +++- .../editor-ui/src/views/SettingsUsersView.vue | 2 +- .../src/views/SettingsVersionControl.vue | 4 +-- packages/editor-ui/src/views/SettingsView.vue | 4 ++- packages/editor-ui/src/views/SetupView.vue | 6 ++-- packages/editor-ui/src/views/SigninView.vue | 4 +-- packages/editor-ui/src/views/SignoutView.vue | 4 +-- packages/editor-ui/src/views/SignupView.vue | 2 +- .../src/views/TemplatesCollectionView.vue | 4 +-- .../src/views/TemplatesSearchView.vue | 16 ++++----- .../src/views/TemplatesWorkflowView.vue | 4 +-- .../editor-ui/src/views/WorkflowsView.vue | 7 ++-- packages/workflow/src/Extensions/index.ts | 3 +- packages/workflow/src/index.ts | 2 +- 114 files changed, 351 insertions(+), 344 deletions(-) diff --git a/packages/editor-ui/.eslintrc.js b/packages/editor-ui/.eslintrc.js index f02707cc302b6..4ac9eccb42b84 100644 --- a/packages/editor-ui/.eslintrc.js +++ b/packages/editor-ui/.eslintrc.js @@ -26,7 +26,6 @@ module.exports = { '@typescript-eslint/naming-convention': 'off', '@typescript-eslint/no-duplicate-imports': 'off', '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-floating-promises': 'off', '@typescript-eslint/no-for-in-array': 'off', '@typescript-eslint/no-loop-func': 'off', '@typescript-eslint/no-non-null-assertion': 'off', @@ -45,10 +44,8 @@ module.exports = { '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/prefer-nullish-coalescing': 'off', '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/promise-function-async': 'off', '@typescript-eslint/restrict-plus-operands': 'off', '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/return-await': 'off', '@typescript-eslint/unbound-method': 'off', '@typescript-eslint/ban-ts-comment': ['warn', { 'ts-ignore': true }], }, diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index 3969c9fd678b1..7bbd5c668a400 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -135,7 +135,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ return; } - this.$router.replace({ name: VIEWS.SETUP }); + void this.$router.replace({ name: VIEWS.SETUP }); return; } @@ -149,7 +149,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ const redirect = this.$route.query.redirect || encodeURIComponent(`${window.location.pathname}${window.location.search}`); - this.$router.replace({ name: VIEWS.SIGNIN, query: { redirect } }); + void this.$router.replace({ name: VIEWS.SIGNIN, query: { redirect } }); return; } @@ -158,13 +158,13 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ const redirect = decodeURIComponent(this.$route.query.redirect); if (redirect.startsWith('/')) { // protect against phishing - this.$router.replace(redirect); + void this.$router.replace(redirect); return; } } // if cannot access page and is logged in - this.$router.replace({ name: VIEWS.HOMEPAGE }); + void this.$router.replace({ name: VIEWS.HOMEPAGE }); }, redirectIfNecessary() { const redirect = @@ -172,7 +172,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ typeof this.$route.meta.getRedirect === 'function' && this.$route.meta.getRedirect(); if (redirect) { - this.$router.replace(redirect); + void this.$router.replace(redirect); } }, setTheme() { @@ -203,7 +203,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ this.versionControlStore.isEnterpriseVersionControlEnabled && this.usersStore.isInstanceOwner ) { - this.versionControlStore.getPreferences(); + void this.versionControlStore.getPreferences(); } }, watch: { @@ -214,7 +214,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ this.trackPage(); }, defaultLocale(newLocale) { - loadLanguage(newLocale); + void loadLanguage(newLocale); }, }, }); diff --git a/packages/editor-ui/src/__tests__/server/index.ts b/packages/editor-ui/src/__tests__/server/index.ts index 7eb78caacad29..f0dea12024c29 100644 --- a/packages/editor-ui/src/__tests__/server/index.ts +++ b/packages/editor-ui/src/__tests__/server/index.ts @@ -24,7 +24,7 @@ export function setupServer() { server.logging = false; // Handle undefined endpoints - server.post('/rest/:any', () => new Promise(() => {})); + server.post('/rest/:any', async () => new Promise(() => {})); // Handle defined endpoints for (const endpointsFn of endpoints) { diff --git a/packages/editor-ui/src/__tests__/utils.ts b/packages/editor-ui/src/__tests__/utils.ts index c6d167f06c3ee..f6f779709072a 100644 --- a/packages/editor-ui/src/__tests__/utils.ts +++ b/packages/editor-ui/src/__tests__/utils.ts @@ -3,7 +3,7 @@ import { UserManagementAuthenticationMethod } from '@/Interface'; import { render } from '@testing-library/vue'; import { PiniaVuePlugin } from 'pinia'; -export const retry = (assertion: () => any, { interval = 20, timeout = 200 } = {}) => { +export const retry = async (assertion: () => any, { interval = 20, timeout = 200 } = {}) => { return new Promise((resolve, reject) => { const startTime = Date.now(); @@ -27,7 +27,7 @@ export const renderComponent = (Component: RenderParams[0], renderOptions: Rende vue.use(PiniaVuePlugin); }); -export const waitAllPromises = () => new Promise((resolve) => setTimeout(resolve)); +export const waitAllPromises = async () => new Promise((resolve) => setTimeout(resolve)); export const SETTINGS_STORE_DEFAULT_STATE: ISettingsState = { settings: { @@ -43,8 +43,10 @@ export const SETTINGS_STORE_DEFAULT_STATE: ISettingsState = { ldap: false, saml: false, logStreaming: false, + variables: false, + versionControl: false, }, - executionMode: '', + executionMode: 'regular', executionTimeout: 0, hideUsagePage: false, hiringBannerEnabled: false, @@ -66,8 +68,8 @@ export const SETTINGS_STORE_DEFAULT_STATE: ISettingsState = { }, publicApi: { enabled: false, latestVersion: 0, path: '', swaggerUi: { enabled: false } }, pushBackend: 'sse', - saveDataErrorExecution: '', - saveDataSuccessExecution: '', + saveDataErrorExecution: 'all', + saveDataSuccessExecution: 'all', saveManualExecutions: false, sso: { ldap: { loginEnabled: false, loginLabel: '' }, @@ -94,6 +96,9 @@ export const SETTINGS_STORE_DEFAULT_STATE: ISettingsState = { deployment: { type: 'default', }, + variables: { + limit: 100, + }, }, promptsData: { message: '', diff --git a/packages/editor-ui/src/api/api-keys.ts b/packages/editor-ui/src/api/api-keys.ts index f864ffbe17364..7ba8ff8dcf8d3 100644 --- a/packages/editor-ui/src/api/api-keys.ts +++ b/packages/editor-ui/src/api/api-keys.ts @@ -1,14 +1,14 @@ import type { IRestApiContext } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; -export function getApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> { +export async function getApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> { return makeRestApiRequest(context, 'GET', '/me/api-key'); } -export function createApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> { +export async function createApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> { return makeRestApiRequest(context, 'POST', '/me/api-key'); } -export function deleteApiKey(context: IRestApiContext): Promise<{ success: boolean }> { +export async function deleteApiKey(context: IRestApiContext): Promise<{ success: boolean }> { return makeRestApiRequest(context, 'DELETE', '/me/api-key'); } diff --git a/packages/editor-ui/src/api/communityNodes.ts b/packages/editor-ui/src/api/communityNodes.ts index ec8212bff36ba..bb75161b92daf 100644 --- a/packages/editor-ui/src/api/communityNodes.ts +++ b/packages/editor-ui/src/api/communityNodes.ts @@ -13,16 +13,16 @@ export async function installNewPackage( context: IRestApiContext, name: string, ): Promise { - return await post(context.baseUrl, '/nodes', { name }); + return post(context.baseUrl, '/nodes', { name }); } export async function uninstallPackage(context: IRestApiContext, name: string): Promise { - return await makeRestApiRequest(context, 'DELETE', '/nodes', { name }); + return makeRestApiRequest(context, 'DELETE', '/nodes', { name }); } export async function updatePackage( context: IRestApiContext, name: string, ): Promise { - return await makeRestApiRequest(context, 'PATCH', '/nodes', { name }); + return makeRestApiRequest(context, 'PATCH', '/nodes', { name }); } diff --git a/packages/editor-ui/src/api/credentials.ee.ts b/packages/editor-ui/src/api/credentials.ee.ts index 3067b906888d4..5ec8c434d005d 100644 --- a/packages/editor-ui/src/api/credentials.ee.ts +++ b/packages/editor-ui/src/api/credentials.ee.ts @@ -1,5 +1,5 @@ import type { ICredentialsResponse, IRestApiContext, IShareCredentialsPayload } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { IDataObject } from 'n8n-workflow'; export async function setCredentialSharedWith( diff --git a/packages/editor-ui/src/api/credentials.ts b/packages/editor-ui/src/api/credentials.ts index 3bef8e9e9fe41..7e205dfd3a839 100644 --- a/packages/editor-ui/src/api/credentials.ts +++ b/packages/editor-ui/src/api/credentials.ts @@ -3,7 +3,7 @@ import type { ICredentialsResponse, IRestApiContext, } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { ICredentialsDecrypted, ICredentialType, @@ -22,11 +22,11 @@ export async function getCredentialsNewName( context: IRestApiContext, name?: string, ): Promise<{ name: string }> { - return await makeRestApiRequest(context, 'GET', '/credentials/new', name ? { name } : {}); + return makeRestApiRequest(context, 'GET', '/credentials/new', name ? { name } : {}); } export async function getAllCredentials(context: IRestApiContext): Promise { - return await makeRestApiRequest(context, 'GET', '/credentials'); + return makeRestApiRequest(context, 'GET', '/credentials'); } export async function createNewCredential( diff --git a/packages/editor-ui/src/api/curlHelper.ts b/packages/editor-ui/src/api/curlHelper.ts index 7089201eb2e70..206a40462b424 100644 --- a/packages/editor-ui/src/api/curlHelper.ts +++ b/packages/editor-ui/src/api/curlHelper.ts @@ -1,7 +1,7 @@ import type { CurlToJSONResponse, IRestApiContext } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; -export function getCurlToJson( +export async function getCurlToJson( context: IRestApiContext, curlCommand: string, ): Promise { diff --git a/packages/editor-ui/src/api/environments.ee.ts b/packages/editor-ui/src/api/environments.ee.ts index f5a386a059319..09d91d2a5b76c 100644 --- a/packages/editor-ui/src/api/environments.ee.ts +++ b/packages/editor-ui/src/api/environments.ee.ts @@ -3,38 +3,33 @@ import { makeRestApiRequest } from '@/utils'; import type { IDataObject } from 'n8n-workflow'; export async function getVariables(context: IRestApiContext): Promise { - return await makeRestApiRequest(context, 'GET', '/variables'); + return makeRestApiRequest(context, 'GET', '/variables'); } export async function getVariable( context: IRestApiContext, { id }: { id: EnvironmentVariable['id'] }, ): Promise { - return await makeRestApiRequest(context, 'GET', `/variables/${id}`); + return makeRestApiRequest(context, 'GET', `/variables/${id}`); } export async function createVariable( context: IRestApiContext, data: Omit, ) { - return await makeRestApiRequest(context, 'POST', '/variables', data as unknown as IDataObject); + return makeRestApiRequest(context, 'POST', '/variables', data as unknown as IDataObject); } export async function updateVariable( context: IRestApiContext, { id, ...data }: EnvironmentVariable, ) { - return await makeRestApiRequest( - context, - 'PATCH', - `/variables/${id}`, - data as unknown as IDataObject, - ); + return makeRestApiRequest(context, 'PATCH', `/variables/${id}`, data as unknown as IDataObject); } export async function deleteVariable( context: IRestApiContext, { id }: { id: EnvironmentVariable['id'] }, ) { - return await makeRestApiRequest(context, 'DELETE', `/variables/${id}`); + return makeRestApiRequest(context, 'DELETE', `/variables/${id}`); } diff --git a/packages/editor-ui/src/api/ldap.ts b/packages/editor-ui/src/api/ldap.ts index 2daa45905c782..0a90ff7abc8fa 100644 --- a/packages/editor-ui/src/api/ldap.ts +++ b/packages/editor-ui/src/api/ldap.ts @@ -1,27 +1,27 @@ import type { ILdapConfig, ILdapSyncData, IRestApiContext } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { IDataObject } from 'n8n-workflow'; -export function getLdapConfig(context: IRestApiContext): Promise { +export async function getLdapConfig(context: IRestApiContext): Promise { return makeRestApiRequest(context, 'GET', '/ldap/config'); } -export function testLdapConnection(context: IRestApiContext): Promise<{}> { +export async function testLdapConnection(context: IRestApiContext): Promise<{}> { return makeRestApiRequest(context, 'POST', '/ldap/test-connection'); } -export function updateLdapConfig( +export async function updateLdapConfig( context: IRestApiContext, adConfig: ILdapConfig, ): Promise { return makeRestApiRequest(context, 'PUT', '/ldap/config', adConfig as unknown as IDataObject); } -export function runLdapSync(context: IRestApiContext, data: IDataObject): Promise<{}> { +export async function runLdapSync(context: IRestApiContext, data: IDataObject): Promise<{}> { return makeRestApiRequest(context, 'POST', '/ldap/sync', data as unknown as IDataObject); } -export function getLdapSynchronizations( +export async function getLdapSynchronizations( context: IRestApiContext, pagination: { page: number }, ): Promise { diff --git a/packages/editor-ui/src/api/nodeTypes.ts b/packages/editor-ui/src/api/nodeTypes.ts index 7c7b97a025d28..feea187bf8d3a 100644 --- a/packages/editor-ui/src/api/nodeTypes.ts +++ b/packages/editor-ui/src/api/nodeTypes.ts @@ -1,4 +1,4 @@ -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { INodeTranslationHeaders, IResourceLocatorReqParams, diff --git a/packages/editor-ui/src/api/settings.ts b/packages/editor-ui/src/api/settings.ts index cdd19d976a1f8..1b0903f28f64c 100644 --- a/packages/editor-ui/src/api/settings.ts +++ b/packages/editor-ui/src/api/settings.ts @@ -4,16 +4,16 @@ import type { IN8nValueSurveyData, IN8nPromptResponse, } from '../Interface'; -import { makeRestApiRequest, get, post } from '@/utils'; +import { makeRestApiRequest, get, post } from '@/utils/apiUtils'; import { N8N_IO_BASE_URL, NPM_COMMUNITY_NODE_SEARCH_API_URL } from '@/constants'; import type { IN8nUISettings } from 'n8n-workflow'; -export function getSettings(context: IRestApiContext): Promise { +export async function getSettings(context: IRestApiContext): Promise { return makeRestApiRequest(context, 'GET', '/settings'); } export async function getPromptsData(instanceId: string, userId: string): Promise { - return await get( + return get( N8N_IO_BASE_URL, '/prompts', {}, @@ -26,7 +26,7 @@ export async function submitContactInfo( userId: string, email: string, ): Promise { - return await post( + return post( N8N_IO_BASE_URL, '/prompt', { email }, @@ -39,7 +39,7 @@ export async function submitValueSurvey( userId: string, params: IN8nValueSurveyData, ): Promise { - return await post(N8N_IO_BASE_URL, '/value-survey', params, { + return post(N8N_IO_BASE_URL, '/value-survey', params, { 'n8n-instance-id': instanceId, 'n8n-user-id': userId, }); diff --git a/packages/editor-ui/src/api/sso.ts b/packages/editor-ui/src/api/sso.ts index 867a7799f9a63..fc169f82076b5 100644 --- a/packages/editor-ui/src/api/sso.ts +++ b/packages/editor-ui/src/api/sso.ts @@ -6,34 +6,34 @@ import type { SamlPreferencesExtractedData, } from '@/Interface'; -export const initSSO = (context: IRestApiContext): Promise => { +export const initSSO = async (context: IRestApiContext): Promise => { return makeRestApiRequest(context, 'GET', '/sso/saml/initsso'); }; -export const getSamlMetadata = (context: IRestApiContext): Promise => { +export const getSamlMetadata = async (context: IRestApiContext): Promise => { return makeRestApiRequest(context, 'GET', '/sso/saml/metadata'); }; -export const getSamlConfig = ( +export const getSamlConfig = async ( context: IRestApiContext, ): Promise => { return makeRestApiRequest(context, 'GET', '/sso/saml/config'); }; -export const saveSamlConfig = ( +export const saveSamlConfig = async ( context: IRestApiContext, data: SamlPreferences, ): Promise => { return makeRestApiRequest(context, 'POST', '/sso/saml/config', data); }; -export const toggleSamlConfig = ( +export const toggleSamlConfig = async ( context: IRestApiContext, data: SamlPreferencesLoginEnabled, ): Promise => { return makeRestApiRequest(context, 'POST', '/sso/saml/config/toggle', data); }; -export const testSamlConfig = (context: IRestApiContext): Promise => { +export const testSamlConfig = async (context: IRestApiContext): Promise => { return makeRestApiRequest(context, 'GET', '/sso/saml/config/test'); }; diff --git a/packages/editor-ui/src/api/tags.ts b/packages/editor-ui/src/api/tags.ts index 88937cf2e857a..8ae405518bee6 100644 --- a/packages/editor-ui/src/api/tags.ts +++ b/packages/editor-ui/src/api/tags.ts @@ -2,11 +2,11 @@ import type { IRestApiContext, ITag } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; export async function getTags(context: IRestApiContext, withUsageCount = false): Promise { - return await makeRestApiRequest(context, 'GET', '/tags', { withUsageCount }); + return makeRestApiRequest(context, 'GET', '/tags', { withUsageCount }); } export async function createTag(context: IRestApiContext, params: { name: string }): Promise { - return await makeRestApiRequest(context, 'POST', '/tags', params); + return makeRestApiRequest(context, 'POST', '/tags', params); } export async function updateTag( @@ -14,9 +14,9 @@ export async function updateTag( id: string, params: { name: string }, ): Promise { - return await makeRestApiRequest(context, 'PATCH', `/tags/${id}`, params); + return makeRestApiRequest(context, 'PATCH', `/tags/${id}`, params); } export async function deleteTag(context: IRestApiContext, id: string): Promise { - return await makeRestApiRequest(context, 'DELETE', `/tags/${id}`); + return makeRestApiRequest(context, 'DELETE', `/tags/${id}`); } diff --git a/packages/editor-ui/src/api/templates.ts b/packages/editor-ui/src/api/templates.ts index 46b4bf2f3e9e5..e6b40ed15cc49 100644 --- a/packages/editor-ui/src/api/templates.ts +++ b/packages/editor-ui/src/api/templates.ts @@ -8,17 +8,17 @@ import type { IWorkflowTemplate, } from '@/Interface'; import type { IDataObject } from 'n8n-workflow'; -import { get } from '@/utils'; +import { get } from '@/utils/apiUtils'; function stringifyArray(arr: number[]) { return arr.join(','); } -export function testHealthEndpoint(apiEndpoint: string) { +export async function testHealthEndpoint(apiEndpoint: string) { return get(apiEndpoint, '/health'); } -export function getCategories( +export async function getCategories( apiEndpoint: string, headers?: IDataObject, ): Promise<{ categories: ITemplatesCategory[] }> { @@ -30,7 +30,7 @@ export async function getCollections( query: ITemplatesQuery, headers?: IDataObject, ): Promise<{ collections: ITemplatesCollection[] }> { - return await get( + return get( apiEndpoint, '/templates/collections', { category: stringifyArray(query.categories || []), search: query.search }, @@ -61,7 +61,7 @@ export async function getCollectionById( collectionId: string, headers?: IDataObject, ): Promise<{ collection: ITemplatesCollectionResponse }> { - return await get(apiEndpoint, `/templates/collections/${collectionId}`, undefined, headers); + return get(apiEndpoint, `/templates/collections/${collectionId}`, undefined, headers); } export async function getTemplateById( @@ -69,7 +69,7 @@ export async function getTemplateById( templateId: string, headers?: IDataObject, ): Promise<{ workflow: ITemplatesWorkflowResponse }> { - return await get(apiEndpoint, `/templates/workflows/${templateId}`, undefined, headers); + return get(apiEndpoint, `/templates/workflows/${templateId}`, undefined, headers); } export async function getWorkflowTemplate( @@ -77,5 +77,5 @@ export async function getWorkflowTemplate( templateId: string, headers?: IDataObject, ): Promise { - return await get(apiEndpoint, `/workflows/templates/${templateId}`, undefined, headers); + return get(apiEndpoint, `/workflows/templates/${templateId}`, undefined, headers); } diff --git a/packages/editor-ui/src/api/usage.ts b/packages/editor-ui/src/api/usage.ts index 8d79f59e7761b..139af9b0d8b5c 100644 --- a/packages/editor-ui/src/api/usage.ts +++ b/packages/editor-ui/src/api/usage.ts @@ -1,17 +1,17 @@ -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { IRestApiContext, UsageState } from '@/Interface'; -export const getLicense = (context: IRestApiContext): Promise => { +export const getLicense = async (context: IRestApiContext): Promise => { return makeRestApiRequest(context, 'GET', '/license'); }; -export const activateLicenseKey = ( +export const activateLicenseKey = async ( context: IRestApiContext, data: { activationKey: string }, ): Promise => { return makeRestApiRequest(context, 'POST', '/license/activate', data); }; -export const renewLicense = (context: IRestApiContext): Promise => { +export const renewLicense = async (context: IRestApiContext): Promise => { return makeRestApiRequest(context, 'POST', '/license/renew'); }; diff --git a/packages/editor-ui/src/api/users.ts b/packages/editor-ui/src/api/users.ts index 1b693f4fbd760..5067da18c4bf2 100644 --- a/packages/editor-ui/src/api/users.ts +++ b/packages/editor-ui/src/api/users.ts @@ -8,11 +8,13 @@ import type { import type { IDataObject } from 'n8n-workflow'; import { makeRestApiRequest } from '@/utils/apiUtils'; -export function loginCurrentUser(context: IRestApiContext): Promise { +export async function loginCurrentUser( + context: IRestApiContext, +): Promise { return makeRestApiRequest(context, 'GET', '/login'); } -export function login( +export async function login( context: IRestApiContext, params: { email: string; password: string }, ): Promise { @@ -23,31 +25,31 @@ export async function logout(context: IRestApiContext): Promise { await makeRestApiRequest(context, 'POST', '/logout'); } -export function preOwnerSetup( +export async function preOwnerSetup( context: IRestApiContext, ): Promise<{ credentials: number; workflows: number }> { return makeRestApiRequest(context, 'GET', '/owner/pre-setup'); } -export function setupOwner( +export async function setupOwner( context: IRestApiContext, params: { firstName: string; lastName: string; email: string; password: string }, ): Promise { return makeRestApiRequest(context, 'POST', '/owner/setup', params as unknown as IDataObject); } -export function skipOwnerSetup(context: IRestApiContext): Promise { +export async function skipOwnerSetup(context: IRestApiContext): Promise { return makeRestApiRequest(context, 'POST', '/owner/skip-setup'); } -export function validateSignupToken( +export async function validateSignupToken( context: IRestApiContext, params: { inviterId: string; inviteeId: string }, ): Promise<{ inviter: { firstName: string; lastName: string } }> { return makeRestApiRequest(context, 'GET', '/resolve-signup-token', params); } -export function signup( +export async function signup( context: IRestApiContext, params: { inviterId: string; @@ -87,7 +89,7 @@ export async function changePassword( await makeRestApiRequest(context, 'POST', '/change-password', params); } -export function updateCurrentUser( +export async function updateCurrentUser( context: IRestApiContext, params: { id?: string; @@ -99,14 +101,14 @@ export function updateCurrentUser( return makeRestApiRequest(context, 'PATCH', '/me', params as unknown as IDataObject); } -export function updateCurrentUserSettings( +export async function updateCurrentUserSettings( context: IRestApiContext, settings: IUserResponse['settings'], ): Promise { return makeRestApiRequest(context, 'PATCH', '/me/settings', settings); } -export function updateCurrentUserPassword( +export async function updateCurrentUserPassword( context: IRestApiContext, params: { newPassword: string; currentPassword: string }, ): Promise { @@ -120,11 +122,11 @@ export async function deleteUser( await makeRestApiRequest(context, 'DELETE', `/users/${id}`, transferId ? { transferId } : {}); } -export function getUsers(context: IRestApiContext): Promise { +export async function getUsers(context: IRestApiContext): Promise { return makeRestApiRequest(context, 'GET', '/users'); } -export function inviteUsers( +export async function inviteUsers( context: IRestApiContext, params: Array<{ email: string }>, ): Promise { @@ -139,7 +141,7 @@ export async function getInviteLink( context: IRestApiContext, { id }: { id: string }, ): Promise<{ link: string }> { - return await makeRestApiRequest(context, 'GET', `/users/${id}/invite-link`); + return makeRestApiRequest(context, 'GET', `/users/${id}/invite-link`); } export async function submitPersonalizationSurvey( diff --git a/packages/editor-ui/src/api/versionControl.ts b/packages/editor-ui/src/api/versionControl.ts index d4b78a5654205..2074c14971ea2 100644 --- a/packages/editor-ui/src/api/versionControl.ts +++ b/packages/editor-ui/src/api/versionControl.ts @@ -4,33 +4,35 @@ import type { IDataObject } from 'n8n-workflow'; const versionControlApiRoot = '/version-control'; -export const initSsh = (context: IRestApiContext, data: IDataObject): Promise => { +export const initSsh = async (context: IRestApiContext, data: IDataObject): Promise => { return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/init-ssh`, data); }; -export const initRepository = ( +export const initRepository = async ( context: IRestApiContext, ): Promise<{ branches: string[]; currentBranch: string }> => { return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/init-repository`); }; -export const sync = (context: IRestApiContext, data: IDataObject): Promise => { +export const sync = async (context: IRestApiContext, data: IDataObject): Promise => { return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/push`, data); }; -export const getConfig = ( +export const getConfig = async ( context: IRestApiContext, ): Promise<{ remoteRepository: string; name: string; email: string; currentBranch: string }> => { return makeRestApiRequest(context, 'GET', `${versionControlApiRoot}/config`); }; -export const setPreferences = ( +export const setPreferences = async ( context: IRestApiContext, preferences: Partial, ): Promise => { return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/preferences`, preferences); }; -export const getPreferences = (context: IRestApiContext): Promise => { +export const getPreferences = async ( + context: IRestApiContext, +): Promise => { return makeRestApiRequest(context, 'GET', `${versionControlApiRoot}/preferences`); }; diff --git a/packages/editor-ui/src/api/versions.ts b/packages/editor-ui/src/api/versions.ts index 4896318bfa283..7ed0f007522cb 100644 --- a/packages/editor-ui/src/api/versions.ts +++ b/packages/editor-ui/src/api/versions.ts @@ -1,6 +1,6 @@ import type { IVersion } from '@/Interface'; import { INSTANCE_ID_HEADER } from '@/constants'; -import { get } from '@/utils'; +import { get } from '@/utils/apiUtils'; export async function getNextVersions( endpoint: string, @@ -8,5 +8,5 @@ export async function getNextVersions( instanceId: string, ): Promise { const headers = { [INSTANCE_ID_HEADER as string]: instanceId }; - return await get(endpoint, version, {}, headers); + return get(endpoint, version, {}, headers); } diff --git a/packages/editor-ui/src/api/workflow-webhooks.ts b/packages/editor-ui/src/api/workflow-webhooks.ts index 601073a7b05c6..30fea1314b16d 100644 --- a/packages/editor-ui/src/api/workflow-webhooks.ts +++ b/packages/editor-ui/src/api/workflow-webhooks.ts @@ -1,5 +1,5 @@ import type { IOnboardingCallPrompt, IUser } from '@/Interface'; -import { get, post } from '@/utils'; +import { get, post } from '@/utils/apiUtils'; const N8N_API_BASE_URL = 'https://api.n8n.io/api'; const ONBOARDING_PROMPTS_ENDPOINT = '/prompts/onboarding'; @@ -9,7 +9,7 @@ export async function fetchNextOnboardingPrompt( instanceId: string, currentUer: IUser, ): Promise { - return await get(N8N_API_BASE_URL, ONBOARDING_PROMPTS_ENDPOINT, { + return get(N8N_API_BASE_URL, ONBOARDING_PROMPTS_ENDPOINT, { instance_id: instanceId, user_id: `${instanceId}#${currentUer.id}`, is_owner: currentUer.isOwner, @@ -40,7 +40,7 @@ export async function submitEmailOnSignup( email: string | undefined, agree: boolean, ): Promise { - return await post(N8N_API_BASE_URL, CONTACT_EMAIL_SUBMISSION_ENDPOINT, { + return post(N8N_API_BASE_URL, CONTACT_EMAIL_SUBMISSION_ENDPOINT, { instance_id: instanceId, user_id: `${instanceId}#${currentUer.id}`, email, diff --git a/packages/editor-ui/src/api/workflows.ee.ts b/packages/editor-ui/src/api/workflows.ee.ts index 1282a8ce86b56..270646f311f4e 100644 --- a/packages/editor-ui/src/api/workflows.ee.ts +++ b/packages/editor-ui/src/api/workflows.ee.ts @@ -1,5 +1,5 @@ import type { IRestApiContext, IShareWorkflowsPayload, IWorkflowsShareResponse } from '@/Interface'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; import type { IDataObject } from 'n8n-workflow'; export async function setWorkflowSharedWith( diff --git a/packages/editor-ui/src/api/workflows.ts b/packages/editor-ui/src/api/workflows.ts index 7b2d1133cb664..24f047aeb71e9 100644 --- a/packages/editor-ui/src/api/workflows.ts +++ b/packages/editor-ui/src/api/workflows.ts @@ -1,6 +1,6 @@ import type { IExecutionsCurrentSummaryExtended, IRestApiContext } from '@/Interface'; import type { ExecutionFilters, ExecutionOptions, IDataObject } from 'n8n-workflow'; -import { makeRestApiRequest } from '@/utils'; +import { makeRestApiRequest } from '@/utils/apiUtils'; export async function getNewWorkflow(context: IRestApiContext, name?: string) { const response = await makeRestApiRequest(context, 'GET', '/workflows/new', name ? { name } : {}); @@ -13,21 +13,21 @@ export async function getNewWorkflow(context: IRestApiContext, name?: string) { export async function getWorkflow(context: IRestApiContext, id: string, filter?: object) { const sendData = filter ? { filter } : undefined; - return await makeRestApiRequest(context, 'GET', `/workflows/${id}`, sendData); + return makeRestApiRequest(context, 'GET', `/workflows/${id}`, sendData); } export async function getWorkflows(context: IRestApiContext, filter?: object) { const sendData = filter ? { filter } : undefined; - return await makeRestApiRequest(context, 'GET', '/workflows', sendData); + return makeRestApiRequest(context, 'GET', '/workflows', sendData); } export async function getActiveWorkflows(context: IRestApiContext) { - return await makeRestApiRequest(context, 'GET', '/active'); + return makeRestApiRequest(context, 'GET', '/active'); } export async function getCurrentExecutions(context: IRestApiContext, filter: IDataObject) { - return await makeRestApiRequest(context, 'GET', '/executions-current', { filter }); + return makeRestApiRequest(context, 'GET', '/executions-current', { filter }); } export async function getExecutions( @@ -35,9 +35,9 @@ export async function getExecutions( filter?: ExecutionFilters, options?: ExecutionOptions, ): Promise<{ count: number; results: IExecutionsCurrentSummaryExtended[]; estimated: boolean }> { - return await makeRestApiRequest(context, 'GET', '/executions', { filter, ...options }); + return makeRestApiRequest(context, 'GET', '/executions', { filter, ...options }); } export async function getExecutionData(context: IRestApiContext, executionId: string) { - return await makeRestApiRequest(context, 'GET', `/executions/${executionId}`); + return makeRestApiRequest(context, 'GET', `/executions/${executionId}`); } diff --git a/packages/editor-ui/src/components/CollectionParameter.vue b/packages/editor-ui/src/components/CollectionParameter.vue index 1e0c7aa7e7065..8fc56e550842d 100644 --- a/packages/editor-ui/src/components/CollectionParameter.vue +++ b/packages/editor-ui/src/components/CollectionParameter.vue @@ -71,7 +71,7 @@ export default mixins(nodeHelpers).extend({ 'isReadOnly', // boolean ], components: { - ParameterInputList: () => import('./ParameterInputList.vue') as Promise, + ParameterInputList: async () => import('./ParameterInputList.vue') as Promise, }, data() { return { diff --git a/packages/editor-ui/src/components/CredentialCard.vue b/packages/editor-ui/src/components/CredentialCard.vue index 17da7669403c0..1007a62cce25c 100644 --- a/packages/editor-ui/src/components/CredentialCard.vue +++ b/packages/editor-ui/src/components/CredentialCard.vue @@ -126,7 +126,7 @@ export default mixins(showMessage).extend({ }, async onAction(action: string) { if (action === CREDENTIAL_LIST_ITEM_ACTIONS.OPEN) { - this.onClick(); + await this.onClick(); } else if (action === CREDENTIAL_LIST_ITEM_ACTIONS.DELETE) { const deleteConfirmed = await this.confirmMessage( this.$locale.baseText( @@ -145,7 +145,7 @@ export default mixins(showMessage).extend({ ); if (deleteConfirmed) { - this.credentialsStore.deleteCredential({ id: this.data.id }); + await this.credentialsStore.deleteCredential({ id: this.data.id }); } } }, diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue index 2e620d6fb220e..e7f47e0062412 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue @@ -248,20 +248,20 @@ export default mixins(showMessage, nodeHelpers).extend({ } } - this.$externalHooks().run('credentialsEdit.credentialModalOpened', { + await this.$externalHooks().run('credentialsEdit.credentialModalOpened', { credentialType: this.credentialTypeName, isEditingCredential: this.mode === 'edit', activeNode: this.ndvStore.activeNode, }); - setTimeout(() => { + setTimeout(async () => { if (this.credentialId) { if (!this.requiredPropertiesFilled && this.credentialPermissions.isOwner === true) { // sharees can't see properties, so this check would always fail for them // if the credential contains required fields. this.showValidationWarning = true; } else { - this.retestCredential(); + await this.retestCredential(); } } }, 0); @@ -825,7 +825,7 @@ export default mixins(showMessage, nodeHelpers).extend({ } this.$telemetry.track('User saved credentials', trackProperties); - this.$externalHooks().run('credentialEdit.saveCredential', trackProperties); + await this.$externalHooks().run('credentialEdit.saveCredential', trackProperties); } return credential; @@ -848,7 +848,7 @@ export default mixins(showMessage, nodeHelpers).extend({ return null; } - this.$externalHooks().run('credential.saved', { + await this.$externalHooks().run('credential.saved', { credential_type: credentialDetails.type, credential_id: credential.id, is_new: true, @@ -882,7 +882,7 @@ export default mixins(showMessage, nodeHelpers).extend({ return null; } - this.$externalHooks().run('credential.saved', { + await this.$externalHooks().run('credential.saved', { credential_type: credentialDetails.type, credential_id: credential.id, is_new: false, @@ -922,7 +922,7 @@ export default mixins(showMessage, nodeHelpers).extend({ try { this.isDeleting = true; - this.credentialsStore.deleteCredential({ id: this.credentialId }); + await this.credentialsStore.deleteCredential({ id: this.credentialId }); this.hasUnsavedChanges = false; } catch (error) { this.$showError( diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue index cb3f4605bd401..c45b047d6c806 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue @@ -176,7 +176,7 @@ export default mixins(showMessage).extend({ await this.usersStore.fetchUsers(); }, goToUsersSettings() { - this.$router.push({ name: VIEWS.USERS_SETTINGS }); + void this.$router.push({ name: VIEWS.USERS_SETTINGS }); this.modalBus.emit('close'); }, goToUpgrade() { @@ -184,7 +184,7 @@ export default mixins(showMessage).extend({ }, }, mounted() { - this.loadUsers(); + void this.loadUsers(); }, }); diff --git a/packages/editor-ui/src/components/CredentialsSelectModal.vue b/packages/editor-ui/src/components/CredentialsSelectModal.vue index 7c0d195accbf0..26d9f059a8171 100644 --- a/packages/editor-ui/src/components/CredentialsSelectModal.vue +++ b/packages/editor-ui/src/components/CredentialsSelectModal.vue @@ -113,7 +113,7 @@ export default mixins(externalHooks).extend({ }; this.$telemetry.track('User opened Credential modal', telemetryPayload); - this.$externalHooks().run('credentialsSelectModal.openCredentialType', telemetryPayload); + void this.$externalHooks().run('credentialsSelectModal.openCredentialType', telemetryPayload); }, }, }); diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue index d7272db2495a6..13a27484b0d22 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue @@ -215,7 +215,7 @@ export default mixins(workflowHelpers).extend({ name: this.workflowName, tags: this.currentWorkflowTagIds, }); - if (saved) this.settingsStore.fetchPromptsData(); + if (saved) await this.settingsStore.fetchPromptsData(); }, }, }); diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsLandingPage.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsLandingPage.vue index 8aea034b4f020..a55fb1328e8d5 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsLandingPage.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsLandingPage.vue @@ -48,7 +48,7 @@ export default defineComponent({ onSetupFirstStep(event: MouseEvent): void { this.uiStore.addFirstStepOnLoad = true; const workflowRoute = this.getWorkflowRoute(); - this.$router.push(workflowRoute); + void this.$router.push(workflowRoute); }, getWorkflowRoute(): { name: string; params: {} } { const workflowId = this.workflowsStore.workflowId || this.$route.params.name; diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue index c8e77f17083a6..4e96b66ba58d9 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue @@ -116,7 +116,7 @@ export default mixins(showMessage, executionHelpers, debounceHelper, workflowHel watch: { $route(to: Route, from: Route) { const workflowChanged = from.params.name !== to.params.name; - this.initView(workflowChanged); + void this.initView(workflowChanged); if (to.params.executionId) { const execution = this.workflowsStore.getExecutionDataById(to.params.executionId); @@ -303,7 +303,7 @@ export default mixins(showMessage, executionHelpers, debounceHelper, workflowHel type: 'success', }); - this.loadAutoRefresh(); + await this.loadAutoRefresh(); } catch (error) { this.$showError( error, @@ -311,9 +311,9 @@ export default mixins(showMessage, executionHelpers, debounceHelper, workflowHel ); } }, - onFilterUpdated(filter: ExecutionFilterType): void { + async onFilterUpdated(filter: ExecutionFilterType): void { this.filter = filter; - this.setExecutions(); + await this.setExecutions(); }, async setExecutions(): Promise { this.workflowsStore.currentWorkflowExecutions = await this.loadExecutions(); @@ -648,7 +648,7 @@ export default mixins(showMessage, executionHelpers, debounceHelper, workflowHel duration: 2000, }); await this.retryExecution(payload.execution, loadWorkflow); - this.loadAutoRefresh(); + await this.loadAutoRefresh(); this.$telemetry.track('User clicked retry execution button', { workflow_id: this.workflowsStore.workflowId, diff --git a/packages/editor-ui/src/components/ExpressionEdit.vue b/packages/editor-ui/src/components/ExpressionEdit.vue index 5e23188ed40eb..0da57bbf2bd1e 100644 --- a/packages/editor-ui/src/components/ExpressionEdit.vue +++ b/packages/editor-ui/src/components/ExpressionEdit.vue @@ -122,7 +122,7 @@ export default mixins(externalHooks, genericHelpers, debounceHelper).extend({ this.updateDisplayValue(); this.$emit('valueChanged', this.latestValue); } else { - this.callDebounced('updateDisplayValue', { debounceTime: 500 }); + void this.callDebounced('updateDisplayValue', { debounceTime: 500 }); } }, @@ -238,7 +238,7 @@ export default mixins(externalHooks, genericHelpers, debounceHelper).extend({ ); this.$telemetry.track('User closed Expression Editor', telemetryPayload); - this.$externalHooks().run('expressionEdit.closeDialog', telemetryPayload); + void this.$externalHooks().run('expressionEdit.closeDialog', telemetryPayload); } }, }, diff --git a/packages/editor-ui/src/components/FixedCollectionParameter.vue b/packages/editor-ui/src/components/FixedCollectionParameter.vue index b817034551054..6cc5a6dacc5e8 100644 --- a/packages/editor-ui/src/components/FixedCollectionParameter.vue +++ b/packages/editor-ui/src/components/FixedCollectionParameter.vue @@ -151,7 +151,7 @@ export default defineComponent({ }, }, components: { - ParameterInputList: () => import('./ParameterInputList.vue') as Promise, + ParameterInputList: async () => import('./ParameterInputList.vue') as Promise, }, data() { return { diff --git a/packages/editor-ui/src/components/GoBackButton.vue b/packages/editor-ui/src/components/GoBackButton.vue index 6dcd409b971be..d9623fb3f606b 100644 --- a/packages/editor-ui/src/components/GoBackButton.vue +++ b/packages/editor-ui/src/components/GoBackButton.vue @@ -19,7 +19,7 @@ export default defineComponent({ methods: { navigateTo() { if (this.routeHasHistory) this.$router.go(-1); - else this.$router.push({ name: VIEWS.TEMPLATES }); + else void this.$router.push({ name: VIEWS.TEMPLATES }); }, }, mounted() { diff --git a/packages/editor-ui/src/components/MainHeader/MainHeader.vue b/packages/editor-ui/src/components/MainHeader/MainHeader.vue index c25d2b868dff0..3ab4c71bd32dd 100644 --- a/packages/editor-ui/src/components/MainHeader/MainHeader.vue +++ b/packages/editor-ui/src/components/MainHeader/MainHeader.vue @@ -110,14 +110,14 @@ export default mixins(pushConnection, workflowHelpers).extend({ case MAIN_HEADER_TABS.WORKFLOW: if (!['', 'new', PLACEHOLDER_EMPTY_WORKFLOW_ID].includes(this.workflowToReturnTo)) { if (this.$route.name !== VIEWS.WORKFLOW) { - this.$router.push({ + void this.$router.push({ name: VIEWS.WORKFLOW, params: { name: this.workflowToReturnTo }, }); } } else { if (this.$route.name !== VIEWS.NEW_WORKFLOW) { - this.$router.push({ name: VIEWS.NEW_WORKFLOW }); + void this.$router.push({ name: VIEWS.NEW_WORKFLOW }); this.uiStore.stateIsDirty = this.dirtyState; } } @@ -136,7 +136,10 @@ export default mixins(pushConnection, workflowHelpers).extend({ }) .catch(() => {}); } else { - this.$router.push({ name: VIEWS.EXECUTION_HOME, params: { name: routeWorkflowId } }); + void this.$router.push({ + name: VIEWS.EXECUTION_HOME, + params: { name: routeWorkflowId }, + }); } // this.modalBus.emit('closeAll'); this.activeHeaderTab = MAIN_HEADER_TABS.EXECUTIONS; diff --git a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue index e9f5d9e8d7735..a98361ef7bf54 100644 --- a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue +++ b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue @@ -372,7 +372,7 @@ export default mixins(workflowHelpers).extend({ if (this.$data.isNameEditEnabled) { if (this.$data.isTagsEditEnabled) { // @ts-ignore - this.onTagsBlur(); + void this.onTagsBlur(); } this.$data.isTagsEditEnabled = false; @@ -522,7 +522,7 @@ export default mixins(workflowHelpers).extend({ type: 'success', }); - this.$router.push({ name: VIEWS.NEW_WORKFLOW }); + await this.$router.push({ name: VIEWS.NEW_WORKFLOW }); break; } default: diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue index 85ebbe29c6f59..cf84e3fd66807 100644 --- a/packages/editor-ui/src/components/MainSidebar.vue +++ b/packages/editor-ui/src/components/MainSidebar.vue @@ -359,14 +359,14 @@ export default mixins( this.onLogout(); break; case 'settings': - this.$router.push({ name: VIEWS.PERSONAL_SETTINGS }); + void this.$router.push({ name: VIEWS.PERSONAL_SETTINGS }); break; default: break; } }, onLogout() { - this.$router.push({ name: VIEWS.SIGNOUT }); + void this.$router.push({ name: VIEWS.SIGNOUT }); }, toggleCollapse() { this.uiStore.toggleSidebarMenuCollapse(); @@ -502,7 +502,7 @@ export default mixins( ); if (prompt.value) { - this.versionControlStore.sync({ commitMessage: prompt.value }); + await this.versionControlStore.sync({ commitMessage: prompt.value }); } }, }, diff --git a/packages/editor-ui/src/components/NDVDraggablePanels.vue b/packages/editor-ui/src/components/NDVDraggablePanels.vue index 6e41d7261d699..c3e0bd3f8b159 100644 --- a/packages/editor-ui/src/components/NDVDraggablePanels.vue +++ b/packages/editor-ui/src/components/NDVDraggablePanels.vue @@ -314,7 +314,7 @@ export default mixins(debounceHelper).extend({ }, onResizeDebounced(data: { direction: string; x: number; width: number }) { if (this.initialized) { - this.callDebounced('onResize', { debounceTime: 10, trailing: true }, data); + void this.callDebounced('onResize', { debounceTime: 10, trailing: true }, data); } }, onResize({ direction, x, width }: { direction: string; x: number; width: number }) { diff --git a/packages/editor-ui/src/components/Node.vue b/packages/editor-ui/src/components/Node.vue index 664cfa70d1bb8..22612d98155ab 100644 --- a/packages/editor-ui/src/components/Node.vue +++ b/packages/editor-ui/src/components/Node.vue @@ -600,7 +600,7 @@ export default mixins( }, onClick(event: MouseEvent) { - this.callDebounced('onClickDebounced', { debounceTime: 50, trailing: true }, event); + void this.callDebounced('onClickDebounced', { debounceTime: 50, trailing: true }, event); }, onClickDebounced(event: MouseEvent) { diff --git a/packages/editor-ui/src/components/Node/NodeCreation.vue b/packages/editor-ui/src/components/Node/NodeCreation.vue index 207c174dd0245..7c9d8d341c809 100644 --- a/packages/editor-ui/src/components/Node/NodeCreation.vue +++ b/packages/editor-ui/src/components/Node/NodeCreation.vue @@ -51,7 +51,7 @@ import { useUIStore } from '@/stores/ui.store'; export default defineComponent({ name: 'node-creation', components: { - NodeCreator: () => import('@/components/Node/NodeCreator/NodeCreator.vue'), + NodeCreator: async () => import('@/components/Node/NodeCreator/NodeCreator.vue'), }, props: { nodeViewScale: { diff --git a/packages/editor-ui/src/components/Node/NodeCreator/Modes/ActionsMode.vue b/packages/editor-ui/src/components/Node/NodeCreator/Modes/ActionsMode.vue index dfe2e71ac4faf..ba2e24653686d 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/Modes/ActionsMode.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/Modes/ActionsMode.vue @@ -177,7 +177,7 @@ function trackActionsView() { trigger_action_count, }; - runExternalHook('nodeCreateList.onViewActions', useWebhooksStore(), trackingPayload); + void runExternalHook('nodeCreateList.onViewActions', useWebhooksStore(), trackingPayload); telemetry?.trackNodesPanel('nodeCreateList.onViewActions', trackingPayload); } @@ -198,7 +198,7 @@ function addHttpNode() { if (telemetry) setAddedNodeActionParameters(updateData); const app_identifier = actions.value[0].key; - runExternalHook('nodeCreateList.onActionsCustmAPIClicked', useWebhooksStore(), { + void runExternalHook('nodeCreateList.onActionsCustmAPIClicked', useWebhooksStore(), { app_identifier, }); telemetry?.trackNodesPanel('nodeCreateList.onActionsCustmAPIClicked', { app_identifier }); diff --git a/packages/editor-ui/src/components/Node/NodeCreator/Panel/NodesListPanel.vue b/packages/editor-ui/src/components/Node/NodeCreator/Panel/NodesListPanel.vue index adbdb1e92eb5e..c4a4c6ab4248a 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/Panel/NodesListPanel.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/Panel/NodesListPanel.vue @@ -36,19 +36,19 @@ const nodeCreatorView = computed(() => useNodeCreatorStore().selectedView); function onSearch(value: string) { if (activeViewStack.value.uuid) { updateCurrentViewStack({ search: value }); - setActiveItemIndex(activeViewStack.value.activeIndex ?? 0); + void setActiveItemIndex(activeViewStack.value.activeIndex ?? 0); } } function onTransitionEnd() { // For actions, set the active focus to the first action, not category const newStackIndex = activeViewStack.value.mode === 'actions' ? 1 : 0; - setActiveItemIndex(activeViewStack.value.activeIndex || 0 || newStackIndex); + void setActiveItemIndex(activeViewStack.value.activeIndex || 0 || newStackIndex); } onMounted(() => { attachKeydownEvent(); - setActiveItemIndex(activeViewStack.value.activeIndex ?? 0); + void setActiveItemIndex(activeViewStack.value.activeIndex ?? 0); }); onUnmounted(() => { diff --git a/packages/editor-ui/src/components/Node/NodeCreator/Panel/SearchBar.vue b/packages/editor-ui/src/components/Node/NodeCreator/Panel/SearchBar.vue index d5cc35f03ea5c..1d69c17eeae50 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/Panel/SearchBar.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/Panel/SearchBar.vue @@ -60,7 +60,9 @@ function clear() { } onMounted(() => { - runExternalHook('nodeCreator_searchBar.mount', useWebhooksStore(), { inputRef: state.inputRef }); + void runExternalHook('nodeCreator_searchBar.mount', useWebhooksStore(), { + inputRef: state.inputRef, + }); setTimeout(focus, 0); }); diff --git a/packages/editor-ui/src/components/Node/NodeCreator/__tests__/NodesListPanel.test.ts b/packages/editor-ui/src/components/Node/NodeCreator/__tests__/NodesListPanel.test.ts index 01265d39e087e..e83045e0070b0 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/__tests__/NodesListPanel.test.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/__tests__/NodesListPanel.test.ts @@ -94,7 +94,7 @@ describe('NodesListPanel', () => { expect(container.querySelector('.backButton')).toBeInTheDocument(); - fireEvent.click(container.querySelector('.backButton')!); + await fireEvent.click(container.querySelector('.backButton')!); await Vue.nextTick(); expect(screen.queryAllByTestId('item-iterator-item')).toHaveLength(6); @@ -265,20 +265,20 @@ describe('NodesListPanel', () => { screen.getByText('On app event').click(); await Vue.nextTick(); - fireEvent.input(screen.getByTestId('node-creator-search-bar'), { + await fireEvent.input(screen.getByTestId('node-creator-search-bar'), { target: { value: 'Ninth' }, }); await Vue.nextTick(); expect(screen.queryAllByTestId('item-iterator-item')).toHaveLength(1); - fireEvent.input(screen.getByTestId('node-creator-search-bar'), { + await fireEvent.input(screen.getByTestId('node-creator-search-bar'), { target: { value: 'Non sense' }, }); await Vue.nextTick(); expect(screen.queryAllByTestId('item-iterator-item')).toHaveLength(0); expect(screen.queryByText("We didn't make that... yet")).toBeInTheDocument(); - fireEvent.click(container.querySelector('.clear')!); + await fireEvent.click(container.querySelector('.clear')!); await Vue.nextTick(); expect(screen.queryAllByTestId('item-iterator-item')).toHaveLength(9); }); diff --git a/packages/editor-ui/src/components/Node/NodeCreator/composables/useActions.ts b/packages/editor-ui/src/components/Node/NodeCreator/composables/useActions.ts index 5f704310e0c73..1e511c3cbc0d5 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/composables/useActions.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/composables/useActions.ts @@ -203,7 +203,7 @@ export const useActions = () => { source_mode: rootView.toLowerCase(), resource: (action.value as INodeParameters).resource || '', }; - runExternalHook('nodeCreateList.addAction', useWebhooksStore(), payload); + void runExternalHook('nodeCreateList.addAction', useWebhooksStore(), payload); telemetry?.trackNodesPanel('nodeCreateList.addAction', payload); } diff --git a/packages/editor-ui/src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts b/packages/editor-ui/src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts index 8e1b81910f7a4..f6e4782427666 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts @@ -31,7 +31,7 @@ export const useKeyboardNavigation = defineStore('nodeCreatorKeyboardNavigation' function getElementId(element?: Element) { return element?.getAttribute(KEYBOARD_ID_ATTR) || undefined; } - function refreshSelectableItems(): Promise { + async function refreshSelectableItems(): Promise { return new Promise((resolve) => { // Wait for DOM to update cleanupSelectableItems(); diff --git a/packages/editor-ui/src/components/NodeDetailsView.vue b/packages/editor-ui/src/components/NodeDetailsView.vue index 0e8bb13b02dce..781c02c7058f5 100644 --- a/packages/editor-ui/src/components/NodeDetailsView.vue +++ b/packages/editor-ui/src/components/NodeDetailsView.vue @@ -529,7 +529,7 @@ export default mixins( onWorkflowActivate() { this.ndvStore.activeNodeName = null; setTimeout(() => { - this.activateCurrentWorkflow('ndv'); + void this.activateCurrentWorkflow('ndv'); }, 1000); }, onFeatureRequestClick() { @@ -643,7 +643,7 @@ export default mixins( this.ndvStore.setOutputPanelEditModeEnabled(false); } - this.$externalHooks().run('dataDisplay.nodeEditingFinished'); + await this.$externalHooks().run('dataDisplay.nodeEditingFinished'); this.$telemetry.track('User closed node modal', { node_type: this.activeNodeType ? this.activeNodeType.name : '', session_id: this.sessionId, diff --git a/packages/editor-ui/src/components/NodeExecuteButton.vue b/packages/editor-ui/src/components/NodeExecuteButton.vue index eec09399b1773..343fd511466ae 100644 --- a/packages/editor-ui/src/components/NodeExecuteButton.vue +++ b/packages/editor-ui/src/components/NodeExecuteButton.vue @@ -180,7 +180,7 @@ export default mixins(workflowRun, pinData).extend({ async onClick() { if (this.isListeningForEvents) { - this.stopWaitingForWebhook(); + await this.stopWaitingForWebhook(); } else if (this.isListeningForWorkflowEvents) { this.$emit('stopExecution'); } else { @@ -207,9 +207,9 @@ export default mixins(workflowRun, pinData).extend({ source: this.telemetrySource, }; this.$telemetry.track('User clicked execute node button', telemetryPayload); - this.$externalHooks().run('nodeExecuteButton.onClick', telemetryPayload); + await this.$externalHooks().run('nodeExecuteButton.onClick', telemetryPayload); - this.runWorkflow(this.nodeName, 'RunData.ExecuteNodeButton'); + await this.runWorkflow(this.nodeName, 'RunData.ExecuteNodeButton'); this.$emit('execute'); } } diff --git a/packages/editor-ui/src/components/NodeSettings.vue b/packages/editor-ui/src/components/NodeSettings.vue index eedfe2e5242d8..3ccf38be75fd2 100644 --- a/packages/editor-ui/src/components/NodeSettings.vue +++ b/packages/editor-ui/src/components/NodeSettings.vue @@ -578,7 +578,7 @@ export default mixins(externalHooks, nodeHelpers).extend({ this.updateNodeCredentialIssues(node); } - this.$externalHooks().run('nodeSettings.credentialSelected', { updateInformation }); + void this.$externalHooks().run('nodeSettings.credentialSelected', { updateInformation }); }, nameChanged(name: string) { if (this.node) { @@ -672,7 +672,7 @@ export default mixins(externalHooks, nodeHelpers).extend({ } } - this.$externalHooks().run('nodeSettings.valueChanged', { + void this.$externalHooks().run('nodeSettings.valueChanged', { parameterPath, newValue, parameters: this.parameters, @@ -780,7 +780,7 @@ export default mixins(externalHooks, nodeHelpers).extend({ this.workflowsStore.setNodeParameters(updateInformation); - this.$externalHooks().run('nodeSettings.valueChanged', { + void this.$externalHooks().run('nodeSettings.valueChanged', { parameterPath, newValue, parameters: this.parameters, diff --git a/packages/editor-ui/src/components/ParameterInput.vue b/packages/editor-ui/src/components/ParameterInput.vue index cddbda2fd8474..4f640f44d34b0 100644 --- a/packages/editor-ui/src/components/ParameterInput.vue +++ b/packages/editor-ui/src/components/ParameterInput.vue @@ -522,7 +522,7 @@ export default mixins( dependentParametersValues() { // Reload the remote parameters whenever a parameter // on which the current field depends on changes - this.loadRemoteParameterOptions(); + void this.loadRemoteParameterOptions(); }, value() { if (this.parameter.type === 'color' && this.getArgument('showAlpha') === true) { @@ -1116,7 +1116,7 @@ export default mixins( resourceLocatorRef?.$emit('refreshList'); } - this.loadRemoteParameterOptions(); + void this.loadRemoteParameterOptions(); } else if (command === 'formatHtml') { htmlEditorEventBus.emit('format-html'); } @@ -1175,7 +1175,7 @@ export default mixins( this.$watch( () => this.node!.credentials, () => { - this.loadRemoteParameterOptions(); + void this.loadRemoteParameterOptions(); }, { deep: true, immediate: true }, ); diff --git a/packages/editor-ui/src/components/ParameterInputList.vue b/packages/editor-ui/src/components/ParameterInputList.vue index da69b7388ea3d..738f2a536d216 100644 --- a/packages/editor-ui/src/components/ParameterInputList.vue +++ b/packages/editor-ui/src/components/ParameterInputList.vue @@ -128,7 +128,7 @@ import ImportParameter from '@/components/ImportParameter.vue'; import { get, set } from 'lodash-es'; import mixins from 'vue-typed-mixins'; -import type { Component, PropType } from 'vue'; +import type { PropType } from 'vue'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv.store'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; @@ -140,8 +140,8 @@ export default mixins(workflowHelpers).extend({ components: { MultipleParameter, ParameterInputFull, - FixedCollectionParameter: () => import('./FixedCollectionParameter.vue') as Promise, - CollectionParameter: () => import('./CollectionParameter.vue') as Promise, + FixedCollectionParameter: async () => import('./FixedCollectionParameter.vue'), + CollectionParameter: async () => import('./CollectionParameter.vue'), ImportParameter, }, props: { diff --git a/packages/editor-ui/src/components/PersonalizationModal.vue b/packages/editor-ui/src/components/PersonalizationModal.vue index 93cb09df19ab4..3331f296ef326 100644 --- a/packages/editor-ui/src/components/PersonalizationModal.vue +++ b/packages/editor-ui/src/components/PersonalizationModal.vue @@ -610,7 +610,7 @@ export default mixins(showMessage, workflowHelpers).extend({ // In case the redirect to canvas for new users didn't happen // we try again after closing the modal if (this.$route.name !== VIEWS.NEW_WORKFLOW) { - this.$router.replace({ name: VIEWS.NEW_WORKFLOW }); + void this.$router.replace({ name: VIEWS.NEW_WORKFLOW }); } }, onSave() { @@ -627,7 +627,7 @@ export default mixins(showMessage, workflowHelpers).extend({ personalization_survey_n8n_version: this.rootStore.versionCli, }; - this.$externalHooks().run('personalizationModal.onSubmit', survey); + await this.$externalHooks().run('personalizationModal.onSubmit', survey); await this.usersStore.submitPersonalizationSurvey(survey as IPersonalizationLatestVersion); diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue index 18963823adbe9..d1a1ebe256482 100644 --- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue +++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue @@ -617,11 +617,11 @@ export default mixins(debounceHelper, workflowHelpers, nodeHelpers).extend({ async loadInitialResources(): Promise { if (!this.currentResponse || (this.currentResponse && this.currentResponse.error)) { this.searchFilter = ''; - this.loadResources(); + await this.loadResources(); } }, loadResourcesDebounced() { - this.callDebounced('loadResources', { debounceTime: 1000, trailing: true }); + void this.callDebounced('loadResources', { debounceTime: 1000, trailing: true }); }, setResponse(paramsKey: string, props: Partial) { this.cachedResponses = { @@ -707,7 +707,7 @@ export default mixins(debounceHelper, workflowHelpers, nodeHelpers).extend({ return; } - this.loadInitialResources(); + void this.loadInitialResources(); this.showResourceDropdown = true; }, switchFromListMode(): void { diff --git a/packages/editor-ui/src/components/RunData.vue b/packages/editor-ui/src/components/RunData.vue index 0a0b43fa68db1..9d638016a6968 100644 --- a/packages/editor-ui/src/components/RunData.vue +++ b/packages/editor-ui/src/components/RunData.vue @@ -515,10 +515,10 @@ import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv.store'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; -const RunDataTable = () => import('@/components/RunDataTable.vue'); -const RunDataJson = () => import('@/components/RunDataJson.vue'); -const RunDataSchema = () => import('@/components/RunDataSchema.vue'); -const RunDataHtml = () => import('@/components/RunDataHtml.vue'); +const RunDataTable = async () => import('@/components/RunDataTable.vue'); +const RunDataJson = async () => import('@/components/RunDataJson.vue'); +const RunDataSchema = async () => import('@/components/RunDataSchema.vue'); +const RunDataHtml = async () => import('@/components/RunDataHtml.vue'); export type EnterEditModeArgs = { origin: 'editIconButton' | 'insertTestDataLink'; @@ -1259,7 +1259,7 @@ export default mixins(externalHooks, genericHelpers, nodeHelpers, pinData).exten return; } else { const bufferString = 'data:' + mimeType + ';base64,' + data; - const blob = await fetch(bufferString).then((d) => d.blob()); + const blob = await fetch(bufferString).then(async (d) => d.blob()); saveAs(blob, fileName); } }, diff --git a/packages/editor-ui/src/components/RunDataJson.vue b/packages/editor-ui/src/components/RunDataJson.vue index 1a8b562dc9cdc..064821f94e113 100644 --- a/packages/editor-ui/src/components/RunDataJson.vue +++ b/packages/editor-ui/src/components/RunDataJson.vue @@ -85,7 +85,7 @@ import { getMappedExpression } from '@/utils/mappingUtils'; import { useWorkflowsStore } from '@/stores/workflows.store'; import { nonExistingJsonPath } from '@/components/RunDataJsonActions.vue'; -const runDataJsonActions = () => import('@/components/RunDataJsonActions.vue'); +const runDataJsonActions = async () => import('@/components/RunDataJsonActions.vue'); export default mixins(externalHooks).extend({ name: 'run-data-json', @@ -179,7 +179,7 @@ export default mixins(externalHooks).extend({ ...mappingTelemetry, }; - this.$externalHooks().run('runDataJson.onDragEnd', telemetryPayload); + void this.$externalHooks().run('runDataJson.onDragEnd', telemetryPayload); this.$telemetry.track('User dragged data for mapping', telemetryPayload); }, 1000); // ensure dest data gets set if drop diff --git a/packages/editor-ui/src/components/RunDataSchema.vue b/packages/editor-ui/src/components/RunDataSchema.vue index f18e6860c1b14..2296f2171e855 100644 --- a/packages/editor-ui/src/components/RunDataSchema.vue +++ b/packages/editor-ui/src/components/RunDataSchema.vue @@ -64,7 +64,7 @@ const onDragEnd = (el: HTMLElement) => { ...mappingTelemetry, }; - runExternalHook('runDataJson.onDragEnd', webhooksStore, telemetryPayload); + void runExternalHook('runDataJson.onDragEnd', webhooksStore, telemetryPayload); telemetry.track('User dragged data for mapping', telemetryPayload); }, 1000); // ensure dest data gets set if drop diff --git a/packages/editor-ui/src/components/RunDataTable.vue b/packages/editor-ui/src/components/RunDataTable.vue index d55869ddb1eba..85d9a0a61434d 100644 --- a/packages/editor-ui/src/components/RunDataTable.vue +++ b/packages/editor-ui/src/components/RunDataTable.vue @@ -423,7 +423,7 @@ export default mixins(externalHooks).extend({ ...mappingTelemetry, }; - this.$externalHooks().run('runDataTable.onDragEnd', telemetryPayload); + void this.$externalHooks().run('runDataTable.onDragEnd', telemetryPayload); this.$telemetry.track('User dragged data for mapping', telemetryPayload); }, 1000); // ensure dest data gets set if drop diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue index 8b5c980b7d1e6..58e7adbc5bd51 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue @@ -50,12 +50,12 @@ import mixins from 'vue-typed-mixins'; import { EnterpriseEditionFeature } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; -import { useLogStreamingStore } from '../../stores/logStreaming.store'; +import { useLogStreamingStore } from '@/stores/logStreaming.store'; import type { PropType } from 'vue'; import { mapStores } from 'pinia'; import type { MessageEventBusDestinationOptions } from 'n8n-workflow'; import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow'; -import type { BaseTextKey } from '../../plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import type { EventBus } from '@/event-bus'; export const DESTINATION_LIST_ITEM_ACTIONS = { @@ -139,7 +139,7 @@ export default mixins(showMessage).extend({ }, onEnabledSwitched(state: boolean, destinationId: string) { this.nodeParameters.enabled = state; - this.saveDestination(); + void this.saveDestination(); }, async saveDestination() { await this.logStreamingStore.saveDestination(this.nodeParameters); diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue index b42ccd770721e..d841827f4825d 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue @@ -175,12 +175,12 @@ import { get, set, unset } from 'lodash-es'; import { mapStores } from 'pinia'; import mixins from 'vue-typed-mixins'; -import { useLogStreamingStore } from '../../stores/logStreaming.store'; -import { useNDVStore } from '../../stores/ndv.store'; -import { useWorkflowsStore } from '../../stores/workflows.store'; +import { useLogStreamingStore } from '@/stores/logStreaming.store'; +import { useNDVStore } from '@/stores/ndv.store'; +import { useWorkflowsStore } from '@/stores/workflows.store'; import ParameterInputList from '@/components/ParameterInputList.vue'; import NodeCredentials from '@/components/NodeCredentials.vue'; -import type { IMenuItem, INodeUi, ITab, IUpdateInformation } from '../../Interface'; +import type { IMenuItem, INodeUi, ITab, IUpdateInformation } from '@/Interface'; import type { IDataObject, INodeCredentials, @@ -197,18 +197,18 @@ import { } from 'n8n-workflow'; import type { PropType } from 'vue'; import Vue from 'vue'; -import { LOG_STREAM_MODAL_KEY } from '../../constants'; +import { LOG_STREAM_MODAL_KEY } from '@/constants'; import Modal from '@/components/Modal.vue'; import { showMessage } from '@/mixins/showMessage'; -import { useUIStore } from '../../stores/ui.store'; -import { useUsersStore } from '../../stores/users.store'; +import { useUIStore } from '@/stores/ui.store'; +import { useUsersStore } from '@/stores/users.store'; import { destinationToFakeINodeUi } from './Helpers.ee'; import { webhookModalDescription, sentryModalDescription, syslogModalDescription, } from './descriptions.ee'; -import type { BaseTextKey } from '../../plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import InlineNameEdit from '../InlineNameEdit.vue'; import SaveButton from '../SaveButton.vue'; import EventSelection from '@/components/SettingsLogStreaming/EventSelection.ee.vue'; diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue index f3bb515ccd92d..70efcc2eafb3f 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue @@ -71,8 +71,8 @@ diff --git a/packages/editor-ui/src/views/SignupView.vue b/packages/editor-ui/src/views/SignupView.vue index 37c66fdc93ca9..e281c64db0fe0 100644 --- a/packages/editor-ui/src/views/SignupView.vue +++ b/packages/editor-ui/src/views/SignupView.vue @@ -97,7 +97,7 @@ export default mixins(showMessage).extend({ this.inviter = invite.inviter as { firstName: string; lastName: string }; } catch (e) { this.$showError(e, this.$locale.baseText('auth.signup.tokenValidationError')); - this.$router.replace({ name: VIEWS.SIGNIN }); + void this.$router.replace({ name: VIEWS.SIGNIN }); } }, computed: { diff --git a/packages/editor-ui/src/views/TemplatesCollectionView.vue b/packages/editor-ui/src/views/TemplatesCollectionView.vue index 7e1408326b2a8..f60ffc805a108 100644 --- a/packages/editor-ui/src/views/TemplatesCollectionView.vue +++ b/packages/editor-ui/src/views/TemplatesCollectionView.vue @@ -119,7 +119,7 @@ export default mixins(workflowHelpers).extend({ wf_template_repo_session_id: this.workflowsStore.currentSessionId, source: 'collection', }; - this.$externalHooks().run('templatesCollectionView.onUseWorkflow', telemetryPayload); + void this.$externalHooks().run('templatesCollectionView.onUseWorkflow', telemetryPayload); this.$telemetry.track('User inserted workflow template', telemetryPayload); this.navigateTo(event, VIEWS.TEMPLATE_IMPORT, id); @@ -130,7 +130,7 @@ export default mixins(workflowHelpers).extend({ window.open(route.href, '_blank'); return; } else { - this.$router.push({ name: page, params: { id } }); + void this.$router.push({ name: page, params: { id } }); } }, }, diff --git a/packages/editor-ui/src/views/TemplatesSearchView.vue b/packages/editor-ui/src/views/TemplatesSearchView.vue index f6adfb4b64d5f..cdf2464ef5ce9 100644 --- a/packages/editor-ui/src/views/TemplatesSearchView.vue +++ b/packages/editor-ui/src/views/TemplatesSearchView.vue @@ -186,12 +186,12 @@ export default mixins(genericHelpers, debounceHelper).extend({ window.open(route.href, '_blank'); return; } else { - this.$router.push({ name: page, params: { id } }); + void this.$router.push({ name: page, params: { id } }); } }, updateSearch() { this.updateQueryParam(this.search, this.categories.join(',')); - this.loadWorkflowsAndCollections(false); + void this.loadWorkflowsAndCollections(false); }, updateSearchTracking(search: string, categories: number[]) { if (!search) { @@ -222,13 +222,13 @@ export default mixins(genericHelpers, debounceHelper).extend({ }, openNewWorkflow() { this.uiStore.nodeViewInitialized = false; - this.$router.push({ name: VIEWS.NEW_WORKFLOW }); + void this.$router.push({ name: VIEWS.NEW_WORKFLOW }); }, onSearchInput(search: string) { this.loadingWorkflows = true; this.loadingCollections = true; this.search = search; - this.callDebounced('updateSearch', { debounceTime: 500, trailing: true }); + void this.callDebounced('updateSearch', { debounceTime: 500, trailing: true }); if (search.length === 0) { this.trackSearch(); @@ -274,7 +274,7 @@ export default mixins(genericHelpers, debounceHelper).extend({ delete query.search; } - this.$router.replace({ query }); + void this.$router.replace({ query }); }, async onLoadMore() { if (this.workflows.length >= this.totalWorkflows) { @@ -372,9 +372,9 @@ export default mixins(genericHelpers, debounceHelper).extend({ }, async mounted() { setPageTitle('n8n - Templates'); - this.loadCategories(); - this.loadWorkflowsAndCollections(true); - this.usersStore.showPersonalizationSurvey(); + void this.loadCategories(); + void this.loadWorkflowsAndCollections(true); + void this.usersStore.showPersonalizationSurvey(); setTimeout(() => { // Check if there is scroll position saved in route and scroll to it diff --git a/packages/editor-ui/src/views/TemplatesWorkflowView.vue b/packages/editor-ui/src/views/TemplatesWorkflowView.vue index 09cc745762228..7d6d99126dbbb 100644 --- a/packages/editor-ui/src/views/TemplatesWorkflowView.vue +++ b/packages/editor-ui/src/views/TemplatesWorkflowView.vue @@ -98,7 +98,7 @@ export default mixins(workflowHelpers).extend({ wf_template_repo_session_id: this.templatesStore.currentSessionId, }; - this.$externalHooks().run('templatesWorkflowView.openWorkflow', telemetryPayload); + void this.$externalHooks().run('templatesWorkflowView.openWorkflow', telemetryPayload); this.$telemetry.track('User inserted workflow template', telemetryPayload); if (e.metaKey || e.ctrlKey) { @@ -106,7 +106,7 @@ export default mixins(workflowHelpers).extend({ window.open(route.href, '_blank'); return; } else { - this.$router.push({ name: VIEWS.TEMPLATE_IMPORT, params: { id } }); + void this.$router.push({ name: VIEWS.TEMPLATE_IMPORT, params: { id } }); } }, onHidePreview() { diff --git a/packages/editor-ui/src/views/WorkflowsView.vue b/packages/editor-ui/src/views/WorkflowsView.vue index da12a1389de50..d9d2b52b02d67 100644 --- a/packages/editor-ui/src/views/WorkflowsView.vue +++ b/packages/editor-ui/src/views/WorkflowsView.vue @@ -180,7 +180,7 @@ const WorkflowsView = mixins(showMessage, debounceHelper).extend({ methods: { addWorkflow() { this.uiStore.nodeViewInitialized = false; - this.$router.push({ name: VIEWS.NEW_WORKFLOW }); + void this.$router.push({ name: VIEWS.NEW_WORKFLOW }); this.$telemetry.track('User clicked add workflow button', { source: 'Workflows list', @@ -191,9 +191,8 @@ const WorkflowsView = mixins(showMessage, debounceHelper).extend({ this.usersStore.fetchUsers(), this.workflowsStore.fetchAllWorkflows(), this.workflowsStore.fetchActiveWorkflows(), + this.credentialsStore.fetchAllCredentials(), ]); - - this.credentialsStore.fetchAllCredentials(); }, onClickTag(tagId: string, event: PointerEvent) { if (!this.filters.tags.includes(tagId)) { @@ -233,7 +232,7 @@ const WorkflowsView = mixins(showMessage, debounceHelper).extend({ }, }, mounted() { - this.usersStore.showPersonalizationSurvey(); + void this.usersStore.showPersonalizationSurvey(); }, }); diff --git a/packages/workflow/src/Extensions/index.ts b/packages/workflow/src/Extensions/index.ts index a0c98d6208f37..1ff8812e4df16 100644 --- a/packages/workflow/src/Extensions/index.ts +++ b/packages/workflow/src/Extensions/index.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-cycle export { extend, extendOptional, @@ -8,4 +7,4 @@ export { EXTENSION_OBJECTS as ExpressionExtensions, } from './ExpressionExtension'; -export type { DocMetadata } from './Extensions'; +export type { DocMetadata, NativeDoc } from './Extensions'; diff --git a/packages/workflow/src/index.ts b/packages/workflow/src/index.ts index eee0e5f3431a0..d052aa94a9437 100644 --- a/packages/workflow/src/index.ts +++ b/packages/workflow/src/index.ts @@ -44,7 +44,7 @@ export { export { ExpressionExtensions } from './Extensions'; export { NativeMethods } from './NativeMethods'; -export type { DocMetadata } from './Extensions'; +export type { DocMetadata, NativeDoc } from './Extensions'; declare module 'http' { export interface IncomingMessage {