diff --git a/.dockerignore b/.dockerignore index 2beee38eae1..740c37ee6ed 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,5 +18,4 @@ packages/**/*.test.* docker/compose docker/**/Dockerfile .vscode -packages/testing -cypress \ No newline at end of file +packages/testing \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 61398c9312a..2a2a3c71c76 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,7 +8,6 @@ packages/cli/templates/form-trigger.handlebars packages/cli/templates/form-trigger-completion.handlebars packages/cli/templates/form-trigger-409.handlebars packages/cli/templates/form-trigger-404.handlebars -cypress/fixtures CHANGELOG.md .github/pull_request_template.md # Ignored for now diff --git a/CLAUDE.md b/CLAUDE.md index 1889189c33a..f7b66facb0f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,6 @@ tail -n 20 build.log - `pnpm test` - Run all tests - `pnpm test:affected` - Runs tests based on what has changed since the last commit -- `pnpm dev:e2e` - E2E tests in development mode Running a particular test file requires going to the directory of that test and running: `pnpm test `. @@ -135,8 +134,8 @@ What we use for testing and writing tests: - For testing nodes and other backend components, we use Jest for unit tests. Examples can be found in `packages/nodes-base/nodes/**/*test*`. - We use `nock` for server mocking - For frontend we use `vitest` -- For e2e tests we use `Playwright` and `pnpm dev:e2e`. The old Cypress tests - are being migrated to Playwright, so please use Playwright for new tests. +- For E2E tests we use Playwright. Run with `pnpm --filter=n8n-playwright test:local`. + See `packages/testing/playwright/README.md` for details. ### Common Development Tasks diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 555316a65dc..1c58a048393 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -372,15 +372,15 @@ But when you are working on tests locally, we recommend running your tests with #### E2E tests -⚠️ You have to run `pnpm cypress:install` to install cypress before running the tests for the first time and to update cypress. +n8n uses [Playwright](https://playwright.dev) for E2E testing. E2E tests can be started via one of the following commands: -- `pnpm test:e2e:ui`: Start n8n and run e2e tests interactively using built UI code. Does not react to code changes (i.e. runs `pnpm start` and `cypress open`) -- `pnpm test:e2e:dev`: Start n8n in development mode and run e2e tests interactively. Reacts to code changes (i.e. runs `pnpm dev` and `cypress open`) -- `pnpm test:e2e:all`: Start n8n and run e2e tests headless (i.e. runs `pnpm start` and `cypress run --headless`) +- `pnpm --filter=n8n-playwright test:local` - Run tests locally (starts local server on port 5680 and runs UI tests) +- `pnpm --filter=n8n-playwright test:local --ui` - Run tests in interactive UI mode (useful for debugging) +- `pnpm --filter=n8n-playwright test:local --grep="test-name"` - Run specific tests matching pattern -⚠️ Remember to stop your dev server before. Otherwise port binding will fail. +See `packages/testing/playwright/README.md` for more test commands and `packages/testing/playwright/CONTRIBUTING.md` for writing guidelines. ## Releasing diff --git a/cypress/.gitignore b/cypress/.gitignore deleted file mode 100644 index a1d14ddebb4..00000000000 --- a/cypress/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -videos/ -screenshots/ -downloads/ diff --git a/cypress/README.md b/cypress/README.md deleted file mode 100644 index 26fc23ba992..00000000000 --- a/cypress/README.md +++ /dev/null @@ -1,32 +0,0 @@ -## Debugging Flaky End-to-End Tests - Usage - -To debug flaky end-to-end (E2E) tests, use the following command: - -```bash -pnpm run debug:flaky:e2e -- -``` - -**Parameters:** - -* ``: (Optional) A string to filter tests by their `it()` or `describe()` block titles, or by tags if using the `@cypress/grep` plugin. If omitted, all tests will be run. -* ``: (Optional) The number of times to run the filtered tests. Defaults to 5 if not provided. - -**Examples:** - -1. **Run all tests tagged with `CAT-726` ten times:** - - ```bash - pnpm run debug:flaky:e2e CAT-726 10 - ``` - -2. **Run all tests containing "login" five times (default burn count):** - - ```bash - pnpm run debug:flaky:e2e login - ``` - -3. **Run all tests five times (default grep and burn count):** - - ```bash - pnpm run debug:flaky:e2e - ``` diff --git a/cypress/augmentation.d.ts b/cypress/augmentation.d.ts deleted file mode 100644 index d3724f344b5..00000000000 --- a/cypress/augmentation.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'cypress-otp' { - // eslint-disable-next-line import-x/no-default-export - export default function generateOTPToken(secret: string): string; -} diff --git a/cypress/biome.jsonc b/cypress/biome.jsonc deleted file mode 100644 index 5a63363ac82..00000000000 --- a/cypress/biome.jsonc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "../node_modules/@biomejs/biome/configuration_schema.json", - "extends": ["../biome.jsonc"], - "formatter": { - "ignore": ["fixtures/**"] - } -} diff --git a/cypress/composables/becomeTemplateCreatorCta.ts b/cypress/composables/becomeTemplateCreatorCta.ts deleted file mode 100644 index ca35e611d92..00000000000 --- a/cypress/composables/becomeTemplateCreatorCta.ts +++ /dev/null @@ -1,18 +0,0 @@ -//#region Getters - -export const getBecomeTemplateCreatorCta = () => cy.getByTestId('become-template-creator-cta'); - -export const getCloseBecomeTemplateCreatorCtaButton = () => - cy.getByTestId('close-become-template-creator-cta'); - -//#endregion - -//#region Actions - -export const interceptCtaRequestWithResponse = (becomeCreator: boolean) => { - return cy.intercept('GET', '/rest/cta/become-creator', { - body: becomeCreator, - }); -}; - -//#endregion diff --git a/cypress/composables/create.ts b/cypress/composables/create.ts deleted file mode 100644 index 4b58adf4c6e..00000000000 --- a/cypress/composables/create.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const universalAddButton = () => cy.getByTestId('universal-add'); - -export const createResource = ( - resourceType: 'project' | 'workflow' | 'credential', - projectName: string, -) => { - universalAddButton().click(); - cy.getByTestId('navigation-submenu') - .contains(new RegExp(resourceType, 'i')) - .should('be.visible') - .click(); - - if (resourceType !== 'project') { - cy.getByTestId('navigation-submenu-item') - .contains(new RegExp(projectName)) - .should('be.visible') - .click(); - } -}; diff --git a/cypress/composables/credentialsComposables.ts b/cypress/composables/credentialsComposables.ts deleted file mode 100644 index 52e2f714ff4..00000000000 --- a/cypress/composables/credentialsComposables.ts +++ /dev/null @@ -1,114 +0,0 @@ -export function getCredentialsPageUrl() { - return '/home/credentials'; -} - -export const verifyCredentialsListPageIsLoaded = () => { - cy.get('[data-test-id="resources-list-wrapper"], [data-test-id="empty-resources-list"]').should( - 'be.visible', - ); -}; - -export const loadCredentialsPage = (credentialsPageUrl: string) => { - cy.visit(credentialsPageUrl); - verifyCredentialsListPageIsLoaded(); -}; - -/** - * Getters - Page - */ - -export function getEmptyListCreateCredentialButton() { - return cy.getByTestId('empty-resources-list').find('button'); -} - -export function getCredentialCards() { - return cy.getByTestId('resources-list-item'); -} - -/** - * Getters - Modal - */ - -export function getNewCredentialModal() { - return cy.getByTestId('selectCredential-modal', { timeout: 5000 }); -} - -export function getEditCredentialModal() { - return cy.getByTestId('editCredential-modal', { timeout: 5000 }); -} - -export function getNewCredentialTypeSelect() { - return cy.getByTestId('new-credential-type-select'); -} - -export function getNewCredentialTypeOption(credentialType: string) { - return cy.getByTestId('new-credential-type-select-option').contains(credentialType); -} - -export function getNewCredentialTypeButton() { - return cy.getByTestId('new-credential-type-button'); -} - -export function getCredentialConnectionParameterInputs() { - return cy.getByTestId('credential-connection-parameter'); -} - -export function getConnectionParameter(fieldName: string) { - return getCredentialConnectionParameterInputs().find( - `:contains('${fieldName}') .n8n-input input`, - ); -} - -export function getCredentialSaveButton() { - return cy.getByTestId('credential-save-button', { timeout: 5000 }); -} - -/** - * Actions - Modal - */ - -export function setCredentialName(name: string) { - cy.getByTestId('credential-name').find('span[data-test-id=inline-edit-preview]').click(); - cy.getByTestId('credential-name').type(name); -} -export function saveCredential() { - getCredentialSaveButton() - .click({ force: true }) - .within(() => { - cy.get('button').should('not.exist'); - }); - getCredentialSaveButton().should('have.text', 'Saved'); -} -export function saveCredentialWithWait() { - cy.intercept('POST', '/rest/credentials').as('saveCredential'); - saveCredential(); - cy.wait('@saveCredential'); - getCredentialSaveButton().should('contain.text', 'Saved'); -} - -export function closeNewCredentialModal() { - getNewCredentialModal().find('.el-dialog__close').first().click(); -} - -export function createNewCredential( - type: string, - name: string, - parameter: string, - parameterValue: string, - closeModal = true, -) { - getEmptyListCreateCredentialButton().click(); - - getNewCredentialModal().should('be.visible'); - getNewCredentialTypeSelect().should('be.visible'); - getNewCredentialTypeOption(type).click(); - - getNewCredentialTypeButton().click(); - getConnectionParameter(parameter).type(parameterValue); - - setCredentialName(name); - saveCredential(); - if (closeModal) { - getEditCredentialModal().find('.el-dialog__close').first().click(); - } -} diff --git a/cypress/composables/executions.ts b/cypress/composables/executions.ts deleted file mode 100644 index 1da97926750..00000000000 --- a/cypress/composables/executions.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Getters - */ - -export const getExecutionsSidebar = () => cy.getByTestId('executions-sidebar'); - -export const getWorkflowExecutionPreviewIframe = () => cy.getByTestId('workflow-preview-iframe'); - -export const getExecutionPreviewBody = () => - getWorkflowExecutionPreviewIframe() - .its('0.contentDocument.body') - .should((body) => { - expect(body.querySelector('[data-test-id="canvas-wrapper"]')).to.exist; - }) - .then((el) => cy.wrap(el)); - -export const getExecutionPreviewBodyNodes = () => - getExecutionPreviewBody().findChildByTestId('canvas-node'); - -export const getExecutionPreviewBodyNodesByName = (name: string) => - getExecutionPreviewBody().findChildByTestId('canvas-node').filter(`[data-name="${name}"]`).eq(0); - -export function getExecutionPreviewOutputPanelRelatedExecutionLink() { - return getExecutionPreviewBody().findChildByTestId('related-execution-link'); -} - -export function getLogsOverviewStatus() { - return getExecutionPreviewBody().findChildByTestId('logs-overview-status'); -} - -export function getLogEntries() { - return getExecutionPreviewBody().findChildByTestId('logs-overview-body').find('[role=treeitem]'); -} - -export function getManualChatMessages() { - return getExecutionPreviewBody().find('.chat-messages-list .chat-message'); -} - -/** - * Actions - */ - -export const openExecutionPreviewNode = (name: string) => - getExecutionPreviewBodyNodesByName(name).dblclick(); - -export const toggleAutoRefresh = () => cy.getByTestId('auto-refresh-checkbox').click(); diff --git a/cypress/composables/featureFlags.ts b/cypress/composables/featureFlags.ts deleted file mode 100644 index ea8e95064e4..00000000000 --- a/cypress/composables/featureFlags.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const overrideFeatureFlag = (name: string, value: boolean | string) => { - cy.window().then((win) => { - // If feature flags hasn't been initialized yet, we store the override - // in local storage and it gets loaded when the feature flags are - // initialized. - win.localStorage.setItem('N8N_EXPERIMENT_OVERRIDES', JSON.stringify({ [name]: value })); - - if (win.featureFlags) { - win.featureFlags.override(name, value); - } - }); -}; diff --git a/cypress/composables/folders.ts b/cypress/composables/folders.ts deleted file mode 100644 index f7ebeeb11fc..00000000000 --- a/cypress/composables/folders.ts +++ /dev/null @@ -1,553 +0,0 @@ -import { errorToast, successToast } from '../pages/notifications'; - -/** - * Getters - */ -export function getPersonalProjectMenuItem() { - return cy.getByTestId('project-personal-menu-item'); -} - -export function getOverviewMenuItem() { - return cy.getByTestId('menu-item').contains('Overview'); -} - -export function getAddResourceDropdown() { - return cy.getByTestId('add-resource'); -} - -export function getFolderCards() { - return cy.getByTestId('folder-card'); -} - -export function getFolderCard(name: string) { - return cy.getByTestId('folder-card-name').contains(name).closest('[data-test-id="folder-card"]'); -} - -export function getWorkflowCards() { - return cy.getByTestId('resources-list-item-workflow'); -} - -export function getWorkflowCard(name: string) { - return cy - .getByTestId('workflow-card-name') - .contains(name) - .closest('[data-test-id="resources-list-item-workflow"]'); -} - -export function getWorkflowCardActions(name: string) { - return getWorkflowCard(name).find('[data-test-id="workflow-card-actions"]'); -} - -export function getWorkflowCardActionItem(workflowName: string, actionName: string) { - return getWorkflowCardActions(workflowName) - .find('span[aria-controls]') - .invoke('attr', 'aria-controls') - .then((popperId) => { - return cy.get(`#${popperId}`).find(`[data-test-id="action-${actionName}"]`); - }); -} - -export function getDuplicateWorkflowModal() { - return cy.getByTestId('duplicate-modal'); -} - -export function getWorkflowMenu() { - return cy.getByTestId('workflow-menu'); -} - -export function getAddFolderButton() { - return cy.getByTestId('add-folder-button'); -} - -export function getListBreadcrumbs() { - return cy.getByTestId('main-breadcrumbs'); -} - -export function getHomeProjectBreadcrumb() { - return getListBreadcrumbs().findChildByTestId('home-project'); -} - -export function getListBreadcrumbItem(name: string) { - return getListBreadcrumbs().findChildByTestId('breadcrumbs-item').contains(name); -} - -export function getVisibleListBreadcrumbs() { - return getListBreadcrumbs().findChildByTestId('breadcrumbs-item'); -} - -export function getCurrentBreadcrumb() { - return getListBreadcrumbs().findChildByTestId('breadcrumbs-item-current').find('input'); -} - -export function getCurrentBreadcrumbText() { - return getCurrentBreadcrumb().invoke('val'); -} - -export function getMainBreadcrumbsEllipsis() { - return getListBreadcrumbs().findChildByTestId('hidden-items-menu'); -} - -export function getMainBreadcrumbsEllipsisMenuItems() { - return cy - .getByTestId('hidden-items-menu') - .find('span[aria-controls]') - .invoke('attr', 'aria-controls') - .then((popperId) => { - return cy.get(`#${popperId}`).find('li'); - }); -} - -export function getFolderCardBreadCrumbs(folderName: string) { - return getFolderCard(folderName).find('[data-test-id="folder-card-breadcrumbs"]'); -} - -export function getFolderCardBreadCrumbsEllipsis(folderName: string) { - return getFolderCardBreadCrumbs(folderName).find('[data-test-id="ellipsis"]'); -} - -export function getFolderCardHomeProjectBreadcrumb(folderName: string) { - return getFolderCardBreadCrumbs(folderName).find('[data-test-id="folder-card-home-project"]'); -} - -export function getFolderCardCurrentBreadcrumb(folderName: string) { - return getFolderCardBreadCrumbs(folderName).find('[data-test-id="breadcrumbs-item-current"]'); -} - -export function getOpenHiddenItemsTooltip() { - return cy.getByTestId('hidden-items-tooltip').filter(':visible'); -} - -export function getListActionsToggle() { - return cy.getByTestId('folder-breadcrumbs-actions'); -} - -export function getCanvasBreadcrumbs() { - cy.getByTestId('canvas-breadcrumbs').should('exist'); - return cy.getByTestId('canvas-breadcrumbs').findChildByTestId('folder-breadcrumbs'); -} - -export function getListActionItem(name: string) { - return cy - .getByTestId('folder-breadcrumbs-actions') - .find('span[aria-controls]') - .invoke('attr', 'aria-controls') - .then((popperId) => { - return cy.get(`#${popperId}`).find(`[data-test-id="action-${name}"]`); - }); -} - -export function getInlineEditInput() { - return cy.getByTestId('inline-edit-input'); -} - -export function getFolderCardActionToggle(folderName: string) { - return getFolderCard(folderName).find('[data-test-id="folder-card-actions"]'); -} - -export function getFolderCardActionItem(folderName: string, actionName: string) { - return getFolderCard(folderName) - .findChildByTestId('folder-card-actions') - .filter(':visible') - .find('span[aria-controls]') - .invoke('attr', 'aria-controls') - .then((popperId) => { - return cy.get(`#${popperId}`).find(`[data-test-id="action-${actionName}"]`); - }); -} - -export function getFolderDeleteModal() { - return cy.getByTestId('deleteFolder-modal'); -} - -export function getMoveFolderModal() { - return cy.getByTestId('moveFolder-modal'); -} - -export function getDeleteRadioButton() { - return cy.getByTestId('delete-content-radio'); -} - -export function getTransferContentRadioButton() { - return cy.getByTestId('transfer-content-radio'); -} - -export function getConfirmDeleteInput() { - return getFolderDeleteModal().findChildByTestId('delete-data-input').find('input'); -} - -export function getDeleteFolderModalConfirmButton() { - return getFolderDeleteModal().findChildByTestId('confirm-delete-folder-button'); -} - -export function getProjectEmptyState() { - return cy.getByTestId('list-empty-state'); -} - -export function getFolderEmptyState() { - return cy.getByTestId('empty-folder-container'); -} - -export function getProjectMenuItem(name: string) { - if (name.toLowerCase() === 'personal') { - return getPersonalProjectMenuItem(); - } - return cy.getByTestId('project-menu-item').contains(name); -} - -export function getMoveToFolderDropdown() { - return cy.getByTestId('move-to-folder-dropdown'); -} - -export function getMoveToFolderOption(name: string) { - return cy.getByTestId('move-to-folder-option').contains(name); -} - -export function getMoveToFolderInput() { - return getMoveToFolderDropdown().find('input'); -} - -export function getProjectSharingInput() { - return cy.getByTestId('project-sharing-select'); -} - -export function getProjectSharingOption(name: string) { - return cy.getByTestId('project-sharing-info').contains(name); -} - -export function getEmptyFolderDropdownMessage(text: string) { - return cy.get('.el-select-dropdown__empty').contains(text); -} - -export function getMoveFolderConfirmButton() { - return cy.getByTestId('confirm-move-folder-button'); -} - -export function getMoveWorkflowModal() { - return cy.getByTestId('moveFolder-modal'); -} - -export function getWorkflowCardBreadcrumbs(workflowName: string) { - return getWorkflowCard(workflowName).find('[data-test-id="workflow-card-breadcrumbs"]'); -} - -export function getWorkflowCardBreadcrumbsEllipsis(workflowName: string) { - return getWorkflowCardBreadcrumbs(workflowName).find('[data-test-id="ellipsis"]'); -} - -export function getNewFolderNameInput() { - return cy.get('.add-folder-modal').filter(':visible').find('input.el-input__inner'); -} - -export function getNewFolderModalErrorMessage() { - return cy.get('.el-message-box__errormsg').filter(':visible'); -} - -export function getProjectTab(tabId: string) { - return cy.getByTestId('project-tabs').find(`#${tabId}`); -} - -/** - * Actions - */ -export function goToPersonalProject() { - getPersonalProjectMenuItem().click(); -} - -export function createFolderInsideFolder(childName: string, parentName: string) { - getFolderCard(parentName).click(); - createFolderFromListHeaderButton(childName); -} - -export function createFolderFromListHeaderButton(folderName: string) { - getAddFolderButton().click(); - createNewFolder(folderName); -} - -export function createWorkflowFromEmptyState(workflowName?: string) { - getFolderEmptyState().find('button').contains('Create Workflow').click(); - if (workflowName) { - cy.getByTestId('workflow-name-input').type(`{selectAll}{backspace}${workflowName}`, { - delay: 50, - }); - } - cy.getByTestId('workflow-save-button').click(); - successToast().should('exist'); -} - -export function createWorkflowFromProjectHeader(folderName?: string, workflowName?: string) { - cy.getByTestId('add-resource-workflow').click(); - if (workflowName) { - cy.getByTestId('workflow-name-input').type(`{selectAll}{backspace}${workflowName}`, { - delay: 50, - }); - } - cy.getByTestId('workflow-save-button').click(); - if (folderName) { - successToast().should( - 'contain.text', - `Workflow successfully created in "Personal", within "${folderName}"`, - ); - } -} - -export function createWorkflowFromListDropdown(workflowName?: string) { - getListActionsToggle().click(); - getListActionItem('create_workflow').click(); - if (workflowName) { - cy.getByTestId('workflow-name-input').type(`{selectAll}{backspace}${workflowName}`, { - delay: 50, - }); - } - cy.getByTestId('workflow-save-button').click(); - successToast().should('exist'); -} - -export function createFolderFromProjectHeader(folderName: string) { - getAddResourceDropdown().click(); - cy.getByTestId('action-folder').click(); - createNewFolder(folderName); -} - -export function createFolderFromListDropdown(folderName: string) { - getListActionsToggle().click(); - getListActionItem('create').click(); - createNewFolder(folderName); -} - -export function createFolderFromCardActions(parentName: string, folderName: string) { - getFolderCardActionToggle(parentName).click(); - getFolderCardActionItem(parentName, 'create').click(); - createNewFolder(folderName); -} - -export function renameFolderFromListActions(folderName: string, newName: string) { - getFolderCard(folderName).click(); - getListActionsToggle().click(); - getListActionItem('rename').click(); - getInlineEditInput().should('be.visible'); - getInlineEditInput().type(`${newName}{enter}`, { delay: 50 }); - successToast().should('exist'); -} - -export function renameFolderFromCardActions(folderName: string, newName: string) { - getFolderCardActionToggle(folderName).click(); - getFolderCardActionItem(folderName, 'rename').click(); - renameFolder(newName); -} - -export function duplicateWorkflowFromCardActions(workflowName: string, duplicateName: string) { - getWorkflowCardActions(workflowName).click(); - getWorkflowCardActionItem(workflowName, 'duplicate').click(); - getDuplicateWorkflowModal().find('input').first().type('{selectall}'); - getDuplicateWorkflowModal().find('input').first().type(duplicateName); - getDuplicateWorkflowModal().find('button').contains('Duplicate').click(); - errorToast().should('not.exist'); -} - -export function duplicateWorkflowFromWorkflowPage(duplicateName: string) { - getWorkflowMenu().click(); - cy.getByTestId('workflow-menu-item-duplicate').click(); - getDuplicateWorkflowModal().find('input').first().type('{selectall}'); - getDuplicateWorkflowModal().find('input').first().type(duplicateName); - getDuplicateWorkflowModal().find('button').contains('Duplicate').click(); - errorToast().should('not.exist'); -} - -export function deleteEmptyFolderFromCardDropdown(folderName: string) { - cy.intercept('DELETE', '/rest/projects/**').as('deleteFolder'); - getFolderCard(folderName).click(); - getListActionsToggle().click(); - getListActionItem('delete').click(); - cy.wait('@deleteFolder'); - successToast().should('contain.text', 'Folder deleted'); -} - -export function deleteEmptyFolderFromListDropdown(folderName: string) { - cy.intercept('DELETE', '/rest/projects/**').as('deleteFolder'); - getFolderCard(folderName).click(); - getListActionsToggle().click(); - getListActionItem('delete').click(); - cy.wait('@deleteFolder'); - successToast().should('contain.text', 'Folder deleted'); -} - -export function deleteFolderWithContentsFromListDropdown(folderName: string) { - getListActionsToggle().click(); - getListActionItem('delete').click(); - confirmFolderDelete(folderName); -} - -export function deleteFolderWithContentsFromCardDropdown(folderName: string) { - getFolderCardActionToggle(folderName).click(); - getFolderCardActionItem(folderName, 'delete').click(); - confirmFolderDelete(folderName); -} - -export function deleteAndTransferFolderContentsFromCardDropdown( - folderName: string, - destinationName: string, -) { - getFolderCardActionToggle(folderName).click(); - getFolderCardActionItem(folderName, 'delete').click(); - deleteFolderAndMoveContents(folderName, destinationName); -} - -export function deleteAndTransferFolderContentsFromListDropdown(destinationName: string) { - getListActionsToggle().click(); - getListActionItem('delete').click(); - getCurrentBreadcrumbText().then((currentFolderName) => { - deleteFolderAndMoveContents(String(currentFolderName), destinationName); - }); -} - -export function createNewProject(projectName: string, options: { openAfterCreate?: boolean } = {}) { - cy.getByTestId('universal-add').should('exist').click(); - cy.getByTestId('navigation-menu-item').contains('Project').click(); - cy.getByTestId('project-settings-name-input').type(projectName, { delay: 50 }); - cy.getByTestId('project-settings-save-button').click(); - successToast().should('exist'); - if (options.openAfterCreate) { - getProjectMenuItem(projectName).click(); - } -} - -export function moveFolderFromFolderCardActions(folderName: string, destinationName: string) { - getFolderCardActionToggle(folderName).click(); - getFolderCardActionItem(folderName, 'move').click(); - moveFolder(folderName, destinationName); -} - -export function moveFolderFromListActions(folderName: string, destinationName: string) { - getFolderCard(folderName).click(); - getListActionsToggle().click(); - getListActionItem('move').click(); - moveFolder(folderName, destinationName); -} - -export function moveWorkflowToFolder(workflowName: string, folderName: string) { - getWorkflowCardActions(workflowName).click(); - getWorkflowCardActionItem(workflowName, 'moveToFolder').click(); - getMoveFolderModal().should('be.visible'); - getMoveToFolderDropdown().click(); - getMoveToFolderInput().type(folderName, { delay: 50 }); - getMoveToFolderOption(folderName).should('be.visible').click(); - getMoveFolderConfirmButton().should('be.enabled').click(); -} - -export function dragAndDropToFolder(sourceName: string, destinationName: string) { - const draggable = `[data-test-id=draggable]:has([data-resourcename="${sourceName}"])`; - const droppable = `[data-test-id=draggable]:has([data-resourcename="${destinationName}"])`; - cy.get(draggable).trigger('mousedown'); - cy.draganddrop(draggable, droppable, { position: 'center' }); -} - -export function dragAndDropToProjectRoot(sourceName: string) { - const draggable = `[data-test-id=draggable]:has([data-resourcename="${sourceName}"])`; - const droppable = '[data-test-id="home-project"]'; - cy.get(draggable).trigger('mousedown'); - cy.draganddrop(draggable, droppable, { position: 'center' }); -} - -/** - * Utils - */ - -/** - * Types folder name in the prompt and waits for the folder to be created - * @param name - */ -function createNewFolder(name: string) { - cy.intercept('POST', '/rest/projects/**').as('createFolder'); - cy.get('[role=dialog]') - .filter(':visible') - .within(() => { - cy.get('input.el-input__inner').type(name, { delay: 50 }); - cy.get('button.btn--confirm').click(); - }); - cy.wait('@createFolder'); - successToast().should('exist'); -} - -function renameFolder(newName: string) { - cy.intercept('PATCH', '/rest/projects/**').as('renameFolder'); - cy.get('[role=dialog]') - .filter(':visible') - .within(() => { - cy.get('input.el-input__inner').type('{selectall}'); - cy.get('input.el-input__inner').type(newName, { delay: 50 }); - cy.get('button.btn--confirm').click(); - }); - cy.wait('@renameFolder'); - successToast().should('exist'); -} - -function confirmFolderDelete(folderName: string) { - cy.intercept('DELETE', '/rest/projects/**').as('deleteFolder'); - getFolderDeleteModal().should('be.visible'); - getDeleteRadioButton().click(); - getConfirmDeleteInput().should('be.visible'); - getConfirmDeleteInput().type(`delete ${folderName}`, { delay: 50 }); - getDeleteFolderModalConfirmButton().should('be.enabled').click(); - cy.wait('@deleteFolder'); - successToast().contains('Folder deleted').should('exist'); -} - -function deleteFolderAndMoveContents(folderName: string, destinationName: string) { - cy.intercept('DELETE', '/rest/projects/**').as('deleteFolder'); - getFolderDeleteModal().should('be.visible'); - getFolderDeleteModal().find('h1').first().contains(`Delete '${folderName}'`); - getTransferContentRadioButton().should('be.visible').click(); - getMoveToFolderDropdown().click(); - getMoveToFolderInput().type(destinationName); - getMoveToFolderOption(destinationName).click(); - getDeleteFolderModalConfirmButton().should('be.enabled').click(); - cy.wait('@deleteFolder'); - successToast().should('contain.text', `Data transferred to '${destinationName}'`); -} - -function moveFolder(folderName: string, destinationName: string) { - cy.intercept('PATCH', '/rest/projects/**').as('moveFolder'); - getMoveFolderModal().should('be.visible'); - getMoveFolderModal().find('h1').first().contains(`Move folder ${folderName}`); - - // The dropdown focuses after a small delay (once modal's slide in animation is done). - // On the component we listen for an event, but here the wait should be very predictable. - cy.wait(500); - - // Try to find current folder in the dropdown - // This tests that auto-focus worked as expected - cy.focused().type(folderName, { delay: 50 }); - // Should not be available - getEmptyFolderDropdownMessage('No folders found').should('exist'); - // Select destination folder - getMoveToFolderInput().type(`{selectall}{backspace}${destinationName}`, { - delay: 50, - }); - getMoveToFolderOption(destinationName).should('be.visible').click(); - getMoveFolderConfirmButton().should('be.enabled').click(); - cy.wait('@moveFolder'); -} - -export function transferWorkflow( - workflowName: string, - projectName: string, - destinationFolder?: string, -) { - getMoveFolderModal().should('be.visible'); - getMoveFolderModal().find('h1').first().contains(`Move workflow ${workflowName}`); - - cy.wait(500); - - getProjectSharingInput().should('be.visible').click(); - cy.focused().type(projectName, { delay: 50 }); - getProjectSharingOption(projectName).should('be.visible').click(); - - if (destinationFolder) { - getMoveToFolderInput().click(); - // Select destination folder - cy.focused().type(destinationFolder, { delay: 50 }); - getMoveToFolderOption(destinationFolder).should('be.visible').click(); - } - - getMoveFolderConfirmButton().should('be.enabled').click(); -} diff --git a/cypress/composables/logs.ts b/cypress/composables/logs.ts deleted file mode 100644 index c6b603a0af5..00000000000 --- a/cypress/composables/logs.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Accessors - */ - -export function getOverviewPanel() { - return cy.getByTestId('logs-overview'); -} - -export function getOverviewPanelBody() { - return cy.getByTestId('logs-overview-body'); -} - -export function getOverviewStatus() { - return cy.getByTestId('logs-overview-status'); -} - -export function getLogEntries() { - return cy.getByTestId('logs-overview-body').find('[role=treeitem]'); -} - -export function getSelectedLogEntry() { - return cy.getByTestId('logs-overview-body').find('[role=treeitem][aria-selected=true]'); -} - -export function getInputPanel() { - return cy.getByTestId('log-details-input'); -} - -export function getInputTableRows() { - return cy.getByTestId('log-details-input').find('table tr'); -} - -export function getInputTbodyCell(row: number, col: number) { - return cy.getByTestId('log-details-input').find('table tr').eq(row).find('td').eq(col); -} - -export function getNodeErrorMessageHeader() { - return cy.getByTestId('log-details-output').findChildByTestId('node-error-message'); -} - -export function getOutputPanel() { - return cy.getByTestId('log-details-output'); -} - -export function getOutputTableRows() { - return cy.getByTestId('log-details-output').find('table tr'); -} - -export function getOutputTbodyCell(row: number, col: number) { - return cy.getByTestId('log-details-output').find('table tr').eq(row).find('td').eq(col); -} - -/** - * Actions - */ - -export function openLogsPanel() { - cy.getByTestId('logs-overview-header').click(); -} - -export function pressClearExecutionButton() { - cy.getByTestId('logs-overview-header').find('button').contains('Clear execution').click(); -} - -export function clickLogEntryAtRow(rowIndex: number) { - getLogEntries().eq(rowIndex).click(); -} - -export function toggleInputPanel() { - cy.getByTestId('log-details-header').contains('Input').click(); -} - -export function clickOpenNdvAtRow(rowIndex: number) { - getLogEntries().eq(rowIndex).trigger('focus').realHover(); - getLogEntries().eq(rowIndex).find('[aria-label="Open..."]').click(); -} - -export function clickTriggerPartialExecutionAtRow(rowIndex: number) { - getLogEntries().eq(rowIndex).scrollIntoView(); - getLogEntries().eq(rowIndex).realHover(); - getLogEntries().eq(rowIndex).find('[aria-label="Execute step"]').click({ force: true }); -} - -export function setInputDisplayMode(mode: 'table' | 'ai' | 'json' | 'schema') { - cy.getByTestId('log-details-input').realHover(); - cy.getByTestId('log-details-input').findChildByTestId(`radio-button-${mode}`).click(); -} - -export function setOutputDisplayMode(mode: 'table' | 'ai' | 'json' | 'schema') { - cy.getByTestId('log-details-output').realHover(); - cy.getByTestId('log-details-output').findChildByTestId(`radio-button-${mode}`).click(); -} diff --git a/cypress/composables/modals/chat-modal.ts b/cypress/composables/modals/chat-modal.ts deleted file mode 100644 index 5ec32b40417..00000000000 --- a/cypress/composables/modals/chat-modal.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Getters - */ - -export function getManualChatModal() { - return cy.getByTestId('canvas-chat'); -} - -export function getManualChatInput() { - return getManualChatModal().get('.chat-inputs textarea'); -} - -export function getManualChatSendButton() { - return getManualChatModal().get('.chat-input-send-button'); -} - -export function getManualChatMessages() { - return getManualChatModal().get('.chat-messages-list .chat-message'); -} - -export function getManualChatModalCloseButton() { - return cy.getByTestId('workflow-chat-button'); -} - -export function getManualChatDialog() { - return getManualChatModal().getByTestId('workflow-lm-chat-dialog'); -} - -/** - * Actions - */ - -export function sendManualChatMessage(message: string) { - getManualChatInput().type(message); - getManualChatSendButton().click(); -} - -export function closeManualChatModal() { - getManualChatModalCloseButton().click(); -} diff --git a/cypress/composables/modals/credential-modal.ts b/cypress/composables/modals/credential-modal.ts deleted file mode 100644 index 4e6533300ae..00000000000 --- a/cypress/composables/modals/credential-modal.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Getters - */ - -import { clearNotifications } from '../../pages/notifications'; - -export function getCredentialConnectionParameterInputs() { - return cy.getByTestId('credential-connection-parameter'); -} - -export function getCredentialConnectionParameterInputByName(name: string) { - return cy.getByTestId(`parameter-input-${name}`); -} - -export function getEditCredentialModal() { - return cy.getByTestId('editCredential-modal', { timeout: 5000 }); -} - -export function getCredentialSaveButton() { - return cy.getByTestId('credential-save-button', { timeout: 5000 }); -} - -export function getCredentialDeleteButton() { - return cy.getByTestId('credential-delete-button'); -} - -export function getCredentialModalCloseButton() { - return getEditCredentialModal().find('.el-dialog__close').first(); -} - -/** - * Actions - */ - -export function setCredentialConnectionParameterInputByName(name: string, value: string) { - getCredentialConnectionParameterInputByName(name).type(value); -} - -export function saveCredential() { - getCredentialSaveButton() - .click({ force: true }) - .within(() => { - cy.get('button').should('not.exist'); - }); - getCredentialSaveButton().should('have.text', 'Saved'); -} - -export function closeCredentialModal() { - getCredentialModalCloseButton().click(); -} - -export function setCredentialValues(values: Record, save = true) { - Object.entries(values).forEach(([key, value]) => { - setCredentialConnectionParameterInputByName(key, value); - }); - - if (save) { - saveCredential(); - closeCredentialModal(); - clearNotifications(); - } -} diff --git a/cypress/composables/modals/save-changes-modal.ts b/cypress/composables/modals/save-changes-modal.ts deleted file mode 100644 index e2a629a63ec..00000000000 --- a/cypress/composables/modals/save-changes-modal.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function getSaveChangesModal() { - return cy.get('.el-overlay').contains('Save changes before leaving?'); -} - -// this is the button next to 'Save Changes' -export function getCancelSaveChangesButton() { - return cy.get('.btn--cancel'); -} - -// This is the top right 'x' -export function getCloseSaveChangesButton() { - return cy.get('.el-message-box__headerbtn'); -} diff --git a/cypress/composables/modals/workflow-credential-setup-modal.ts b/cypress/composables/modals/workflow-credential-setup-modal.ts deleted file mode 100644 index 88bbd133486..00000000000 --- a/cypress/composables/modals/workflow-credential-setup-modal.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Getters - */ - -export const getWorkflowCredentialsModal = () => cy.getByTestId('setup-workflow-credentials-modal'); - -export const getContinueButton = () => cy.getByTestId('continue-button'); - -/** - * Actions - */ - -export const closeModalFromContinueButton = () => getContinueButton().click(); diff --git a/cypress/composables/ndv.ts b/cypress/composables/ndv.ts deleted file mode 100644 index 516a2e8aa21..00000000000 --- a/cypress/composables/ndv.ts +++ /dev/null @@ -1,347 +0,0 @@ -/** - * Getters - */ - -import { getVisiblePopper, getVisibleSelect } from '../utils/popper'; - -export function getNdvContainer() { - return cy.getByTestId('ndv'); -} - -export function getCredentialSelect(eq = 0) { - return cy.getByTestId('node-credentials-select').eq(eq); -} - -export function getCreateNewCredentialOption() { - return cy.getByTestId('node-credentials-select-item-new'); -} - -export function getBackToCanvasButton() { - return cy.getByTestId('back-to-canvas'); -} - -export function getExecuteNodeButton() { - return cy.getByTestId('node-execute-button'); -} - -export function getParameterInputByName(name: string) { - return cy.getByTestId(`parameter-input-${name}`); -} - -export function getInputPanel() { - return cy.getByTestId('ndv-input-panel'); -} - -export function getInputSelect() { - return cy.getByTestId('ndv-input-select').find('input'); -} - -export function getInputLinkRun() { - return getInputPanel().findChildByTestId('link-run'); -} - -export function getMainPanel() { - return cy.getByTestId('node-parameters'); -} - -export function getOutputPanel() { - return cy.getByTestId('output-panel'); -} - -export function getFixedCollection(collectionName: string) { - return cy.getByTestId(`fixed-collection-${collectionName}`); -} - -export function getResourceLocator(paramName: string) { - return cy.getByTestId(`resource-locator-${paramName}`); -} - -export function getResourceLocatorInput(paramName: string) { - return getResourceLocator(paramName).find('[data-test-id="rlc-input-container"]'); -} - -export function getInputPanelDataContainer() { - return getInputPanel().findChildByTestId('ndv-data-container'); -} - -export function getInputTableRows() { - return getInputPanelDataContainer().find('table tr'); -} - -export function getInputTbodyCell(row: number, col: number) { - return getInputTableRows().eq(row).find('td').eq(col); -} - -export function getInputRunSelector() { - return cy.get('[data-test-id="ndv-input-panel"] [data-test-id="run-selector"]'); -} - -export function getInputPanelItemsCount() { - return getInputPanel().getByTestId('ndv-items-count'); -} - -export function getOutputPanelDataContainer() { - return getOutputPanel().findChildByTestId('ndv-data-container'); -} - -export function getOutputTableRows() { - return getOutputPanelDataContainer().find('table tr'); -} - -export function getOutputTableRow(row: number) { - return getOutputTableRows().eq(row); -} - -export function getOutputTableHeaders() { - return getOutputPanelDataContainer().find('table thead th'); -} - -export function getOutputTableHeaderByText(text: string) { - return getOutputTableHeaders().contains(text); -} - -export function getOutputTbodyCell(row: number, col: number) { - return getOutputTableRows().eq(row).find('td').eq(col); -} - -export function getOutputRunSelector() { - return cy.get('[data-test-id="output-panel"] [data-test-id="run-selector"]'); -} - -export function getOutputRunSelectorInput() { - return getOutputRunSelector().find('input'); -} - -export function getOutputPanelTable() { - return getOutputPanelDataContainer().get('table'); -} - -export function getRunDataInfoCallout() { - return cy.getByTestId('run-data-callout'); -} - -export function getOutputPanelItemsCount() { - return getOutputPanel().getByTestId('ndv-items-count'); -} - -export function getOutputPanelRelatedExecutionLink() { - return getOutputPanel().getByTestId('related-execution-link'); -} - -export function getNodeOutputHint() { - return cy.getByTestId('ndv-output-run-node-hint'); -} - -export function getWorkflowCards() { - return cy.getByTestId('resources-list-item-workflow'); -} - -export function getWorkflowCard(workflowName: string) { - return getWorkflowCards() - .contains(workflowName) - .parents('[data-test-id="resources-list-item-workflow"]'); -} - -export function getWorkflowCardContent(workflowName: string) { - return getWorkflowCard(workflowName).findChildByTestId('card-content'); -} - -export function getNodeRunInfoStale() { - return cy.getByTestId('node-run-info-stale'); -} - -export function getNodeOutputErrorMessage() { - return getOutputPanel().findChildByTestId('node-error-message'); -} - -export function getParameterExpressionPreviewValue() { - return cy.getByTestId('parameter-expression-preview-value'); -} - -/** - * Actions - */ - -export function openCredentialSelect(eq = 0) { - getCredentialSelect(eq).click(); -} - -export function setCredentialByName(name: string) { - openCredentialSelect(); - getCredentialSelect().contains(name).click(); -} - -export function clickCreateNewCredential() { - openCredentialSelect(); - getCreateNewCredentialOption().click({ force: true }); -} - -export function clickGetBackToCanvas() { - getBackToCanvasButton().click(); -} - -export function clickExecuteNode() { - getExecuteNodeButton().click(); -} - -export function clickResourceLocatorInput(paramName: string) { - getResourceLocatorInput(paramName).click(); -} - -export function setParameterInputByName(name: string, value: string) { - getParameterInputByName(name).clear().type(value); -} - -export function checkParameterCheckboxInputByName(name: string) { - getParameterInputByName(name).find('input[type="checkbox"]').check({ force: true }); -} - -export function uncheckParameterCheckboxInputByName(name: string) { - getParameterInputByName(name).find('input[type="checkbox"]').uncheck({ force: true }); -} - -export function setParameterSelectByContent(name: string, content: string) { - getParameterInputByName(name).realClick(); - getVisibleSelect().find('.option-headline').contains(content).click(); -} - -export function changeOutputRunSelector(runName: string) { - getOutputRunSelector().click(); - getVisibleSelect().find('.el-select-dropdown__item').contains(runName).click(); -} - -export function addItemToFixedCollection(collectionName: string) { - getFixedCollection(collectionName).getByTestId('fixed-collection-add').click(); -} - -export function typeIntoFixedCollectionItem(collectionName: string, index: number, value: string) { - getFixedCollection(collectionName).within(() => - cy.getByTestId('parameter-input').eq(index).type(value), - ); -} - -export function selectResourceLocatorAddResourceItem( - resourceLocator: string, - expectedText: string, -) { - clickResourceLocatorInput(resourceLocator); - - // getVisiblePopper().findChildByTestId('rlc-item-add-resource').eq(0).should('exist'); - getVisiblePopper() - .findChildByTestId('rlc-item-add-resource') - .eq(0) - .find('span') - .should('contain.text', expectedText) - .click(); -} - -export function selectResourceLocatorItem( - resourceLocator: string, - index: number, - expectedText: string, -) { - clickResourceLocatorInput(resourceLocator); - - getVisiblePopper().findChildByTestId('rlc-item').eq(0).should('exist'); - getVisiblePopper() - .findChildByTestId('rlc-item') - .eq(index) - .find('span') - .should('contain.text', expectedText) - .click(); -} - -export function clickWorkflowCardContent(workflowName: string) { - getWorkflowCardContent(workflowName).click(); -} - -export function clickAssignmentCollectionAdd() { - cy.getByTestId('assignment-collection-drop-area').click(); -} - -export function assertNodeOutputHintExists() { - getNodeOutputHint().should('exist'); -} - -export function assertNodeOutputErrorMessageExists() { - return getNodeOutputErrorMessage().should('exist'); -} - -// Note that this only validates the expectedContent is *included* in the output table -export function assertOutputTableContent(expectedContent: unknown[][]) { - for (const [i, row] of expectedContent.entries()) { - for (const [j, value] of row.entries()) { - // + 1 to skip header - getOutputTbodyCell(1 + i, j).should('have.text', value); - } - } -} - -export function populateMapperFields(fields: ReadonlyArray<[string, string]>) { - for (const [name, value] of fields) { - getParameterInputByName(name).type(value); - - // Click on a parent to dismiss the pop up which hides the field below. - getParameterInputByName(name).parent().parent().parent().parent().click('topLeft'); - } -} - -/** - * Populate multiValue fixedCollections. Only supports fixedCollections for which all fields can be defined via keyboard typing - * - * @param items - 2D array of items to populate, i.e. [["myField1", "String"], ["myField2", "Number"]] - * @param collectionName - name of the fixedCollection to populate - * @param offset - amount of 'parameter-input's before start, e.g. from a controlling dropdown that makes the fields appear - * @returns - */ -export function populateFixedCollection( - items: readonly T[], - collectionName: string, - offset: number = 0, -) { - if (items.length === 0) return; - const n = items[0].length; - for (const [i, params] of items.entries()) { - addItemToFixedCollection(collectionName); - for (const [j, param] of params.entries()) { - getFixedCollection(collectionName) - .getByTestId('parameter-input') - .eq(offset + i * n + j) - .type(`${param}{downArrow}{enter}`); - } - } -} - -export function assertInlineExpressionValid() { - cy.getByTestId('inline-expression-editor-input').find('.cm-valid-resolvable').should('exist'); -} - -export function hoverInputItemByText(text: string) { - return getInputPanelDataContainer().contains(text).realHover(); -} - -export function verifyInputHoverState(expectedText: string) { - getInputPanelDataContainer() - .find('[data-test-id="hovering-item"]') - .should('be.visible') - .should('have.text', expectedText); -} - -export function verifyOutputHoverState(expectedText: string) { - getOutputPanelDataContainer() - .find('[data-test-id="hovering-item"]') - .should('be.visible') - .should('have.text', expectedText); -} - -export function resetHoverState() { - getBackToCanvasButton().realHover(); -} - -export function setInputDisplayMode(mode: 'Schema' | 'Table' | 'JSON' | 'Binary') { - getInputPanel().findChildByTestId('ndv-run-data-display-mode').contains(mode).click(); -} - -export function toggleInputRunLinking() { - getInputLinkRun().click(); -} diff --git a/cypress/composables/nodeCreator.ts b/cypress/composables/nodeCreator.ts deleted file mode 100644 index e639a13d64a..00000000000 --- a/cypress/composables/nodeCreator.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Getters -export const nodeCreatorPlusButton = () => cy.getByTestId('node-creator-plus-button'); -export const canvasAddButton = () => cy.getByTestId('canvas-add-button'); -export const searchBar = () => cy.getByTestId('search-bar'); -export const getCategoryItem = (label: string) => cy.get(`[data-keyboard-nav-id="${label}"]`); -export const getCreatorItem = (label: string) => - getCreatorItems().contains(label).parents('[data-test-id="item-iterator-item"]'); -export const getNthCreatorItem = (n: number) => getCreatorItems().eq(n); -export const nodeCreator = () => cy.getByTestId('node-creator'); -export const nodeCreatorTabs = () => cy.getByTestId('node-creator-type-selector'); -export const selectedTab = () => nodeCreatorTabs().find('.is-active'); -export const categorizedItems = () => cy.getByTestId('categorized-items'); -export const getCreatorItems = () => cy.getByTestId('item-iterator-item'); -export const categoryItem = () => cy.getByTestId('node-creator-category-item'); -export const communityNodeTooltip = () => cy.getByTestId('node-item-community-tooltip'); -export const noResults = () => cy.getByTestId('node-creator-no-results'); -export const nodeItemName = () => cy.getByTestId('node-creator-item-name'); -export const nodeItemDescription = () => cy.getByTestId('node-creator-item-description'); -export const activeSubcategory = () => cy.getByTestId('nodes-list-header'); -export const expandedCategories = () => - getCreatorItems().find('>div').filter('.active').invoke('text'); - -// Actions -export const openNodeCreator = () => { - nodeCreatorPlusButton().click(); - nodeCreator().should('be.visible'); -}; - -export const selectNode = (displayName: string) => { - getCreatorItem(displayName).click(); -}; diff --git a/cypress/composables/projects.ts b/cypress/composables/projects.ts deleted file mode 100644 index 1a87e1bc7ca..00000000000 --- a/cypress/composables/projects.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { CredentialsModal, WorkflowPage } from '../pages'; -import { getVisibleSelect } from '../utils'; - -const workflowPage = new WorkflowPage(); -const credentialsModal = new CredentialsModal(); - -export const getHomeButton = () => cy.getByTestId('project-home-menu-item'); -export const getPersonalProjectsButton = () => cy.getByTestId('project-personal-menu-item'); -export const getMenuItems = () => cy.getByTestId('project-menu-item'); -export const getAddProjectButton = () => { - cy.getByTestId('universal-add').should('be.visible').click(); - cy.getByTestId('universal-add') - .find('.el-sub-menu__title') - .as('menuitem') - .should('have.attr', 'aria-describedby'); - - cy.get('@menuitem') - .invoke('attr', 'aria-describedby') - .then((el) => cy.get(`[id="${el}"]`)) - .as('submenu'); - - cy.get('@submenu').within((submenu) => - cy - .wrap(submenu) - .getByTestId('navigation-menu-item') - .should('be.visible') - .filter(':contains("Project")') - .as('button'), - ); - - return cy.get('@button'); -}; -export const getAddFirstProjectButton = () => cy.getByTestId('add-first-project-button'); -export const getIconPickerButton = () => cy.getByTestId('icon-picker-button'); -export const getIconPickerTab = (tab: string) => cy.getByTestId('icon-picker-tabs').contains(tab); -export const getIconPickerIcons = () => cy.getByTestId('icon-picker-icon'); -export const getIconPickerEmojis = () => cy.getByTestId('icon-picker-emoji'); -// export const getAddProjectButton = () => -// cy.getByTestId('universal-add').should('contain', 'Add project').should('be.visible'); -export const getProjectTabs = () => cy.getByTestId('project-tabs').find('a'); -export const getProjectTabWorkflows = () => getProjectTabs().filter('a[href$="/workflows"]'); -export const getProjectTabCredentials = () => getProjectTabs().filter('a[href$="/credentials"]'); -export const getProjectTabExecutions = () => getProjectTabs().filter('a[href$="/executions"]'); -export const getProjectTabSettings = () => getProjectTabs().filter('a[href$="/settings"]'); -export const getProjectSettingsNameInput = () => - cy.getByTestId('project-settings-name-input').find('input'); -export const getProjectSettingsSaveButton = () => cy.getByTestId('project-settings-save-button'); -export const getProjectSettingsCancelButton = () => - cy.getByTestId('project-settings-cancel-button'); -export const getProjectSettingsDeleteButton = () => - cy.getByTestId('project-settings-delete-button'); -export const getProjectMembersSelect = () => cy.getByTestId('project-members-select'); -export const addProjectMember = (email: string, role?: string) => { - getProjectMembersSelect().click(); - getProjectMembersSelect().get('.el-select-dropdown__item').contains(email.toLowerCase()).click(); - - if (role) { - cy.getByTestId(`user-list-item-${email}`) - .find('[data-test-id="projects-settings-user-role-select"]') - .click(); - getVisibleSelect().find('li').contains(role).click(); - } -}; -export const getResourceMoveModal = () => cy.getByTestId('project-move-resource-modal'); -export const getProjectMoveSelect = () => cy.getByTestId('project-move-resource-modal-select'); -export const getProjectSharingSelect = () => cy.getByTestId('project-sharing-select'); -export const getMoveToFolderSelect = () => cy.getByTestId('move-to-folder-dropdown'); - -export function createProject(name: string) { - getAddProjectButton().click(); - - getProjectSettingsNameInput().should('be.visible').clear().type(name); - getProjectSettingsSaveButton().click(); -} - -export function createWorkflow(fixtureKey: string, name: string) { - workflowPage.getters.workflowImportInput().selectFile(`fixtures/${fixtureKey}`, { force: true }); - workflowPage.actions.setWorkflowName(name); - workflowPage.getters.saveButton().should('contain', 'Saved'); - workflowPage.actions.zoomToFit(); -} - -export function createCredential(name: string, closeModal = true) { - credentialsModal.getters.newCredentialModal().should('be.visible'); - credentialsModal.getters.newCredentialTypeSelect().should('be.visible'); - credentialsModal.getters.newCredentialTypeOption('Notion API').click(); - credentialsModal.getters.newCredentialTypeButton().click(); - credentialsModal.getters.connectionParameter('Internal Integration Secret').type('1234567890'); - credentialsModal.actions.setName(name); - credentialsModal.actions.save(); - - if (closeModal) { - credentialsModal.actions.close(); - } -} diff --git a/cypress/composables/setup-template-form-step.ts b/cypress/composables/setup-template-form-step.ts deleted file mode 100644 index 6f016627836..00000000000 --- a/cypress/composables/setup-template-form-step.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Getters - */ - -export const getFormStep = () => cy.getByTestId('setup-credentials-form-step'); - -export const getStepHeading = ($el: JQuery) => - cy.wrap($el).findChildByTestId('credential-step-heading'); - -export const getStepDescription = ($el: JQuery) => - cy.wrap($el).findChildByTestId('credential-step-description'); - -export const getCreateAppCredentialsButton = (appName: string) => - cy.get(`button:contains("Create new ${appName} credential")`); diff --git a/cypress/composables/setup-workflow-credentials-button.ts b/cypress/composables/setup-workflow-credentials-button.ts deleted file mode 100644 index 8285454d836..00000000000 --- a/cypress/composables/setup-workflow-credentials-button.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Getters - */ - -export const getSetupWorkflowCredentialsButton = () => cy.get('button:contains("Set up template")'); diff --git a/cypress/composables/sidebar.ts b/cypress/composables/sidebar.ts deleted file mode 100644 index 9c61bbaa389..00000000000 --- a/cypress/composables/sidebar.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function expandSidebar() { - cy.get('#collapse-change-button').then(($button) => { - if ($button.find('svg[data-icon="chevron-right"]').length > 0) { - cy.get('#collapse-change-button').click(); - } - }); -} diff --git a/cypress/composables/versions.ts b/cypress/composables/versions.ts deleted file mode 100644 index be7c5bfee0b..00000000000 --- a/cypress/composables/versions.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { MainSidebar } from '../pages/sidebar/main-sidebar'; - -const mainSidebar = new MainSidebar(); - -/** - * Getters - */ - -export function getVersionUpdatesPanelOpenButton() { - return cy.getByTestId('version-update-next-versions-link'); -} - -export function getVersionUpdatesPanel() { - return cy.getByTestId('version-updates-panel'); -} - -export function getVersionUpdatesPanelCloseButton() { - return getVersionUpdatesPanel().get('.el-drawer__close-btn').first(); -} - -export function getVersionCard() { - return cy.getByTestId('version-card'); -} - -/** - * Actions - */ - -export function openWhatsNewMenu() { - mainSidebar.getters.whatsNew().should('be.visible'); - mainSidebar.getters.whatsNew().click(); -} - -export function openVersionUpdatesPanel() { - getVersionUpdatesPanelOpenButton().should('be.visible').click(); -} - -export function closeVersionUpdatesPanel() { - getVersionUpdatesPanelCloseButton().click(); -} diff --git a/cypress/composables/webhooks.ts b/cypress/composables/webhooks.ts deleted file mode 100644 index 14dc4d4c011..00000000000 --- a/cypress/composables/webhooks.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { BACKEND_BASE_URL } from '../constants'; -import { NDV, WorkflowPage } from '../pages'; -import { getVisibleSelect } from '../utils'; - -export const waitForWebhook = 500; - -export interface SimpleWebhookCallOptions { - method: string; - webhookPath: string; - responseCode?: number; - respondWith?: string; - executeNow?: boolean; - responseData?: string; - authentication?: string; -} - -const workflowPage = new WorkflowPage(); -const ndv = new NDV(); - -export const simpleWebhookCall = (options: SimpleWebhookCallOptions) => { - const { - authentication, - method, - webhookPath, - responseCode, - respondWith, - responseData, - executeNow = true, - } = options; - - workflowPage.actions.addInitialNodeToCanvas('Webhook'); - workflowPage.actions.openNode('Webhook'); - - cy.getByTestId('parameter-input-httpMethod').click(); - getVisibleSelect().find('.option-headline').contains(method).click(); - cy.getByTestId('parameter-input-path') - .find('.parameter-input') - .find('input') - .clear() - .type(webhookPath) - .wait(300); - - if (authentication) { - cy.getByTestId('parameter-input-authentication').click(); - getVisibleSelect().find('.option-headline').contains(authentication).click(); - } - - if (responseCode) { - cy.get('.param-options').click(); - // wait for selector debounce - getVisibleSelect().contains('Response Code').click().wait(300); - cy.get('.parameter-item-wrapper > .parameter-input-list-wrapper').children().click(); - getVisibleSelect().contains('201').click(); - } - - if (respondWith) { - cy.getByTestId('parameter-input-responseMode').click(); - getVisibleSelect().find('.option-headline').contains(respondWith).click(); - } - - if (responseData) { - cy.getByTestId('parameter-input-responseData').click(); - getVisibleSelect().find('.option-headline').contains(responseData).click(); - } - - const callEndpoint = (fn: (response: Cypress.Response) => void) => { - cy.request(method, `${BACKEND_BASE_URL}/webhook-test/${webhookPath}`).then(fn); - }; - - if (executeNow) { - ndv.actions.execute(); - cy.wait(waitForWebhook); - - callEndpoint((response) => { - expect(response.status).to.eq(200); - ndv.getters.outputPanel().contains('headers'); - }); - } - - return { - callEndpoint, - }; -}; diff --git a/cypress/composables/workflow.ts b/cypress/composables/workflow.ts deleted file mode 100644 index f13918c75f0..00000000000 --- a/cypress/composables/workflow.ts +++ /dev/null @@ -1,411 +0,0 @@ -import { getManualChatModal } from './modals/chat-modal'; -import { clickGetBackToCanvas, getParameterInputByName } from './ndv'; -import { META_KEY, ROUTES } from '../constants'; -import type { OpenContextMenuOptions } from '../types'; - -/** - * Types - */ - -export type EndpointType = - | 'main' - | 'ai_chain' - | 'ai_document' - | 'ai_embedding' - | 'ai_languageModel' - | 'ai_memory' - | 'ai_outputParser' - | 'ai_tool' - | 'ai_retriever' - | 'ai_textSplitter' - | 'ai_vectorRetriever' - | 'ai_vectorStore'; - -/** - * Getters - */ - -export function getCanvas() { - return cy.getByTestId('canvas'); -} - -export function getCanvasPane() { - return getCanvas().find('.vue-flow__pane'); -} - -export function getContextMenu() { - return cy.getByTestId('context-menu').find('.el-dropdown-menu'); -} - -export function getContextMenuAction(action: string) { - return cy.getByTestId(`context-menu-item-${action}`); -} - -export function getInputPlusHandle(nodeName: string) { - return cy.get( - `[data-test-id="canvas-node-input-handle"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, - ); -} - -export function getInputPlusHandleByType(nodeName: string, endpointType: EndpointType) { - return cy.get( - `[data-test-id="canvas-node-input-handle"][data-connection-type="${endpointType}"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, - ); -} - -export function getOutputHandle(nodeName: string) { - return cy.get(`[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"]`); -} - -export function getOutputPlusHandle(nodeName: string) { - return cy.get( - `[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, - ); -} - -export function getOutputPlusHandleByType(nodeName: string, endpointType: EndpointType) { - return cy.get( - `[data-test-id="canvas-node-output-handle"][data-connection-type="${endpointType}"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, - ); -} - -export function getNodeCreatorItems() { - return cy.getByTestId('item-iterator-item'); -} - -export function getExecuteWorkflowButton(triggerNodeName?: string) { - return cy.getByTestId(`execute-workflow-button${triggerNodeName ? `-${triggerNodeName}` : ''}`); -} - -export function getManualChatButton() { - return cy.getByTestId('workflow-chat-button'); -} - -export function getNodes() { - return cy.getByTestId('canvas-node'); -} - -export function getNodeByName(name: string) { - return cy.getByTestId('canvas-node').filter(`[data-node-name="${name}"]`).eq(0); -} - -export function getNodesWithSpinner() { - return cy - .getByTestId('canvas-node') - .filter((_, el) => Cypress.$(el).find('[data-icon=refresh-cw]').length > 0); -} - -export function getWaitingNodes() { - return cy - .getByTestId('canvas-node') - .filter((_, el) => Cypress.$(el).find('[data-icon=clock]').length > 0); -} - -export function getNodeRenderedTypeByName(name: string) { - return getNodeByName(name).find('[data-canvas-node-render-type]'); -} - -export function getWorkflowHistoryCloseButton() { - return cy.getByTestId('workflow-history-close-button'); -} - -export function disableNode(name: string) { - const target = getNodeByName(name); - target.trigger('contextmenu'); - cy.getByTestId('context-menu-item-toggle_activation').click(); -} - -export function getConnectionBySourceAndTarget(source: string, target: string) { - return cy - .getByTestId('edge') - .filter(`[data-source-node-name="${source}"][data-target-node-name="${target}"]`) - .eq(0); -} - -export function getConnectionLabelBySourceAndTarget(source: string, target: string) { - return cy - .getByTestId('edge-label') - .filter(`[data-source-node-name="${source}"][data-target-node-name="${target}"]`); -} - -export function getNodeCreatorSearchBar() { - return cy.getByTestId('node-creator-search-bar'); -} - -export function getNodeCreatorPlusButton() { - return cy.getByTestId('node-creator-plus-button'); -} - -export function getCanvasNodes() { - return cy.getByTestId('canvas-node'); -} - -export function getCanvasNodeByName(nodeName: string) { - return getCanvasNodes().filter(`:contains(${nodeName})`); -} - -export function getSaveButton() { - return cy.getByTestId('workflow-save-button'); -} - -export function getZoomToFitButton() { - return cy.getByTestId('zoom-to-fit'); -} - -export function getNodeIssuesByName(nodeName: string) { - return getCanvasNodes() - .filter(`:contains(${nodeName})`) - .should('have.length.greaterThan', 0) - .findChildByTestId('node-issues'); -} - -/** - * Actions - */ - -export function executeWorkflow() { - cy.get('[data-test-id="execute-workflow-button"]').click(); -} - -export function waitForSuccessBannerToAppear() { - cy.contains(/(Workflow|Node) executed successfully/, { timeout: 4000 }).should('be.visible'); -} - -export function executeWorkflowAndWait(waitForSuccessBannerToDisappear = true) { - executeWorkflow(); - waitForSuccessBannerToAppear(); - if (waitForSuccessBannerToDisappear) { - cy.contains('Workflow executed successfully', { timeout: 10000 }).should('not.exist'); - } -} - -/** - * @param nodeDisplayName - The name of the node to add to the canvas - * @param plusButtonClick - Whether to click the plus button to open the node creator - * @param preventNdvClose - Whether to prevent the Ndv from closing - * @param action - The action to select in the node creator - * @param useExactMatch - Whether to use an exact match for the node name will use selector instead of enter key - */ -export function addNodeToCanvas( - nodeDisplayName: string, - plusButtonClick = true, - preventNdvClose?: boolean, - action?: string, - useExactMatch = false, -) { - if (plusButtonClick) { - getNodeCreatorPlusButton().click(); - } - - getNodeCreatorSearchBar().type(nodeDisplayName); - - if (useExactMatch) { - cy.getByTestId('node-creator-item-name').contains(nodeDisplayName).click(); - } else { - getNodeCreatorSearchBar().type('{enter}'); - } - - cy.wait(500); - - cy.get('body').then((body) => { - if (body.find('[data-test-id=node-creator]').length > 0) { - if (action) { - cy.contains(action).click(); - } else { - cy.get('[data-keyboard-nav-type="action"]').eq(0).click(); - } - } - }); - - if (!preventNdvClose) { - cy.get('body').type('{esc}'); - } -} - -export function navigateToNewWorkflowPage(preventNodeViewUnload = true) { - cy.visit(ROUTES.NEW_WORKFLOW_PAGE); - cy.getByTestId('node-creator-plus-button').should('be.visible'); - cy.waitForLoad(); - cy.window().then((win) => { - win.preventNodeViewBeforeUnload = preventNodeViewUnload; - }); -} - -function connectNodeToParent( - nodeName: string, - endpointType: EndpointType, - parentNodeName: string, - exactMatch = false, -) { - getInputPlusHandleByType(parentNodeName, endpointType).click({ force: true }); - if (exactMatch) { - getNodeCreatorItems() - .contains(new RegExp('^' + nodeName + '$', 'g')) - .click(); - } else { - getNodeCreatorItems().contains(nodeName).click(); - } -} - -export function addSupplementalNodeToParent( - nodeName: string, - endpointType: EndpointType, - parentNodeName: string, - exactMatch = false, -) { - connectNodeToParent(nodeName, endpointType, parentNodeName, exactMatch); - - if (endpointType === 'main') { - getConnectionBySourceAndTarget(parentNodeName, nodeName).should('exist'); - } else { - getConnectionBySourceAndTarget(nodeName, parentNodeName).should('exist'); - } -} - -export function addLanguageModelNodeToParent( - nodeName: string, - parentNodeName: string, - exactMatch = false, -) { - addSupplementalNodeToParent(nodeName, 'ai_languageModel', parentNodeName, exactMatch); -} - -export function addMemoryNodeToParent(nodeName: string, parentNodeName: string) { - addSupplementalNodeToParent(nodeName, 'ai_memory', parentNodeName); -} - -export function addToolNodeToParent(nodeName: string, parentNodeName: string) { - addSupplementalNodeToParent(nodeName, 'ai_tool', parentNodeName); -} - -export function addVectorStoreToolToParent(nodeName: string, parentNodeName: string) { - connectNodeToParent(nodeName, 'ai_tool', parentNodeName, false); - getParameterInputByName('mode') - .find('input') - .should('have.value', 'Retrieve Documents (As Tool for AI Agent)'); - clickGetBackToCanvas(); - getConnectionBySourceAndTarget(nodeName, parentNodeName).should('exist'); -} - -export function addOutputParserNodeToParent(nodeName: string, parentNodeName: string) { - addSupplementalNodeToParent(nodeName, 'ai_outputParser', parentNodeName); -} -export function addVectorStoreNodeToParent(nodeName: string, parentNodeName: string) { - addSupplementalNodeToParent(nodeName, 'ai_vectorStore', parentNodeName); -} -export function addRetrieverNodeToParent(nodeName: string, parentNodeName: string) { - addSupplementalNodeToParent(nodeName, 'ai_retriever', parentNodeName); -} - -export function clickExecuteWorkflowButton(triggerNodeName?: string) { - getExecuteWorkflowButton(triggerNodeName).click(); -} - -export function clickManualChatButton() { - getManualChatButton().click(); - getManualChatModal().should('be.visible'); -} - -export function openNode(nodeName: string) { - getNodeByName(nodeName).dblclick(); -} - -export function saveWorkflowOnButtonClick() { - cy.intercept('POST', '/rest/workflows').as('createWorkflow'); - getSaveButton().should('contain', 'Save'); - getSaveButton().click(); - getSaveButton().should('contain', 'Saved'); - cy.url().should('not.have.string', '/new'); -} - -export function pasteWorkflow(workflow: object) { - cy.get('body').paste(JSON.stringify(workflow)); -} - -export function clickZoomToFit() { - getZoomToFitButton().click(); -} - -export function deleteNode(name: string) { - getCanvasNodeByName(name).first().click(); - cy.get('body').type('{del}'); -} - -export function openContextMenu( - nodeName?: string, - { method = 'right-click', anchor = 'center' }: OpenContextMenuOptions = {}, -) { - let target; - if (nodeName) { - target = - method === 'right-click' ? getNodeRenderedTypeByName(nodeName) : getNodeByName(nodeName); - } else { - target = getCanvasPane(); - } - - if (method === 'right-click') { - target.rightclick(nodeName ? anchor : 'topLeft', { force: true }); - } else { - target.realHover(); - target.find('[data-test-id="overflow-node-button"]').click({ force: true }); - } - - getContextMenu().should('be.visible'); -} - -export function clickContextMenuAction(action: string) { - getContextMenuAction(action).click({ force: true }); -} - -export function openExecutions() { - cy.getByTestId('radio-button-executions').click(); -} - -export function clickClearExecutionDataButton() { - cy.getByTestId('clear-execution-data-button').click(); -} - -/** - * Undo/Redo - */ - -export function hitComboShortcut(modifier: string, key: string) { - cy.get('body').wait(100).type(modifier, { delay: 100, release: false }).type(key); -} -export function hitUndo() { - hitComboShortcut(`{${META_KEY}}`, 'z'); -} -export function hitRedo() { - cy.get('body').type(`{${META_KEY}+shift+z}`); -} -export function hitSelectAll() { - hitComboShortcut(`{${META_KEY}}`, 'a'); -} -export function hitDeleteAllNodes() { - hitSelectAll(); - cy.get('body').type('{backspace}'); -} -export function hitDisableNodeShortcut() { - cy.get('body').type('d'); -} -export function hitCopy() { - hitComboShortcut(`{${META_KEY}}`, 'c'); -} -export function hitPinNodeShortcut() { - cy.get('body').type('p'); -} -export function hitSaveWorkflow() { - cy.get('body').type(`{${META_KEY}+s}`); -} -export function hitExecuteWorkflow() { - cy.get('body').type(`{${META_KEY}+enter}`); -} -export function hitDuplicateNode() { - cy.get('body').type(`{${META_KEY}+d}`); -} -export function hitAddSticky() { - cy.get('body').type('{shift+S}'); -} -export function selectRight() { - cy.get('body').type('{shift+rightArrow}'); -} diff --git a/cypress/composables/workflowsPage.ts b/cypress/composables/workflowsPage.ts deleted file mode 100644 index cbab641de21..00000000000 --- a/cypress/composables/workflowsPage.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Getters - */ - -export function getWorkflowsPageUrl() { - return '/home/workflows'; -} - -export const getCreateWorkflowButton = () => cy.getByTestId('add-resource-workflow'); - -export const getNewWorkflowCardButton = () => cy.getByTestId('new-workflow-card'); - -/** - * Actions - */ - -export function visitWorkflowsPage() { - cy.visit(getWorkflowsPageUrl()); -} diff --git a/cypress/constants.ts b/cypress/constants.ts deleted file mode 100644 index 674e3b2b7d7..00000000000 --- a/cypress/constants.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { randFirstName, randLastName } from '@ngneat/falso'; - -export const BACKEND_BASE_URL = 'http://localhost:5678'; -export const N8N_AUTH_COOKIE = 'n8n-auth'; - -const DEFAULT_USER_PASSWORD = 'CypressTest123'; - -export const INSTANCE_OWNER = { - email: 'nathan@n8n.io', - password: DEFAULT_USER_PASSWORD, - firstName: randFirstName(), - lastName: randLastName(), -}; - -export const INSTANCE_ADMIN = { - email: 'admin@n8n.io', - password: DEFAULT_USER_PASSWORD, - firstName: randFirstName(), - lastName: randLastName(), -}; - -export const INSTANCE_MEMBERS = [ - { - email: 'rebecca@n8n.io', - password: DEFAULT_USER_PASSWORD, - firstName: randFirstName(), - lastName: randLastName(), - }, - { - email: 'mustafa@n8n.io', - password: DEFAULT_USER_PASSWORD, - firstName: randFirstName(), - lastName: randLastName(), - }, -]; - -export const MANUAL_TRIGGER_NODE_NAME = 'Manual Trigger'; -export const MANUAL_TRIGGER_NODE_DISPLAY_NAME = 'When clicking ‘Execute workflow’'; -export const MANUAL_CHAT_TRIGGER_NODE_NAME = 'Chat Trigger'; -export const CHAT_TRIGGER_NODE_DISPLAY_NAME = 'When chat message received'; -export const SCHEDULE_TRIGGER_NODE_NAME = 'Schedule Trigger'; -export const CODE_NODE_NAME = 'Code'; -export const CODE_NODE_DISPLAY_NAME = 'Code in JavaScript'; -export const CODE_NODE_ACTION = CODE_NODE_DISPLAY_NAME; -export const SET_NODE_NAME = 'Set'; -export const EDIT_FIELDS_SET_NODE_NAME = 'Edit Fields'; -export const LOOP_OVER_ITEMS_NODE_NAME = 'Loop Over Items'; -export const IF_NODE_NAME = 'If'; -export const MERGE_NODE_NAME = 'Merge'; -export const SWITCH_NODE_NAME = 'Switch'; -export const GMAIL_NODE_NAME = 'Gmail'; -export const TRELLO_NODE_NAME = 'Trello'; -export const NOTION_NODE_NAME = 'Notion'; -export const PIPEDRIVE_NODE_NAME = 'Pipedrive'; -export const HTTP_REQUEST_NODE_NAME = 'HTTP Request'; -export const AGENT_NODE_NAME = 'AI Agent'; -export const BASIC_LLM_CHAIN_NODE_NAME = 'Basic LLM Chain'; -export const AI_MEMORY_WINDOW_BUFFER_MEMORY_NODE_NAME = 'Simple Memory'; -export const AI_TOOL_CALCULATOR_NODE_NAME = 'Calculator'; -export const AI_TOOL_CODE_NODE_NAME = 'Code Tool'; -export const AI_TOOL_WIKIPEDIA_NODE_NAME = 'Wikipedia'; -export const AI_TOOL_HTTP_NODE_NAME = 'HTTP Request Tool'; -export const AI_LANGUAGE_MODEL_OPENAI_CHAT_MODEL_NODE_NAME = 'OpenAI Chat Model'; -export const AI_MEMORY_POSTGRES_NODE_NAME = 'Postgres Chat Memory'; -export const AI_OUTPUT_PARSER_AUTO_FIXING_NODE_NAME = 'Auto-fixing Output Parser'; -export const WEBHOOK_NODE_NAME = 'Webhook'; -export const EXECUTE_WORKFLOW_NODE_NAME = 'Execute Workflow'; - -export const META_KEY = Cypress.platform === 'darwin' ? 'meta' : 'ctrl'; - -export const NEW_GOOGLE_ACCOUNT_NAME = 'Gmail account'; -export const NEW_TRELLO_ACCOUNT_NAME = 'Trello account'; -export const NEW_NOTION_ACCOUNT_NAME = 'Notion account'; -export const NEW_QUERY_AUTH_ACCOUNT_NAME = 'Query Auth account'; - -export const ROUTES = { - NEW_WORKFLOW_PAGE: '/workflow/new', -}; diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js deleted file mode 100644 index 7be7f5f657b..00000000000 --- a/cypress/cypress.config.js +++ /dev/null @@ -1,36 +0,0 @@ -const { defineConfig } = require('cypress'); - -const BASE_URL = 'http://localhost:5678'; - -module.exports = defineConfig({ - retries: { - openMode: 0, - runMode: 2, - }, - defaultCommandTimeout: 10000, - requestTimeout: 12000, - numTestsKeptInMemory: 2, - experimentalMemoryManagement: true, - e2e: { - baseUrl: BASE_URL, - viewportWidth: 1536, - viewportHeight: 960, - video: true, - screenshotOnRunFailure: true, - experimentalInteractiveRunEvents: true, - specPattern: 'e2e/**/*.ts', - supportFile: 'support/e2e.ts', - fixturesFolder: 'fixtures', - downloadsFolder: 'downloads', - screenshotsFolder: 'screenshots', - videosFolder: 'videos', - setupNodeEvents(on, config) { - require('@cypress/grep/src/plugin')(config); - return config; - }, - }, - reporter: 'mocha-junit-reporter', - reporterOptions: { - mochaFile: 'test-results-[hash].xml', - }, -}); diff --git a/cypress/eslint.config.mjs b/cypress/eslint.config.mjs deleted file mode 100644 index 4b13be25aec..00000000000 --- a/cypress/eslint.config.mjs +++ /dev/null @@ -1,39 +0,0 @@ -import { defineConfig, globalIgnores } from 'eslint/config'; -import { baseConfig } from '@n8n/eslint-config/base'; -import cypressPlugin from 'eslint-plugin-cypress/flat'; - -export default defineConfig( - globalIgnores(['scripts/**/*.js']), - baseConfig, - cypressPlugin.configs.recommended, - { - rules: { - // TODO: Remove this - 'no-useless-escape': 'warn', - 'import-x/order': 'warn', - 'import-x/no-extraneous-dependencies': [ - 'error', - { - devDependencies: ['**/cypress/**'], - optionalDependencies: false, - }, - ], - '@typescript-eslint/naming-convention': 'warn', - '@typescript-eslint/no-explicit-any': 'warn', - '@typescript-eslint/no-unsafe-argument': 'warn', - '@typescript-eslint/no-unsafe-assignment': 'warn', - '@typescript-eslint/no-unsafe-call': 'warn', - '@typescript-eslint/no-unsafe-member-access': 'warn', - '@typescript-eslint/no-unsafe-return': 'warn', - '@typescript-eslint/no-unused-expressions': 'warn', - '@typescript-eslint/no-use-before-define': 'warn', - '@typescript-eslint/promise-function-async': 'warn', - '@typescript-eslint/prefer-nullish-coalescing': 'warn', - '@typescript-eslint/unbound-method': 'warn', - 'cypress/no-assigning-return-values': 'warn', - 'cypress/no-unnecessary-waiting': 'warn', - 'cypress/unsafe-to-chain-command': 'warn', - 'n8n-local-rules/no-uncaught-json-parse': 'warn', - }, - }, -); diff --git a/cypress/fixtures/Check_manual_node_run_for_pinned_and_rundata.json b/cypress/fixtures/Check_manual_node_run_for_pinned_and_rundata.json deleted file mode 100644 index 0236f38811b..00000000000 --- a/cypress/fixtures/Check_manual_node_run_for_pinned_and_rundata.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "name": "Webhook PairedItem error test", - "nodes": [ - { - "parameters": { - "path": "86f05bcc-44a4-44f7-b774-7002fc2eddfc", - "options": {} - }, - "id": "143572ab-f85b-4a6f-8ca7-4a5cea00a9fe", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 1.1, - "position": [ - 860, - 140 - ], - "webhookId": "86f05bcc-44a4-44f7-b774-7002fc2eddfc" - }, - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "e9605092-a127-46ad-9fb3-e671f955f856", - "leftValue": "={{ $json.headers.host }}", - "rightValue": "asdf", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "options": {} - }, - "id": "50542b55-4237-4c18-9e3a-5d146372c270", - "name": "If", - "type": "n8n-nodes-base.if", - "typeVersion": 2, - "position": [ - 1080, - 140 - ] - }, - { - "parameters": {}, - "id": "c6365289-0383-4d73-bd5f-a52b6a6e1eeb", - "name": "No Operation, do nothing", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1420, - 20 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "1d65053c-31de-43e8-a870-e7e79d34ca67", - "name": "asdf", - "value": "={{ $('Webhook').item.json.headers['accept-encoding'] }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "8fd60b5e-19eb-47f4-a3e2-3822c722a68a", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1860, - 220 - ] - }, - { - "parameters": {}, - "id": "96ac4860-81eb-4d47-9a6e-7c717d910fcd", - "name": "NoOp1", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1420, - 220 - ] - }, - { - "parameters": {}, - "id": "5b550207-3f4f-4519-b272-ff02d9d28ffc", - "name": "NoOp3", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 2040, - 220 - ] - }, - { - "parameters": {}, - "id": "9f450e47-902e-413e-99ce-ea93f6bc375e", - "name": "NoOp2", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1640, - 220 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "1d65053c-31de-43e8-a870-e7e79d34ca67", - "name": "asdf", - "value": "={{ $('Webhook').item.json.headers['accept-encoding'] }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "7acd1642-a6ef-4c33-a562-95b19fedbded", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 2220, - 220 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "1d65053c-31de-43e8-a870-e7e79d34ca67", - "name": "asdf", - "value": "={{ $('Webhook').item.json.headers['accept-encoding'] }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "adc93a3b-2825-4ddf-9a17-fe61b5861d43", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1460, - 440 - ] - }, - { - "parameters": {}, - "id": "1cd5d8dc-cd08-4596-9435-d48a6e20996d", - "name": "NoOp", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1700, - 480 - ] - }, - { - "parameters": { - "content": "For Error:\n1. Execute \"If\"\n2. Execute \"NoOp2\"\n" - }, - "id": "658c3a31-b640-4338-8b22-6d0a17ab5b80", - "name": "Sticky Note", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 940, - 480 - ] - } - ], - "pinData": { - "Webhook": [ - { - "json": { - "headers": { - "host": "localhost:5678", - "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0", - "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", - "accept-language": "en-US,en;q=0.5", - "accept-encoding": "gzip, deflate, br", - "connection": "keep-alive", - "cookie": "n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ1YWQzODQ1LWFmMTAtNDc2OC04ZDU4LTBmNDE3YTVlNDkxNSIsImVtYWlsIjoiamFuQG44bi5pbyIsInBhc3N3b3JkIjoiMzhjMTFiMDEwMjRlMDhiZTE0ZGExZjhmOWVjNGFmOTQxZmQwOGUyMzJmNWEzYmMyNjBmOTI1ZjIxNTBhNTZlYSIsImlhdCI6MTcwNzA3ODgxMSwiZXhwIjoxNzA3NjgzNjExfQ.bhbh8gCbLYAY87kPqZSGZeMBq7_4d9IgKnsrJ0UV4Iw", - "upgrade-insecure-requests": "1", - "sec-fetch-dest": "document", - "sec-fetch-mode": "navigate", - "sec-fetch-site": "none", - "sec-fetch-user": "?1", - "if-none-match": "W/\"22-6OS7cK0FzqnV2NeDHdOSGS1bVUs\"" - }, - "params": {}, - "query": {}, - "body": {} - } - } - ] - }, - "connections": { - "Webhook": { - "main": [ - [ - { - "node": "If", - "type": "main", - "index": 0 - } - ] - ] - }, - "If": { - "main": [ - [ - { - "node": "No Operation, do nothing", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "NoOp1", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "NoOp1": { - "main": [ - [ - { - "node": "NoOp2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "NoOp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "NoOp2": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "NoOp3": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields2": { - "main": [ - [ - { - "node": "NoOp", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "631547ec-c580-4b5f-9220-7fd3d801029b", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" - }, - "id": "fjCAcetjbaYM1vy6", - "tags": [] -} \ No newline at end of file diff --git a/cypress/fixtures/Custom_credential.json b/cypress/fixtures/Custom_credential.json deleted file mode 100644 index b30439765f8..00000000000 --- a/cypress/fixtures/Custom_credential.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "customE2eCredential", - "displayName": "Custom E2E Credential", - "properties": [{ - "displayName": "API Key", - "name": "apiKey", - "type": "string", - "default": "", - "required": false - }], - "authenticate": { - "type": "generic", - "properties": { - "qs": { - "auth": "={{$credentials.apiKey}}" - } - } - } -} diff --git a/cypress/fixtures/Custom_node.json b/cypress/fixtures/Custom_node.json deleted file mode 100644 index bd898ec89dd..00000000000 --- a/cypress/fixtures/Custom_node.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "properties": [ - { - "displayName": "Test property", - "name": "testProp", - "type": "string", - "required": true, - "noDataExpression": false, - "default": "Some default" - }, - { - "displayName": "Resource", - "name": "resource", - "type": "options", - "noDataExpression": true, - "options": [ - { - "name": "option1", - "value": "option1" - }, - { - "name": "option2", - "value": "option2" - }, - { - "name": "option3", - "value": "option3" - }, - { - "name": "option4", - "value": "option4" - } - ], - "default": "option2" - } - ], - "displayName": "E2E Node", - "name": "@e2e/n8n-nodes-e2e", - "group": ["transform"], - "codex": { - "categories": ["Custom Category"] - }, - "version": 1, - "description": "Demonstrate rendering of node", - "defaults": { - "name": "E2E Node " - }, - "inputs": ["main"], - "outputs": ["main"], - "icon": "fa:network-wired" -} diff --git a/cypress/fixtures/Custom_node_custom_credential.json b/cypress/fixtures/Custom_node_custom_credential.json deleted file mode 100644 index 642309f99d9..00000000000 --- a/cypress/fixtures/Custom_node_custom_credential.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "properties": [ - { - "displayName": "Test property", - "name": "testProp", - "type": "string", - "required": true, - "noDataExpression": false, - "default": "Some default" - }, - { - "displayName": "Resource", - "name": "resource", - "type": "options", - "noDataExpression": true, - "options": [ - { - "name": "option1", - "value": "option1" - }, - { - "name": "option2", - "value": "option2" - }, - { - "name": "option3", - "value": "option3" - }, - { - "name": "option4", - "value": "option4" - } - ], - "default": "option2" - } - ], - "displayName": "E2E Node with custom credential", - "name": "@e2e/n8n-nodes-e2e-custom-credential", - "group": ["transform"], - "codex": { - "categories": ["Custom Category"] - }, - "version": 1, - "description": "Demonstrate rendering of node with custom credential", - "defaults": { - "name": "E2E Node with custom credential" - }, - "inputs": ["main"], - "outputs": ["main"], - "icon": "fa:network-wired", - "credentials": [ - { - "name": "customE2eCredential", - "required": true - } - ] -} diff --git a/cypress/fixtures/Custom_node_n8n_credential.json b/cypress/fixtures/Custom_node_n8n_credential.json deleted file mode 100644 index 9b8a5575074..00000000000 --- a/cypress/fixtures/Custom_node_n8n_credential.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "properties": [ - { - "displayName": "Test property", - "name": "testProp", - "type": "string", - "required": true, - "noDataExpression": false, - "default": "Some default" - }, - { - "displayName": "Resource", - "name": "resource", - "type": "options", - "noDataExpression": true, - "options": [ - { - "name": "option1", - "value": "option1" - }, - { - "name": "option2", - "value": "option2" - }, - { - "name": "option3", - "value": "option3" - }, - { - "name": "option4", - "value": "option4" - } - ], - "default": "option2" - } - ], - "displayName": "E2E Node with native n8n credential", - "name": "@e2e/n8n-nodes-e2e-credential", - "group": ["transform"], - "codex": { - "categories": ["Custom Category"] - }, - "version": 1, - "description": "Demonstrate rendering of node with native credential", - "defaults": { - "name": "E2E Node with native n8n credential" - }, - "inputs": ["main"], - "outputs": ["main"], - "icon": "fa:network-wired", - "credentials": [ - { - "name": "notionApi", - "required": true - } - ] -} diff --git a/cypress/fixtures/Dummy_javascript.txt b/cypress/fixtures/Dummy_javascript.txt deleted file mode 100644 index 9ccfe6c5d14..00000000000 --- a/cypress/fixtures/Dummy_javascript.txt +++ /dev/null @@ -1,42 +0,0 @@ -var File = function(url, object){ - File.list = Array.isArray(File.list)? File.list : []; - File.progress = File.progress || 0; - this.progress = 0; - this.object = object; - this.url = url; -}; - -File.indexOf = function(term){ - for(var index in File.list){ - var file = File.list[index]; - if (file.equals(term) || file.url === term || file.object === term) { - return index; - } - } - return -1; -}; - -File.find = function(term){ - var index = File.indexOf(term); - return ~index && File.list[index]; -}; - -File.prototype.equals = function(file){ - var isFileType = file instanceof File; - return isFileType && this.url === file.url && this.object === file.object; -}; - -File.prototype.save = function(update){ - update = typeof update === 'undefined'? true : update; - if(Array.isArray(File.list)){ - var index = File.indexOf(this); - if(~index && update) { - File.list[index] = this; - console.warn('File `%s` has been loaded before and updated now for: %O.', this.url, this); - }else File.list.push(this); - console.log(File.list) - }else{ - File.list = [this]; - } - return this; -}; diff --git a/cypress/fixtures/Dummy_sql.txt b/cypress/fixtures/Dummy_sql.txt deleted file mode 100644 index c8976be2291..00000000000 --- a/cypress/fixtures/Dummy_sql.txt +++ /dev/null @@ -1,49 +0,0 @@ -CREATE TABLE emp ( -empno INT PRIMARY KEY, -ename VARCHAR(10), -job VARCHAR(9), -mgr INT NULL, -hiredate DATETIME, -sal NUMERIC(7,2), -comm NUMERIC(7,2) NULL, -dept INT) -begin -insert into emp values - (1,'JOHNSON','ADMIN',6,'12-17-1990',18000,NULL,4) -insert into emp values - (2,'HARDING','MANAGER',9,'02-02-1998',52000,300,3) -insert into emp values - (3,'TAFT','SALES I',2,'01-02-1996',25000,500,3) -insert into emp values - (4,'HOOVER','SALES I',2,'04-02-1990',27000,NULL,3) -insert into emp values - (5,'LINCOLN','TECH',6,'06-23-1994',22500,1400,4) -insert into emp values - (6,'GARFIELD','MANAGER',9,'05-01-1993',54000,NULL,4) -insert into emp values - (7,'POLK','TECH',6,'09-22-1997',25000,NULL,4) -insert into emp values - (8,'GRANT','ENGINEER',10,'03-30-1997',32000,NULL,2) -insert into emp values - (9,'JACKSON','CEO',NULL,'01-01-1990',75000,NULL,4) -insert into emp values - (10,'FILLMORE','MANAGER',9,'08-09-1994',56000,NULL,2) -insert into emp values - (11,'ADAMS','ENGINEER',10,'03-15-1996',34000,NULL,2) -insert into emp values - (12,'WASHINGTON','ADMIN',6,'04-16-1998',18000,NULL,4) -insert into emp values - (13,'MONROE','ENGINEER',10,'12-03-2000',30000,NULL,2) -insert into emp values - (14,'ROOSEVELT','CPA',9,'10-12-1995',35000,NULL,1) -end -CREATE TABLE dept ( -deptno INT NOT NULL, -dname VARCHAR(14), -loc VARCHAR(13)) -begin -insert into dept values (1,'ACCOUNTING','ST LOUIS') -insert into dept values (2,'RESEARCH','NEW YORK') -insert into dept values (3,'SALES','ATLANTA') -insert into dept values (4, 'OPERATIONS','SEATTLE') -end diff --git a/cypress/fixtures/Ecommerce_starter_pack_template_collection.json b/cypress/fixtures/Ecommerce_starter_pack_template_collection.json deleted file mode 100644 index c2cc57301f8..00000000000 --- a/cypress/fixtures/Ecommerce_starter_pack_template_collection.json +++ /dev/null @@ -1,1555 +0,0 @@ -{ - "collection": { - "id": 1, - "name": "eCommerce Starter Pack", - "description": "eCommerce operations are complex — but there are many things that you can automate to make your life easier. This collection provides a few ideas to get started.\n\nReduce manual work and the risk of human error by automating processes such as social media promotion of products, updating customer databases, and get notifications for important events.", - "totalViews": 0, - "createdAt": "2022-02-17T12:40:50.498Z", - "nodes": [ - { - "id": 20, - "name": "n8n-nodes-base.if", - "defaults": { - "name": "IF", - "color": "#408000" - }, - "displayName": "IF", - "icon": "fa:map-signs", - "iconData": { - "icon": "map-signs", - "type": "icon" - }, - "typeVersion": 1, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ] - }, - { - "id": 49, - "name": "n8n-nodes-base.telegram", - "defaults": { - "name": "Telegram" - }, - "displayName": "Telegram", - "icon": "file:telegram.svg", - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNjYgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiIGZpbGw9IiMzN2FlZTIiLz48cGF0aCBkPSJNMjEuNjYxIDM0LjMzOGwzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIgZmlsbD0iI2M4ZGFlYSIvPjxwYXRoIGQ9Ik0yNi42OTUgMzcuMDM0bC0uNzI5IDcuNzQ2cy0uMzA1IDIuMzczIDIuMDY4IDBsNC42NDQtNC4yMDMiIGZpbGw9IiNhOWM2ZDgiLz48cGF0aCBkPSJNMjEuNzMgMzQuNzEybC03LjgwOS0yLjU0NXMtLjkzMi0uMzc4LS42MzMtMS4yMzdjLjA2Mi0uMTc3LjE4Ni0uMzI4LjU1OS0uNTg4IDEuNzMxLTEuMjA2IDMyLjAyOC0xMi4wOTYgMzIuMDI4LTEyLjA5NnMuODU2LS4yODggMS4zNjEtLjA5N2MuMjMxLjA4OC4zNzguMTg3LjUwMy41NDguMDQ1LjEzMi4wNzEuNDExLjA2OC42ODktLjAwMy4yMDEtLjAyNy4zODYtLjA0NS42NzgtLjE4NCAyLjk3OC01LjcwNiAyNS4xOTgtNS43MDYgMjUuMTk4cy0uMzMgMS4zLTEuNTE0IDEuMzQ1Yy0uNDMyLjAxNi0uOTU2LS4wNzEtMS41ODItLjYxLTIuMzIzLTEuOTk4LTEwLjM1Mi03LjM5NC0xMi4xMjYtOC41OGEuMzQuMzQgMCAwMS0uMTQ2LS4yMzljLS4wMjUtLjEyNS4xMDgtLjI4LjEwOC0uMjhzMTMuOTgtMTIuNDI3IDE0LjM1Mi0xMy43MzFjLjAyOS0uMTAxLS4wNzktLjE1MS0uMjI2LS4xMDctLjkyOS4zNDItMTcuMDI1IDEwLjUwNi0xOC44MDEgMTEuNjI5LS4xMDQuMDY2LS4zOTUuMDIzLS4zOTUuMDIzIi8+PC9nPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "typeVersion": 1, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ] - }, - { - "id": 107, - "name": "n8n-nodes-base.shopifyTrigger", - "defaults": { - "name": "Shopify Trigger" - }, - "displayName": "Shopify Trigger", - "icon": "file:shopify.svg", - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTggNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTQ5LjI1NSAxMi40ODRhLjYzMy42MzMgMCAwMC0uNTY0LS41MjdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdjLS4zNC0uMzc2LTEuMDkyLS4yNjYtMS4zNzYtLjE4OC0uMDM3IDAtLjc1Mi4yMjUtMS45MjIuNjA1LTEuMTM3LTMuMy0zLjE1LTYuMzA2LTYuNjk2LTYuMzA2aC0uMzAzQzI4LjQzOC42MDUgMjcuMTk0IDAgMjYuMTQ0IDBjLTguMjU2LjAzNy0xMi4yIDEwLjMzMy0xMy40MzQgMTUuNTk0bC01Ljc3IDEuNzdjLTEuNzcuNTY0LTEuODM1LjYwNS0yLjA3MyAyLjI5M0wwIDU3LjE3NSAzNi40NjggNjRsMTkuNzYzLTQuMjZjMC0uMDM3LTYuOTQtNDYuODk3LTYuOTc2LTQ3LjI1NXpNMzQuNDMxIDguODZjLS45MTcuMzAzLTEuOTYzLjYwNS0zLjEuOTQ1di0uNjhhMTUuMDMgMTUuMDMgMCAwMC0uNzUyLTQuOTk5YzEuODQ4LjI4NCAzLjEgMi4zNTcgMy44NDMgNC43MzN6bS02LjA2OC00LjI5OGMuNjAzIDEuNzc4Ljg4MyAzLjY1LjgyNiA1LjUyN3YuMzRsLTYuMzc1IDEuOTYzYzEuMjQ4LTQuNjYgMy41NS02Ljk2MiA1LjU1LTcuODN6bS0yLjQ1LTIuMjkzYTEuOTQgMS45NCAwIDAxMS4wNTUuMzM5Yy0yLjY2IDEuMjM4LTUuNDcyIDQuMzY2LTYuNjc4IDEwLjYyN2wtNS4wNDUgMS41NDZDMTYuNjY4IDEwLjAzIDE5Ljk4OCAyLjI2IDI1LjkxIDIuMjZ6IiBmaWxsPSIjOTViZjQ3Ii8+PHBhdGggZD0iTTQ4LjY5MSAxMS45NTdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdhLjc1My43NTMgMCAwMC0uNTI3LS4yMjVMMzYuNDcyIDY0bDE5Ljc2My00LjI2LTYuOTgtNDcuMjE4YS42OC42OCAwIDAwLS41NjQtLjU2NHoiIGZpbGw9IiM1ZThlM2UiLz48cGF0aCBkPSJNMjkuNzU4IDIyLjlsLTIuNDU0IDcuMjQyYTExLjM2IDExLjM2IDAgMDAtNC43NTItMS4xMzNjLTMuODQ4IDAtNC4wMzYgMi40MTItNC4wMzYgMy4wMTggMCAzLjI5OCA4LjYzNiA0LjU2NCA4LjYzNiAxMi4zMzMgMCA2LjEtMy44ODUgMTAuMDMtOS4xIDEwLjAzLTYuMjYgMC05LjQ2Ny0zLjg4NS05LjQ2Ny0zLjg4NWwxLjY2NS01LjU1czMuMjggMi44MyA2LjA3MyAyLjgzYTIuNDcgMi40NyAwIDAwMi41NjQtMi40OWMwLTQuMzQtNy4xLTQuNTI3LTcuMS0xMS42MTggMC01Ljk2MiA0LjI5OC0xMS43NyAxMi45MzQtMTEuNzcgMy4zOTQuMDUgNS4wMTggMSA1LjAxOCAxeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4=" - }, - "typeVersion": 1, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ] - }, - { - "id": 126, - "name": "n8n-nodes-base.mautic", - "defaults": { - "name": "Mautic" - }, - "displayName": "Mautic", - "icon": "file:mautic.svg", - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMzQ5Ljc3OXB4IiBoZWlnaHQ9IjM0OS43NzlweCIgdmlld0JveD0iMCAwIDM0OS43NzkgMzQ5Ljc3OSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzQ5Ljc3OSAzNDkuNzc5Ig0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNzQuODksMzQ5Ljc3OUM3OC42MTIsMzQ5Ljc3OSwwLDI3MS40NjIsMCwxNzQuODlTNzguNjEyLDAsMTc0Ljg5LDBjMjMuMjYsMCw0NS45MzEsNC40MTcsNjcuMTI5LDEzLjU0Mw0KCWM1Ljg4OSwyLjY1LDguODMzLDkuNDIyLDYuNDc4LDE1LjYwNWMtMi42NDksNS44ODgtOS40MjEsOC44MzMtMTUuNjA0LDYuNDc3Yy0xOC41NDktNy42NTUtMzcuOTgtMTEuNDgyLTU4LjAwMi0xMS40ODINCgljLTgzLjMyMywwLTE1MS4wNDEsNjcuNzE4LTE1MS4wNDEsMTUxLjA0MVM5MS41NjcsMzI2LjIyNSwxNzQuODksMzI2LjIyNWM4My4zMjMsMCwxNTEuMDQxLTY3LjcxOCwxNTEuMDQxLTE1MS4wNDENCgljMC0xNy45Ni0yLjk0NC0zNS4zMzItOS4xMjctNTEuODE5Yy0yLjM1NS02LjE4MywwLjg4My0xMi45NTUsNy4wNjYtMTUuMzFjNi4xODMtMi4zNTUsMTIuOTU0LDAuODgzLDE1LjMxLDcuMDY2DQoJYzcuMDY2LDE5LjEzOCwxMC42LDM5LjQ1MywxMC42LDYwLjA2M0MzNDkuNzc5LDI3MS4xNjcsMjcxLjQ2MiwzNDkuNzc5LDE3NC44OSwzNDkuNzc5Ii8+DQo8Zz4NCgk8cG9seWdvbiBmaWxsPSIjRkRCOTMzIiBwb2ludHM9IjI1MS40NCwxNTYuOTMgMjI0LjM1NCwxODUuMTk0IDIzOS4zNjksMjQ4LjQ5NiAyNzMuNTIyLDI0OC40OTYgCSIvPg0KPC9nPg0KPHBvbHlnb24gZmlsbD0iI0ZEQjkzMyIgcG9pbnRzPSIyNDAuMjUzLDczLjMxMiAyNDkuNjc0LDgyLjczNCAxNzQuODksMTYxLjkzNSAxMTAuOTk5LDk2LjI3NyA3NC4xOTYsMjQ4LjQ5NiAxMDguMzUsMjQ4LjQ5NiANCgkxMjguNjY1LDE2My45OTYgMTc0Ljg5LDIxNC4zNDMgMjczLjgxNywxMDYuNTgzIDI4My4yMzksMTE2LjI5OSAyOTIuNjYsNjMuMDA3ICIvPg0KPC9zdmc+DQo=" - }, - "typeVersion": 1, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - }, - { - "id": 6, - "name": "Communication" - } - ] - }, - { - "id": 235, - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "displayName": "WooCommerce Trigger", - "icon": "file:wooCommerce.svg", - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "typeVersion": 1, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ] - }, - { - "id": 325, - "name": "n8n-nodes-base.twitter", - "defaults": { - "name": "X" - }, - "displayName": "X (Formerly Twitter)", - "icon": "file:x.svg", - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE4LjI0NCAyLjI1aDMuMzA4bC03LjIyNyA4LjI2IDguNTAyIDExLjI0SDE2LjE3bC01LjIxNC02LjgxN0w0Ljk5IDIxLjc1SDEuNjhsNy43My04LjgzNUwxLjI1NCAyLjI1SDguMDhsNC43MTMgNi4yMzF6bS0xLjE2MSAxNy41MmgxLjgzM0w3LjA4NCA0LjEyNkg1LjExN3oiPjwvcGF0aD48L3N2Zz4K" - }, - "typeVersion": 2, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - } - ] - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "workflows": [ - { - "id": 1205, - "name": "Promote new Shopify products", - "views": 485, - "recentViews": 9850, - "totalViews": 485, - "createdAt": "2021-08-24T10:40:50.007Z", - "description": "This workflow automatically promotes your new Shopify products on Twitter and Telegram. This workflow is also featured in the blog post [*6 e-commerce workflows to power up your Shopify store*](https://n8n.io/blog/no-code-ecommerce-workflow-automations/#promote-your-new-products-on-social-media).\n\n## Prerequisites\n\n- A Shopify account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/shopify/)\n- A Twitter account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/twitter/)\n- A Telegram account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/telegram/) for the channel you want to send messages to.\n\n## Nodes\n\n- [Shopify Trigger node](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.shopifytrigger/) triggers the workflow when you create a new product in Shopify.\n- [Twitter node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.twitter/) posts a tweet with the text \"Hey there, my design is now on a new product! Visit my {shop name} to get this cool {product title} (and check out more {product type})\".\n- [Telegram node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/) posts a message with the same text as above in a Telegram channel.", - "workflow": { - "nodes": [ - { - "name": "Twitter", - "type": "n8n-nodes-base.twitter", - "position": [ - 720, - -220 - ], - "parameters": { - "text": "=Hey there, my design is now on a new product ✨\nVisit my {{$json[\"vendor\"]}} shop to get this cool{{$json[\"title\"]}} (and check out more {{$json[\"product_type\"]}}) 🛍️", - "additionalFields": {} - }, - "credentials": { - "twitterOAuth1Api": "twitter" - }, - "typeVersion": 1 - }, - { - "name": "Telegram", - "type": "n8n-nodes-base.telegram", - "position": [ - 720, - -20 - ], - "parameters": { - "text": "=Hey there, my design is now on a new product!\nVisit my {{$json[\"vendor\"]}} shop to get this cool{{$json[\"title\"]}} (and check out more {{$json[\"product_type\"]}})", - "chatId": "123456", - "additionalFields": {} - }, - "credentials": { - "telegramApi": "telegram_habot" - }, - "typeVersion": 1 - }, - { - "name": "product created", - "type": "n8n-nodes-base.shopifyTrigger", - "position": [ - 540, - -110 - ], - "webhookId": "2a7e0e50-8f09-4a2b-bf54-a849a6ac4fe0", - "parameters": { - "topic": "products/create" - }, - "credentials": { - "shopifyApi": "shopify_nodeqa" - }, - "typeVersion": 1 - } - ], - "connections": { - "product created": { - "main": [ - [ - { - "node": "Twitter", - "type": "main", - "index": 0 - }, - { - "node": "Telegram", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 3, - "nodeTypes": { - "n8n-nodes-base.twitter": { - "count": 1 - }, - "n8n-nodes-base.telegram": { - "count": 1 - }, - "n8n-nodes-base.shopifyTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "lorenanda" - }, - "nodes": [ - { - "id": 49, - "icon": "file:telegram.svg", - "name": "n8n-nodes-base.telegram", - "defaults": { - "name": "Telegram" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNjYgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiIGZpbGw9IiMzN2FlZTIiLz48cGF0aCBkPSJNMjEuNjYxIDM0LjMzOGwzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIgZmlsbD0iI2M4ZGFlYSIvPjxwYXRoIGQ9Ik0yNi42OTUgMzcuMDM0bC0uNzI5IDcuNzQ2cy0uMzA1IDIuMzczIDIuMDY4IDBsNC42NDQtNC4yMDMiIGZpbGw9IiNhOWM2ZDgiLz48cGF0aCBkPSJNMjEuNzMgMzQuNzEybC03LjgwOS0yLjU0NXMtLjkzMi0uMzc4LS42MzMtMS4yMzdjLjA2Mi0uMTc3LjE4Ni0uMzI4LjU1OS0uNTg4IDEuNzMxLTEuMjA2IDMyLjAyOC0xMi4wOTYgMzIuMDI4LTEyLjA5NnMuODU2LS4yODggMS4zNjEtLjA5N2MuMjMxLjA4OC4zNzguMTg3LjUwMy41NDguMDQ1LjEzMi4wNzEuNDExLjA2OC42ODktLjAwMy4yMDEtLjAyNy4zODYtLjA0NS42NzgtLjE4NCAyLjk3OC01LjcwNiAyNS4xOTgtNS43MDYgMjUuMTk4cy0uMzMgMS4zLTEuNTE0IDEuMzQ1Yy0uNDMyLjAxNi0uOTU2LS4wNzEtMS41ODItLjYxLTIuMzIzLTEuOTk4LTEwLjM1Mi03LjM5NC0xMi4xMjYtOC41OGEuMzQuMzQgMCAwMS0uMTQ2LS4yMzljLS4wMjUtLjEyNS4xMDgtLjI4LjEwOC0uMjhzMTMuOTgtMTIuNDI3IDE0LjM1Mi0xMy43MzFjLjAyOS0uMTAxLS4wNzktLjE1MS0uMjI2LS4xMDctLjkyOS4zNDItMTcuMDI1IDEwLjUwNi0xOC44MDEgMTEuNjI5LS4xMDQuMDY2LS4zOTUuMDIzLS4zOTUuMDIzIi8+PC9nPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Telegram", - "typeVersion": 1 - }, - { - "id": 107, - "icon": "file:shopify.svg", - "name": "n8n-nodes-base.shopifyTrigger", - "defaults": { - "name": "Shopify Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTggNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTQ5LjI1NSAxMi40ODRhLjYzMy42MzMgMCAwMC0uNTY0LS41MjdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdjLS4zNC0uMzc2LTEuMDkyLS4yNjYtMS4zNzYtLjE4OC0uMDM3IDAtLjc1Mi4yMjUtMS45MjIuNjA1LTEuMTM3LTMuMy0zLjE1LTYuMzA2LTYuNjk2LTYuMzA2aC0uMzAzQzI4LjQzOC42MDUgMjcuMTk0IDAgMjYuMTQ0IDBjLTguMjU2LjAzNy0xMi4yIDEwLjMzMy0xMy40MzQgMTUuNTk0bC01Ljc3IDEuNzdjLTEuNzcuNTY0LTEuODM1LjYwNS0yLjA3MyAyLjI5M0wwIDU3LjE3NSAzNi40NjggNjRsMTkuNzYzLTQuMjZjMC0uMDM3LTYuOTQtNDYuODk3LTYuOTc2LTQ3LjI1NXpNMzQuNDMxIDguODZjLS45MTcuMzAzLTEuOTYzLjYwNS0zLjEuOTQ1di0uNjhhMTUuMDMgMTUuMDMgMCAwMC0uNzUyLTQuOTk5YzEuODQ4LjI4NCAzLjEgMi4zNTcgMy44NDMgNC43MzN6bS02LjA2OC00LjI5OGMuNjAzIDEuNzc4Ljg4MyAzLjY1LjgyNiA1LjUyN3YuMzRsLTYuMzc1IDEuOTYzYzEuMjQ4LTQuNjYgMy41NS02Ljk2MiA1LjU1LTcuODN6bS0yLjQ1LTIuMjkzYTEuOTQgMS45NCAwIDAxMS4wNTUuMzM5Yy0yLjY2IDEuMjM4LTUuNDcyIDQuMzY2LTYuNjc4IDEwLjYyN2wtNS4wNDUgMS41NDZDMTYuNjY4IDEwLjAzIDE5Ljk4OCAyLjI2IDI1LjkxIDIuMjZ6IiBmaWxsPSIjOTViZjQ3Ii8+PHBhdGggZD0iTTQ4LjY5MSAxMS45NTdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdhLjc1My43NTMgMCAwMC0uNTI3LS4yMjVMMzYuNDcyIDY0bDE5Ljc2My00LjI2LTYuOTgtNDcuMjE4YS42OC42OCAwIDAwLS41NjQtLjU2NHoiIGZpbGw9IiM1ZThlM2UiLz48cGF0aCBkPSJNMjkuNzU4IDIyLjlsLTIuNDU0IDcuMjQyYTExLjM2IDExLjM2IDAgMDAtNC43NTItMS4xMzNjLTMuODQ4IDAtNC4wMzYgMi40MTItNC4wMzYgMy4wMTggMCAzLjI5OCA4LjYzNiA0LjU2NCA4LjYzNiAxMi4zMzMgMCA2LjEtMy44ODUgMTAuMDMtOS4xIDEwLjAzLTYuMjYgMC05LjQ2Ny0zLjg4NS05LjQ2Ny0zLjg4NWwxLjY2NS01LjU1czMuMjggMi44MyA2LjA3MyAyLjgzYTIuNDcgMi40NyAwIDAwMi41NjQtMi40OWMwLTQuMzQtNy4xLTQuNTI3LTcuMS0xMS42MTggMC01Ljk2MiA0LjI5OC0xMS43NyAxMi45MzQtMTEuNzcgMy4zOTQuMDUgNS4wMTggMSA1LjAxOCAxeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Shopify Trigger", - "typeVersion": 1 - }, - { - "id": 325, - "icon": "file:x.svg", - "name": "n8n-nodes-base.twitter", - "defaults": { - "name": "X" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE4LjI0NCAyLjI1aDMuMzA4bC03LjIyNyA4LjI2IDguNTAyIDExLjI0SDE2LjE3bC01LjIxNC02LjgxN0w0Ljk5IDIxLjc1SDEuNjhsNy43My04LjgzNUwxLjI1NCAyLjI1SDguMDhsNC43MTMgNi4yMzF6bS0xLjE2MSAxNy41MmgxLjgzM0w3LjA4NCA0LjEyNkg1LjExN3oiPjwvcGF0aD48L3N2Zz4K" - }, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - } - ], - "displayName": "X (Formerly Twitter)", - "typeVersion": 2 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - }, - { - "id": 19, - "name": "Marketing & Growth" - } - ], - "image": [ - { - "id": 527, - "url": "https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/89a078b208fe4c6181902608b1cd1332.png" - } - ] - }, - { - "id": 1456, - "name": "Add new customers from WooCommerce to Mautic", - "views": 333, - "recentViews": 9833, - "totalViews": 333, - "createdAt": "2022-02-17T15:00:40.748Z", - "description": "This workflow uses a WooCommerce trigger that will run when a new customer has been added, It will then add the customer to Mautic.\n\nTo use this workflow you will need to set the credentials to use for the WooCommerce and Mautic nodes.", - "workflow": { - "id": 83, - "name": "New WooCommerce Customer to Mautic", - "nodes": [ - { - "name": "Check for Existing", - "type": "n8n-nodes-base.mautic", - "position": [ - 280, - 480 - ], - "parameters": { - "options": { - "search": "={{$json[\"email\"]}}" - }, - "operation": "getAll", - "authentication": "oAuth2" - }, - "credentials": { - "mauticOAuth2Api": { - "id": "54", - "name": "Mautic account" - } - }, - "typeVersion": 1, - "alwaysOutputData": true - }, - { - "name": "If New", - "type": "n8n-nodes-base.if", - "position": [ - 460, - 480 - ], - "parameters": { - "conditions": { - "string": [ - { - "value1": "={{$json[\"id\"]}}", - "operation": "isEmpty" - } - ] - } - }, - "typeVersion": 1 - }, - { - "name": "Create Contact", - "type": "n8n-nodes-base.mautic", - "position": [ - 680, - 320 - ], - "parameters": { - "email": "={{$node[\"Customer Created\"].json[\"email\"]}}", - "company": "={{$node[\"Customer Created\"].json[\"billing\"][\"company\"]}}", - "options": {}, - "lastName": "={{$node[\"Customer Created\"].json[\"last_name\"]}}", - "firstName": "={{$node[\"Customer Created\"].json[\"first_name\"]}}", - "authentication": "oAuth2", - "additionalFields": {} - }, - "credentials": { - "mauticOAuth2Api": { - "id": "54", - "name": "Mautic account" - } - }, - "typeVersion": 1 - }, - { - "name": "Update Contact", - "type": "n8n-nodes-base.mautic", - "position": [ - 680, - 580 - ], - "parameters": { - "options": {}, - "contactId": "={{$json[\"id\"]}}", - "operation": "update", - "updateFields": { - "lastName": "={{$node[\"Customer Created or Updated\"].json[\"last_name\"]}}", - "firstName": "={{$node[\"Customer Created or Updated\"].json[\"first_name\"]}}" - }, - "authentication": "oAuth2" - }, - "credentials": { - "mauticOAuth2Api": { - "id": "54", - "name": "Mautic account" - } - }, - "typeVersion": 1 - }, - { - "name": "Customer Created or Updated", - "type": "n8n-nodes-base.wooCommerceTrigger", - "position": [ - 100, - 480 - ], - "webhookId": "5d89e322-a5e0-4cce-9eab-185e8375175b", - "parameters": { - "event": "customer.updated" - }, - "credentials": { - "wooCommerceApi": { - "id": "48", - "name": "WooCommerce account" - } - }, - "typeVersion": 1 - } - ], - "active": false, - "settings": { - "saveManualExecutions": true, - "saveExecutionProgress": true, - "saveDataSuccessExecution": "all" - }, - "connections": { - "If New": { - "main": [ - [ - { - "node": "Create Contact", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Update Contact", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check for Existing": { - "main": [ - [ - { - "node": "If New", - "type": "main", - "index": 0 - } - ] - ] - }, - "Customer Created or Updated": { - "main": [ - [ - { - "node": "Check for Existing", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 6, - "nodeTypes": { - "n8n-nodes-base.if": { - "count": 1 - }, - "n8n-nodes-base.mautic": { - "count": 3 - }, - "n8n-nodes-base.wooCommerceTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "jon-n8n" - }, - "nodes": [ - { - "id": 20, - "icon": "fa:map-signs", - "name": "n8n-nodes-base.if", - "defaults": { - "name": "IF", - "color": "#408000" - }, - "iconData": { - "icon": "map-signs", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "IF", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "fa:play", - "name": "n8n-nodes-base.start", - "defaults": { - "name": "Start", - "color": "#00e000" - }, - "iconData": { - "icon": "play", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Start", - "typeVersion": 1 - }, - { - "id": 126, - "icon": "file:mautic.svg", - "name": "n8n-nodes-base.mautic", - "defaults": { - "name": "Mautic" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMzQ5Ljc3OXB4IiBoZWlnaHQ9IjM0OS43NzlweCIgdmlld0JveD0iMCAwIDM0OS43NzkgMzQ5Ljc3OSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzQ5Ljc3OSAzNDkuNzc5Ig0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNzQuODksMzQ5Ljc3OUM3OC42MTIsMzQ5Ljc3OSwwLDI3MS40NjIsMCwxNzQuODlTNzguNjEyLDAsMTc0Ljg5LDBjMjMuMjYsMCw0NS45MzEsNC40MTcsNjcuMTI5LDEzLjU0Mw0KCWM1Ljg4OSwyLjY1LDguODMzLDkuNDIyLDYuNDc4LDE1LjYwNWMtMi42NDksNS44ODgtOS40MjEsOC44MzMtMTUuNjA0LDYuNDc3Yy0xOC41NDktNy42NTUtMzcuOTgtMTEuNDgyLTU4LjAwMi0xMS40ODINCgljLTgzLjMyMywwLTE1MS4wNDEsNjcuNzE4LTE1MS4wNDEsMTUxLjA0MVM5MS41NjcsMzI2LjIyNSwxNzQuODksMzI2LjIyNWM4My4zMjMsMCwxNTEuMDQxLTY3LjcxOCwxNTEuMDQxLTE1MS4wNDENCgljMC0xNy45Ni0yLjk0NC0zNS4zMzItOS4xMjctNTEuODE5Yy0yLjM1NS02LjE4MywwLjg4My0xMi45NTUsNy4wNjYtMTUuMzFjNi4xODMtMi4zNTUsMTIuOTU0LDAuODgzLDE1LjMxLDcuMDY2DQoJYzcuMDY2LDE5LjEzOCwxMC42LDM5LjQ1MywxMC42LDYwLjA2M0MzNDkuNzc5LDI3MS4xNjcsMjcxLjQ2MiwzNDkuNzc5LDE3NC44OSwzNDkuNzc5Ii8+DQo8Zz4NCgk8cG9seWdvbiBmaWxsPSIjRkRCOTMzIiBwb2ludHM9IjI1MS40NCwxNTYuOTMgMjI0LjM1NCwxODUuMTk0IDIzOS4zNjksMjQ4LjQ5NiAyNzMuNTIyLDI0OC40OTYgCSIvPg0KPC9nPg0KPHBvbHlnb24gZmlsbD0iI0ZEQjkzMyIgcG9pbnRzPSIyNDAuMjUzLDczLjMxMiAyNDkuNjc0LDgyLjczNCAxNzQuODksMTYxLjkzNSAxMTAuOTk5LDk2LjI3NyA3NC4xOTYsMjQ4LjQ5NiAxMDguMzUsMjQ4LjQ5NiANCgkxMjguNjY1LDE2My45OTYgMTc0Ljg5LDIxNC4zNDMgMjczLjgxNywxMDYuNTgzIDI4My4yMzksMTE2LjI5OSAyOTIuNjYsNjMuMDA3ICIvPg0KPC9zdmc+DQo=" - }, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Mautic", - "typeVersion": 1 - }, - { - "id": 235, - "icon": "file:wooCommerce.svg", - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "WooCommerce Trigger", - "typeVersion": 1 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "image": [] - }, - { - "id": 1459, - "name": "Notify on Telegram and Twitter when new order is added in WooCommerce", - "views": 620, - "recentViews": 9823, - "totalViews": 620, - "createdAt": "2022-02-17T15:02:14.961Z", - "description": "This workflow uses a WooCommerce trigger that will run a new product has been added, It will then post the product to Telegram and Twitter.\n\nTo use this workflow you will need to set the credentials to use for the WooCommerce, Twitter and Telegram nodes.", - "workflow": { - "id": 85, - "name": "New WooCommerce Product to Twitter and Telegram", - "nodes": [ - { - "name": "Twitter", - "type": "n8n-nodes-base.twitter", - "position": [ - 720, - 300 - ], - "parameters": { - "text": "=✨ New Product Announcement ✨\nWe have just added {{$json[\"name\"]}}, Head to {{$json[\"permalink\"]}} to find out more.", - "additionalFields": {} - }, - "credentials": { - "twitterOAuth1Api": { - "id": "37", - "name": "joffcom" - } - }, - "typeVersion": 1 - }, - { - "name": "Telegram", - "type": "n8n-nodes-base.telegram", - "position": [ - 720, - 500 - ], - "parameters": { - "text": "=✨ New Product Announcement ✨\nWe have just added {{$json[\"name\"]}}, Head to {{$json[\"permalink\"]}} to find out more.", - "chatId": "123456", - "additionalFields": {} - }, - "credentials": { - "telegramApi": { - "id": "56", - "name": "Telegram account" - } - }, - "typeVersion": 1 - }, - { - "name": "WooCommerce Trigger", - "type": "n8n-nodes-base.wooCommerceTrigger", - "position": [ - 540, - 400 - ], - "webhookId": "ab7b134b-9b2d-4e0d-b496-1aee30db0808", - "parameters": { - "event": "product.created" - }, - "credentials": { - "wooCommerceApi": { - "id": "48", - "name": "WooCommerce account" - } - }, - "typeVersion": 1 - } - ], - "active": false, - "settings": {}, - "connections": { - "WooCommerce Trigger": { - "main": [ - [ - { - "node": "Twitter", - "type": "main", - "index": 0 - }, - { - "node": "Telegram", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 4, - "nodeTypes": { - "n8n-nodes-base.twitter": { - "count": 1 - }, - "n8n-nodes-base.telegram": { - "count": 1 - }, - "n8n-nodes-base.wooCommerceTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "jon-n8n" - }, - "nodes": [ - { - "id": 42, - "icon": "fa:play", - "name": "n8n-nodes-base.start", - "defaults": { - "name": "Start", - "color": "#00e000" - }, - "iconData": { - "icon": "play", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Start", - "typeVersion": 1 - }, - { - "id": 49, - "icon": "file:telegram.svg", - "name": "n8n-nodes-base.telegram", - "defaults": { - "name": "Telegram" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNjYgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiIGZpbGw9IiMzN2FlZTIiLz48cGF0aCBkPSJNMjEuNjYxIDM0LjMzOGwzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIgZmlsbD0iI2M4ZGFlYSIvPjxwYXRoIGQ9Ik0yNi42OTUgMzcuMDM0bC0uNzI5IDcuNzQ2cy0uMzA1IDIuMzczIDIuMDY4IDBsNC42NDQtNC4yMDMiIGZpbGw9IiNhOWM2ZDgiLz48cGF0aCBkPSJNMjEuNzMgMzQuNzEybC03LjgwOS0yLjU0NXMtLjkzMi0uMzc4LS42MzMtMS4yMzdjLjA2Mi0uMTc3LjE4Ni0uMzI4LjU1OS0uNTg4IDEuNzMxLTEuMjA2IDMyLjAyOC0xMi4wOTYgMzIuMDI4LTEyLjA5NnMuODU2LS4yODggMS4zNjEtLjA5N2MuMjMxLjA4OC4zNzguMTg3LjUwMy41NDguMDQ1LjEzMi4wNzEuNDExLjA2OC42ODktLjAwMy4yMDEtLjAyNy4zODYtLjA0NS42NzgtLjE4NCAyLjk3OC01LjcwNiAyNS4xOTgtNS43MDYgMjUuMTk4cy0uMzMgMS4zLTEuNTE0IDEuMzQ1Yy0uNDMyLjAxNi0uOTU2LS4wNzEtMS41ODItLjYxLTIuMzIzLTEuOTk4LTEwLjM1Mi03LjM5NC0xMi4xMjYtOC41OGEuMzQuMzQgMCAwMS0uMTQ2LS4yMzljLS4wMjUtLjEyNS4xMDgtLjI4LjEwOC0uMjhzMTMuOTgtMTIuNDI3IDE0LjM1Mi0xMy43MzFjLjAyOS0uMTAxLS4wNzktLjE1MS0uMjI2LS4xMDctLjkyOS4zNDItMTcuMDI1IDEwLjUwNi0xOC44MDEgMTEuNjI5LS4xMDQuMDY2LS4zOTUuMDIzLS4zOTUuMDIzIi8+PC9nPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Telegram", - "typeVersion": 1 - }, - { - "id": 235, - "icon": "file:wooCommerce.svg", - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "WooCommerce Trigger", - "typeVersion": 1 - }, - { - "id": 325, - "icon": "file:x.svg", - "name": "n8n-nodes-base.twitter", - "defaults": { - "name": "X" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE4LjI0NCAyLjI1aDMuMzA4bC03LjIyNyA4LjI2IDguNTAyIDExLjI0SDE2LjE3bC01LjIxNC02LjgxN0w0Ljk5IDIxLjc1SDEuNjhsNy43My04LjgzNUwxLjI1NCAyLjI1SDguMDhsNC43MTMgNi4yMzF6bS0xLjE2MSAxNy41MmgxLjgzM0w3LjA4NCA0LjEyNkg1LjExN3oiPjwvcGF0aD48L3N2Zz4K" - }, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - } - ], - "displayName": "X (Formerly Twitter)", - "typeVersion": 2 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - }, - { - "id": 19, - "name": "Marketing & Growth" - } - ], - "image": [] - }, - { - "id": 1457, - "name": "Notify on Slack when new order is registered in WooCommerce", - "views": 178, - "recentViews": 9787, - "totalViews": 178, - "createdAt": "2022-02-17T15:01:13.489Z", - "description": "This workflow uses a WooCommerce trigger that will run when an order has been placed.\n\nIf the value of this is over 100 it will post it to a Slack channel.\n\nTo use this workflow you will need to set the credentials to use for the WooCommerce and Slack nodes, You will also need to pick a channel to post the message to.", - "workflow": { - "id": 81, - "name": "New WooCommerce order to Slack", - "nodes": [ - { - "name": "Order Created", - "type": "n8n-nodes-base.wooCommerceTrigger", - "position": [ - 340, - 500 - ], - "webhookId": "287b4bf4-67ec-4c97-85d9-c0d3e6f59e6b", - "parameters": { - "event": "order.created" - }, - "credentials": { - "wooCommerceApi": { - "id": "48", - "name": "WooCommerce account" - } - }, - "typeVersion": 1 - }, - { - "name": "Send to Slack", - "type": "n8n-nodes-base.slack", - "position": [ - 780, - 480 - ], - "parameters": { - "text": ":sparkles: There is a new order :sparkles:", - "channel": "woo-commerce", - "blocksUi": { - "blocksValues": [] - }, - "attachments": [ - { - "color": "#66FF00", - "fields": { - "item": [ - { - "short": true, - "title": "Order ID", - "value": "={{$json[\"id\"]}}" - }, - { - "short": true, - "title": "Status", - "value": "={{$json[\"status\"]}}" - }, - { - "short": true, - "title": "Total", - "value": "={{$json[\"currency_symbol\"]}}{{$json[\"total\"]}}" - }, - { - "short": false, - "title": "Link", - "value": "={{$node[\"Order Created\"].json[\"_links\"][\"self\"][0][\"href\"]}}" - } - ] - }, - "footer": "=*Ordered:* {{$json[\"date_created\"]}} | *Transaction ID:* {{$json[\"transaction_id\"]}}" - } - ], - "otherOptions": {} - }, - "credentials": { - "slackApi": { - "id": "53", - "name": "Slack Access Token" - } - }, - "typeVersion": 1 - }, - { - "name": "Price over 100", - "type": "n8n-nodes-base.if", - "position": [ - 540, - 500 - ], - "parameters": { - "conditions": { - "number": [ - { - "value1": "={{$json[\"total\"]}}", - "value2": 100, - "operation": "largerEqual" - } - ] - } - }, - "typeVersion": 1 - } - ], - "active": false, - "settings": { - "saveManualExecutions": true, - "saveExecutionProgress": true, - "saveDataSuccessExecution": "all" - }, - "connections": { - "Order Created": { - "main": [ - [ - { - "node": "Price over 100", - "type": "main", - "index": 0 - } - ] - ] - }, - "Price over 100": { - "main": [ - [ - { - "node": "Send to Slack", - "type": "main", - "index": 0 - } - ], - [] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 4, - "nodeTypes": { - "n8n-nodes-base.if": { - "count": 1 - }, - "n8n-nodes-base.slack": { - "count": 1 - }, - "n8n-nodes-base.wooCommerceTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "jon-n8n" - }, - "nodes": [ - { - "id": 20, - "icon": "fa:map-signs", - "name": "n8n-nodes-base.if", - "defaults": { - "name": "IF", - "color": "#408000" - }, - "iconData": { - "icon": "map-signs", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "IF", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:slack.svg", - "name": "n8n-nodes-base.slack", - "defaults": { - "name": "Slack" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGQ9Ik00MC43NDEgOTMuNTVjMC04LjczNSA2LjYwNy0xNS43NzIgMTQuODE1LTE1Ljc3MnMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjRjMCA4LjczNy02LjYwNyAxNS43NzQtMTQuODE1IDE1Ljc3NHMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6IiBmaWxsPSIjZTAxZTVhIiBzdHJva2U9IiNlMDFlNWEiLz48cGF0aCBkPSJNOTMuNTUgMTA3LjQwOGMtOC43MzUgMC0xNS43NzItNi42MDctMTUuNzcyLTE0LjgxNXM3LjAzNy0xNC44MTUgMTUuNzcyLTE0LjgxNWgzOC44MjZjOC43MzUgMCAxNS43NzIgNi42MDcgMTUuNzcyIDE0LjgxNXMtNy4wMzcgMTQuODE1LTE1Ljc3MiAxNC44MTV6IiBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiLz48cGF0aCBkPSJNNzcuNzc4IDE1Ljc3MkM3Ny43NzggNy4wMzcgODQuMzg1IDAgOTIuNTkzIDBzMTQuODE1IDcuMDM3IDE0LjgxNSAxNS43NzJ2MzguODI2YzAgOC43MzUtNi42MDcgMTUuNzcyLTE0LjgxNSAxNS43NzJzLTE0LjgxNS03LjAzNy0xNC44MTUtMTUuNzcyeiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE1Ljc3MiA3MC4zNzFDNy4wMzcgNzAuMzcxIDAgNjMuNzYzIDAgNTUuNTU2czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGQ9Ik03Ny43NzggMTMzLjMzM2MwIDguMjA4IDYuNjA3IDE0LjgxNSAxNC44MTUgMTQuODE1czE0LjgxNS02LjYwNyAxNC44MTUtMTQuODE1LTYuNjA3LTE0LjgxNS0xNC44MTUtMTQuODE1SDc3Ljc3OHoiIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIvPjxwYXRoIGQ9Ik0xMzMuMzM0IDcwLjM3MWgtMTQuODE1VjU1LjU1NmMwLTguMjA3IDYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1czE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUgMTQuODE1eiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE0LjgxNSA3Ny43NzhIMjkuNjN2MTQuODE1YzAgOC4yMDctNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTVTMCAxMDAuOCAwIDkyLjU5M3M2LjYwNy0xNC44MTUgMTQuODE1LTE0LjgxNXoiIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIvPjxwYXRoIGQ9Ik03MC4zNzEgMTQuODE1VjI5LjYzSDU1LjU1NmMtOC4yMDcgMC0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNVM0Ny4zNDggMCA1NS41NTYgMHMxNC44MTUgNi42MDcgMTQuODE1IDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Slack", - "typeVersion": 2 - }, - { - "id": 42, - "icon": "fa:play", - "name": "n8n-nodes-base.start", - "defaults": { - "name": "Start", - "color": "#00e000" - }, - "iconData": { - "icon": "play", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Start", - "typeVersion": 1 - }, - { - "id": 235, - "icon": "file:wooCommerce.svg", - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "WooCommerce Trigger", - "typeVersion": 1 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "image": [] - }, - { - "id": 1765, - "name": "Get Slack notifications when new product published on WooCommerce", - "views": 79, - "recentViews": 9577, - "totalViews": 79, - "createdAt": "2022-08-12T12:36:53.409Z", - "description": "This workflow let's a bot in Slack notify a specific channel when a new product in WooCommerce is published and live on the site. \n\n## Prerequisites\n\n[WooCommerce](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.woocommercetrigger/) account\n[Slack](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/) and a [Slack bot](https://slack.com/help/articles/115005265703-Create-a-bot-for-your-workspace)\n\n## How it works\n\n1. Listen for WooCommerce product creation\n2. If permalink starts with https://[your-url-here].com/product/\n3. Slack bot notifies channel that a new product has been added. \n\nPlease note, you must update the URL in the IF node to match your url. If your WooCommerce doesn't use the slug /product/, that will need to be updated too. \n", - "workflow": { - "id": 1016, - "name": "Woocommerce to slack: notify new product created", - "tags": [ - { - "id": "5", - "name": "FVF", - "createdAt": "2022-07-30T07:43:44.795Z", - "updatedAt": "2022-07-30T07:43:44.795Z" - } - ], - "nodes": [ - { - "name": "If URL has /product/", - "type": "n8n-nodes-base.if", - "position": [ - 640, - 300 - ], - "parameters": { - "conditions": { - "string": [ - { - "value1": "={{$json[\"permalink\"]}}", - "value2": "https://[add-your-url-here]/product/", - "operation": "startsWith" - } - ] - } - }, - "typeVersion": 1 - }, - { - "name": "Send message to slack", - "type": "n8n-nodes-base.slack", - "position": [ - 920, - 260 - ], - "parameters": { - "text": ":new: A new product has been added! :new:", - "channel": "newproducts", - "blocksUi": { - "blocksValues": [] - }, - "attachments": [ - { - "color": "#66FF00", - "fields": { - "item": [ - { - "short": false, - "title": "Name", - "value": "={{$json[\"name\"]}}" - }, - { - "short": true, - "title": "Price", - "value": "={{$json[\"regular_price\"]}}" - }, - { - "short": true, - "title": "Sale Price", - "value": "={{$json[\"sale_price\"]}}" - }, - { - "short": false, - "title": "Link", - "value": "={{$json[\"permalink\"]}}" - } - ] - }, - "footer": "=Added: {{$json[\"date_created\"]}}" - } - ], - "otherOptions": {} - }, - "credentials": { - "slackApi": { - "id": "21", - "name": "FVF bot" - } - }, - "typeVersion": 1 - }, - { - "name": "On product creation", - "type": "n8n-nodes-base.wooCommerceTrigger", - "position": [ - 460, - 300 - ], - "webhookId": "267c4855-6227-4d33-867e-74600097473e", - "parameters": { - "event": "product.created" - }, - "credentials": { - "wooCommerceApi": { - "id": "20", - "name": "WooCommerce account FVF" - } - }, - "typeVersion": 1 - } - ], - "active": true, - "settings": {}, - "connections": { - "On product creation": { - "main": [ - [ - { - "node": "If URL has /product/", - "type": "main", - "index": 0 - } - ] - ] - }, - "If URL has /product/": { - "main": [ - [ - { - "node": "Send message to slack", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 4, - "nodeTypes": { - "n8n-nodes-base.if": { - "count": 1 - }, - "n8n-nodes-base.slack": { - "count": 1 - }, - "n8n-nodes-base.wooCommerceTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "n8n-team" - }, - "nodes": [ - { - "id": 20, - "icon": "fa:map-signs", - "name": "n8n-nodes-base.if", - "defaults": { - "name": "IF", - "color": "#408000" - }, - "iconData": { - "icon": "map-signs", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "IF", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:slack.svg", - "name": "n8n-nodes-base.slack", - "defaults": { - "name": "Slack" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGQ9Ik00MC43NDEgOTMuNTVjMC04LjczNSA2LjYwNy0xNS43NzIgMTQuODE1LTE1Ljc3MnMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjRjMCA4LjczNy02LjYwNyAxNS43NzQtMTQuODE1IDE1Ljc3NHMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6IiBmaWxsPSIjZTAxZTVhIiBzdHJva2U9IiNlMDFlNWEiLz48cGF0aCBkPSJNOTMuNTUgMTA3LjQwOGMtOC43MzUgMC0xNS43NzItNi42MDctMTUuNzcyLTE0LjgxNXM3LjAzNy0xNC44MTUgMTUuNzcyLTE0LjgxNWgzOC44MjZjOC43MzUgMCAxNS43NzIgNi42MDcgMTUuNzcyIDE0LjgxNXMtNy4wMzcgMTQuODE1LTE1Ljc3MiAxNC44MTV6IiBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiLz48cGF0aCBkPSJNNzcuNzc4IDE1Ljc3MkM3Ny43NzggNy4wMzcgODQuMzg1IDAgOTIuNTkzIDBzMTQuODE1IDcuMDM3IDE0LjgxNSAxNS43NzJ2MzguODI2YzAgOC43MzUtNi42MDcgMTUuNzcyLTE0LjgxNSAxNS43NzJzLTE0LjgxNS03LjAzNy0xNC44MTUtMTUuNzcyeiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE1Ljc3MiA3MC4zNzFDNy4wMzcgNzAuMzcxIDAgNjMuNzYzIDAgNTUuNTU2czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGQ9Ik03Ny43NzggMTMzLjMzM2MwIDguMjA4IDYuNjA3IDE0LjgxNSAxNC44MTUgMTQuODE1czE0LjgxNS02LjYwNyAxNC44MTUtMTQuODE1LTYuNjA3LTE0LjgxNS0xNC44MTUtMTQuODE1SDc3Ljc3OHoiIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIvPjxwYXRoIGQ9Ik0xMzMuMzM0IDcwLjM3MWgtMTQuODE1VjU1LjU1NmMwLTguMjA3IDYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1czE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUgMTQuODE1eiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE0LjgxNSA3Ny43NzhIMjkuNjN2MTQuODE1YzAgOC4yMDctNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTVTMCAxMDAuOCAwIDkyLjU5M3M2LjYwNy0xNC44MTUgMTQuODE1LTE0LjgxNXoiIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIvPjxwYXRoIGQ9Ik03MC4zNzEgMTQuODE1VjI5LjYzSDU1LjU1NmMtOC4yMDcgMC0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNVM0Ny4zNDggMCA1NS41NTYgMHMxNC44MTUgNi42MDcgMTQuODE1IDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Slack", - "typeVersion": 2 - }, - { - "id": 42, - "icon": "fa:play", - "name": "n8n-nodes-base.start", - "defaults": { - "name": "Start", - "color": "#00e000" - }, - "iconData": { - "icon": "play", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Start", - "typeVersion": 1 - }, - { - "id": 235, - "icon": "file:wooCommerce.svg", - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "WooCommerce Trigger", - "typeVersion": 1 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "image": [] - }, - { - "id": 1460, - "name": "Notify on Slack when refund is registered in WooCommerce", - "views": 85, - "recentViews": 9541, - "totalViews": 85, - "createdAt": "2022-02-17T15:02:58.662Z", - "description": "This workflow uses a WooCommerce trigger that will run when an order has been updated and the status is refunded.\n\nIf the value of this is over 100 it will post it to a Slack channel.\n\nTo use this workflow you will need to set the credentials to use for the WooCommerce and Slack nodes, You will also need to pick a channel to post the message to.", - "workflow": { - "id": 82, - "name": "New WooCommerce refund to Slack", - "nodes": [ - { - "name": "Order Updated", - "type": "n8n-nodes-base.wooCommerceTrigger", - "position": [ - 320, - 500 - ], - "webhookId": "f7736be3-e978-4a17-b936-7ce9f8ccdb72", - "parameters": { - "event": "order.updated" - }, - "credentials": { - "wooCommerceApi": { - "id": "48", - "name": "WooCommerce account" - } - }, - "typeVersion": 1 - }, - { - "name": "If Refund and Over 100", - "type": "n8n-nodes-base.if", - "position": [ - 540, - 500 - ], - "parameters": { - "conditions": { - "number": [ - { - "value1": "={{$json[\"total\"]}}", - "value2": 100, - "operation": "largerEqual" - } - ], - "string": [ - { - "value1": "={{$json[\"status\"]}}", - "value2": "refunded" - } - ] - } - }, - "typeVersion": 1 - }, - { - "name": "Send to Slack", - "type": "n8n-nodes-base.slack", - "position": [ - 780, - 480 - ], - "parameters": { - "text": ":x: A refund has been issued :x:", - "channel": "woo-commerce", - "blocksUi": { - "blocksValues": [] - }, - "attachments": [ - { - "color": "#FF0000", - "fields": { - "item": [ - { - "short": true, - "title": "Order ID", - "value": "={{$json[\"id\"]}}" - }, - { - "short": true, - "title": "Status", - "value": "={{$json[\"status\"]}}" - }, - { - "short": true, - "title": "Total", - "value": "={{$json[\"currency_symbol\"]}}{{$json[\"total\"]}}" - } - ] - }, - "footer": "=*Order updated:* {{$json[\"date_modified\"]}}" - } - ], - "otherOptions": {} - }, - "credentials": { - "slackApi": { - "id": "53", - "name": "Slack Access Token" - } - }, - "typeVersion": 1 - } - ], - "active": false, - "settings": { - "saveManualExecutions": true, - "saveExecutionProgress": true, - "saveDataSuccessExecution": "all" - }, - "connections": { - "Order Updated": { - "main": [ - [ - { - "node": "If Refund and Over 100", - "type": "main", - "index": 0 - } - ] - ] - }, - "If Refund and Over 100": { - "main": [ - [ - { - "node": "Send to Slack", - "type": "main", - "index": 0 - } - ], - [] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 4, - "nodeTypes": { - "n8n-nodes-base.if": { - "count": 1 - }, - "n8n-nodes-base.slack": { - "count": 1 - }, - "n8n-nodes-base.wooCommerceTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "jon-n8n" - }, - "nodes": [ - { - "id": 20, - "icon": "fa:map-signs", - "name": "n8n-nodes-base.if", - "defaults": { - "name": "IF", - "color": "#408000" - }, - "iconData": { - "icon": "map-signs", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "IF", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:slack.svg", - "name": "n8n-nodes-base.slack", - "defaults": { - "name": "Slack" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGQ9Ik00MC43NDEgOTMuNTVjMC04LjczNSA2LjYwNy0xNS43NzIgMTQuODE1LTE1Ljc3MnMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjRjMCA4LjczNy02LjYwNyAxNS43NzQtMTQuODE1IDE1Ljc3NHMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6IiBmaWxsPSIjZTAxZTVhIiBzdHJva2U9IiNlMDFlNWEiLz48cGF0aCBkPSJNOTMuNTUgMTA3LjQwOGMtOC43MzUgMC0xNS43NzItNi42MDctMTUuNzcyLTE0LjgxNXM3LjAzNy0xNC44MTUgMTUuNzcyLTE0LjgxNWgzOC44MjZjOC43MzUgMCAxNS43NzIgNi42MDcgMTUuNzcyIDE0LjgxNXMtNy4wMzcgMTQuODE1LTE1Ljc3MiAxNC44MTV6IiBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiLz48cGF0aCBkPSJNNzcuNzc4IDE1Ljc3MkM3Ny43NzggNy4wMzcgODQuMzg1IDAgOTIuNTkzIDBzMTQuODE1IDcuMDM3IDE0LjgxNSAxNS43NzJ2MzguODI2YzAgOC43MzUtNi42MDcgMTUuNzcyLTE0LjgxNSAxNS43NzJzLTE0LjgxNS03LjAzNy0xNC44MTUtMTUuNzcyeiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE1Ljc3MiA3MC4zNzFDNy4wMzcgNzAuMzcxIDAgNjMuNzYzIDAgNTUuNTU2czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGQ9Ik03Ny43NzggMTMzLjMzM2MwIDguMjA4IDYuNjA3IDE0LjgxNSAxNC44MTUgMTQuODE1czE0LjgxNS02LjYwNyAxNC44MTUtMTQuODE1LTYuNjA3LTE0LjgxNS0xNC44MTUtMTQuODE1SDc3Ljc3OHoiIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIvPjxwYXRoIGQ9Ik0xMzMuMzM0IDcwLjM3MWgtMTQuODE1VjU1LjU1NmMwLTguMjA3IDYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1czE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUgMTQuODE1eiIgZmlsbD0iIzJmYjY3YyIgc3Ryb2tlPSIjMmZiNjdjIi8+PHBhdGggZD0iTTE0LjgxNSA3Ny43NzhIMjkuNjN2MTQuODE1YzAgOC4yMDctNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTVTMCAxMDAuOCAwIDkyLjU5M3M2LjYwNy0xNC44MTUgMTQuODE1LTE0LjgxNXoiIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIvPjxwYXRoIGQ9Ik03MC4zNzEgMTQuODE1VjI5LjYzSDU1LjU1NmMtOC4yMDcgMC0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNVM0Ny4zNDggMCA1NS41NTYgMHMxNC44MTUgNi42MDcgMTQuODE1IDE0LjgxNXoiIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Slack", - "typeVersion": 2 - }, - { - "id": 42, - "icon": "fa:play", - "name": "n8n-nodes-base.start", - "defaults": { - "name": "Start", - "color": "#00e000" - }, - "iconData": { - "icon": "play", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Start", - "typeVersion": 1 - }, - { - "id": 235, - "icon": "file:wooCommerce.svg", - "name": "n8n-nodes-base.wooCommerceTrigger", - "defaults": { - "name": "WooCommerce Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIC01MCAyNTYgMjUzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHRpdGxlPldvb0NvbW1lcmNlIExvZ288L3RpdGxlPgo8bWV0YWRhdGE+CjxyZGY6UkRGPgo8Y2M6V29yayByZGY6YWJvdXQ9IiI+CjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pgo8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CjxkYzp0aXRsZS8+CjwvY2M6V29yaz4KPC9yZGY6UkRGPgo8L21ldGFkYXRhPgo8cGF0aCBkPSJtMjMuNzU5IDBoMjA4LjM4YzEzLjE4NyAwIDIzLjg2MyAxMC42NzUgMjMuODYzIDIzLjg2M3Y3OS41NDJjMCAxMy4xODctMTAuNjc1IDIzLjg2My0yMy44NjMgMjMuODYzaC03NC43MjdsMTAuMjU3IDI1LjExOC00NS4xMDktMjUuMTE4aC05OC42OTVjLTEzLjE4NyAwLTIzLjg2My0xMC42NzUtMjMuODYzLTIzLjg2M3YtNzkuNTQyYy0wLjEwNDY2LTEzLjA4MyAxMC41NzEtMjMuODYzIDIzLjc1OC0yMy44NjN6IiBmaWxsPSIjN2Y1NGIzIi8+CjxwYXRoIGQ9Im0xNC41NzggMjEuNzVjMS40NTY5LTEuOTc3MiAzLjY0MjMtMy4wMTc5IDYuNTU2MS0zLjIyNiA1LjMwNzMtMC40MTYyNiA4LjMyNTIgMi4wODEzIDkuMDUzNyA3LjQ5MjcgMy4yMjYgMjEuNzUgNi43NjQyIDQwLjE2OSAxMC41MTEgNTUuMjU5bDIyLjc5LTQzLjM5NWMyLjA4MTMtMy45NTQ1IDQuNjgyOS02LjAzNTggNy44MDQ5LTYuMjQzOSA0LjU3ODktMC4zMTIyIDcuMzg4NiAyLjYwMTYgOC41MzMzIDguNzQxNSAyLjYwMTYgMTMuODQxIDUuOTMxNyAyNS42IDkuODg2MiAzNS41OSAyLjcwNTctMjYuNDMzIDcuMjg0Ni00NS40NzYgMTMuNzM3LTU3LjIzNiAxLjU2MS0yLjkxMzggMy44NTA0LTQuMzcwNyA2Ljg2ODMtNC41Nzg5IDIuMzkzNS0wLjIwODEzIDQuNTc4OSAwLjUyMDMzIDYuNTU2MSAyLjA4MTMgMS45NzcyIDEuNTYxIDMuMDE3OSAzLjUzODIgMy4yMjYgNS45MzE3IDAuMTA0MDYgMS44NzMyLTAuMjA4MTMgMy40MzQxLTEuMDQwNyA0Ljk5NTEtNC4wNTg1IDcuNDkyNy03LjM4ODYgMjAuMDg1LTEwLjA5NCAzNy41NjctMi42MDE2IDE2Ljk2My0zLjUzODIgMzAuMTc5LTIuOTEzOCAzOS42NDkgMC4yMDgxMyAyLjYwMTYtMC4yMDgxMyA0Ljg5MTEtMS4yNDg4IDYuODY4My0xLjI0ODggMi4yODk0LTMuMTIyIDMuNTM4Mi01LjUxNTQgMy43NDYzLTIuNzA1NyAwLjIwODEzLTUuNTE1NC0xLjA0MDYtOC4yMjExLTMuODUwNC05LjY3OC05Ljg4NjItMTcuMzc5LTI0LjY2My0yMi45OTgtNDQuMzMyLTYuNzY0MiAxMy4zMi0xMS43NTkgMjMuMzExLTE0Ljk4NSAyOS45NzEtNi4xMzk4IDExLjc1OS0xMS4zNDMgMTcuNzk1LTE1LjcxNCAxOC4xMDctMi44MDk4IDAuMjA4MTMtNS4yMDMzLTIuMTg1NC03LjI4NDYtNy4xODA1LTUuMzA3My0xMy42MzMtMTEuMDMxLTM5Ljk2MS0xNy4xNzEtNzguOTg1LTAuNDE2MjYtMi43MDU3IDAuMjA4MTMtNS4wOTkyIDEuNjY1LTYuOTcyNHptMjIzLjY0IDE2LjMzOGMtMy43NDYzLTYuNTU2MS05LjI2MTgtMTAuNTExLTE2LjY1LTEyLjA3Mi0xLjk3NzItMC40MTYyNi0zLjg1MDQtMC42MjQzOS01LjYxOTUtMC42MjQzOS05Ljk5MDIgMC0xOC4xMDcgNS4yMDMzLTI0LjQ1NSAxNS42MS01LjQxMTQgOC44NDU1LTguMTE3MSAxOC42MjgtOC4xMTcxIDI5LjM0NiAwIDguMDEzIDEuNjY1IDE0Ljg4MSA0Ljk5NTEgMjAuNjA1IDMuNzQ2MyA2LjU1NjEgOS4yNjE4IDEwLjUxMSAxNi42NSAxMi4wNzIgMS45NzcyIDAuNDE2MjYgMy44NTA0IDAuNjI0MzkgNS42MTk1IDAuNjI0MzkgMTAuMDk0IDAgMTguMjExLTUuMjAzMyAyNC40NTUtMTUuNjEgNS40MTE0LTguOTQ5NiA4LjExNzEtMTguNzMyIDguMTE3MS0yOS40NSAwLjEwNDA2LTguMTE3MS0xLjY2NS0xNC44ODEtNC45OTUxLTIwLjUwMXptLTEzLjExMiAyOC44MjZjLTEuNDU2OSA2Ljg2ODMtNC4wNTg1IDExLjk2Ny03LjkwODkgMTUuNDAyLTMuMDE3OSAyLjcwNTctNS44Mjc2IDMuODUwNC04LjQyOTMgMy4zMzAxLTIuNDk3Ni0wLjUyMDMzLTQuNTc4OS0yLjcwNTctNi4xMzk4LTYuNzY0Mi0xLjI0ODgtMy4yMjYtMS44NzMyLTYuNDUyLTEuODczMi05LjQ2OTkgMC0yLjYwMTYgMC4yMDgxMy01LjIwMzMgMC43Mjg0Ni03LjU5NjcgMC45MzY1OS00LjI2NjcgMi43MDU3LTguNDI5MyA1LjUxNTQtMTIuMzg0IDMuNDM0MS01LjA5OTIgNy4wNzY0LTcuMTgwNSAxMC44MjMtNi40NTIgMi40OTc2IDAuNTIwMzMgNC41Nzg5IDIuNzA1NyA2LjEzOTggNi43NjQyIDEuMjQ4OCAzLjIyNiAxLjg3MzIgNi40NTIgMS44NzMyIDkuNDY5OSAwIDIuNzA1Ny0wLjIwODEzIDUuMzA3My0wLjcyODQ2IDcuNzAwOHptLTUyLjAzMy0yOC44MjZjLTMuNzQ2My02LjU1NjEtOS4zNjU5LTEwLjUxMS0xNi42NS0xMi4wNzItMS45NzcyLTAuNDE2MjYtMy44NTA0LTAuNjI0MzktNS42MTk1LTAuNjI0MzktOS45OTAyIDAtMTguMTA3IDUuMjAzMy0yNC40NTUgMTUuNjEtNS40MTE0IDguODQ1NS04LjExNzEgMTguNjI4LTguMTE3MSAyOS4zNDYgMCA4LjAxMyAxLjY2NSAxNC44ODEgNC45OTUxIDIwLjYwNSAzLjc0NjMgNi41NTYxIDkuMjYxOCAxMC41MTEgMTYuNjUgMTIuMDcyIDEuOTc3MiAwLjQxNjI2IDMuODUwNCAwLjYyNDM5IDUuNjE5NSAwLjYyNDM5IDEwLjA5NCAwIDE4LjIxMS01LjIwMzMgMjQuNDU1LTE1LjYxIDUuNDExNC04Ljk0OTYgOC4xMTcxLTE4LjczMiA4LjExNzEtMjkuNDUgMC04LjExNzEtMS42NjUtMTQuODgxLTQuOTk1MS0yMC41MDF6bS0xMy4yMTYgMjguODI2Yy0xLjQ1NjkgNi44NjgzLTQuMDU4NSAxMS45NjctNy45MDg5IDE1LjQwMi0zLjAxNzkgMi43MDU3LTUuODI3NiAzLjg1MDQtOC40MjkzIDMuMzMwMS0yLjQ5NzYtMC41MjAzMy00LjU3ODktMi43MDU3LTYuMTM5OC02Ljc2NDItMS4yNDg4LTMuMjI2LTEuODczMi02LjQ1Mi0xLjg3MzItOS40Njk5IDAtMi42MDE2IDAuMjA4MTMtNS4yMDMzIDAuNzI4NDYtNy41OTY3IDAuOTM2NTgtNC4yNjY3IDIuNzA1Ny04LjQyOTMgNS41MTU0LTEyLjM4NCAzLjQzNDEtNS4wOTkyIDcuMDc2NC03LjE4MDUgMTAuODIzLTYuNDUyIDIuNDk3NiAwLjUyMDMzIDQuNTc4OSAyLjcwNTcgNi4xMzk4IDYuNzY0MiAxLjI0ODggMy4yMjYgMS44NzMyIDYuNDUyIDEuODczMiA5LjQ2OTkgMC4xMDQwNiAyLjcwNTctMC4yMDgxMyA1LjMwNzMtMC43Mjg0NiA3LjcwMDh6IiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "WooCommerce Trigger", - "typeVersion": 1 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - }, - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "image": [] - } - ], - "image": [] - } -} diff --git a/cypress/fixtures/Execution-pinned-data-check.json b/cypress/fixtures/Execution-pinned-data-check.json deleted file mode 100644 index 20041af1174..00000000000 --- a/cypress/fixtures/Execution-pinned-data-check.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "name": "PAY-1707", - "nodes": [ - { - "parameters": { - "options": {} - }, - "id": "eaa428a8-eb9d-478a-b997-aed6ed298507", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 920, - 380 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "6b285c91-e7ea-4943-8ba3-59ce01a35d20", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 920, - 540 - ] - }, - { - "parameters": { - "jsCode": "return Array.from({length: 5}, _ => ({}))" - }, - "id": "70e682aa-dfef-4db7-a158-971ec7976d49", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 700, - 380 - ] - }, - { - "parameters": { - "jsCode": "return Array.from({length: 5}, _ => ({}))" - }, - "id": "d5ee979e-9f53-4e62-8eb2-cdb92be8ea6e", - "name": "Code1", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 700, - 540 - ] - }, - { - "parameters": { - "path": "dd660366-ca4a-4736-8b1f-454560e87bfb", - "options": {} - }, - "id": "20c33c8a-ab2f-4dd4-990f-6390feeb840c", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 2, - "position": [ - 480, - 440 - ], - "webhookId": "dd660366-ca4a-4736-8b1f-454560e87bfb" - } - ], - "pinData": { - "Code1": [ - { - "json": {} - }, - { - "json": {} - } - ] - }, - "connections": { - "Code1": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webhook": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - }, - { - "node": "Code1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": true, - "settings": { - "executionOrder": "v1" - }, - "versionId": "01e6693e-54f3-432d-9b1f-922ef92b4ab6", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "id": "hU0gp19G29ehWktc", - "tags": [] -} \ No newline at end of file diff --git a/cypress/fixtures/Floating_Nodes.json b/cypress/fixtures/Floating_Nodes.json deleted file mode 100644 index 7b2a99832d0..00000000000 --- a/cypress/fixtures/Floating_Nodes.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "name": "Floating Nodes", - "nodes": [ - { - "parameters": {}, - "id": "d0eda550-2526-42a1-aa19-dee411c8acf9", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 700, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "30412165-1229-4b21-9890-05bfbd9952ab", - "name": "Node 1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 920, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "201cc8fc-3124-47a3-bc08-b3917c1ddcd9", - "name": "Node 2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1100, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "a29802bb-a284-495d-9917-6c6e42fef01e", - "name": "Node 3", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1280, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "a95a72b3-8b39-44e2-a05b-d8d677741c80", - "name": "Node 4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1440, - 560 - ] - }, - { - "parameters": {}, - "id": "4674f10d-6144-4a17-bbbb-350c3974438e", - "name": "Chain", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1, - "position": [ - 1580, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "58e12ea5-bd3e-4abf-abec-fcfb5c0a7955", - "name": "Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1600, - 740 - ] - }, - { - "parameters": {}, - "type": "n8n-nodes-base.merge", - "typeVersion": 3.1, - "position": [ - 440, - -140 - ], - "id": "a00959d3-8d4b-40af-b4f2-35ca3d73fd84", - "name": "Merge" - }, - { - "parameters": { - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - -20, - -120 - ], - "id": "a5cbc221-ccfd-4034-a648-6a192834af81", - "name": "Edit Fields0" - }, - { - "parameters": { - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 0, - 100 - ], - "id": "d3b4c17a-bee8-418b-a721-5debafd1ce11", - "name": "Edit Fields1" - }, - { - "parameters": {}, - "type": "n8n-nodes-base.merge", - "typeVersion": 3.1, - "position": [ - 440, - 100 - ], - "id": "b23a2a43-ffac-41a5-a265-054e21a57d70", - "name": "Merge1" - } - ], - "pinData": {}, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Node 1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Node 1": { - "main": [ - [ - { - "node": "Node 2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Node 3": { - "main": [ - [ - { - "node": "Node 4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Node 2": { - "main": [ - [ - { - "node": "Node 3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Chain": { - "main": [ - [] - ] - }, - "Model": { - "ai_languageModel": [ - [ - { - "node": "Chain", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Node 4": { - "main": [ - [ - { - "node": "Chain", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields0": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - }, - { - "node": "Merge1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - }, - { - "node": "Merge1", - "type": "main", - "index": 1 - } - ] - ] - } - - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "2730d156-a98a-4ac8-b481-5c16361fdba2", - "id": "6bzXMGxHuxeEaqsA", - "meta": { - "instanceId": "1838be0fa0389fbaf5e2e4aaedab4ddc79abc4175b433401abb22a281001b853" - }, - "tags": [] -} diff --git a/cypress/fixtures/Lots_of_nodes.json b/cypress/fixtures/Lots_of_nodes.json deleted file mode 100644 index 7a7a9fb7e7d..00000000000 --- a/cypress/fixtures/Lots_of_nodes.json +++ /dev/null @@ -1,1051 +0,0 @@ -{ - "name": "Lots of nodes", - "nodes": [ - { - "parameters": {}, - "id": "369fe424-dd3b-4399-9de3-50bd4ce1f75b", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 860, - 740 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "dce967a7-8c5e-43cc-ba2b-e0fb0c9cf14c", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1080, - 740 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "df7a719e-b25a-43e3-b941-7091a7d9a1a8", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1300, - 740 - ] - }, - { - "parameters": {}, - "id": "32968b79-6a8b-43ed-b884-eb906b597661", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1520, - 740 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "e9a72745-6dbb-4be1-b286-aaa679b95e36", - "name": "Code1", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1820, - 80 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "f831d21b-c3a9-4bd8-9fc3-6daef12bd43f", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2040, - 80 - ] - }, - { - "parameters": {}, - "id": "6e6b2a4f-9e61-4245-8502-ca01e851fcbe", - "name": "IF1", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 2260, - 80 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "535b9786-ead9-44f9-bff2-ef2e019a4cf9", - "name": "Code3", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 2560, - -260 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "6a181d75-f2f2-4ad1-be3c-81ebe077ccc8", - "name": "Edit Fields3", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2780, - -260 - ] - }, - { - "parameters": {}, - "id": "4b45828e-4e2b-4046-b9ae-24b373a81863", - "name": "IF7", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3000, - -260 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "059534cb-820c-4fb7-933c-eeed2ae74f1c", - "name": "Code7", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - -400 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "4f5c0d94-b69d-4ad3-aa8f-f1dd5824ec4a", - "name": "Edit Fields7", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - -400 - ] - }, - { - "parameters": {}, - "id": "cd74f840-7b0f-425d-8ecd-e247a7d8abf5", - "name": "IF8", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - -400 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "3c97fd14-9c23-45e2-a1ac-934d743e9a01", - "name": "Code8", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - -80 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "9e7bd7e9-5142-4751-b132-735d27007d82", - "name": "Edit Fields8", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - -80 - ] - }, - { - "parameters": {}, - "id": "8d3968b6-16d4-4e03-9026-eeaf70b17805", - "name": "IF9", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - -80 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "141edef3-ea0f-4e90-9b6a-09f5d5551195", - "name": "Code4", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 2560, - 440 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "b5b93cd7-9448-4290-91b7-c3c8429925fd", - "name": "Edit Fields4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2780, - 440 - ] - }, - { - "parameters": {}, - "id": "79d2c11c-0378-4ff5-b166-ae1bf773f53a", - "name": "IF14", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3000, - 440 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "8483e962-24e7-4495-9c8e-481481ebe897", - "name": "Code13", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 300 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "74dfb8f9-6d14-493e-97d5-729e1f44856b", - "name": "Edit Fields13", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 300 - ] - }, - { - "parameters": {}, - "id": "0c2e8e54-958d-4932-91b5-b23979460c97", - "name": "IF15", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 300 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "bfed29c6-c453-4850-8acf-7aa11b1d0d8e", - "name": "Code14", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 620 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "d8415057-c597-40a9-95f6-bafbe3fafac0", - "name": "Edit Fields14", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 620 - ] - }, - { - "parameters": {}, - "id": "51ed9040-bb6c-4f77-9740-74b54ac56a00", - "name": "IF16", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 620 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "5864e701-eb16-4412-ae8b-be1f2a1f16a5", - "name": "Code2", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1820, - 1480 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "4b7de291-f1c7-4ae8-a545-81aaa2ebd1fb", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2040, - 1480 - ] - }, - { - "parameters": {}, - "id": "328aa16f-82ed-465e-b548-9436f21eb519", - "name": "IF2", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 2260, - 1480 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "90aaf0b0-57b6-4a08-b000-abb2956ba640", - "name": "Code5", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 2560, - 1140 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "7d327c87-da3b-4f4b-9f9a-51c9c622990d", - "name": "Edit Fields5", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2780, - 1140 - ] - }, - { - "parameters": {}, - "id": "fa2a3b1b-53de-454e-a16d-e2bf62cb05ec", - "name": "IF21", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3000, - 1140 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "8efaa5a3-982e-41b4-af6e-28e35c64093d", - "name": "Code19", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 1000 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "987e27fd-778a-4562-85a9-369b1ec232de", - "name": "Edit Fields19", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 1000 - ] - }, - { - "parameters": {}, - "id": "b3f4e9b3-9995-4019-9b0f-dadd64e036b4", - "name": "IF22", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 1000 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "681c1b30-063d-4c1e-b550-942a9dd3eb9a", - "name": "Code20", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 1320 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "024770b6-7bf4-44f6-9675-d4f7dc73d6ac", - "name": "Edit Fields20", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 1320 - ] - }, - { - "parameters": {}, - "id": "24699015-3ccf-4ffa-b52f-8ba4c4853963", - "name": "IF23", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 1320 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "f4b2d116-2fda-4a3a-9509-0e8c64e7796e", - "name": "Code6", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 2560, - 1840 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "535e5b12-6743-4c01-9fc5-e27b10421423", - "name": "Edit Fields6", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 2780, - 1840 - ] - }, - { - "parameters": {}, - "id": "3dcbecdf-686b-445f-9c77-2902d0dc1f56", - "name": "IF28", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3000, - 1840 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "7223c6ef-664b-426a-8d08-eca1b34e6b23", - "name": "Code25", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 1700 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "496414a6-384a-4f94-97ec-d2e5ad646f82", - "name": "Edit Fields25", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 1700 - ] - }, - { - "parameters": {}, - "id": "82f9562d-e4a8-49f3-924d-983effb4b6c6", - "name": "IF29", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 1700 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "c91d4bc5-3c60-4c22-aa31-44e84e0816ec", - "name": "Code26", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 3260, - 2020 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "49b61f23-bf3f-474d-8bba-a3b7de6f6441", - "name": "Edit Fields26", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 3480, - 2020 - ] - }, - { - "parameters": {}, - "id": "1cad6ae3-1064-4f30-a9ec-502891868332", - "name": "IF30", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 3700, - 2020 - ] - } - ], - "pinData": {}, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "Code1", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code1": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "IF1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code3": { - "main": [ - [ - { - "node": "Edit Fields3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields3": { - "main": [ - [ - { - "node": "IF7", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF1": { - "main": [ - [ - { - "node": "Code3", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code4", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF7": { - "main": [ - [ - { - "node": "Code7", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code7": { - "main": [ - [ - { - "node": "Edit Fields7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields7": { - "main": [ - [ - { - "node": "IF8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code8": { - "main": [ - [ - { - "node": "Edit Fields8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields8": { - "main": [ - [ - { - "node": "IF9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code4": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields4": { - "main": [ - [ - { - "node": "IF14", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF14": { - "main": [ - [ - { - "node": "Code13", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code13": { - "main": [ - [ - { - "node": "Edit Fields13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields13": { - "main": [ - [ - { - "node": "IF15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code14": { - "main": [ - [ - { - "node": "Edit Fields14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields14": { - "main": [ - [ - { - "node": "IF16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code2": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields2": { - "main": [ - [ - { - "node": "IF2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF2": { - "main": [ - [ - { - "node": "Code5", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code5": { - "main": [ - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields5": { - "main": [ - [ - { - "node": "IF21", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF21": { - "main": [ - [ - { - "node": "Code19", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code19": { - "main": [ - [ - { - "node": "Edit Fields19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields19": { - "main": [ - [ - { - "node": "IF22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code20": { - "main": [ - [ - { - "node": "Edit Fields20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields20": { - "main": [ - [ - { - "node": "IF23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code6": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields6": { - "main": [ - [ - { - "node": "IF28", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF28": { - "main": [ - [ - { - "node": "Code25", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Code26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code25": { - "main": [ - [ - { - "node": "Edit Fields25", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields25": { - "main": [ - [ - { - "node": "IF29", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code26": { - "main": [ - [ - { - "node": "Edit Fields26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields26": { - "main": [ - [ - { - "node": "IF30", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "d38289e0-49d3-4e1d-8e4b-46e4eb85a2c9", - "id": "iKlx4AGIjCNJSu9M", - "meta": { - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "tags": [] -} diff --git a/cypress/fixtures/Manual_wait_set.json b/cypress/fixtures/Manual_wait_set.json deleted file mode 100644 index b05a39ee2be..00000000000 --- a/cypress/fixtures/Manual_wait_set.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "Manual wait set", - "nodes": [ - { - "parameters": { - "amount": 2, - "unit": "seconds" - }, - "id": "ed6e0168-1145-43d0-9082-970b8a8f3cb5", - "name": "Wait", - "type": "n8n-nodes-base.wait", - "typeVersion": 1, - "position": [ - 900, - 580 - ], - "webhookId": "0f6f94a4-c28d-46f9-8468-6ab315a9fec9" - }, - { - "parameters": {}, - "id": "59467b99-4e7c-4f19-8fc2-4329788f0951", - "name": "Manual", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 680, - 580 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "6ddf089f-4d01-4691-928f-6de168e3b089", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1120, - 580 - ] - } - ], - "pinData": {}, - "connections": { - "Wait": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Manual": { - "main": [ - [ - { - "node": "Wait", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "saveExecutionProgress": true, - "saveManualExecutions": true, - "callerPolicy": "workflowsFromSameOwner" - }, - "versionId": "f11ff1bf-4273-46cb-bbec-65c7b2fa13cb", - "id": "1037", - "meta": { - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "tags": [] -} diff --git a/cypress/fixtures/Multiple_trigger_node_rerun.json b/cypress/fixtures/Multiple_trigger_node_rerun.json deleted file mode 100644 index 3ed6b3a2008..00000000000 --- a/cypress/fixtures/Multiple_trigger_node_rerun.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "name": "Multiple trigger node rerun", - "nodes": [ - { - "parameters": {}, - "id": "06ce84a5-0ed0-45bb-ac2e-aa8c35cd67c7", - "name": "Start Manually", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -400, - -140 - ] - }, - { - "parameters": { - "rule": { - "interval": [ - { - "field": "cronExpression", - "expression": "* * * * *" - } - ] - } - }, - "id": "b23a2576-2940-4faf-8a8f-79fdb128087a", - "name": "Start on Schedule", - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.1, - "position": [ - -400, - 60 - ] - }, - { - "parameters": { - "jsCode": "return {\n \"message\": $input.first().json.message + ' from code node'\n}" - }, - "id": "1742daae-ad58-47cf-b777-3c95670af1ea", - "name": "Process The Data", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 60, - -60 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "e8ce419c-b8c8-415c-81e1-7e260884f2a7", - "name": "message", - "value": "Hello", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - -160, - -60 - ], - "id": "e56681c5-2111-4065-bb28-2358f86058c6", - "name": "Edit Fields" - } - ], - "pinData": {}, - "connections": { - "Start Manually": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start on Schedule": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "Process The Data", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "411bb599-f9b1-4db0-b289-6603403ebd82", - "meta": { - "instanceId": "60c7f4290f8c974ffff64c8edee1558609a63570231cabdd7fb7ab83d151d879" - }, - "id": "Q5svYbZJ8WEAedTH", - "tags": [] -} \ No newline at end of file diff --git a/cypress/fixtures/NDV-debug-generate-data.json b/cypress/fixtures/NDV-debug-generate-data.json deleted file mode 100644 index 6899cd4d811..00000000000 --- a/cypress/fixtures/NDV-debug-generate-data.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "5b397bc122efafc165b2a6e67d5e8d75b8138f0d24d6352fac713e4845b002a6" - }, - "nodes": [ - { - "parameters": {}, - "id": "df260de7-6f28-4d07-b7b5-29588e27335b", - "name": "When clicking \"Execute workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [780, 500] - }, - { - "parameters": { - "category": "randomData", - "randomDataSeed": "0", - "randomDataCount": 100 - }, - "id": "9e9a0708-86dc-474f-a60e-4315e757c08e", - "name": "DebugHelper", - "type": "n8n-nodes-base.debugHelper", - "typeVersion": 1, - "position": [1000, 500] - } - ], - "connections": { - "When clicking \"Execute workflow\"": { - "main": [ - [ - { - "node": "DebugHelper", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/NDV-test-select-input.json b/cypress/fixtures/NDV-test-select-input.json deleted file mode 100644 index f64371e7fb2..00000000000 --- a/cypress/fixtures/NDV-test-select-input.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "ff739753-9d6e-46a7-94d3-25bd03dd4973", - "nodes": [ - { - "parameters": {}, - "id": "c30d1114-d7f7-44dc-b55a-15312ef2d76d", - "name": "On clicking 'execute'", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [600, 580] - }, - { - "parameters": { - "options": {} - }, - "id": "5bf514bd-65ae-4a1c-8b69-a01bfeaad411", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [820, 580] - }, - { - "parameters": { - "options": {} - }, - "id": "02bf49e9-44b2-4f4e-8cb2-8c02399208af", - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [1040, 580] - } - ], - "pinData": { - "On clicking 'execute'": [ - { - "json": { - "start": true - } - } - ] - }, - "connections": { - "On clicking 'execute'": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "hash": "abd7b28aa2605c96ba24474d72cbe610", - "id": 3, - "meta": { - "instanceId": "08a83d394781701f5c18052cde68e8d92c88b26f5cc8809eb10ad545f14015cb" - }, - "tags": [] -} diff --git a/cypress/fixtures/NDV-test-switch_reorder.json b/cypress/fixtures/NDV-test-switch_reorder.json deleted file mode 100644 index 4b6b803d739..00000000000 --- a/cypress/fixtures/NDV-test-switch_reorder.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "name": "switch reorder", - "nodes": [ - { - "parameters": {}, - "id": "b3f0815d-b733-413f-ab3f-74e48277bd3a", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -20, - 620 - ] - }, - { - "parameters": {}, - "id": "fbc5b12a-6165-4cab-80a1-9fd6e4fbe39f", - "name": "One", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 620, - 720 - ] - }, - { - "parameters": { - "duplicateItem": true, - "duplicateCount": 1, - "assignments": { - "assignments": [ - { - "id": "ec6c1d1d-a17a-4537-8135-d474df7fded1", - "name": "entry", - "value": "first", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "8c5a72a5-17ef-40e0-8477-764f24770174", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 160, - 740 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d8ec7c46-d02f-4bf5-931e-5ec2fb8bea22", - "name": "entry", - "value": "zero", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "bc3fb81d-2ddf-4b28-a93d-762a48e8fd6b", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 160, - 500 - ] - }, - { - "parameters": { - "rules": { - "values": [ - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "leftValue": "={{ $json.entry }}", - "rightValue": "first", - "operator": { - "type": "string", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "1" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "ffa570ef-fc16-49ec-87be-56159f14a44b", - "leftValue": "={{ $json.entry }}", - "rightValue": "=second", - "operator": { - "type": "string", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "2" - } - ] - }, - "options": {} - }, - "id": "296ba553-c6c5-4c84-89fb-9056b24bab30", - "name": "Switch", - "type": "n8n-nodes-base.switch", - "typeVersion": 3, - "position": [ - 360, - 740 - ] - }, - { - "parameters": {}, - "id": "da787dd6-8e85-4dd5-8326-198705b4ae4b", - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 2.1, - "position": [ - 880, - 520 - ] - } - ], - "pinData": { - "Edit Fields": [ - { - "json": { - "entry": "first" - } - }, - { - "json": { - "entry": "second" - } - } - ] - }, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - }, - "One": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Switch": { - "main": [ - [ - { - "node": "One", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "ce5db792-5e38-4d54-895b-88d85f2545d0", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "be251a83c052a9862eeac953816fbb1464f89dfbf79d7ac490a8e336a8cc8bfd" - }, - "id": "uMpL0bN7t1NYZDJS", - "tags": [] -} diff --git a/cypress/fixtures/Node_IO_filter.json b/cypress/fixtures/Node_IO_filter.json deleted file mode 100644 index f11024fd2f5..00000000000 --- a/cypress/fixtures/Node_IO_filter.json +++ /dev/null @@ -1,653 +0,0 @@ -{ - "name": "Node IO filter", - "nodes": [ - { - "parameters": {}, - "id": "46770685-44d1-4aad-9107-1d790cf26b50", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 840, - 180 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "480e3832-2ce4-4118-9f7b-a8aed6017174", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1080, - 180 - ] - }, - { - "parameters": { - "conditions": { - "string": [ - { - "value1": "={{ $json.profile.name }}", - "operation": "contains", - "value2": "an" - } - ] - } - }, - "id": "4773d460-6ed9-49e1-a688-7e480f0fbacf", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1300, - 180 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "d17dffe6-e29c-4c1a-8b4c-9e374dcd70ea", - "name": "True", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1560, - 60 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "893d6e79-feb4-4752-a6f8-e2e5f5163787", - "name": "False", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1560, - 240 - ] - } - ], - "pinData": { - "When clicking ‘Execute workflow’": [ - { - "json": { - "id": "654cfa05fa51480dcb543b1a", - "email": "reese_hahn@kidgrease.coach", - "username": "reese94", - "profile": { - "name": "Reese Hahn", - "company": "Kidgrease", - "dob": "1994-06-18", - "address": "3 Richmond Street, Norfolk, Delaware", - "location": { - "lat": 22.507436, - "long": -50.812775 - }, - "about": "Cupidatat voluptate reprehenderit commodo mollit tempor sint id. Id exercitation id eiusmod dolore non non anim voluptate anim eu consectetur." - }, - "apiKey": "a18592bf-1147-4b61-a70f-2ab90b60bb6e", - "roles": [ - "guest" - ], - "createdAt": "2010-10-04T09:57:59.240Z", - "updatedAt": "2010-10-05T09:57:59.240Z" - } - }, - { - "json": { - "id": "654cfa055bea471bc4853158", - "email": "jeanne_boyd@hatology.gratis", - "username": "jeanne91", - "profile": { - "name": "Jeanne Boyd", - "company": "Hatology", - "dob": "1991-02-21", - "address": "81 Kingsway Place, Blairstown, Vermont", - "location": { - "lat": -57.665234, - "long": -41.301893 - }, - "about": "Proident pariatur non consequat cupidatat Lorem nisi est consequat dolor id eiusmod id. Amet culpa ex Lorem nostrud labore laboris culpa mollit dolor culpa ut." - }, - "apiKey": "8a6056a6-0197-4920-858d-cb26f8c8a1e2", - "roles": [ - "owner", - "admin" - ], - "createdAt": "2011-11-06T09:05:41.945Z", - "updatedAt": "2011-11-07T09:05:41.945Z" - } - }, - { - "json": { - "id": "654cfa05b012921c060dc5a5", - "email": "roslyn_underwood@portico.melbourne", - "username": "roslyn88", - "profile": { - "name": "Roslyn Underwood", - "company": "Portico", - "dob": "1988-04-30", - "address": "24 Schenck Street, Drytown, New Jersey", - "location": { - "lat": 11.797141, - "long": 10.751804 - }, - "about": "Duis excepteur minim consequat exercitation. Laboris occaecat cupidatat aliqua consequat occaecat." - }, - "apiKey": "72d629f3-d613-4fd0-bbfe-3f67c8ad7af2", - "roles": [ - "member", - "owner" - ], - "createdAt": "2012-11-17T22:09:10.911Z", - "updatedAt": "2012-11-18T22:09:10.911Z" - } - }, - { - "json": { - "id": "654cfa05df7b35968507efe6", - "email": "combs_hardy@acrodance.domains", - "username": "combs91", - "profile": { - "name": "Combs Hardy", - "company": "Acrodance", - "dob": "1991-04-30", - "address": "58 Pineapple Street, Falconaire, New Mexico", - "location": { - "lat": -62.922443, - "long": -159.493799 - }, - "about": "Magna qui minim velit magna est eiusmod aliquip elit aliquip excepteur. Laborum labore do ut et ut in incididunt do elit nostrud." - }, - "apiKey": "d9807b9e-aee9-486d-9826-4e6c166bfbe4", - "roles": [ - "owner", - "member" - ], - "createdAt": "2014-04-13T13:02:09.319Z", - "updatedAt": "2014-04-14T13:02:09.319Z" - } - }, - { - "json": { - "id": "654cfa05f2d4a0508a7c59c4", - "email": "terrell_peters@vantage.international", - "username": "terrell94", - "profile": { - "name": "Terrell Peters", - "company": "Vantage", - "dob": "1994-01-31", - "address": "10 Lafayette Walk, Vincent, Virginia", - "location": { - "lat": -62.267913, - "long": 29.682121 - }, - "about": "Eiusmod fugiat nulla ea tempor incididunt nulla nulla consectetur officia incididunt proident sint. Sunt duis non excepteur non." - }, - "apiKey": "20b96df1-d882-4dea-a505-84d7ff296a6e", - "roles": [ - "admin", - "guest" - ], - "createdAt": "2010-12-09T08:24:56.517Z", - "updatedAt": "2010-12-10T08:24:56.517Z" - } - }, - { - "json": { - "id": "654cfa0599fbabf3a05c7b14", - "email": "shari_winters@powernet.supply", - "username": "shari93", - "profile": { - "name": "Shari Winters", - "company": "Powernet", - "dob": "1993-03-10", - "address": "89 Aviation Road, Leyner, Indiana", - "location": { - "lat": 40.404704, - "long": -141.216235 - }, - "about": "Occaecat sit laboris elit laboris do anim culpa dolore exercitation enim. Non veniam sint exercitation irure." - }, - "apiKey": "2b869ce9-3431-4edb-944d-9d9336b1eb4a", - "roles": [ - "guest", - "admin" - ], - "createdAt": "2014-10-15T15:56:55.873Z", - "updatedAt": "2014-10-16T15:56:55.873Z" - } - }, - { - "json": { - "id": "654cfa050df18b4798ec95be", - "email": "rena_beasley@bitrex.ma", - "username": "rena90", - "profile": { - "name": "Rena Beasley", - "company": "Bitrex", - "dob": "1990-01-09", - "address": "78 Forbell Street, Homeland, Maine", - "location": { - "lat": 46.047548, - "long": 4.128049 - }, - "about": "Lorem aliqua veniam duis ut cillum ad sunt mollit incididunt elit. Ipsum incididunt et magna incididunt quis duis amet duis occaecat laborum nulla et commodo nisi." - }, - "apiKey": "17e350f8-1020-4344-bbd7-ceb62cd44edb", - "roles": [ - "member", - "owner" - ], - "createdAt": "2010-04-22T13:35:24.838Z", - "updatedAt": "2010-04-23T13:35:24.838Z" - } - }, - { - "json": { - "id": "654cfa0595243d2b7b1ea22a", - "email": "sally_gentry@eventex.maif", - "username": "sally93", - "profile": { - "name": "Sally Gentry", - "company": "Eventex", - "dob": "1993-04-03", - "address": "54 Plaza Street, Greenbackville, North Carolina", - "location": { - "lat": -20.529121, - "long": 73.533118 - }, - "about": "Laborum sit exercitation sint laborum. Fugiat sit ipsum ullamco sint do dolore in sunt incididunt adipisicing magna ullamco aute." - }, - "apiKey": "746b6ab3-c63f-44df-bb99-9de48f8e43c4", - "roles": [ - "owner", - "guest" - ], - "createdAt": "2011-09-18T13:18:49.655Z", - "updatedAt": "2011-09-19T13:18:49.655Z" - } - }, - { - "json": { - "id": "654cfa05cdea66c87bb01439", - "email": "battle_duran@jasper.property", - "username": "battle88", - "profile": { - "name": "Battle Duran", - "company": "Jasper", - "dob": "1988-11-04", - "address": "34 Amherst Street, Corriganville, Nevada", - "location": { - "lat": 74.391489, - "long": -98.421464 - }, - "about": "Nostrud occaecat laborum aliquip sint est minim id aliquip adipisicing dolor. Aute velit amet officia anim sint anim aliquip." - }, - "apiKey": "b22a3ddd-d540-4df0-9ce5-e837bc6a6a10", - "roles": [ - "member" - ], - "createdAt": "2012-08-31T19:14:37.463Z", - "updatedAt": "2012-09-01T19:14:37.463Z" - } - }, - { - "json": { - "id": "654cfa05e9c13e25d41d4135", - "email": "petty_moore@neurocell.shriram", - "username": "petty91", - "profile": { - "name": "Petty Moore", - "company": "Neurocell", - "dob": "1991-03-10", - "address": "78 Interborough Parkway, Grill, Texas", - "location": { - "lat": -79.817761, - "long": -36.728201 - }, - "about": "Dolor occaecat anim est Lorem culpa fugiat id aliqua sint. Sit nisi do exercitation do voluptate exercitation in." - }, - "apiKey": "4b341cfb-a83c-4f2a-9f4d-11cd747b8783", - "roles": [ - "admin" - ], - "createdAt": "2012-01-02T21:28:22.431Z", - "updatedAt": "2012-01-03T21:28:22.431Z" - } - }, - { - "json": { - "id": "654cfa052890c7b4d510d3d4", - "email": "matilda_kelley@senmei.in", - "username": "matilda93", - "profile": { - "name": "Matilda Kelley", - "company": "Senmei", - "dob": "1993-02-04", - "address": "29 Stuart Street, Henrietta, New York", - "location": { - "lat": 40.788206, - "long": -135.821558 - }, - "about": "Dolor veniam ex ullamco deserunt reprehenderit nostrud sunt culpa cupidatat qui labore deserunt. In ad anim laboris amet labore duis consequat nostrud eiusmod." - }, - "apiKey": "dcf40383-a00a-43ef-8bd0-4af7e70413bd", - "roles": [ - "owner", - "guest" - ], - "createdAt": "2014-03-28T22:07:39.636Z", - "updatedAt": "2014-03-29T22:07:39.636Z" - } - }, - { - "json": { - "id": "654cfa05af129db469473bf1", - "email": "savannah_hardin@exoblue.kn", - "username": "savannah89", - "profile": { - "name": "Savannah Hardin", - "company": "Exoblue", - "dob": "1989-07-01", - "address": "44 Navy Walk, Fresno, Kentucky", - "location": { - "lat": 75.679679, - "long": -58.534947 - }, - "about": "Id eiusmod eu elit consequat quis anim veniam officia anim ipsum. Sunt ex sit ipsum id est eu." - }, - "apiKey": "98d6abb7-e4aa-4b3b-8958-ff3c4d672f1d", - "roles": [ - "guest", - "member" - ], - "createdAt": "2011-04-15T00:55:02.325Z", - "updatedAt": "2011-04-16T00:55:02.325Z" - } - }, - { - "json": { - "id": "654cfa055dfa731b01573a67", - "email": "abbott_gallegos@katakana.dad", - "username": "abbott91", - "profile": { - "name": "Abbott Gallegos", - "company": "Katakana", - "dob": "1991-03-04", - "address": "85 Indiana Place, Forestburg, Michigan", - "location": { - "lat": -5.417414, - "long": -4.557904 - }, - "about": "Adipisicing amet ullamco aliquip velit nostrud qui non pariatur Lorem. Culpa ut deserunt esse quis magna." - }, - "apiKey": "3cf92c24-6193-4cc9-85fc-78e4ad9d6e13", - "roles": [ - "guest", - "owner" - ], - "createdAt": "2011-06-01T16:38:39.316Z", - "updatedAt": "2011-06-02T16:38:39.316Z" - } - }, - { - "json": { - "id": "654cfa05386de2e6d75c1694", - "email": "short_brennan@hyplex.tc", - "username": "short92", - "profile": { - "name": "Short Brennan", - "company": "Hyplex", - "dob": "1992-04-19", - "address": "21 Irving Place, Hinsdale, Northern Mariana Islands", - "location": { - "lat": 57.340225, - "long": -7.021582 - }, - "about": "Mollit dolor dolore deserunt anim minim adipisicing eiusmod velit tempor id veniam cupidatat. Magna veniam consequat incididunt ut quis culpa excepteur tempor eiusmod consectetur excepteur." - }, - "apiKey": "07bf533d-4a31-4e78-9d6e-d46160479069", - "roles": [ - "admin", - "member" - ], - "createdAt": "2014-03-10T19:25:02.217Z", - "updatedAt": "2014-03-11T19:25:02.217Z" - } - }, - { - "json": { - "id": "654cfa05fd2a878d43bb45cd", - "email": "bowers_cooke@iplax.ci", - "username": "bowers92", - "profile": { - "name": "Bowers Cooke", - "company": "Iplax", - "dob": "1992-07-05", - "address": "83 Greenpoint Avenue, Marion, Georgia", - "location": { - "lat": 64.261022, - "long": -58.493714 - }, - "about": "Deserunt ipsum fugiat tempor sunt eu ea laboris ad magna ex laborum laboris. Ullamco nostrud qui exercitation aute consectetur irure." - }, - "apiKey": "a3ecc58b-f292-4de1-b6e5-014345a76a7a", - "roles": [ - "member", - "owner" - ], - "createdAt": "2010-06-20T16:34:56.467Z", - "updatedAt": "2010-06-21T16:34:56.467Z" - } - }, - { - "json": { - "id": "654cfa05a6de547367990f9c", - "email": "tara_rutledge@escenta.lc", - "username": "tara90", - "profile": { - "name": "Tara Rutledge", - "company": "Escenta", - "dob": "1990-08-11", - "address": "25 Butler Place, Frierson, Missouri", - "location": { - "lat": -32.176783, - "long": 67.345415 - }, - "about": "Aute sunt laborum anim ex non pariatur nisi minim tempor adipisicing. Excepteur irure non amet eiusmod et excepteur." - }, - "apiKey": "22da9647-a7b7-4815-91bb-d5101fc90e55", - "roles": [ - "member" - ], - "createdAt": "2013-09-06T21:41:53.287Z", - "updatedAt": "2013-09-07T21:41:53.287Z" - } - }, - { - "json": { - "id": "654cfa053778601ad57f22cd", - "email": "elva_chapman@bytrex.gg", - "username": "elva90", - "profile": { - "name": "Elva Chapman", - "company": "Bytrex", - "dob": "1990-05-31", - "address": "4 Royce Place, Advance, New Hampshire", - "location": { - "lat": -28.393464, - "long": -28.622091 - }, - "about": "Est sit deserunt Lorem amet voluptate elit reprehenderit occaecat est eiusmod eu reprehenderit laborum. Pariatur magna occaecat et excepteur est excepteur consectetur ad nulla." - }, - "apiKey": "4d242fa4-ac69-42f1-8f12-ec19d9c6d632", - "roles": [ - "owner", - "admin" - ], - "createdAt": "2011-04-05T04:04:31.524Z", - "updatedAt": "2011-04-06T04:04:31.524Z" - } - }, - { - "json": { - "id": "654cfa054c6abbc57efcb100", - "email": "pitts_meyer@unisure.tui", - "username": "pitts93", - "profile": { - "name": "Pitts Meyer", - "company": "Unisure", - "dob": "1993-06-12", - "address": "47 Columbus Place, Cade, Alaska", - "location": { - "lat": 56.723675, - "long": 158.093389 - }, - "about": "Non ea pariatur excepteur nostrud elit quis qui. Dolore aute velit ipsum officia ea pariatur incididunt non elit tempor duis consequat." - }, - "apiKey": "82a88344-d289-447c-81b5-1ae10cd1994b", - "roles": [ - "guest", - "admin" - ], - "createdAt": "2014-05-15T06:38:59.269Z", - "updatedAt": "2014-05-16T06:38:59.269Z" - } - }, - { - "json": { - "id": "654cfa0527e7ce14e421d9cd", - "email": "delia_figueroa@overplex.um", - "username": "delia89", - "profile": { - "name": "Delia Figueroa", - "company": "Overplex", - "dob": "1989-04-22", - "address": "12 Nova Court, Taft, Ohio", - "location": { - "lat": -32.990583, - "long": -4.598863 - }, - "about": "Cupidatat fugiat veniam eu proident excepteur deserunt ad esse fugiat deserunt. Non velit cillum velit veniam ex minim eiusmod tempor excepteur voluptate adipisicing nostrud." - }, - "apiKey": "b3a7747b-24a0-4039-8a21-56e83441a660", - "roles": [ - "admin", - "guest" - ], - "createdAt": "2014-09-20T03:40:10.190Z", - "updatedAt": "2014-09-21T03:40:10.190Z" - } - }, - { - "json": { - "id": "654cfa05cf60000cbca6dca4", - "email": "kristina_fulton@portaline.engineer", - "username": "kristina88", - "profile": { - "name": "Kristina Fulton", - "company": "Portaline", - "dob": "1988-07-25", - "address": "50 Laurel Avenue, Greenwich, Palau", - "location": { - "lat": 44.118984, - "long": 41.518949 - }, - "about": "Id incididunt officia exercitation ipsum id cillum consectetur. Veniam enim voluptate ut proident ex." - }, - "apiKey": "c106dbf0-bfc0-461d-b1d7-1840fe8e1cbc", - "roles": [ - "admin", - "member" - ], - "createdAt": "2010-04-10T08:06:27.028Z", - "updatedAt": "2010-04-11T08:06:27.028Z" - } - }, - { - "json": { - "id": "654cfa0501fe5691d620f570", - "email": "gould_noel@gonkle.gmx", - "username": "gould91", - "profile": { - "name": "Gould Noel", - "company": "Gonkle", - "dob": "1991-10-08", - "address": "33 Crooke Avenue, Idamay, Oklahoma", - "location": { - "lat": -11.398731, - "long": 34.706948 - }, - "about": "Veniam esse tempor aute quis mollit consequat Lorem. Nostrud ea dolore laboris Lorem elit est do nisi Lorem minim reprehenderit culpa." - }, - "apiKey": "1089783d-32ae-4102-8ac5-1e7f6cebe3c1", - "roles": [ - "guest", - "admin" - ], - "createdAt": "2011-12-30T20:24:19.620Z", - "updatedAt": "2011-12-31T20:24:19.620Z" - } - } - ] - }, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "True", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "False", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "9812dda2-cc1b-4458-97d8-21ccb18c90d1", - "id": "WNq486x7DpV1MPRH", - "meta": { - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "tags": [] -} diff --git a/cypress/fixtures/Onboarding_workflow.json b/cypress/fixtures/Onboarding_workflow.json deleted file mode 100644 index 8e292b59a3a..00000000000 --- a/cypress/fixtures/Onboarding_workflow.json +++ /dev/null @@ -1,1020 +0,0 @@ -{ - "name": "DEMO: Create a new record in Google Sheets when something happens in Hubspot", - "nodes": [ - { - "parameters": { - "eventsUi": { - "eventValues": [ - {} - ] - }, - "additionalFields": {} - }, - "id": "78395fdf-2e8b-4064-a102-c1c0335e0d94", - "name": "HubSpot Trigger", - "type": "n8n-nodes-base.hubspotTrigger", - "typeVersion": 1, - "position": [ - 580, - 320 - ], - "webhookId": "25833e56-c646-4af0-8bbe-2eea8bda4c00", - "notesInFlow": true, - "notes": "On Contact Created" - }, - { - "parameters": { - "conditions": { - "string": [ - { - "value1": "={{ $json['identity-profiles'][0].identities[0].value }}", - "operation": "contains", - "value2": "@gmail" - } - ] - } - }, - "id": "3888d918-c140-47a1-8024-d50fddb3f8f0", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 820, - 320 - ], - "notesInFlow": true, - "notes": "Is Gmail Email?" - }, - { - "parameters": {}, - "id": "416a8876-f496-499c-a089-aad243daabc6", - "name": "Is Gmail, Don't Add to Sheet", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1140, - 240 - ] - }, - { - "parameters": { - "content": "## Demo: Creating Google Sheets records when something happens in HubSpot\nThis workflow runs each time a new Contact is added in HubSpot. It filters out Contacts with Gmail email addresses then pushes the remaining new Contacts to [this Google Sheet](https://docs.google.com/spreadsheets/d/1GeWRcu5cvNVA-0hpHZHtatjnFtyunbgWUgRur5uT08A/edit?usp=sharing).", - "height": 160.1450000000002, - "width": 480.31999999999596 - }, - "id": "cf69cda9-ba96-468f-990c-6c3ad5242053", - "name": "Sticky Note1", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 520, - 100 - ] - }, - { - "parameters": { - "operation": "append", - "documentId": { - "__rl": true, - "value": "1GeWRcu5cvNVA-0hpHZHtatjnFtyunbgWUgRur5uT08A", - "mode": "list", - "cachedResultName": "New HubSpot Contacts", - "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GeWRcu5cvNVA-0hpHZHtatjnFtyunbgWUgRur5uT08A/edit?usp=drivesdk" - }, - "sheetName": { - "__rl": true, - "value": "gid=0", - "mode": "list", - "cachedResultName": "New Contacts", - "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GeWRcu5cvNVA-0hpHZHtatjnFtyunbgWUgRur5uT08A/edit#gid=0" - }, - "columns": { - "mappingMode": "defineBelow", - "value": { - "Name": "={{ $json.properties.num_unique_conversion_events.versions[0]['source-type'] }}", - "Email": "={{ $json.properties.num_unique_conversion_events.versions[0]['source-label'] }}" - }, - "matchingColumns": [], - "schema": [ - { - "id": "Name", - "displayName": "Name", - "required": false, - "defaultMatch": false, - "display": true, - "type": "string", - "canBeUsedToMatch": true - }, - { - "id": "Email", - "displayName": "Email", - "required": false, - "defaultMatch": false, - "display": true, - "type": "string", - "canBeUsedToMatch": true - }, - { - "id": "Sync timestamp", - "displayName": "Sync timestamp", - "required": false, - "defaultMatch": false, - "display": true, - "type": "string", - "canBeUsedToMatch": true - } - ] - }, - "options": {} - }, - "id": "1e4084bd-b7fb-41f1-a340-1414ef134468", - "name": "Google Sheets", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 4, - "position": [ - 1140, - 440 - ], - "notesInFlow": true, - "credentials": { - "googleSheetsOAuth2Api": { - "id": "FrRoXgPJOrFwkeN4", - "name": "Replace me with your own Sheets credential" - } - }, - "notes": "Append new contact to sheet" - } - ], - "pinData": { - "HubSpot Trigger": [ - { - "json": { - "vid": 51, - "canonical-vid": 51, - "merged-vids": [], - "portal-id": 8924380, - "is-contact": true, - "properties": { - "hs_latest_source_data_2": { - "value": "sample-contact", - "versions": [ - { - "value": "sample-contact", - "source-type": "MIGRATION", - "source-id": "BackfillContactUpdatesKafka", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1639158301358, - "selected": false - } - ] - }, - "hs_latest_source_data_1": { - "value": "API", - "versions": [ - { - "value": "API", - "source-type": "MIGRATION", - "source-id": "BackfillContactUpdatesKafka", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1639158301358, - "selected": false - } - ] - }, - "hs_is_unworked": { - "value": "true", - "versions": [ - { - "value": "true", - "source-type": "CALCULATED", - "source-id": null, - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045782, - "selected": false - } - ] - }, - "firstname": { - "value": "Brian", - "versions": [ - { - "value": "Brian", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "associatedcompanyid": { - "value": "4931550080", - "versions": [ - { - "value": "4931550080", - "source-type": "CALCULATED", - "source-id": "RollupProperties", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827057264, - "selected": false - } - ] - }, - "city": { - "value": "Cambridge", - "versions": [ - { - "value": "Cambridge", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "num_unique_conversion_events": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "MIGRATION", - "source-id": "BackfillReadtimeCalculatedPropertiesJob", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1629469311146, - "selected": false - } - ] - }, - "hs_latest_source": { - "value": "OFFLINE", - "versions": [ - { - "value": "OFFLINE", - "source-type": "MIGRATION", - "source-id": "BackfillContactUpdatesKafka", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1639158301358, - "selected": false - } - ] - }, - "hs_pipeline": { - "value": "contacts-lifecycle-pipeline", - "versions": [ - { - "value": "contacts-lifecycle-pipeline", - "source-type": "MIGRATION", - "source-id": "BackfillHsPipelineForContacts", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1628846625829, - "selected": false - } - ] - }, - "hs_analytics_revenue": { - "value": "0.0", - "versions": [ - { - "value": "0.0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_social_num_broadcast_clicks": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "createdate": { - "value": "1606827045698", - "versions": [ - { - "value": "1606827045698", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045698, - "selected": false - } - ] - }, - "hs_analytics_num_visits": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_social_linkedin_clicks": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_marketable_until_renewal": { - "value": "true", - "versions": [ - { - "value": "true", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045876, - "selected": false - } - ] - }, - "hs_marketable_status": { - "value": "true", - "versions": [ - { - "value": "true", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045876, - "selected": false - } - ] - }, - "hs_analytics_source": { - "value": "OFFLINE", - "versions": [ - { - "value": "OFFLINE", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_email_domain": { - "value": "hubspot.com", - "versions": [ - { - "value": "hubspot.com", - "source-type": "MIGRATION", - "source-id": "BackfillReadtimeCalculatedPropertiesJob", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1629469311146, - "selected": false - } - ] - }, - "hs_analytics_num_page_views": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_marketable_reason_id": { - "value": "Sample Contact", - "versions": [ - { - "value": "Sample Contact", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045876, - "selected": false - } - ] - }, - "company": { - "value": "HubSpot", - "versions": [ - { - "value": "HubSpot", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "state": { - "value": "MA", - "versions": [ - { - "value": "MA", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "email": { - "value": "bh@hubspot.com", - "versions": [ - { - "value": "bh@hubspot.com", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_latest_source_timestamp": { - "value": "1606827045720", - "versions": [ - { - "value": "1606827045720", - "source-type": "MIGRATION", - "source-id": "BackfillContactUpdatesKafka", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1651750884919, - "selected": false - } - ] - }, - "website": { - "value": "http://www.HubSpot.com", - "versions": [ - { - "value": "http://www.HubSpot.com", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_marketable_reason_type": { - "value": "SAMPLE_CONTACT", - "versions": [ - { - "value": "SAMPLE_CONTACT", - "source-type": "API", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045876, - "selected": false - } - ] - }, - "jobtitle": { - "value": "CEO", - "versions": [ - { - "value": "CEO", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "lastmodifieddate": { - "value": "1651750891986", - "versions": [ - { - "value": "1651750891986", - "source-type": "CALCULATED", - "source-id": null, - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1651750891986, - "selected": false - }, - { - "value": "1639158305597", - "source-type": "CALCULATED", - "source-id": null, - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1639158305597, - "selected": false - }, - { - "value": "1628846625829", - "source-type": "CALCULATED", - "source-id": "BackfillHsPipelineForContacts", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1628846625829, - "selected": false - } - ] - }, - "hs_analytics_first_timestamp": { - "value": "1606827045444", - "versions": [ - { - "value": "1606827045444", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_social_google_plus_clicks": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_analytics_average_page_views": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "lastname": { - "value": "Halligan (Sample Contact)", - "versions": [ - { - "value": "Halligan (Sample Contact)", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_all_contact_vids": { - "value": "51", - "versions": [ - { - "value": "51", - "source-type": "MIGRATION", - "source-id": "BackfillReadtimeCalculatedPropertiesJob", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1629469311146, - "selected": false - } - ] - }, - "twitterhandle": { - "value": "bhalligan", - "versions": [ - { - "value": "bhalligan", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_social_facebook_clicks": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_is_contact": { - "value": "true", - "versions": [ - { - "value": "true", - "source-type": "CALCULATED", - "source-id": null, - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045698, - "selected": false - } - ] - }, - "num_conversion_events": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "MIGRATION", - "source-id": "BackfillReadtimeCalculatedPropertiesJob", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1629469311146, - "selected": false - } - ] - }, - "twitterprofilephoto": { - "value": "https://pbs.twimg.com/profile_images/3491742741/212e42c07d3348251da10872e85aa6b0.jpeg", - "versions": [ - { - "value": "https://pbs.twimg.com/profile_images/3491742741/212e42c07d3348251da10872e85aa6b0.jpeg", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_object_id": { - "value": "51", - "versions": [ - { - "value": "51", - "source-type": "MIGRATION", - "source-id": "BackfillReadtimeCalculatedPropertiesJob", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1629469311146, - "selected": false - } - ] - }, - "hs_analytics_num_event_completions": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_social_twitter_clicks": { - "value": "0", - "versions": [ - { - "value": "0", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827047569, - "selected": false - } - ] - }, - "hs_analytics_source_data_2": { - "value": "sample-contact", - "versions": [ - { - "value": "sample-contact", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827054762, - "selected": false - } - ] - }, - "hs_lifecyclestage_lead_date": { - "value": "1606827045444", - "versions": [ - { - "value": "1606827045444", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - }, - "hs_analytics_source_data_1": { - "value": "API", - "versions": [ - { - "value": "API", - "source-type": "ANALYTICS", - "source-id": "ContactAnalyticsDetailsUpdateWorker", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827054762, - "selected": false - } - ] - }, - "lifecyclestage": { - "value": "lead", - "versions": [ - { - "value": "lead", - "source-type": "CONTACTS_WEB", - "source-id": "sample-contact", - "source-label": null, - "updated-by-user-id": null, - "timestamp": 1606827045444, - "selected": false - } - ] - } - }, - "form-submissions": [], - "list-memberships": [], - "identity-profiles": [ - { - "vid": 51, - "saved-at-timestamp": 1606827045720, - "deleted-changed-timestamp": 0, - "identities": [ - { - "type": "EMAIL", - "value": "bh@hubspot.com", - "timestamp": 1606827045444, - "is-primary": true - }, - { - "type": "LEAD_GUID", - "value": "d3749acc-06e1-4511-84fd-7b0d847f6eff", - "timestamp": 1606827045717 - } - ] - } - ], - "merge-audits": [], - "associated-company": { - "company-id": 4931550080, - "portal-id": 8924380, - "properties": { - "country": { - "value": "United States" - }, - "city": { - "value": "Cambridge" - }, - "num_associated_contacts": { - "value": "2" - }, - "timezone": { - "value": "America/New_York" - }, - "facebook_company_page": { - "value": "https://www.facebook.com/hubspot" - }, - "createdate": { - "value": "1606827053844" - }, - "description": { - "value": "HubSpot is an American developer and marketer of software products for inbound marketing, sales, and customer service." - }, - "hs_analytics_latest_source_data_2": { - "value": "sample-contact" - }, - "hs_analytics_latest_source_data_1": { - "value": "API" - }, - "hs_num_blockers": { - "value": "0" - }, - "industry": { - "value": "COMPUTER_SOFTWARE" - }, - "total_money_raised": { - "value": "100.5M" - }, - "web_technologies": { - "value": "unbounce;instagram;app_nexus;piwik;google_analytics;mixpanel;google_tag_manager;facebook_advertiser;salesforce;cloud_flare;dstillery;twitter_button;hubspot;vidyard;facebook_connect;crazy_egg;amazon__cloudfront;wistia;optimizely" - }, - "numberofemployees": { - "value": "5000" - }, - "hs_analytics_num_visits": { - "value": "0" - }, - "linkedin_company_page": { - "value": "https://www.linkedin.com/company/hubspot" - }, - "hs_analytics_latest_source_timestamp": { - "value": "1606827045720" - }, - "hs_analytics_source": { - "value": "OFFLINE" - }, - "annualrevenue": { - "value": "250000000" - }, - "founded_year": { - "value": "2006" - }, - "hs_annual_revenue_currency_code": { - "value": "USD" - }, - "hs_analytics_num_page_views": { - "value": "0" - }, - "state": { - "value": "MA" - }, - "linkedinbio": { - "value": "HubSpot is an American developer and marketer of software products for inbound marketing, sales, and customer service." - }, - "hs_num_open_deals": { - "value": "0" - }, - "zip": { - "value": "02141" - }, - "website": { - "value": "hubspot.com" - }, - "address": { - "value": "25 First Street" - }, - "hs_analytics_first_timestamp": { - "value": "1606827045444" - }, - "first_contact_createdate": { - "value": "1606827045444" - }, - "twitterhandle": { - "value": "HubSpot" - }, - "hs_target_account_probability": { - "value": "0.49565839767456055" - }, - "hs_lastmodifieddate": { - "value": "1653392172246" - }, - "hs_num_decision_makers": { - "value": "0" - }, - "phone": { - "value": "+1 888-482-7768" - }, - "domain": { - "value": "hubspot.com" - }, - "hs_num_child_companies": { - "value": "0" - }, - "hs_num_contacts_with_buying_roles": { - "value": "0" - }, - "hs_object_id": { - "value": "4931550080" - }, - "is_public": { - "value": "true" - }, - "name": { - "value": "HubSpot, Inc." - }, - "hs_analytics_source_data_2": { - "value": "sample-contact" - }, - "hs_analytics_latest_source": { - "value": "OFFLINE" - }, - "hs_analytics_source_data_1": { - "value": "API" - } - } - } - } - } - ] - }, - "connections": { - "HubSpot Trigger": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "Is Gmail, Don't Add to Sheet", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Google Sheets", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "4748dbbc-75dd-400e-98d1-41bbd82c7208", - "id": "cGYp8fpTdh3LAgP5", - "meta": { - "instanceId": "dbd43d88d26a9e30d8aadc002c9e77f1400c683dd34efe3778d43d27250dde50" - }, - "tags": [ - { - "createdAt": "2023-09-21T09:36:34.726Z", - "updatedAt": "2023-09-21T09:36:52.231Z", - "id": "vh6ctEIEfFztmSF2", - "name": "release-template-version" - } - ] -} \ No newline at end of file diff --git a/cypress/fixtures/Pinned_webhook_node.json b/cypress/fixtures/Pinned_webhook_node.json deleted file mode 100644 index eb98b173512..00000000000 --- a/cypress/fixtures/Pinned_webhook_node.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "path": "FwrbSiaua2Xmvn6-Z-7CQ", - "options": {} - }, - "id": "8fcc7e5f-2cef-4938-9564-eea504c20aa0", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 2, - "position": [ - 360, - 220 - ], - "webhookId": "9c778f2a-e882-46ed-a0e4-c8e2f76ccd65" - } - ], - "connections": {}, - "pinData": { - "Webhook": [ - { - "headers": { - "connection": "keep-alive", - "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36", - "accept": "*/*", - "cookie": "n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNiM2FhOTE5LWRhZDgtNDE5MS1hZWZiLTlhZDIwZTZkMjJjNiIsImhhc2giOiJ1ZVAxR1F3U2paIiwiaWF0IjoxNzI4OTE1NTQyLCJleHAiOjE3Mjk1MjAzNDJ9.fV02gpUnSiUoMxHwfB0npBjcjct7Mv9vGfj-jRTT3-I", - "host": "localhost:5678", - "accept-encoding": "gzip, deflate" - }, - "params": {}, - "query": {}, - "body": {}, - "webhookUrl": "http://localhost:5678/webhook-test/FwrbSiaua2Xmvn6-Z-7CQ", - "executionMode": "test" - } - ] - } -} diff --git a/cypress/fixtures/Plan_data_opt_in_trial.json b/cypress/fixtures/Plan_data_opt_in_trial.json deleted file mode 100644 index 7a805708c65..00000000000 --- a/cypress/fixtures/Plan_data_opt_in_trial.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 200, - "planId": 1, - "pruneExecutionsInterval": 168, - "monthlyExecutionsLimit": 1000, - "activeWorkflowsLimit": 20, - "credentialsLimit": 100, - "supportTier": "community", - "displayName": "Trial", - "enabledFeatures": ["userManagement", "advancedExecutionFilters", "sharing"], - "licenseFeatures": { - "feat:sharing": true, - "feat:advancedExecutionFilters": true, - "quota:users": -1, - "quota:maxVariables": -1, - "feat:variables": true - }, - "metadata": { - "version": "v1", - "group": "trial", - "slug": "trial-2", - "trial": { - "length": 14, - "gracePeriod": 3 - } - }, - "expirationDate": "2023-08-30T15:47:27.611Z" -} diff --git a/cypress/fixtures/Schedule_pinned.json b/cypress/fixtures/Schedule_pinned.json deleted file mode 100644 index e27623b6fae..00000000000 --- a/cypress/fixtures/Schedule_pinned.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "name": "Schedule + pinned", - "nodes": [ - { - "parameters": { - "rule": { - "interval": [ - {} - ] - } - }, - "id": "66358c29-b263-43dd-be25-3b068b0a88eb", - "name": "Schedule Trigger", - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.1, - "position": [ - 660, - 340 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "6d903354-4e59-4032-81fe-426a5d6ec33c", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 860, - 240 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "d8a1e9cf-81d3-400f-97d4-ad6167e7b236", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 860, - 440 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "bdc41148-067e-4649-8f21-5707b128d877", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1080, - 440 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "d5a4337f-a6b3-4b51-9b02-e668593d9ae8", - "name": "Edit Fields3", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1300, - 440 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "fbc23f60-e7f6-4423-9329-33b0e4809a9a", - "name": "Edit Fields4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1500, - 440 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "eaee47b0-94ec-4137-bfeb-a6c1a2c63f81", - "name": "Edit Fields5", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1080, - 240 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "eabb6308-21e9-4e59-8f74-9220a03c3186", - "name": "Edit Fields6", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1300, - 240 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "8812a45b-5545-4080-aad8-8e9f7b17ecd7", - "name": "Edit Fields7", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1500, - 240 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "d5ea3c5b-0b3e-4514-93e1-9c88563bab5c", - "name": "Edit Fields9", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1700, - 240 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "7af34474-5cd0-40b1-abea-850858e3b495", - "name": "Edit Fields10", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1700, - 440 - ] - } - ], - "pinData": { - "Schedule Trigger": [ - { - "json": { - "name": "First item", - "code": 1 - } - }, - { - "json": { - "name": "Second item", - "code": 2 - } - } - ], - "Edit Fields7": [ - { - "json": { - "name": "First item", - "code": 1 - } - }, - { - "json": { - "name": "Second item", - "code": 2 - } - } - ], - "Edit Fields2": [ - { - "json": { - "name": "First item", - "code": 1 - } - }, - { - "json": { - "name": "Second item", - "code": 2 - } - } - ] - }, - "connections": { - "Schedule Trigger": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields2": { - "main": [ - [ - { - "node": "Edit Fields3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields3": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields5": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields6": { - "main": [ - [ - { - "node": "Edit Fields7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields7": { - "main": [ - [ - { - "node": "Edit Fields9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields4": { - "main": [ - [ - { - "node": "Edit Fields10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "9b6c68c0-f94f-45bc-a604-bf97d17a47ac", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "id": "nWzcnYUb3AVaZpHG", - "tags": [] -} diff --git a/cypress/fixtures/Subworkflow-debugging-execute-workflow.json b/cypress/fixtures/Subworkflow-debugging-execute-workflow.json deleted file mode 100644 index 4ecd43c0773..00000000000 --- a/cypress/fixtures/Subworkflow-debugging-execute-workflow.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "meta": { - "instanceId": "08ce71ad998aeaade0abedb8dd96153d8eaa03fcb84cfccc1530095bf9ee478e" - }, - "nodes": [ - { - "parameters": {}, - "id": "4535ce3e-280e-49b0-8854-373472ec86d1", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [80, 860] - }, - { - "parameters": { - "category": "randomData", - "randomDataSeed": "0", - "randomDataCount": 2 - }, - "id": "d7fba18a-d51f-4509-af45-68cd9425ac6b", - "name": "DebugHelper1", - "type": "n8n-nodes-base.debugHelper", - "typeVersion": 1, - "position": [280, 860] - }, - { - "parameters": { - "source": "parameter", - "workflowJson": "{\n \"meta\": {\n \"instanceId\": \"a786b722078489c1fa382391a9f3476c2784761624deb2dfb4634827256d51a0\"\n },\n \"nodes\": [\n {\n \"parameters\": {},\n \"type\": \"n8n-nodes-base.executeWorkflowTrigger\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 0\n ],\n \"id\": \"00600a51-e63a-4b6e-93f5-f01d50a21e0c\",\n \"name\": \"Execute Workflow Trigger\"\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"87ff01af-2e28-48da-ae6c-304040200b15\",\n \"name\": \"hello\",\n \"value\": \"=world {{ $json.firstname }} {{ $json.lastname }}\",\n \"type\": \"string\"\n }\n ]\n },\n \"includeOtherFields\": false,\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n 280,\n 0\n ],\n \"id\": \"642219a1-d655-4a30-af5c-fcccbb690322\",\n \"name\": \"Edit Fields\"\n }\n ],\n \"connections\": {\n \"Execute Workflow Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Edit Fields\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"pinData\": {}\n}", - "mode": "each", - "options": { - "waitForSubWorkflow": false - } - }, - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.1, - "position": [680, 1540], - "id": "f90a25da-dd89-4bf8-8f5b-bf8ee1de0b70", - "name": "Execute Workflow with param3" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "c93f26bd-3489-467b-909e-6462e1463707", - "name": "uid", - "value": "={{ $json.uid }}", - "type": "string" - }, - { - "id": "3dd706ce-d925-4219-8531-ad12369972fe", - "name": "email", - "value": "={{ $json.email }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [900, 1540], - "id": "3be57648-3be8-4b0f-abfa-8fdcafee804d", - "name": "Edit Fields8" - }, - { - "parameters": { - "source": "parameter", - "workflowJson": "{\n \"meta\": {\n \"instanceId\": \"a786b722078489c1fa382391a9f3476c2784761624deb2dfb4634827256d51a0\"\n },\n \"nodes\": [\n {\n \"parameters\": {},\n \"type\": \"n8n-nodes-base.executeWorkflowTrigger\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 0\n ],\n \"id\": \"00600a51-e63a-4b6e-93f5-f01d50a21e0c\",\n \"name\": \"Execute Workflow Trigger\"\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"87ff01af-2e28-48da-ae6c-304040200b15\",\n \"name\": \"hello\",\n \"value\": \"=world {{ $json.firstname }} {{ $json.lastname }}\",\n \"type\": \"string\"\n }\n ]\n },\n \"includeOtherFields\": false,\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n 280,\n 0\n ],\n \"id\": \"642219a1-d655-4a30-af5c-fcccbb690322\",\n \"name\": \"Edit Fields\"\n }\n ],\n \"connections\": {\n \"Execute Workflow Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Edit Fields\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"pinData\": {}\n}", - "options": { - "waitForSubWorkflow": false - } - }, - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.1, - "position": [620, 1220], - "id": "dabc2356-3660-4d17-b305-936a002029ba", - "name": "Execute Workflow with param2" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "c93f26bd-3489-467b-909e-6462e1463707", - "name": "uid", - "value": "={{ $json.uid }}", - "type": "string" - }, - { - "id": "3dd706ce-d925-4219-8531-ad12369972fe", - "name": "email", - "value": "={{ $json.email }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [840, 1220], - "id": "9d2a9dda-e2a1-43e8-a66f-a8a555692e5f", - "name": "Edit Fields7" - }, - { - "parameters": { - "source": "parameter", - "workflowJson": "{\n \"meta\": {\n \"instanceId\": \"a786b722078489c1fa382391a9f3476c2784761624deb2dfb4634827256d51a0\"\n },\n \"nodes\": [\n {\n \"parameters\": {},\n \"type\": \"n8n-nodes-base.executeWorkflowTrigger\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 0\n ],\n \"id\": \"00600a51-e63a-4b6e-93f5-f01d50a21e0c\",\n \"name\": \"Execute Workflow Trigger\"\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"87ff01af-2e28-48da-ae6c-304040200b15\",\n \"name\": \"hello\",\n \"value\": \"=world {{ $json.firstname }} {{ $json.lastname }}\",\n \"type\": \"string\"\n }\n ]\n },\n \"includeOtherFields\": false,\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n 280,\n 0\n ],\n \"id\": \"642219a1-d655-4a30-af5c-fcccbb690322\",\n \"name\": \"Edit Fields\"\n }\n ],\n \"connections\": {\n \"Execute Workflow Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Edit Fields\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"pinData\": {}\n}", - "mode": "each", - "options": { - "waitForSubWorkflow": true - } - }, - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.1, - "position": [560, 900], - "id": "07e47f60-622a-484c-ab24-35f6f2280595", - "name": "Execute Workflow with param1" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "c93f26bd-3489-467b-909e-6462e1463707", - "name": "uid", - "value": "={{ $json.uid }}", - "type": "string" - }, - { - "id": "3dd706ce-d925-4219-8531-ad12369972fe", - "name": "email", - "value": "={{ $json.email }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [760, 900], - "id": "80563d0a-0bab-444f-a04c-4041a505d78b", - "name": "Edit Fields6" - }, - { - "parameters": { - "source": "parameter", - "workflowJson": "{\n \"meta\": {\n \"instanceId\": \"a786b722078489c1fa382391a9f3476c2784761624deb2dfb4634827256d51a0\"\n },\n \"nodes\": [\n {\n \"parameters\": {},\n \"type\": \"n8n-nodes-base.executeWorkflowTrigger\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 0\n ],\n \"id\": \"00600a51-e63a-4b6e-93f5-f01d50a21e0c\",\n \"name\": \"Execute Workflow Trigger\"\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"87ff01af-2e28-48da-ae6c-304040200b15\",\n \"name\": \"hello\",\n \"value\": \"=world {{ $json.firstname }} {{ $json.lastname }}\",\n \"type\": \"string\"\n }\n ]\n },\n \"includeOtherFields\": false,\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n 280,\n 0\n ],\n \"id\": \"642219a1-d655-4a30-af5c-fcccbb690322\",\n \"name\": \"Edit Fields\"\n }\n ],\n \"connections\": {\n \"Execute Workflow Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Edit Fields\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"pinData\": {}\n}", - "options": { - "waitForSubWorkflow": true - } - }, - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.1, - "position": [560, 580], - "id": "f04af481-f4d9-4d91-a60a-a377580e8393", - "name": "Execute Workflow with param" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "c93f26bd-3489-467b-909e-6462e1463707", - "name": "uid", - "value": "={{ $json.uid }}", - "type": "string" - }, - { - "id": "3dd706ce-d925-4219-8531-ad12369972fe", - "name": "email", - "value": "={{ $json.email }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [760, 580], - "id": "80c10607-a0ac-4090-86a1-890da0a2aa52", - "name": "Edit Fields2" - }, - { - "parameters": { - "content": "## Execute Workflow (Run once with all items/ DONT Wait for Sub-workflow completion)", - "height": 254.84308966329985, - "width": 457.58120569815793 - }, - "id": "534ef523-3453-4a16-9ff0-8ac9f025d47d", - "name": "Sticky Note5", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [500, 1080] - }, - { - "parameters": { - "content": "## Execute Workflow (Run once with for each item/ DONT Wait for Sub-workflow completion) ", - "height": 284.59778445962905, - "width": 457.58120569815793 - }, - "id": "838f0fa3-5ee4-4d1a-afb8-42e009f1aa9e", - "name": "Sticky Note4", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [580, 1400] - }, - { - "parameters": { - "category": "randomData", - "randomDataSeed": "1", - "randomDataCount": 3 - }, - "id": "86699a49-2aa7-488e-8ea9-828404c98f08", - "name": "DebugHelper", - "type": "n8n-nodes-base.debugHelper", - "typeVersion": 1, - "position": [320, 1120] - }, - { - "parameters": { - "content": "## Execute Workflow (Run once with for each item/ Wait for Sub-workflow completion) ", - "height": 284.59778445962905, - "width": 457.58120569815793 - }, - "id": "885d35f0-8ae6-45ec-821b-a82c27e7577a", - "name": "Sticky Note3", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [480, 760] - }, - { - "parameters": { - "content": "## Execute Workflow (Run once with all items/ Wait for Sub-workflow completion) (default behavior)", - "height": 254.84308966329985, - "width": 457.58120569815793 - }, - "id": "505bd7f2-767e-41b8-9325-77300aed5883", - "name": "Sticky Note2", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [460, 460] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "DebugHelper1", - "type": "main", - "index": 0 - }, - { - "node": "DebugHelper", - "type": "main", - "index": 0 - } - ] - ] - }, - "DebugHelper1": { - "main": [ - [ - { - "node": "Execute Workflow with param3", - "type": "main", - "index": 0 - }, - { - "node": "Execute Workflow with param2", - "type": "main", - "index": 0 - }, - { - "node": "Execute Workflow with param1", - "type": "main", - "index": 0 - }, - { - "node": "Execute Workflow with param", - "type": "main", - "index": 0 - } - ] - ] - }, - "Execute Workflow with param3": { - "main": [ - [ - { - "node": "Edit Fields8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Execute Workflow with param2": { - "main": [ - [ - { - "node": "Edit Fields7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Execute Workflow with param1": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Execute Workflow with param": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "DebugHelper": { - "main": [ - [ - { - "node": "Execute Workflow with param2", - "type": "main", - "index": 0 - }, - { - "node": "Execute Workflow with param3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/Subworkflow-extraction-workflow.json b/cypress/fixtures/Subworkflow-extraction-workflow.json deleted file mode 100644 index 515926cf4dd..00000000000 --- a/cypress/fixtures/Subworkflow-extraction-workflow.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "nodes": [ - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [0, -5], - "id": "41b93a1d-ca68-49c1-b252-323e57f58ba9", - "name": "When clicking ‘Execute workflow’" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [220, -5], - "id": "afd95339-62f5-4efd-bcaa-637cec90ab0f", - "name": "Edit Fields0" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' + $('When clicking ‘Execute workflow’').item.json.x}}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [440, 120], - "id": "c279107f-08c2-4be6-9016-d19215cfeb9e", - "name": "Edit Fields1" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' + $('When clicking ‘Execute workflow’').first().json.x }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [440, -120], - "id": "1d4eb1a0-ad87-4d8b-87e6-c853f27aa8ad", - "name": "Edit Fields2" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' + $('When clicking ‘Execute workflow’').last().json.x}}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [440, -320], - "id": "b99d763e-cb4c-487f-8718-8b9a5f02c167", - "name": "Edit Fields3" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' + $('When clicking ‘Execute workflow’').item.json.x}}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [720, 0], - "id": "4244c039-51c3-415b-8b3d-06be5a90dc7a", - "name": "Edit Fields4" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "624c7310-e17a-4075-922f-3b57952e3dfa", - "name": "x", - "value": "={{ $json.x + 'a' + $('When clicking ‘Execute workflow’').item.json.x + $('Edit Fields0').item.json.x }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [960, 0], - "id": "2653bbfe-8f06-4029-9071-8faacfb73cd0", - "name": "Edit Fields5" - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields0", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields0": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields3", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields2": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields3": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields4": { - "main": [ - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "When clicking ‘Execute workflow’": [ - { - "x": "l" - }, - { - "x": "m" - }, - { - "x": "o" - } - ] - }, - "meta": { - "instanceId": "d30ee1956588565f63beb4b8b589790a4701843b47fcd9e8d6d5527fe47872c3" - } -} diff --git a/cypress/fixtures/Test-workflow-with-long-parameters.json b/cypress/fixtures/Test-workflow-with-long-parameters.json deleted file mode 100644 index 3c64a184b59..00000000000 --- a/cypress/fixtures/Test-workflow-with-long-parameters.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "meta": { - "instanceId": "777c68374367604fdf2a0bcfe9b1b574575ddea61aa8268e4bf034434bd7c894" - }, - "nodes": [ - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0effebfc-fa8c-4d41-8a37-6d5695dfc9ee", - "name": "test", - "value": "test", - "type": "string" - }, - { - "id": "beb8723f-6333-4186-ab88-41d4e2338866", - "name": "test", - "value": "test", - "type": "string" - }, - { - "id": "85095836-4e94-442f-9270-e1a89008c129", - "name": "test", - "value": "test", - "type": "string" - }, - { - "id": "85095836-4e94-442f-9270-e1a89008c125", - "name": "test", - "value": "test", - "type": "string" - }, - { - "id": "85095836-4e94-442f-9270-e1a89008c121", - "name": "test", - "value": "test", - "type": "string" - }, - { - "id": "b6163f8a-bca6-4364-8b38-182df37c55cd", - "name": "=should be visible!", - "value": "=not visible", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "950fcdc1-9e92-410f-8377-d4240e9bf6ff", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 680, - 460 - ] - }, - { - "parameters": { - "messageType": "block", - "blocksUi": "blocks", - "text": "=should be visible", - "otherOptions": { - "includeLinkToWorkflow": true, - "link_names": false, - "mrkdwn": true, - "unfurl_links": false, - "sendAsUser": "=not visible" - } - }, - "id": "dcf7410d-0f8e-4cdb-9819-ae275558bdaa", - "name": "Slack", - "type": "n8n-nodes-base.slack", - "typeVersion": 2.2, - "position": [ - 900, - 460 - ], - "webhookId": "002b502e-31e5-4fdb-ac43-a56cfde8f82a" - }, - { - "parameters": { - "rule": { - "interval": [ - {}, - {}, - { - "field": "=should be visible" - }, - { - "field": "=not visible" - } - ] - } - }, - "id": "4c948a3f-19d4-4b08-a8be-f7d2964a21f4", - "name": "Schedule Trigger", - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.2, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5dcaab37-1146-49c6-97a3-3b2f73483270", - "name": "object", - "value": "=1 visible!\n2 {\n3 \"str\": \"two\",\n4 \"str_date\": \"{{ $now }}\",\n5 \"str_int\": \"1\",\n6 \"str_float\": \"1.234\",\n7 not visible!\n \"str_bool\": \"true\",\n \"str_email\": \"david@thedavid.com\",\n \"str_with_email\":\"My email is david@n8n.io\",\n \"str_json_single\":\"{'one':'two'}\",\n \"str_json_double\":\"{\\\"one\\\":\\\"two\\\"}\",\n \"bool\": true,\n \"list\": [1, 2, 3],\n \"decimal\": 1.234,\n \"timestamp1\": 1708695471,\n \"timestamp2\": 1708695471000,\n \"timestamp3\": 1708695471000000,\n \"num_one\": 1\n}", - "type": "object" - } - ] - }, - "includeOtherFields": true, - "options": {} - }, - "id": "a41dfb0d-38aa-42d2-b3e2-1854090bd319", - "name": "With long expression", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1100, - 460 - ] - } - ], - "connections": { - "Edit Fields1": { - "main": [ - [ - { - "node": "Slack", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack": { - "main": [ - [ - { - "node": "With long expression", - "type": "main", - "index": 0 - } - ] - ] - }, - "Schedule Trigger": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/Test_9999-SUG-38.json b/cypress/fixtures/Test_9999-SUG-38.json deleted file mode 100644 index 952b9734e61..00000000000 --- a/cypress/fixtures/Test_9999-SUG-38.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "nodes": [ - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [-240, 180], - "id": "cd9b8124-567e-43d9-b4d1-638b111cd049", - "name": "When clicking ‘Execute workflow’" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "3a40d9f2-0eed-4a92-9287-9d6ec9ce90e8", - "name": "message", - "value": "hello there", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [-20, 180], - "id": "6e58ae14-4851-4e9d-9465-4155b6e2f278", - "name": "Edit Fields1" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "9e957377-c5f2-4254-89d8-334d32a8cfb6", - "name": "test", - "value": "={{ $json.message }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [200, 180], - "id": "c4e9d792-51e9-4296-ba66-afac3cf378dd", - "name": "Repro1" - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Repro1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {}, - "meta": { - "instanceId": "cdc3bfdf3e6244f221ab6e71b2115a631406ae45a034bfca5e9731cf64f4eb64" - } -} diff --git a/cypress/fixtures/Test_Subworkflow-Inputs.json b/cypress/fixtures/Test_Subworkflow-Inputs.json deleted file mode 100644 index 5c38da84547..00000000000 --- a/cypress/fixtures/Test_Subworkflow-Inputs.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "meta": { - "instanceId": "4d0676b62208d810ef035130bbfc9fd3afdc78d963ea8ccb9514dc89066efc94" - }, - "nodes": [ - { - "parameters": {}, - "id": "bb7f8bb3-840a-464c-a7de-d3a80538c2be", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [0, 0] - }, - { - "parameters": { - "workflowId": {}, - "workflowInputs": { - "mappingMode": "defineBelow", - "value": {}, - "matchingColumns": [], - "schema": [], - "attemptToConvertTypes": false, - "convertFieldsToString": true - }, - "options": {} - }, - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.2, - "position": [500, 240], - "id": "6b6e2e34-c6ab-4083-b8e3-6b0d56be5453", - "name": "Execute Workflow" - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Execute Workflow", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "When clicking ‘Execute workflow’": [ - { - "aaString": "A String", - "aaNumber": 1, - "aaArray": [1, true, "3"], - "aaObject": { - "aKey": -1 - }, - "aaAny": {} - }, - { - "aaString": "Another String", - "aaNumber": 2, - "aaArray": [], - "aaObject": { - "aDifferentKey": -1 - }, - "aaAny": [] - } - ] - } -} diff --git a/cypress/fixtures/Test_Subworkflow_Get_Weather.json b/cypress/fixtures/Test_Subworkflow_Get_Weather.json deleted file mode 100644 index 3829aca879c..00000000000 --- a/cypress/fixtures/Test_Subworkflow_Get_Weather.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "Get Weather", - "nodes": [ - { - "parameters": {}, - "id": "82eed1ba-179b-4f8f-8a85-b45f0d4e5857", - "name": "Execute Workflow Trigger", - "type": "n8n-nodes-base.executeWorkflowTrigger", - "typeVersion": 1, - "position": [ - 560, - 340 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6ad8dc55-20f3-45af-a724-c7ecac90d338", - "name": "response", - "value": "Weather is sunny", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "8f3e00f6-fc92-4aba-817b-93d206158bda", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 780, - 340 - ] - } - ], - "pinData": {}, - "connections": { - "Execute Workflow Trigger": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/fixtures/Test_Subworkflow_Search_DB.json b/cypress/fixtures/Test_Subworkflow_Search_DB.json deleted file mode 100644 index 990aee120d4..00000000000 --- a/cypress/fixtures/Test_Subworkflow_Search_DB.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "Search DB", - "nodes": [ - { - "parameters": {}, - "id": "64465f9b-63de-43f9-8d90-b5b2eb7a2dc7", - "name": "Execute Workflow Trigger", - "type": "n8n-nodes-base.executeWorkflowTrigger", - "typeVersion": 1, - "position": [ - 640, - 380 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6ad8dc55-20f3-45af-a724-c7ecac90d338", - "name": "response", - "value": "10 results found", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "b580fd2b-00c8-4a52-8acb-024f204c0947", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 860, - 380 - ] - } - ], - "pinData": {}, - "connections": { - "Execute Workflow Trigger": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "6026f7a4-f5dc-4c27-9f83-3a02fc6e33ae", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "BFFhCdBZmNSkx4qf", - "tags": [] -} \ No newline at end of file diff --git a/cypress/fixtures/Test_Template_1.json b/cypress/fixtures/Test_Template_1.json deleted file mode 100644 index 25cdcc819cd..00000000000 --- a/cypress/fixtures/Test_Template_1.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "workflow": { - "id": 1205, - "name": "Promote new Shopify products", - "views": 478, - "recentViews": 9880, - "totalViews": 478, - "createdAt": "2021-08-24T10:40:50.007Z", - "description": "This workflow automatically promotes your new Shopify products on Twitter and Telegram. This workflow is also featured in the blog post [*6 e-commerce workflows to power up your Shopify store*](https://n8n.io/blog/no-code-ecommerce-workflow-automations/#promote-your-new-products-on-social-media).\n\n## Prerequisites\n\n- A Shopify account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/shopify/)\n- A Twitter account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/twitter/)\n- A Telegram account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/telegram/) for the channel you want to send messages to.\n\n## Nodes\n\n- [Shopify Trigger node](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.shopifytrigger/) triggers the workflow when you create a new product in Shopify.\n- [Twitter node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.twitter/) posts a tweet with the text \"Hey there, my design is now on a new product! Visit my {shop name} to get this cool {product title} (and check out more {product type})\".\n- [Telegram node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/) posts a message with the same text as above in a Telegram channel.", - "workflow": { - "nodes": [ - { - "name": "Twitter", - "type": "n8n-nodes-base.twitter", - "position": [ - 720, - -220 - ], - "parameters": { - "text": "=Hey there, my design is now on a new product ✨\nVisit my {{$json[\"vendor\"]}} shop to get this cool{{$json[\"title\"]}} (and check out more {{$json[\"product_type\"]}}) 🛍️", - "additionalFields": {} - }, - "credentials": { - "twitterOAuth1Api": "twitter" - }, - "typeVersion": 1 - }, - { - "name": "Telegram", - "type": "n8n-nodes-base.telegram", - "position": [ - 720, - -20 - ], - "parameters": { - "text": "=Hey there, my design is now on a new product!\nVisit my {{$json[\"vendor\"]}} shop to get this cool{{$json[\"title\"]}} (and check out more {{$json[\"product_type\"]}})", - "chatId": "123456", - "additionalFields": {} - }, - "credentials": { - "telegramApi": "telegram_habot" - }, - "typeVersion": 1 - }, - { - "name": "product created", - "type": "n8n-nodes-base.shopifyTrigger", - "position": [ - 540, - -110 - ], - "webhookId": "2a7e0e50-8f09-4a2b-bf54-a849a6ac4fe0", - "parameters": { - "topic": "products/create" - }, - "credentials": { - "shopifyApi": "shopify_nodeqa" - }, - "typeVersion": 1 - } - ], - "connections": { - "product created": { - "main": [ - [ - { - "node": "Twitter", - "type": "main", - "index": 0 - }, - { - "node": "Telegram", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "workflowInfo": { - "nodeCount": 3, - "nodeTypes": { - "n8n-nodes-base.twitter": { - "count": 1 - }, - "n8n-nodes-base.telegram": { - "count": 1 - }, - "n8n-nodes-base.shopifyTrigger": { - "count": 1 - } - } - }, - "user": { - "username": "lorenanda" - }, - "nodes": [ - { - "id": 49, - "icon": "file:telegram.svg", - "name": "n8n-nodes-base.telegram", - "defaults": { - "name": "Telegram" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNjYgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiIGZpbGw9IiMzN2FlZTIiLz48cGF0aCBkPSJNMjEuNjYxIDM0LjMzOGwzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIgZmlsbD0iI2M4ZGFlYSIvPjxwYXRoIGQ9Ik0yNi42OTUgMzcuMDM0bC0uNzI5IDcuNzQ2cy0uMzA1IDIuMzczIDIuMDY4IDBsNC42NDQtNC4yMDMiIGZpbGw9IiNhOWM2ZDgiLz48cGF0aCBkPSJNMjEuNzMgMzQuNzEybC03LjgwOS0yLjU0NXMtLjkzMi0uMzc4LS42MzMtMS4yMzdjLjA2Mi0uMTc3LjE4Ni0uMzI4LjU1OS0uNTg4IDEuNzMxLTEuMjA2IDMyLjAyOC0xMi4wOTYgMzIuMDI4LTEyLjA5NnMuODU2LS4yODggMS4zNjEtLjA5N2MuMjMxLjA4OC4zNzguMTg3LjUwMy41NDguMDQ1LjEzMi4wNzEuNDExLjA2OC42ODktLjAwMy4yMDEtLjAyNy4zODYtLjA0NS42NzgtLjE4NCAyLjk3OC01LjcwNiAyNS4xOTgtNS43MDYgMjUuMTk4cy0uMzMgMS4zLTEuNTE0IDEuMzQ1Yy0uNDMyLjAxNi0uOTU2LS4wNzEtMS41ODItLjYxLTIuMzIzLTEuOTk4LTEwLjM1Mi03LjM5NC0xMi4xMjYtOC41OGEuMzQuMzQgMCAwMS0uMTQ2LS4yMzljLS4wMjUtLjEyNS4xMDgtLjI4LjEwOC0uMjhzMTMuOTgtMTIuNDI3IDE0LjM1Mi0xMy43MzFjLjAyOS0uMTAxLS4wNzktLjE1MS0uMjI2LS4xMDctLjkyOS4zNDItMTcuMDI1IDEwLjUwNi0xOC44MDEgMTEuNjI5LS4xMDQuMDY2LS4zOTUuMDIzLS4zOTUuMDIzIi8+PC9nPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Telegram", - "typeVersion": 1 - }, - { - "id": 107, - "icon": "file:shopify.svg", - "name": "n8n-nodes-base.shopifyTrigger", - "defaults": { - "name": "Shopify Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTggNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBzdHJva2U9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTQ5LjI1NSAxMi40ODRhLjYzMy42MzMgMCAwMC0uNTY0LS41MjdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdjLS4zNC0uMzc2LTEuMDkyLS4yNjYtMS4zNzYtLjE4OC0uMDM3IDAtLjc1Mi4yMjUtMS45MjIuNjA1LTEuMTM3LTMuMy0zLjE1LTYuMzA2LTYuNjk2LTYuMzA2aC0uMzAzQzI4LjQzOC42MDUgMjcuMTk0IDAgMjYuMTQ0IDBjLTguMjU2LjAzNy0xMi4yIDEwLjMzMy0xMy40MzQgMTUuNTk0bC01Ljc3IDEuNzdjLTEuNzcuNTY0LTEuODM1LjYwNS0yLjA3MyAyLjI5M0wwIDU3LjE3NSAzNi40NjggNjRsMTkuNzYzLTQuMjZjMC0uMDM3LTYuOTQtNDYuODk3LTYuOTc2LTQ3LjI1NXpNMzQuNDMxIDguODZjLS45MTcuMzAzLTEuOTYzLjYwNS0zLjEuOTQ1di0uNjhhMTUuMDMgMTUuMDMgMCAwMC0uNzUyLTQuOTk5YzEuODQ4LjI4NCAzLjEgMi4zNTcgMy44NDMgNC43MzN6bS02LjA2OC00LjI5OGMuNjAzIDEuNzc4Ljg4MyAzLjY1LjgyNiA1LjUyN3YuMzRsLTYuMzc1IDEuOTYzYzEuMjQ4LTQuNjYgMy41NS02Ljk2MiA1LjU1LTcuODN6bS0yLjQ1LTIuMjkzYTEuOTQgMS45NCAwIDAxMS4wNTUuMzM5Yy0yLjY2IDEuMjM4LTUuNDcyIDQuMzY2LTYuNjc4IDEwLjYyN2wtNS4wNDUgMS41NDZDMTYuNjY4IDEwLjAzIDE5Ljk4OCAyLjI2IDI1LjkxIDIuMjZ6IiBmaWxsPSIjOTViZjQ3Ii8+PHBhdGggZD0iTTQ4LjY5MSAxMS45NTdjLS4yMjUtLjAzNy01LjE3LS4zNzYtNS4xNy0uMzc2bC0zLjc3LTMuNzdhLjc1My43NTMgMCAwMC0uNTI3LS4yMjVMMzYuNDcyIDY0bDE5Ljc2My00LjI2LTYuOTgtNDcuMjE4YS42OC42OCAwIDAwLS41NjQtLjU2NHoiIGZpbGw9IiM1ZThlM2UiLz48cGF0aCBkPSJNMjkuNzU4IDIyLjlsLTIuNDU0IDcuMjQyYTExLjM2IDExLjM2IDAgMDAtNC43NTItMS4xMzNjLTMuODQ4IDAtNC4wMzYgMi40MTItNC4wMzYgMy4wMTggMCAzLjI5OCA4LjYzNiA0LjU2NCA4LjYzNiAxMi4zMzMgMCA2LjEtMy44ODUgMTAuMDMtOS4xIDEwLjAzLTYuMjYgMC05LjQ2Ny0zLjg4NS05LjQ2Ny0zLjg4NWwxLjY2NS01LjU1czMuMjggMi44MyA2LjA3MyAyLjgzYTIuNDcgMi40NyAwIDAwMi41NjQtMi40OWMwLTQuMzQtNy4xLTQuNTI3LTcuMS0xMS42MTggMC01Ljk2MiA0LjI5OC0xMS43NyAxMi45MzQtMTEuNzcgMy4zOTQuMDUgNS4wMTggMSA1LjAxOCAxeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Shopify Trigger", - "typeVersion": 1 - }, - { - "id": 325, - "icon": "file:x.svg", - "name": "n8n-nodes-base.twitter", - "defaults": { - "name": "X" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE4LjI0NCAyLjI1aDMuMzA4bC03LjIyNyA4LjI2IDguNTAyIDExLjI0SDE2LjE3bC01LjIxNC02LjgxN0w0Ljk5IDIxLjc1SDEuNjhsNy43My04LjgzNUwxLjI1NCAyLjI1SDguMDhsNC43MTMgNi4yMzF6bS0xLjE2MSAxNy41MmgxLjgzM0w3LjA4NCA0LjEyNkg1LjExN3oiPjwvcGF0aD48L3N2Zz4K" - }, - "categories": [ - { - "id": 1, - "name": "Marketing & Content" - } - ], - "displayName": "X (Formerly Twitter)", - "typeVersion": 2 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - }, - { - "id": 19, - "name": "Marketing & Growth" - } - ], - "image": [ - { - "id": 527, - "url": "https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/89a078b208fe4c6181902608b1cd1332.png" - } - ] - } -} diff --git a/cypress/fixtures/Test_Template_2.json b/cypress/fixtures/Test_Template_2.json deleted file mode 100644 index 29001a78e36..00000000000 --- a/cypress/fixtures/Test_Template_2.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "workflow": { - "id": 1344, - "name": "Save email attachments to Nextcloud", - "views": 650, - "recentViews": 9887, - "totalViews": 650, - "createdAt": "2021-11-29T13:59:16.771Z", - "description": "This workflow will take all emails you put into a certain folder, upload any attachements to Nextcloud, and mark the emails as read (configurable).\n\nAttachements will be saved with automatically generated filenames:\n`2021-01-01_From-Sender-Name_Filename-of-attachement.pdf`\n\nInstructions:\n1. **Allow lodash to be used in n8n** (or rewrite the code...)\n `NODE_FUNCTION_ALLOW_EXTERNAL=lodash` (environment variable)\n2. Import workflow\n3. Set credentials for Email & Nextcloud nodes\n4. Configure to use correct folder / custom filters\n5. Activate\n\nCustom filter examples:\n- Only unread emails:\n `Custom Email Config` = `[\"UNSEEN\"]`\n- Filter emails by 'to' address:\n `Custom Email Config` = `[[\"TO\", \"example+invoices@posteo.de\"]]`", - "workflow": { - "nodes": [ - { - "name": "IMAP Email", - "type": "n8n-nodes-base.emailReadImap", - "position": [ - 240, - 420 - ], - "parameters": { - "format": "resolved", - "mailbox": "Invoices", - "options": { - "customEmailConfig": "[\"ALL\"]" - } - }, - "typeVersion": 1 - }, - { - "name": "Nextcloud", - "type": "n8n-nodes-base.nextCloud", - "position": [ - 940, - 420 - ], - "parameters": { - "path": "=Documents/Invoices/{{$json[\"date\"]}}_{{$json[\"from\"]}}_{{$binary.file.fileName}}", - "binaryDataUpload": true, - "binaryPropertyName": "file" - }, - "typeVersion": 1 - }, - { - "name": "Map each attachment", - "type": "n8n-nodes-base.function", - "position": [ - 620, - 420 - ], - "parameters": { - "functionCode": "const _ = require('lodash')\n\nconst sanitize = str => _.chain(str)\n .replace(/[^A-Za-z0-9&.-]/g, '-') // sanitise via whitelist of characters\n .replace(/-(?=-)/g, '') // remove repeated dashes - https://regexr.com/6ag8h\n .trim('-') // trim any leading/trailing dashes\n .truncate({\n length: 60,\n omission: '-' // when the string ends with '-', you'll know it was truncated\n })\n .value()\n\nconst result = _.flatMap(items.map(item => {\n //console.log({item})\n\n // Maps each attachment to a separate item\n return _.values(item.binary).map(file => {\n console.log(\"Saving attachement:\", file.fileName, 'from:', ...item.json.from.value)\n \n // sanitize filename but exclude extension\n const filename_parts = file.fileName.split('.')\n const ext = _.slice(filename_parts, filename_parts.length-1)\n const filename_main = _.join(_.dropRight(filename_parts), '.')\n file.fileName = sanitize(filename_main) + '.' + ext\n \n return {\n json: {\n from: sanitize(item.json.from.value[0].name),\n date: sanitize(new Date(item.json.date).toISOString().split(\"T\")[0]) // get date part \"2020-01-01\"\n }, \n binary: { file }\n }\n })\n}))\n\n//console.log(result)\nreturn result" - }, - "typeVersion": 1 - } - ], - "connections": { - "IMAP Email": { - "main": [ - [ - { - "node": "Map each attachment", - "type": "main", - "index": 0 - } - ] - ] - }, - "Map each attachment": { - "main": [ - [ - { - "node": "Nextcloud", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "lastUpdatedBy": 11, - "workflowInfo": { - "nodeCount": 3, - "nodeTypes": { - "n8n-nodes-base.function": { - "count": 1 - }, - "n8n-nodes-base.nextCloud": { - "count": 1 - }, - "n8n-nodes-base.emailReadImap": { - "count": 1 - } - } - }, - "user": { - "username": "tennox" - }, - "nodes": [ - { - "id": 10, - "icon": "fa:inbox", - "name": "n8n-nodes-base.emailReadImap", - "defaults": { - "name": "Email Trigger (IMAP)", - "color": "#44AA22" - }, - "iconData": { - "icon": "inbox", - "type": "icon" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Email Trigger (IMAP)", - "typeVersion": 2 - }, - { - "id": 14, - "icon": "fa:code", - "name": "n8n-nodes-base.function", - "defaults": { - "name": "Function", - "color": "#FF9922" - }, - "iconData": { - "icon": "code", - "type": "icon" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Function", - "typeVersion": 1 - }, - { - "id": 25, - "icon": "file:nextcloud.svg", - "name": "n8n-nodes-base.nextCloud", - "defaults": { - "name": "Nextcloud" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNzYgNTEiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI0EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9IkEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBkPSJNMzcuNTMzIDBjLTcuNzcgMC0xNC4zNTUgNS4yNjgtMTYuMzk2IDEyLjM3OS0xLjc3OC0zLjgxOS01LjU5Ny02LjQ1My0xMC4wNzUtNi40NTNDNS4wMDQgNS45MjYgMCAxMC45MzEgMCAxNy4wNTRhMTEuMTYgMTEuMTYgMCAwIDAgMTEuMTI4IDExLjEyOGM0LjQxMiAwIDguMjk3LTIuNjM0IDEwLjA3NS02LjQ1M2ExNi45OSAxNi45OSAwIDAgMCAxNi4zMyAxMi4zNzljNy43MDQgMCAxNC4yODktNS4yMDIgMTYuMzk2LTEyLjI0OCAxLjc3OCAzLjY4NyA1LjU5NyA2LjI1NiA5Ljk0MyA2LjI1NkExMS4xNiAxMS4xNiAwIDAgMCA3NSAxNi45ODljMC02LjEyNC01LjAwNC0xMS4wNjItMTEuMTI4LTExLjA2Mi00LjM0NiAwLTguMTY1IDIuNTY4LTkuOTQzIDYuMjU2QzUxLjgyMiA1LjIwMiA0NS4zMDMgMCAzNy41MzMgMHptMCA2LjUxOWExMC40OCAxMC40OCAwIDAgMSAxMC41MzUgMTAuNTM2QTEwLjQ4IDEwLjQ4IDAgMCAxIDM3LjUzMyAyNy41OWExMC40OCAxMC40OCAwIDAgMS0xMC41MzYtMTAuNTM1QTEwLjQ4IDEwLjQ4IDAgMCAxIDM3LjUzMyA2LjUxOXptLTI2LjQwNSA1LjkyNmE0LjU4IDQuNTggMCAwIDEgNC42MDkgNC42MDkgNC41OCA0LjU4IDAgMCAxLTQuNjA5IDQuNjA5IDQuNTggNC41OCAwIDAgMS00LjYwOS00LjYwOSA0LjU4IDQuNTggMCAwIDEgNC42MDktNC42MDl6bTUyLjc0NCAwYTQuNTggNC41OCAwIDAgMSA0LjYwOSA0LjYwOSA0LjYwOSA0LjYwOSAwIDEgMS05LjIxOCAwYy4wNjYtMi41NjggMi4wNDEtNC42MDkgNC42MDktNC42MDl6TTE5LjE3NiA0MS45NTdjMS44MjcgMCAyLjg1IDEuMzAxIDIuODUgMy4yNTIgMCAuMTg2LS4xNTUuMzQxLS4zNDEuMzQxSDE2Ljc2Yy4wMzEgMS43MzQgMS4yMzkgMi43MjYgMi42MzMgMi43MjZhMi44OSAyLjg5IDAgMCAwIDEuNzk2LS42MTljLjE4Ni0uMTI0LjM0MS0uMDkzLjQzNC4wOTNsLjA5My4xNTVjLjA5My4xNTUuMDYyLjMxLS4wOTMuNDM0YTMuODQgMy44NCAwIDAgMS0yLjI2MS43NDNjLTIuMDEzIDAtMy41NjItMS40NTYtMy41NjItMy41NjIuMDMxLTIuMjMgMS41MTgtMy41NjIgMy4zNzYtMy41NjJ6bTEuODg5IDIuOTExYy0uMDYyLTEuNDI1LS45MjktMi4xMzctMS45Mi0yLjEzNy0xLjE0NiAwLTIuMTM3Ljc0My0yLjM1NCAyLjEzN2g0LjI3NHptMTAuMjUzLTEuOTJ2LS43NzQtMS42MTFjMC0uMjE3LjEyNC0uMzQxLjM0MS0uMzQxaC4yNDhjLjIxNyAwIC4zMS4xMjQuMzEuMzQxdjEuNjExaDEuMzk0Yy4yMTcgMCAuMzQxLjEyNC4zNDEuMzQxdi4wOTNjMCAuMjE3LS4xMjQuMzEtLjM0MS4zMWgtMS4zOTR2My40MDdjMCAxLjU4Ljk2IDEuNzY2IDEuNDg3IDEuNzk2LjI3OS4wMzEuMzcyLjA5My4zNzIuMzQxdi4xODZjMCAuMjE3LS4wOTMuMzEtLjM3Mi4zMS0xLjQ4NyAwLTIuMzg1LS44OTgtMi4zODUtMi41MDl2LTMuNXptNy4wOTMtLjk5MWMxLjE3NyAwIDEuOTIuNDk2IDIuMjYxLjc3NC4xNTUuMTI0LjE4Ni4yNzkuMDMxLjQ2NWwtLjA5My4xNTVjLS4xMjQuMTg2LS4yNzkuMTg2LS40NjUuMDYyLS4zMS0uMjE3LS44OTgtLjYxOS0xLjcwMy0uNjE5LTEuNDg3IDAtMi42NjQgMS4xMTUtMi42NjQgMi43NTcgMCAxLjYxMSAxLjE3NyAyLjcyNiAyLjY2NCAyLjcyNi45NiAwIDEuNjExLS40MzQgMS45Mi0uNzEyLjE4Ni0uMTI0LjMxLS4wOTMuNDM0LjA5M2wuMDkzLjEyNGMuMDkzLjE4Ni4wNjIuMzEtLjA5My40NjVhMy44MSAzLjgxIDAgMCAxLTIuNDE2Ljg2N2MtMi4wMTMgMC0zLjU2Mi0xLjQ1Ni0zLjU2Mi0zLjU2Mi4wMzEtMi4xMDYgMS41OC0zLjU5MyAzLjU5My0zLjU5M3ptNC4xMTktMi4xOTljMC0uMjE3LS4xMjQtLjM0MS4wOTMtLjM0MWguMjQ4Yy4yMTcgMCAuNTU4LjEyNC41NTguMzQxdjcuNDAzYzAgLjg2Ny40MDMuOTYuNzEyLjk5MS4xNTUgMCAuMjc5LjA5My4yNzkuMzF2LjIxN2MwIC4yMTctLjA5My4zNDEtLjM0MS4zNDEtLjU1NyAwLTEuNTQ5LS4xODYtMS41NDktMS42NzN2LTcuNTg5em02LjM1IDIuMTk5YzEuOTgyIDAgMy41OTMgMS41MTggMy41OTMgMy41MzEgMCAyLjA0NC0xLjYxMSAzLjU5My0zLjU5MyAzLjU5M3MtMy41OTMtMS41NDktMy41OTMtMy41OTNjMC0yLjAxMyAxLjYxMS0zLjUzMSAzLjU5My0zLjUzMXptMCA2LjMxOWMxLjQ1NiAwIDIuNjMzLTEuMTc3IDIuNjMzLTIuNzg4IDAtMS41NDktMS4xNzctMi42OTUtMi42MzMtMi42OTVhMi42NyAyLjY3IDAgMCAwLTIuNjY0IDIuNjk1Yy4wMzEgMS41OCAxLjIwOCAyLjc4OCAyLjY2NCAyLjc4OHptMTUuNDU2LTYuMzE5YTIuNDUgMi40NSAwIDAgMSAyLjIzIDEuMzYzaC4wMzFzLS4wMzEtLjIxNy0uMDMxLS41MjZ2LTMuMDY2YzAtLjIxNy0uMDkzLS4zNDEuMTI0LS4zNDFoLjI0OGMuMjE3IDAgLjU1OC4xMjQuNTU4LjM0MXY4LjgyN2MwIC4yMTctLjA5My4zNDEtLjMxLjM0MWgtLjIxN2MtLjIxNyAwLS4zNDEtLjA5My0uMzQxLS4zMXYtLjUyN2MwLS4yNDguMDYyLS40MzQuMDYyLS40MzRoLS4wMzFzLS41ODkgMS40MjUtMi4zNTQgMS40MjVjLTEuODI3IDAtMi45NzMtMS40NTYtMi45NzMtMy41NjItLjA2Mi0yLjEwNiAxLjIwOC0zLjUzMSAzLjAwNC0zLjUzMWgwem0uMDMxIDYuMzE5YzEuMTQ2IDAgMi4xOTktLjgwNSAyLjE5OS0yLjc1NyAwLTEuMzk0LS43MTItMi43MjYtMi4xNjgtMi43MjYtMS4yMDggMC0yLjE5OS45OTEtMi4xOTkgMi43MjYuMDMxIDEuNjczLjg5OCAyLjc1NyAyLjE2OCAyLjc1N3ptLTU2LjU1OC42NWguMjQ4Yy4yMTcgMCAuMzQxLS4xMjQuMzQxLS4zNDF2LTYuNjI4YzAtMS4wNTMgMS4xNDYtMS43OTYgMi40NDctMS43OTZzMi40NDcuNzQzIDIuNDQ3IDEuNzk2djYuNjU5YzAgLjIxNy4xMjQuMzQxLjM0MS4zNDFoLjI0OGMuMjE3IDAgLjMxLS4xMjQuMzEtLjM0MXYtNi43MjFjMC0xLjc2Ni0xLjc2NS0yLjYzMy0zLjM3Ni0yLjYzM2gwIDAgMCAwYy0xLjU0OSAwLTMuMzE0Ljg2Ny0zLjMxNCAyLjYzM3Y2LjY5YzAgLjIxNy4wOTMuMzQxLjMxLjM0MXptNTEuNjk1LTYuODE0aC0uMjQ4Yy0uMjE3IDAtLjM0MS4xMjQtLjM0MS4zNDF2My43NDhjMCAxLjA1My0uNjgxIDIuMDEzLTIuMDEzIDIuMDEzLTEuMzAxIDAtMi4wMTMtLjk2LTIuMDEzLTIuMDEzdi0zLjc0OGMwLS4yMTctLjEyNC0uMzQxLS4zNDEtLjM0MUg1NC4zYy0uMjE3IDAtLjMxLjEyNC0uMzEuMzQxdjMuOTk2YzAgMS43NjUgMS4zMDEgMi42MzMgMi45MTIgMi42MzNoMCAwIDAgMGMxLjYxMSAwIDIuOTExLS44NjcgMi45MTEtMi42MzN2LTMuOTk2Yy4wMzEtLjIxNy0uMDkzLS4zNDEtLjMxLS4zNDFoMHptLTMwLjY2NC0uMDMxYy0uMDYyIDAtLjE1NS4wNjItLjIxNy4xNTVsLTEuMjM5IDEuNDg3LS45MjkgMS4xMTUtMS40MjUtMS43MDQtLjc3NC0uOTI5Yy0uMDYyLS4wOTMtLjE1NS0uMTI0LS4yMTctLjEyNHMtLjE1NS4wMzEtLjI0OC4wOTNsLS4xODYuMTU1Yy0uMTU1LjEyNC0uMTU1LjI3OS0uMDMxLjQ2NWwxLjIzOSAxLjQ4NyAxLjA1MyAxLjIzOS0xLjUxOCAxLjgyN2gwbC0uNzc0LjkyOWMtLjEyNC4xNTUtLjEyNC4zNDEuMDMxLjQ5NmwuMTg2LjE1NWMuMTU1LjEyNC4zMS4wOTMuNDY1LS4wNjJsMS4yMzktMS40ODcuOTI5LTEuMTE1IDEuNDI1IDEuNzA0aDBsLjc3NC45MjljLjEyNC4xNTUuMzEuMTg2LjQ2NS4wMzFsLjE4Ni0uMTU1Yy4xNTUtLjEyNC4xNTUtLjI3OS4wMzEtLjQ2NWwtMS4yMzktMS40ODctMS4wNTMtMS4yMzkgMS41MTgtMS44MjdoMGwuNzc0LS45MjljLjEyNC0uMTU1LjEyNC0uMzQxLS4wMzEtLjQ5NWwtLjE4Ni0uMTg2Yy0uMDkzLS4wNjItLjE1NS0uMDkzLS4yNDgtLjA2MmgweiIgZmlsbD0iIzAwODJjOSIgZmlsbC1ydWxlPSJub256ZXJvIiBzdHJva2U9Im5vbmUiLz48L3N5bWJvbD48L3N2Zz4=" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Nextcloud", - "typeVersion": 1 - } - ], - "categories": [ - { - "id": 2, - "name": "Sales" - }, - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "image": [] - } -} diff --git a/cypress/fixtures/Test_Workflow_pairedItem_incomplete_manual_bug.json b/cypress/fixtures/Test_Workflow_pairedItem_incomplete_manual_bug.json deleted file mode 100644 index 95b38e72924..00000000000 --- a/cypress/fixtures/Test_Workflow_pairedItem_incomplete_manual_bug.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "name": "Test Workflow pairedItem incomplete manual bug", - "nodes": [ - { - "parameters": {}, - "id": "f26332f3-c61a-4843-94bd-64a73ad161ff", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 860, - 340 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "bd522794-d056-48b8-9204-26f7d68288d9", - "name": "test", - "value": "a", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "fae0c907-e2bf-4ecf-82be-f9caa209f925", - "name": "Init Data", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1080, - 340 - ] - }, - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "8db21b4b-1675-4e63-b092-7fcc45a86547", - "leftValue": "={{ $json.test }}", - "rightValue": "b", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "options": {} - }, - "id": "f7990edd-2c0f-42e6-b3ce-74c7df02b6a4", - "name": "If", - "type": "n8n-nodes-base.if", - "typeVersion": 2, - "position": [ - 1300, - 340 - ] - }, - { - "parameters": {}, - "id": "850d48f5-0689-4cab-b30c-30e179577c82", - "name": "NoOp1", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1540, - 200 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "bd522794-d056-48b8-9204-26f7d68288d9", - "name": "test2", - "value": "={{ $('Init Data').item.json.test }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "91d93c3a-a557-465e-812b-266d6277b279", - "name": "Test Expression", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1540, - 440 - ] - } - ], - "pinData": {}, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Init Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Init Data": { - "main": [ - [ - { - "node": "If", - "type": "main", - "index": 0 - } - ] - ] - }, - "If": { - "main": [ - [ - { - "node": "NoOp1", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Test Expression", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "765a6d9b-d667-4a59-9bd7-b0bc2627b008", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" - }, - "id": "qnGQYw8TD58xs214", - "tags": [] -} diff --git a/cypress/fixtures/Test_ndv_search.json b/cypress/fixtures/Test_ndv_search.json deleted file mode 100644 index 71086b5c0ad..00000000000 --- a/cypress/fixtures/Test_ndv_search.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "name": "NDV search bugs (introduced by schema view?)", - "nodes": [ - { - "parameters": {}, - "id": "55635c7b-92ee-4d2d-a0c0-baff9ab071da", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "position": [ - 800, - 380 - ], - "typeVersion": 1 - }, - { - "parameters": { - "operation": "getAllPeople" - }, - "id": "4737af43-e49b-4c92-b76f-32605c047114", - "name": "Customer Datastore (n8n training)", - "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", - "typeVersion": 1, - "position": [ - 1020, - 380 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [] - }, - "includeOtherFields": true, - "options": {} - }, - "id": "8cc9b374-1856-4f3f-9315-08e6e27840d8", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1240, - 380 - ] - } - ], - "pinData": { - "Customer Datastore (n8n training)": [ - { - "json": { - "id": "23423532", - "name": "Jay Gatsby", - "email": "gatsby@west-egg.com", - "notes": "Keeps asking about a green light??", - "country": "US", - "created": "1925-04-10" - } - }, - { - "json": { - "id": "23423533", - "name": "José Arcadio Buendía", - "email": "jab@macondo.co", - "notes": "Lots of people named after him. Very confusing", - "country": "CO", - "created": "1967-05-05" - } - }, - { - "json": { - "id": "23423534", - "name": "Max Sendak", - "email": "info@in-and-out-of-weeks.org", - "notes": "Keeps rolling his terrible eyes", - "country": "US", - "created": "1963-04-09" - } - }, - { - "json": { - "id": "23423535", - "name": "Zaphod Beeblebrox", - "email": "captain@heartofgold.com", - "notes": "Felt like I was talking to more than one person", - "country": null, - "created": "1979-10-12" - } - }, - { - "json": { - "id": "23423536", - "name": "Edmund Pevensie", - "email": "edmund@narnia.gov", - "notes": "Passionate sailor", - "country": "UK", - "created": "1950-10-16" - } - } - ] - }, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Customer Datastore (n8n training)", - "type": "main", - "index": 0 - } - ] - ] - }, - "Customer Datastore (n8n training)": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "20178044-fb64-4443-88dd-e941517520d0", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "be251a83c052a9862eeac953816fbb1464f89dfbf79d7ac490a8e336a8cc8bfd" - }, - "id": "aBVnTRON9Y2cSmse", - "tags": [] -} diff --git a/cypress/fixtures/Test_ndv_two_branches_of_same_parent_false_populated.json b/cypress/fixtures/Test_ndv_two_branches_of_same_parent_false_populated.json deleted file mode 100644 index 8fb74eded85..00000000000 --- a/cypress/fixtures/Test_ndv_two_branches_of_same_parent_false_populated.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 2 - }, - "conditions": [ - { - "id": "6f0cf983-824b-4339-a5de-6b374a23b4b0", - "leftValue": "={{ $json.a }}", - "rightValue": 3, - "operator": { - "type": "number", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "options": {} - }, - "type": "n8n-nodes-base.if", - "typeVersion": 2.2, - "position": [220, 0], - "id": "1755282a-ec4a-4d02-a833-0316ca413cc4", - "name": "If" - }, - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [0, 0], - "id": "de1e7acf-12d8-4e56-ba42-709ffb397db2", - "name": "When clicking ‘Execute workflow’" - }, - { - "parameters": { - "category": "randomData" - }, - "type": "n8n-nodes-base.debugHelper", - "typeVersion": 1, - "position": [580, 0], - "id": "86440d33-f833-453c-bcaa-fff7e0083501", - "name": "DebugHelper", - "alwaysOutputData": true - } - ], - "connections": { - "If": { - "main": [ - [ - { - "node": "DebugHelper", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "DebugHelper", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "If", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "When clicking ‘Execute workflow’": [ - { - "a": 1 - }, - { - "a": 2 - } - ] - } -} diff --git a/cypress/fixtures/Test_workflow-actions_import_nodes_empty_name.json b/cypress/fixtures/Test_workflow-actions_import_nodes_empty_name.json deleted file mode 100644 index f1b5392faa0..00000000000 --- a/cypress/fixtures/Test_workflow-actions_import_nodes_empty_name.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "meta": { - "instanceId": "4a31be0d29cfa6246ba62b359030d712af57b98c5dfe6a7ee8beee0a46c5b5a4" - }, - "nodes": [ - { - "parameters": { - "operation": "get" - }, - "id": "5b084875-bd5e-4731-9591-18d2c8996945", - "name": "", - "type": "n8n-nodes-base.gmail", - "typeVersion": 2.1, - "position": [ - 900, - 460 - ] - }, - { - "parameters": {}, - "id": "449ab540-d9d7-480d-b131-05e9989a69cd", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "operation": "get" - }, - "id": "3a791321-6f0c-4f92-91e5-20e1be0d4964", - "name": "Gmail", - "type": "n8n-nodes-base.gmail", - "typeVersion": 2.1, - "position": [ - 680, - 460 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Gmail", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail": { - "main": [ - [ - { - "node": "Gmail1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/Test_workflow-actions_paste-data.json b/cypress/fixtures/Test_workflow-actions_paste-data.json deleted file mode 100644 index c7342ce3964..00000000000 --- a/cypress/fixtures/Test_workflow-actions_paste-data.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "669258f419ee5d9faf0a484944244a47fcc28c541f3c6c874e50a171a0be1e6b" - }, - "nodes": [ - { - "parameters": { - "rule": { - "interval": [ - {} - ] - } - }, - "id": "54b1cdeb-b453-4568-8107-c17fcf2aa25a", - "name": "Schedule Trigger", - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1, - "position": [ - 240, - 560 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "5f6dffef-61f7-459d-930c-ef701d08d49a", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "rules": { - "rules": [ - { - "outputKey": "a" - } - ] - } - }, - "id": "c07d3a12-1ee2-4131-bec2-ab366457d042", - "name": "Old version Switch Node", - "type": "n8n-nodes-base.switch", - "typeVersion": 2, - "position": [ - 460, - 680 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "182a833d-3b93-4e86-a0db-3ceb19d6562b", - "name": "Loop Over Items", - "type": "n8n-nodes-base.splitInBatches", - "typeVersion": 3, - "position": [ - 720, - 560 - ] - }, - { - "parameters": {}, - "id": "b0d0aeb7-0c8f-4810-8b78-6c0db3c9a486", - "name": "Replace Me", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 900, - 560 - ] - } - ], - "connections": { - "Schedule Trigger": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Old version Switch Node", - "type": "main", - "index": 0 - }, - { - "node": "Loop Over Items", - "type": "main", - "index": 0 - } - ] - ] - }, - "Loop Over Items": { - "main": [ - null, - [ - { - "node": "Replace Me", - "type": "main", - "index": 0 - } - ] - ] - }, - "Replace Me": { - "main": [ - [ - { - "node": "Loop Over Items", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} - } diff --git a/cypress/fixtures/Test_workflow_1.json b/cypress/fixtures/Test_workflow_1.json deleted file mode 100644 index d10c44beca0..00000000000 --- a/cypress/fixtures/Test_workflow_1.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "Test workflow 1", - "nodes": [ - { - "parameters": {}, - "id": "a2f85497-260d-4489-a957-2b7d88e2f33d", - "name": "On clicking 'execute'", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [220, 260] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "9493d278-1ede-47c9-bedf-92ac3a737c65", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [400, 260] - } - ], - "pinData": {}, - "connections": { - "On clicking 'execute'": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [[]] - } - }, - "active": false, - "settings": {}, - "hash": "a59c7b1c97b1741597afae0fcd43ebef", - "id": 3, - "meta": { - "instanceId": "a5280676597d00ecd0ea712da7f9cf2ce90174a791a309112731f6e44d162f35" - }, - "tags": [ - { - "name": "some-tag-1", - "createdAt": "2022-11-10T13:43:34.001Z", - "updatedAt": "2022-11-10T13:43:34.001Z", - "id": "6" - }, - { - "name": "some-tag-2", - "createdAt": "2022-11-10T13:43:39.778Z", - "updatedAt": "2022-11-10T13:43:39.778Z", - "id": "7" - } - ] -} diff --git a/cypress/fixtures/Test_workflow_2.json b/cypress/fixtures/Test_workflow_2.json deleted file mode 100644 index 3083895c2b1..00000000000 --- a/cypress/fixtures/Test_workflow_2.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "Test workflow 2", - "nodes": [ - { - "parameters": {}, - "id": "624e0991-5dac-468b-b872-a9d35cb2c7d1", - "name": "On clicking 'execute'", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [360, 260] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "48823b3a-ec82-4a05-84b8-24ac2747e648", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [580, 260] - } - ], - "pinData": {}, - "connections": { - "On clicking 'execute'": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "hash": "4d2e29ffcae2a12bdd28a7abe9681a6b", - "id": 4, - "meta": { - "instanceId": "a5280676597d00ecd0ea712da7f9cf2ce90174a791a309112731f6e44d162f35" - }, - "tags": [ - { - "name": "other-tag-1", - "createdAt": "2022-11-10T13:45:43.821Z", - "updatedAt": "2022-11-10T13:45:43.821Z", - "id": "8" - }, - { - "name": "other-tag-2", - "createdAt": "2022-11-10T13:45:46.881Z", - "updatedAt": "2022-11-10T13:45:46.881Z", - "id": "9" - } - ] -} diff --git a/cypress/fixtures/Test_workflow_3.json b/cypress/fixtures/Test_workflow_3.json deleted file mode 100644 index 43313c1f602..00000000000 --- a/cypress/fixtures/Test_workflow_3.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "name": "My workflow", - "nodes": [ - { - "parameters": { - "rule": { - "interval": [ - {} - ] - } - }, - "id": "0f7d87ee-19c6-4576-bdff-1f3c4739392c", - "name": "Schedule Trigger", - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1, - "position": [ - 720, - 300 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "2b0f25a2-9483-4579-9f6d-91b7ac2fcb71", - "name": "other", - "value": "", - "type": "string" - } - ] - } - }, - "id": "2dfc690a-95cf-48c2-85a6-2b3bb8cd1d1d", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 920, - 300 - ] - }, - { - "id": "9bee04af-1bfc-4be2-a704-e975cb887ced", - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1120, - 300 - ], - "parameters": { - "assignments": { - "assignments": [ - { - "id": "2b0f25a2-9483-4579-9f6d-91b7ac2fcb71", - "name": "other", - "value": "", - "type": "string" - } - ] - } - } - } - ], - "pinData": { - "Schedule Trigger": [ - { - "json": { - "input": [ - { - "count": 0, - "with space": "!!", - "with.dot": "!!", - "with\"quotes": "!!" - } - ] - } - }, - { - "json": { - "input": [ - { - "count": 1 - } - ] - } - } - ] - }, - "connections": { - "Schedule Trigger": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "versionId": "c26af749-dacb-45ef-8071-98aba8688075", - "id": "1", - "meta": { - "instanceId": "fe45a93dd232270eb40d3ba1f7907ad3935bbd72ad5e4ee09ff61e96674f9aef" - }, - "tags": [] -} diff --git a/cypress/fixtures/Test_workflow_4_executions_view.json b/cypress/fixtures/Test_workflow_4_executions_view.json deleted file mode 100644 index 2af7a1df290..00000000000 --- a/cypress/fixtures/Test_workflow_4_executions_view.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "meta": { - "instanceId": "6b85439d79c07750ea49eced4bc2a12b283cfcba0ab2917cd4f3fee36080e869" - }, - "nodes": [ - { - "parameters": { - "jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n error\n}\n\nreturn $input.all();" - }, - "id": "d0ab7e12-0e1b-4c08-8081-83107794f37d", - "name": "Error", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - 680, - 460 - ], - "disabled": true - }, - { - "parameters": {}, - "id": "f5026145-66c1-463c-8ac8-46a1309a6632", - "name": "On clicking 'execute'", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - }, - "id": "9926f884-348a-4af0-872e-dd7c8b3da811", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - 900, - 460 - ] - } - ], - "connections": { - "Error": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "On clicking 'execute'": { - "main": [ - [ - { - "node": "Error", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "tags": [ - { - "name": "some-tag-1", - "createdAt": "2022-11-10T13:43:34.001Z", - "updatedAt": "2022-11-10T13:43:34.001Z", - "id": "6" - }, - { - "name": "some-tag-2", - "createdAt": "2022-11-10T13:43:39.778Z", - "updatedAt": "2022-11-10T13:43:39.778Z", - "id": "7" - } - ] -} diff --git a/cypress/fixtures/Test_workflow_5.json b/cypress/fixtures/Test_workflow_5.json deleted file mode 100644 index 927e28fd4b2..00000000000 --- a/cypress/fixtures/Test_workflow_5.json +++ /dev/null @@ -1,291 +0,0 @@ -{ - "meta": { - "instanceId": "8147b3a74cd161276e0f3bfc17369a724afab0d377593fada8be82d34c0c6a95" - }, - "nodes": [ - { - "parameters": { - "jsCode": "return [\n {\n id: 6666\n },\n {\n id: 3333\n },\n {\n id: 9999\n },\n {\n id: 1111\n },\n {\n id: 4444\n },\n {\n id: 8888\n },\n]" - }, - "id": "5f023c7c-67ca-47a0-8a90-8227fcf29b9c", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - -520, - 580 - ] - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "id", - "value": "={{ $json.id }}" - } - ] - }, - "options": {} - }, - "id": "bd454282-9dd7-465f-9b9a-654a0c8532ec", - "name": "Set2", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - -40, - 780 - ] - }, - { - "parameters": {}, - "id": "ef63cdc5-50bc-4525-9873-7e7f7589a60e", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -740, - 580 - ] - }, - { - "parameters": { - "sortFieldsUi": { - "sortField": [ - { - "fieldName": "id" - } - ] - }, - "options": {} - }, - "id": "555a150c-d735-4331-b628-c1f1cfed2da1", - "name": "Sort", - "type": "n8n-nodes-base.sort", - "typeVersion": 1, - "position": [ - -280, - 580 - ] - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "id", - "value": "={{ $json.id }}" - } - ] - }, - "options": {} - }, - "id": "02372cb6-aac8-45c3-8600-f699901289ac", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - -60, - 580 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "00d73944-218c-4896-af68-3f2855a922d1", - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - -280, - 780 - ] - }, - { - "parameters": { - "conditions": { - "number": [ - { - "value1": "={{ $json.id }}", - "operation": "smallerEqual", - "value2": 6666 - } - ] - } - }, - "id": "211a7bef-32d1-4928-9cef-3a45f2e61379", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 160, - 580 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "dcbd4745-832f-43d8-8a3c-dd80e8ca2777", - "name": "Set3", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - 140, - 780 - ] - }, - { - "parameters": { - "jsCode": "return [\n {\n id: 1000\n },\n {\n id: 300\n },\n {\n id: 2000\n },\n {\n id: 100\n },\n {\n id: 400\n },\n {\n id: 1300\n },\n]" - }, - "id": "ec9c8f16-f3c8-4054-a6e9-4f1ebcdebb71", - "name": "Code1", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - -520, - 780 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "42e89478-a53a-4d10-b20c-1dc5d5f953d5", - "name": "Set4", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "5085eb1c-0345-4b9d-856a-2955279f2c5d", - "name": "Set5", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [ - 460, - 660 - ] - } - ], - "connections": { - "Code": { - "main": [ - [ - { - "node": "Sort", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set2": { - "main": [ - [ - { - "node": "Set3", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - }, - { - "node": "Code1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sort": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Set2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Set2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "Set4", - "type": "main", - "index": 0 - }, - { - "node": "Set5", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Set5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code1": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/fixtures/Test_workflow_filter.json b/cypress/fixtures/Test_workflow_filter.json deleted file mode 100644 index 1ae3dbb9cbe..00000000000 --- a/cypress/fixtures/Test_workflow_filter.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "name": "Filter test", - "nodes": [ - { - "parameters": {}, - "id": "f332a7d1-31b4-4e78-b31e-9e8db945bf3f", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -60, - 480 - ] - }, - { - "parameters": { - "jsCode": "return [\n {\n \"label\": \"Apple\",\n tags: [],\n meta: {foo: 'bar'}\n },\n {\n \"label\": \"Banana\",\n tags: ['exotic'],\n meta: {}\n },\n {\n \"label\": \"Pear\",\n tags: ['other'],\n meta: {}\n },\n {\n \"label\": \"Orange\",\n meta: {}\n }\n]" - }, - "id": "60697c7f-3948-4790-97ba-8aba03d02ac2", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 160, - 480 - ] - }, - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "" - }, - "conditions": [ - { - "leftValue": "={{ $json.tags }}", - "rightValue": "exotic", - "operator": { - "type": "array", - "operation": "contains", - "rightType": "any" - } - }, - { - "leftValue": "={{ $json.meta }}", - "rightValue": "", - "operator": { - "type": "object", - "operation": "notEmpty", - "singleValue": true - } - }, - { - "leftValue": "={{ $json.label }}", - "rightValue": "Pea", - "operator": { - "type": "string", - "operation": "startsWith", - "rightType": "string" - } - } - ], - "combinator": "or" - }, - "options": {} - }, - "id": "7531191b-5ac3-45dc-8afb-27ae83d8f33a", - "name": "If", - "type": "n8n-nodes-base.if", - "typeVersion": 2, - "position": [ - 380, - 480 - ] - }, - { - "parameters": {}, - "id": "d8c614ea-0bbf-4b12-ad7d-c9ebe09ce583", - "name": "Then", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 600, - 400 - ] - }, - { - "parameters": {}, - "id": "69364770-60d2-4ef4-9f29-9570718a9a10", - "name": "Else", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 600, - 580 - ] - } - ], - "pinData": {}, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "If", - "type": "main", - "index": 0 - } - ] - ] - }, - "If": { - "main": [ - [ - { - "node": "Then", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Else", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "a6249f48-d88f-4b80-9ed9-79555e522d48", - "id": "BWUTRs5RHxVgQ4uT", - "meta": { - "instanceId": "78577815012af39cf16dad7a787b0898c42fb7514b8a7f99b2136862c2af502c" - }, - "tags": [] -} diff --git a/cypress/fixtures/Test_workflow_form_switch.json b/cypress/fixtures/Test_workflow_form_switch.json deleted file mode 100644 index 78349c3ae55..00000000000 --- a/cypress/fixtures/Test_workflow_form_switch.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "My workflow 8", - "nodes": [ - { - "parameters": { - "path": "d1cba915-ca18-4425-bcfb-133205fc815a", - "formTitle": "test", - "formFields": { - "values": [ - { - "fieldLabel": "test" - } - ] - }, - "options": {} - }, - "id": "9e685367-fb94-4376-a9a4-7f311d9f7e2d", - "name": "n8n Form Trigger", - "type": "n8n-nodes-base.formTrigger", - "typeVersion": 2, - "position": [ - 620, - 580 - ], - "webhookId": "d1cba915-ca18-4425-bcfb-133205fc815a" - }, - { - "parameters": {}, - "id": "0f4dfe66-51c0-4378-9eab-680f8140a572", - "name": "Switch", - "type": "n8n-nodes-base.switch", - "typeVersion": 2, - "position": [ - 800, - 580 - ] - } - ], - "pinData": { - "n8n Form Trigger": [ - { - "json": { - "name": "First item", - "code": 1 - } - }, - { - "json": { - "name": "Second item", - "code": 2 - } - } - ] - }, - "connections": { - "n8n Form Trigger": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "d6c14bc8-a69f-47bb-b5ba-fe6e9db0a3a4", - "id": "UQSimcMQJGbTeTLG", - "meta": { - "instanceId": "a786b722078489c1fa382391a9f3476c2784761624deb2dfb4634827256d51a0" - }, - "tags": [] -} \ No newline at end of file diff --git a/cypress/fixtures/Test_workflow_multiple_outputs.json b/cypress/fixtures/Test_workflow_multiple_outputs.json deleted file mode 100644 index 24152b92fdd..00000000000 --- a/cypress/fixtures/Test_workflow_multiple_outputs.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "name": "Multiple outputs", - "nodes": [ - { - "parameters": {}, - "id": "64b27674-3da6-46ce-9008-e173182efa48", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "position": [ - 16, - -32 - ], - "typeVersion": 1 - }, - { - "parameters": { - "rules": { - "values": [ - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "leftValue": "={{ $json.code }}", - "rightValue": 1, - "operator": { - "type": "number", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Item1" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "a659050f-0867-471d-8914-d499b6ad7b31", - "leftValue": "={{ $json.code }}", - "rightValue": 2, - "operator": { - "type": "number", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Item2" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "109fc001-53af-48f1-b79c-5e9afc8b94bd", - "leftValue": "={{ $json.code }}", - "rightValue": 3, - "operator": { - "type": "number", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Item3" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.switch", - "position": [ - 192, - -32 - ], - "id": "3863cc7a-8f45-46fc-a60c-36aad5b12877", - "name": "Switch", - "typeVersion": 3 - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "f71bac89-8852-41b2-98dd-cb689f011dcb", - "name": "", - "value": "", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "position": [ - 480, - -192 - ], - "id": "85940094-4656-4cdf-a871-1b3b46421de3", - "name": "Only Item 1", - "typeVersion": 3.4 - }, - { - "parameters": { - "options": {} - }, - "type": "n8n-nodes-base.set", - "position": [ - 480, - -32 - ], - "id": "a7f4e2b5-8cc9-4881-aa06-38601988740e", - "name": "Only Item 2", - "typeVersion": 3.4 - }, - { - "parameters": { - "options": {} - }, - "type": "n8n-nodes-base.set", - "position": [ - 480, - 128 - ], - "id": "7e44ad56-415a-4991-a70e-fea86c430031", - "name": "Only Item 3", - "typeVersion": 3.4 - } - ], - "pinData": { - "When clicking ‘Execute workflow’": [ - { - "json": { - "name": "First item", - "onlyOnItem1": true, - "code": 1 - } - }, - { - "json": { - "name": "Second item", - "onlyOnItem2": true, - "code": 2 - } - }, - { - "json": { - "name": "Third item", - "onlyOnItem3": true, - "code": 3 - } - } - ] - }, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - }, - "Switch": { - "main": [ - [ - { - "node": "Only Item 1", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Only Item 2", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Only Item 3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "1e2a7b45-7730-42d6-989e-f3fa80de303e", - "meta": { - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "V2ld4YU11fsHgr1z", - "tags": [] -} diff --git a/cypress/fixtures/Test_workflow_ndv_errors.json b/cypress/fixtures/Test_workflow_ndv_errors.json deleted file mode 100644 index 7f55dcee496..00000000000 --- a/cypress/fixtures/Test_workflow_ndv_errors.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "meta": { - "instanceId": "3204fc455f5cbeb4e71fdbd3b1dfaf0b088088dea3e639de49e61462b80ffc1d" - }, - "nodes": [ - { - "parameters": { - "application": { - "__rl": true, - "mode": "url", - "value": "", - "__regex": "https://airtable.com/([a-zA-Z0-9]{2,})" - }, - "table": { - "__rl": true, - "mode": "url", - "value": "", - "__regex": "https://airtable.com/[a-zA-Z0-9]{2,}/([a-zA-Z0-9]{2,})" - } - }, - "id": "e0c0cf7e-aa98-4b72-9645-6e64e2902bd1", - "name": "Airtable", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [380, 180] - } - ], - "connections": {} -} diff --git a/cypress/fixtures/Test_workflow_ndv_run_error.json b/cypress/fixtures/Test_workflow_ndv_run_error.json deleted file mode 100644 index 0e9902656e1..00000000000 --- a/cypress/fixtures/Test_workflow_ndv_run_error.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "name": "My workflow 52", - "nodes": [ - { - "parameters": { - "jsCode": "\nreturn [\n {\n \"field\": \"the same\"\n }\n];" - }, - "id": "38c14c4a-7af1-4b04-be76-f8e474c95569", - "name": "Break pairedItem chain", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 240, - 1020 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "78c4964a-c4e8-47e5-81f3-89ba778feb8b", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 40, - 1020 - ] - }, - { - "parameters": {}, - "id": "4f4c6527-d565-448a-96bd-8f5414caf8cc", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -180, - 1020 - ] - }, - { - "parameters": { - "fields": { - "values": [ - { - "stringValue": "={{ $('Edit Fields').item.json.name }}" - } - ] - }, - "options": {} - }, - "id": "44f4e5da-bfe9-4dc3-8d1f-f38e9f364754", - "name": "Error", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 460, - 1020 - ] - } - ], - "pinData": { - "Edit Fields": [ - { - "json": { - "id": "23423532", - "name": "Jay Gatsby", - "email": "gatsby@west-egg.com", - "notes": "Keeps asking about a green light??", - "country": "US", - "created": "1925-04-10" - } - }, - { - "json": { - "id": "23423533", - "name": "José Arcadio Buendía", - "email": "jab@macondo.co", - "notes": "Lots of people named after him. Very confusing", - "country": "CO", - "created": "1967-05-05" - } - }, - { - "json": { - "id": "23423534", - "name": "Max Sendak", - "email": "info@in-and-out-of-weeks.org", - "notes": "Keeps rolling his terrible eyes", - "country": "US", - "created": "1963-04-09" - } - }, - { - "json": { - "id": "23423535", - "name": "Zaphod Beeblebrox", - "email": "captain@heartofgold.com", - "notes": "Felt like I was talking to more than one person", - "country": null, - "created": "1979-10-12" - } - }, - { - "json": { - "id": "23423536", - "name": "Edmund Pevensie", - "email": "edmund@narnia.gov", - "notes": "Passionate sailor", - "country": "UK", - "created": "1950-10-16" - } - } - ] - }, - "connections": { - "Break pairedItem chain": { - "main": [ - [ - { - "node": "Error", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "Break pairedItem chain", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "ca53267f-4eb4-481d-9e09-ecb97f6b09e2", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "6fr8GiRyMlZCiDQW", - "tags": [] - } diff --git a/cypress/fixtures/Test_workflow_ndv_version.json b/cypress/fixtures/Test_workflow_ndv_version.json deleted file mode 100644 index 9f1a6e69503..00000000000 --- a/cypress/fixtures/Test_workflow_ndv_version.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Node versions", - "nodes": [ - { - "id": "2acca986-10a6-451e-b20a-86e95b50e627", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [460, 460] - }, - { - "id": "1ea0a87c-3395-4bd9-84fb-cf8b0f769cc4", - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [960, 460] - }, - { - "id": "30bb9fab-bc89-4309-b42b-0fc586519c76", - "name": "Edit Fields (old)", - "type": "n8n-nodes-base.set", - "typeVersion": 2, - "position": [800, 460] - }, - { - "id": "a266b96c-3539-4034-b24c-c86c6d0ca31e", - "name": "Edit Fields (no typeVersion)", - "type": "n8n-nodes-base.set", - "position": [1120, 460] - }, - { - "id": "273f60c9-08e7-457e-b01d-31e16c565171", - "name": "Edit Fields (latest)", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [640, 460] - } - ], - "connections": {}, - "pinData": {} -} diff --git a/cypress/fixtures/Test_workflow_partial_execution_v2.json b/cypress/fixtures/Test_workflow_partial_execution_v2.json deleted file mode 100644 index c3c8ecc7ae5..00000000000 --- a/cypress/fixtures/Test_workflow_partial_execution_v2.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "rule": { - "interval": [{}] - } - }, - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.2, - "position": [0, 0], - "id": "dcc1c5e1-c6c1-45f8-80d5-65c88d66d56e", - "name": "A" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "3d8f0810-84f0-41ce-a81b-0e7f04fd88cb", - "name": "", - "value": "", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [220, 0], - "id": "097ffa30-d37b-4de6-bd5c-ccd945f31df1", - "name": "B" - }, - { - "parameters": { - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [440, 0], - "id": "dc44e635-916f-4f76-a745-1add5762f730", - "name": "C" - } - ], - "connections": { - "A": { - "main": [ - [ - { - "node": "B", - "type": "main", - "index": 0 - } - ] - ] - }, - "B": { - "main": [ - [ - { - "node": "C", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {}, - "meta": { - "instanceId": "b0d9447cff9c96796e4ac4f00fcd899b03cfac3ab3d4f748ae686d34881eae0c" - } -} diff --git a/cypress/fixtures/Test_workflow_partial_execution_with_missing_credentials.json b/cypress/fixtures/Test_workflow_partial_execution_with_missing_credentials.json deleted file mode 100644 index cfe19e8447f..00000000000 --- a/cypress/fixtures/Test_workflow_partial_execution_with_missing_credentials.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "2be09fdcb9594c0827fd4cee80f7e590c93297d9217685f34c2250fe3144ef0c" - }, - "nodes": [ - { - "parameters": {}, - "id": "09e4325e-ede1-40cf-a1ba-58612bbc7f1b", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 820, - 400 - ] - }, - { - "parameters": { - "category": "randomData" - }, - "id": "4920bf3a-9978-4196-9dcb-8c2892e5641b", - "name": "DebugHelper", - "type": "n8n-nodes-base.debugHelper", - "typeVersion": 1, - "position": [ - 1040, - 400 - ] - }, - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "7508343e-3e99-4d12-96e4-00a35a3d4306", - "leftValue": "={{ $json.email }}", - "rightValue": ".", - "operator": { - "type": "string", - "operation": "contains" - } - } - ], - "combinator": "and" - }, - "options": {} - }, - "id": "4f6a6a4e-19b6-43f5-ba5c-e40b09d7f873", - "name": "Filter", - "type": "n8n-nodes-base.filter", - "typeVersion": 2, - "position": [ - 1260, - 400 - ] - }, - { - "parameters": { - "chatId": "123123", - "text": "1123123", - "additionalFields": {} - }, - "id": "1765f352-fc12-4fab-9c24-d666a150266f", - "name": "Telegram", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1.1, - "position": [ - 1480, - 400 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "DebugHelper", - "type": "main", - "index": 0 - } - ] - ] - }, - "DebugHelper": { - "main": [ - [ - { - "node": "Filter", - "type": "main", - "index": 0 - } - ] - ] - }, - "Filter": { - "main": [ - [ - { - "node": "Telegram", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/Test_workflow_pinned_data_in_expressions.json b/cypress/fixtures/Test_workflow_pinned_data_in_expressions.json deleted file mode 100644 index 099672810e1..00000000000 --- a/cypress/fixtures/Test_workflow_pinned_data_in_expressions.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "meta": { - "instanceId": "5bd32b91ed2a88e542012920460f736c3687a32fbb953718f6952d182231c0ff" - }, - "nodes": [ - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "a482f1fd-4815-4da4-a733-7beafb43c500", - "name": "static", - "value": "={{ $('PinnedSet').first().json.firstName }}\n{{ $('PinnedSet').itemMatching(0).json.firstName }}\n{{ $('PinnedSet').itemMatching(1).json.firstName }}\n{{ $('PinnedSet').last().json.firstName }}\n{{ $('PinnedSet').all()[0].json.firstName }}\n{{ $('PinnedSet').all()[1].json.firstName }}\n\n{{ $input.first().json.firstName }}\n{{ $input.last().json.firstName }}\n\n{{ $items()[0].json.firstName }}", - "type": "string" - }, - { - "id": "2c973f2a-7ca0-41bc-903c-7174bee251b0", - "name": "variable", - "value": "={{ $runIndex }},{{ $itemIndex }}\n{{ $node['PinnedSet'].json.firstName }}\n\n{{ $('PinnedSet').item.json.firstName }}\n\n{{ $input.item.json.firstName }}\n\n{{ $json.firstName }}\n{{ $data.firstName }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "ac55ee16-4598-48bf-ace3-a48fed1d4ff3", - "name": "NotPinnedWithExpressions", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1600, - 640 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "3058c300-b377-41b7-9c90-a01372f9b581", - "name": "firstName", - "value": "Joe", - "type": "string" - }, - { - "id": "bb871662-c23c-4234-ac0c-b78c279bbf34", - "name": "lastName", - "value": "Smith", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "300a3888-cc2f-4e61-8578-b0adbcf33450", - "name": "PinnedSet", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1340, - 640 - ] - }, - { - "parameters": {}, - "id": "426ff39a-3408-48b4-899f-60db732675f8", - "name": "Start", - "type": "n8n-nodes-base.manualTrigger", - "position": [ - 1100, - 640 - ], - "typeVersion": 1 - } - ], - "connections": { - "PinnedSet": { - "main": [ - [ - { - "node": "NotPinnedWithExpressions", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "PinnedSet", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "PinnedSet": [ - { - "firstName": "Joe", - "lastName": "Smith" - }, - { - "firstName": "Joan", - "lastName": "Summers" - } - ] - } -} diff --git a/cypress/fixtures/Test_workflow_schema_test.json b/cypress/fixtures/Test_workflow_schema_test.json deleted file mode 100644 index 6526516c27a..00000000000 --- a/cypress/fixtures/Test_workflow_schema_test.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "name": "My workflow 8", - "nodes": [ - { - "parameters": { - "operation": "getAllPeople", - "limit": 10 - }, - "id": "39cd80ce-5a8f-4339-b3d5-c4af969dd330", - "name": "Customer Datastore (n8n training)", - "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", - "typeVersion": 1, - "position": [ - 940, - 680 - ] - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "objectValue.prop1", - "value": 123 - } - ], - "string": [ - { - "name": "objectValue.prop2", - "value": "someText" - } - ] - }, - "options": { - "dotNotation": true - } - }, - "id": "6e4490f6-ba95-4400-beec-2caefdd4895a", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1300, - 680 - ] - }, - { - "parameters": {}, - "id": "58512a93-dabf-4584-817f-27c608c1bdd5", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 720, - 680 - ] - } - ], - "pinData": {}, - "connections": { - "Customer Datastore (n8n training)": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Customer Datastore (n8n training)", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "versionId": "4a4f292a-92be-427c-848a-9582527f5ed3", - "id": "8", - "meta": { - "instanceId": "032eceae7493054b723340499be69ecbf4cbe28a7ec6df676b759000750b968d" - }, - "tags": [] -} diff --git a/cypress/fixtures/Test_workflow_schema_test_pinned_data.json b/cypress/fixtures/Test_workflow_schema_test_pinned_data.json deleted file mode 100644 index 47061b524d1..00000000000 --- a/cypress/fixtures/Test_workflow_schema_test_pinned_data.json +++ /dev/null @@ -1,574 +0,0 @@ -{ - "name": "My workflow", - "nodes": [ - { - "parameters": { - "operation": "getAllPeople", - "limit": 10 - }, - "id": "441afcbf-a678-4463-bc89-7e0b6693af5c", - "name": "Customer Datastore (n8n training)", - "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", - "typeVersion": 1, - "position": [ - 720, - 440 - ] - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "objectValue.prop1", - "value": 123 - } - ], - "string": [ - { - "name": "objectValue.prop2", - "value": "someText" - } - ] - }, - "options": { - "dotNotation": true - } - }, - "id": "44094a05-b3b7-49bf-bfbf-a711e6ba45d8", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1080, - 440 - ] - }, - { - "parameters": {}, - "id": "3dc7cf26-ff25-4437-b9fd-0e8b127ebec9", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 500, - 440 - ] - } - ], - "pinData": { - "Set": [ - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - }, - { - "json": { - "key0": 0, - "key1": 1, - "key2": 2, - "key3": 3, - "key4": 4, - "key5": 5, - "key6": 6, - "key7": 7, - "key8": 8, - "key9": 9, - "key10": 10, - "key11": 11, - "key12": 12, - "key13": 13, - "key14": 14, - "key15": 15, - "key16": 16, - "key17": 17, - "key18": 18, - "key19": 19 - } - } - ] - }, - "connections": { - "Customer Datastore (n8n training)": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Customer Datastore (n8n training)", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "versionId": "", - "meta": { - "instanceId": "363581be2c2581d1b11e189456a090887e137f8393a4b5cb85641b1ee4fae479" - }, - "tags": [] -} diff --git a/cypress/fixtures/Test_workflow_webhook_with_pin_data.json b/cypress/fixtures/Test_workflow_webhook_with_pin_data.json deleted file mode 100644 index c546f0dfd61..00000000000 --- a/cypress/fixtures/Test_workflow_webhook_with_pin_data.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "name": "PinData Test", - "nodes": [ - { - "parameters": {}, - "id": "0a60e507-7f34-41c0-a0f9-697d852033b6", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 780, - 320 - ] - }, - { - "parameters": { - "path": "b0d79ddb-df2d-49b1-8555-9fa2b482608f", - "responseMode": "lastNode", - "options": {} - }, - "id": "66425ce3-450d-4aa6-a53b-a701ab89c2de", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 1.1, - "position": [ - 780, - 540 - ], - "webhookId": "b0d79ddb-df2d-49b1-8555-9fa2b482608f" - }, - { - "parameters": { - "fields": { - "values": [ - { - "name": "nodeData", - "stringValue": "init" - } - ] - }, - "include": "none", - "options": {} - }, - "id": "3211b3c5-49e9-4694-8f86-7a5783bc653a", - "name": "Init Data", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1000, - 320 - ] - }, - { - "parameters": { - "fields": { - "values": [ - { - "name": "nodeData", - "stringValue": "pin" - } - ] - }, - "options": {} - }, - "id": "97b31120-4720-4632-9d35-356f345119f7", - "name": "Pin Data", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 1240, - 320 - ] - }, - { - "parameters": {}, - "id": "1ee7be4f-7006-43bf-bb0c-29db3058a399", - "name": "End", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 1460, - 320 - ] - } - ], - "pinData": { - "Pin Data": [ - { - "json": { - "nodeData": "pin-overwritten" - } - } - ] - }, - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Init Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webhook": { - "main": [ - [ - { - "node": "Init Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Init Data": { - "main": [ - [ - { - "node": "Pin Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pin Data": { - "main": [ - [ - { - "node": "End", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "ded8577a-3ed2-4611-842c-a7922ec58b98", - "id": "weofVLZo0ssmPDrV", - "meta": { - "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" - }, - "tags": [] - } diff --git a/cypress/fixtures/Test_workflow_xml_output.json b/cypress/fixtures/Test_workflow_xml_output.json deleted file mode 100644 index f86cc9aad9b..00000000000 --- a/cypress/fixtures/Test_workflow_xml_output.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "meta": { - "instanceId": "2d1cf27f75b18bb9e146336f791c37884f4fc7ddb97c2def27c0444d106778bf" - }, - "nodes": [ - { - "parameters": {}, - "id": "8108d313-8b03-4aa4-963d-cd1c0fe8f85c", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 420, - 220 - ] - }, - { - "parameters": { - "fields": { - "values": [ - { - "name": "body", - "stringValue": " Introduction to XML John Doe 2020 1234567890 Data Science Basics Jane Smith 2019 0987654321 Programming in Python Bob Johnson 2021 5432109876 " - } - ] - }, - "options": {} - }, - "id": "45888152-7c5f-4d88-9039-660c594da084", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 640, - 220 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} - } diff --git a/cypress/fixtures/Two_schedule_triggers.json b/cypress/fixtures/Two_schedule_triggers.json deleted file mode 100644 index a990b4a4480..00000000000 --- a/cypress/fixtures/Two_schedule_triggers.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6a8c3d85-26f8-4f28-ace9-55a196a23d37", - "name": "prevNode", - "value": "={{ $prevNode.name }}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [200, -100], - "id": "351ce967-0399-4a78-848a-9cc69b831796", - "name": "Edit Fields" - }, - { - "parameters": { - "rule": { - "interval": [{}] - } - }, - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.2, - "position": [0, -100], - "id": "cf2f58a8-1fbb-4c70-b2b1-9e06bee7ec47", - "name": "Trigger A" - }, - { - "parameters": { - "rule": { - "interval": [{}] - } - }, - "type": "n8n-nodes-base.scheduleTrigger", - "typeVersion": 1.2, - "position": [0, 100], - "id": "4fade34e-2bfc-4a2e-a8ed-03ab2ed9c690", - "name": "Trigger B" - } - ], - "connections": { - "Trigger A": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trigger B": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {}, - "meta": { - "instanceId": "0dd4627b77a5a795ab9bf073e5812be94dd8d1a5f012248ef2a4acac09be12cb" - } -} diff --git a/cypress/fixtures/Webhook_set_pinned.json b/cypress/fixtures/Webhook_set_pinned.json deleted file mode 100644 index 12401db243f..00000000000 --- a/cypress/fixtures/Webhook_set_pinned.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "options": {} - }, - "id": "bd816131-d8ad-4b4c-90d6-59fdab2e6307", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 720, - 460 - ] - }, - { - "parameters": { - "httpMethod": "POST", - "path": "23fc3930-b8f9-41d9-89db-b647291a2201", - "options": {} - }, - "id": "82fe0f6c-854a-4eb9-b311-d7b43025c047", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 1, - "position": [ - 460, - 460 - ], - "webhookId": "23fc3930-b8f9-41d9-89db-b647291a2201" - } - ], - "connections": { - "Webhook": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "Webhook": [ - { - "headers": { - "host": "localhost:5678", - "content-length": "37", - "accept": "*/*", - "content-type": "application/json", - "accept-encoding": "gzip" - }, - "params": {}, - "query": {}, - "body": { - "here": "be", - "dragons": true - }, - "webhookUrl": "http://localhost:5678/webhook-test/23fc3930-b8f9-41d9-89db-b647291a2201", - "executionMode": "test" - } - ] - } -} diff --git a/cypress/fixtures/Webhook_wait_set.json b/cypress/fixtures/Webhook_wait_set.json deleted file mode 100644 index 64ef060fdfb..00000000000 --- a/cypress/fixtures/Webhook_wait_set.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "Webhook wait set", - "nodes": [ - { - "parameters": { - "path": "23fc3930-b8f9-41d9-89db-b647291a2201", - "options": {} - }, - "id": "70d84fe7-e221-4978-a15e-3984f2df645f", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 1, - "position": [ - 500, - 580 - ], - "webhookId": "23fc3930-b8f9-41d9-89db-b647291a2201" - }, - { - "parameters": { - "amount": 2, - "unit": "seconds" - }, - "id": "7f15f650-99bc-400b-8db8-67be53003fa3", - "name": "Wait", - "type": "n8n-nodes-base.wait", - "typeVersion": 1, - "position": [ - 720, - 580 - ], - "webhookId": "18a12605-1fbd-49da-854e-268ab6db1ea3" - }, - { - "parameters": { - "options": {} - }, - "id": "5bdafae4-e297-463f-991f-b8ea14983026", - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 940, - 580 - ] - } - ], - "pinData": {}, - "connections": { - "Webhook": { - "main": [ - [ - { - "node": "Wait", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wait": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "versionId": "0c67e557-1faf-446e-881e-3245228c627e", - "id": "1038", - "meta": { - "instanceId": "8a47b83b4479b11330fdf21ccc96d4a8117035a968612e452b4c87bfd09c16c7" - }, - "tags": [] -} diff --git a/cypress/fixtures/Workflow_template_write_http_query.json b/cypress/fixtures/Workflow_template_write_http_query.json deleted file mode 100644 index 3187bccd617..00000000000 --- a/cypress/fixtures/Workflow_template_write_http_query.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "workflow": { - "id": 1, - "name": "Write HTTP query string on image", - "views": 116, - "recentViews": 9766, - "totalViews": 116, - "createdAt": "2019-08-31T00:13:41.893Z", - "description": "1. Receives data from an incoming HTTP Request\n1. Reads file from internet\n ![workflow-screenshot](fileId:14) \n1. Writes data on image\n1. Returns the data\n\nThe URL to call will look like this:\nhttp://localhost:5678/webhook-test/webhook/test?name=Jim\n\nOnce called it will return an image like this:\n\n![reponseimage.jpeg](fileId:4)", - "workflow": { - "nodes": [ - { - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "position": [ - 700, - 350 - ], - "parameters": { - "path": "test", - "responseData": "firstEntryBinary", - "responseMode": "lastNode" - }, - "typeVersion": 1 - }, - { - "name": "Edit Image", - "type": "n8n-nodes-base.editImage", - "position": [ - 1100, - 350 - ], - "parameters": { - "text": "=They found the killer it was {{$node[\"Webhook\"].data[\"query\"][\"name\"]}}!", - "fontSize": "=25", - "operation": "text", - "positionX": 150, - "positionY": 180, - "lineLength": 18 - }, - "typeVersion": 1 - }, - { - "name": "Read File URL", - "type": "n8n-nodes-base.httpRequest", - "position": [ - 900, - 350 - ], - "parameters": { - "url": "https://www.needpix.com/file_download.php?url=//storage.needpix.com/thumbs/newspaper-412809_1280.jpg", - "responseFormat": "file" - }, - "typeVersion": 1 - } - ], - "connections": { - "Webhook": { - "main": [ - [ - { - "node": "Read File URL", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read File URL": { - "main": [ - [ - { - "node": "Edit Image", - "type": "main", - "index": 0 - } - ] - ] - } - } - }, - "lastUpdatedBy": 11, - "workflowInfo": { - "nodeCount": 3, - "nodeTypes": { - "n8n-nodes-base.webhook": { - "count": 1 - }, - "n8n-nodes-base.editImage": { - "count": 1 - }, - "n8n-nodes-base.httpRequest": { - "count": 1 - } - } - }, - "user": { - "username": "jan" - }, - "nodes": [ - { - "id": 9, - "icon": "fa:image", - "name": "n8n-nodes-base.editImage", - "defaults": { - "name": "Edit Image", - "color": "#553399" - }, - "iconData": { - "icon": "image", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - }, - { - "id": 27, - "name": "Marketing" - } - ], - "displayName": "Edit Image", - "typeVersion": 1 - }, - { - "id": 19, - "icon": "file:httprequest.svg", - "name": "n8n-nodes-base.httpRequest", - "defaults": { - "name": "HTTP Request", - "color": "#0004F5" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDAgNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQwIDIwQzQwIDguOTUzMTQgMzEuMDQ2OSAwIDIwIDBDOC45NTMxNCAwIDAgOC45NTMxNCAwIDIwQzAgMzEuMDQ2OSA4Ljk1MzE0IDQwIDIwIDQwQzMxLjA0NjkgNDAgNDAgMzEuMDQ2OSA0MCAyMFpNMjAgMzYuOTQ1OEMxOC44ODUyIDM2Ljk0NTggMTcuMTM3OCAzNS45NjcgMTUuNDk5OCAzMi42OTg1QzE0Ljc5NjQgMzEuMjkxOCAxNC4xOTYxIDI5LjU0MzEgMTMuNzUyNiAyNy42ODQ3SDI2LjE4OThDMjUuODA0NSAyOS41NDAzIDI1LjIwNDQgMzEuMjkwMSAyNC41MDAyIDMyLjY5ODVDMjIuODYyMiAzNS45NjcgMjEuMTE0OCAzNi45NDU4IDIwIDM2Ljk0NThaTTEyLjkwNjQgMjBDMTIuOTA2NCAyMS42MDk3IDEzLjAwODcgMjMuMTY0IDEzLjIwMDMgMjQuNjMwNUgyNi43OTk3QzI2Ljk5MTMgMjMuMTY0IDI3LjA5MzYgMjEuNjA5NyAyNy4wOTM2IDIwQzI3LjA5MzYgMTguMzkwMyAyNi45OTEzIDE2LjgzNiAyNi43OTk3IDE1LjM2OTVIMTMuMjAwM0MxMy4wMDg3IDE2LjgzNiAxMi45MDY0IDE4LjM5MDMgMTIuOTA2NCAyMFpNMjAgMy4wNTQxOUMyMS4xMTQ5IDMuMDU0MTkgMjIuODYyMiA0LjAzMDc4IDI0LjUwMDEgNy4zMDAzOUMyNS4yMDY2IDguNzE0MDggMjUuODA3MiAxMC40MDY3IDI2LjE5MiAxMi4zMTUzSDEzLjc1MDFDMTQuMTkzMyAxMC40MDQ3IDE0Ljc5NDIgOC43MTI1NCAxNS40OTk4IDcuMzAwNjRDMTcuMTM3NyA0LjAzMDgzIDE4Ljg4NTEgMy4wNTQxOSAyMCAzLjA1NDE5Wk0zMC4xNDc4IDIwQzMwLjE0NzggMTguNDA5OSAzMC4wNTQzIDE2Ljg2MTcgMjkuODIyNyAxNS4zNjk1SDM2LjMwNDJDMzYuNzI1MiAxNi44NDIgMzYuOTQ1OCAxOC4zOTY0IDM2Ljk0NTggMjBDMzYuOTQ1OCAyMS42MDM2IDM2LjcyNTIgMjMuMTU4IDM2LjMwNDIgMjQuNjMwNUgyOS44MjI3QzMwLjA1NDMgMjMuMTM4MyAzMC4xNDc4IDIxLjU5MDEgMzAuMTQ3OCAyMFpNMjYuMjc2NyA0LjI1NTExQzI3LjYzNjUgNi4zNjAxOSAyOC43MTEgOS4xMzIgMjkuMzc3NCAxMi4zMTUzSDM1LjEwNDZDMzMuMjUxMSA4LjY2OCAzMC4xMDcgNS43ODM0NiAyNi4yNzY3IDQuMjU1MTFaTTEwLjYyMjYgMTIuMzE1M0g0Ljg5MjkzQzYuNzUxNDcgOC42Njc4NCA5Ljg5MzUxIDUuNzgzNDEgMTMuNzIzMiA0LjI1NTEzQzEyLjM2MzUgNi4zNjAyMSAxMS4yODkgOS4xMzIwMSAxMC42MjI2IDEyLjMxNTNaTTMuMDU0MTkgMjBDMy4wNTQxOSAyMS42MDMgMy4yNzc0MyAyMy4xNTc1IDMuNjk0ODQgMjQuNjMwNUgxMC4xMjE3QzkuOTQ2MTkgMjMuMTQyIDkuODUyMjIgMjEuNTk0MyA5Ljg1MjIyIDIwQzkuODUyMjIgMTguNDA1NyA5Ljk0NjE5IDE2Ljg1OCAxMC4xMjE3IDE1LjM2OTVIMy42OTQ4NEMzLjI3NzQzIDE2Ljg0MjUgMy4wNTQxOSAxOC4zOTcgMy4wNTQxOSAyMFpNMjYuMjc2NiAzNS43NDI3QzI3LjYzNjUgMzMuNjM5MyAyOC43MTEgMzAuODY4IDI5LjM3NzQgMjcuNjg0N0gzNS4xMDQ2QzMzLjI1MSAzMS4zMzIyIDMwLjEwNjggMzQuMjE3OSAyNi4yNzY2IDM1Ljc0MjdaTTEzLjcyMzQgMzUuNzQyN0M5Ljg5MzY5IDM0LjIxNzkgNi43NTE1NSAzMS4zMzI0IDQuODkyOTMgMjcuNjg0N0gxMC42MjI2QzExLjI4OSAzMC44NjggMTIuMzYzNSAzMy42MzkzIDEzLjcyMzQgMzUuNzQyN1oiIGZpbGw9IiMwMDA0RjUiLz4KPC9zdmc+Cg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "HTTP Request", - "typeVersion": 3 - }, - { - "id": 47, - "icon": "file:webhook.svg", - "name": "n8n-nodes-base.webhook", - "defaults": { - "name": "Webhook" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0zNSwzN2MtMi4yLDAtNC0xLjgtNC00czEuOC00LDQtNHM0LDEuOCw0LDRTMzcuMiwzNywzNSwzN3oiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUsNDNjLTMsMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEsMS40LDIuOSwyLjMsNC43LDIuM2MzLjMsMCw2LTIuNyw2LTZzLTIuNy02LTYtNiBjLTEsMC0yLDAuMy0yLjksMC43bC0xLjcsMUwyMy4zLDE2bDMuNS0xLjlsNS4zLDkuNGMxLTAuMywyLTAuNSwzLTAuNWM1LjUsMCwxMCw0LjUsMTAsMTBTNDAuNSw0MywzNSw0M3oiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMTQsNDNDOC41LDQzLDQsMzguNSw0LDMzYzAtNC42LDMuMS04LjUsNy41LTkuN2wxLDMuOUM5LjksMjcuOSw4LDMwLjMsOCwzM2MwLDMuMywyLjcsNiw2LDYgczYtMi43LDYtNnYtMmgxNXY0SDIzLjhDMjIuOSwzOS42LDE4LjgsNDMsMTQsNDN6Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0iTTE0LDM3Yy0yLjIsMC00LTEuOC00LTRzMS44LTQsNC00czQsMS44LDQsNFMxNi4yLDM3LDE0LDM3eiIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSwxOWMtMi4yLDAtNC0xLjgtNC00czEuOC00LDQtNHM0LDEuOCw0LDRTMjcuMiwxOSwyNSwxOXoiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTUuNywzNEwxMi4zLDMybDUuOS05LjdjLTItMS45LTMuMi00LjUtMy4yLTcuM2MwLTUuNSw0LjUtMTAsMTAtMTBjNS41LDAsMTAsNC41LDEwLDEwIGMwLDAuOS0wLjEsMS43LTAuMywyLjVsLTMuOS0xYzAuMS0wLjUsMC4yLTEsMC4yLTEuNWMwLTMuMy0yLjctNi02LTZzLTYsMi43LTYsNmMwLDIuMSwxLjEsNCwyLjksNS4xbDEuNywxTDE1LjcsMzR6Ii8+PC9zdmc+Cg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Webhook", - "typeVersion": 1 - } - ], - "categories": [], - "image": [ - { - "id": 4, - "url": "data:image/jpeg;base64,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" - }, - { - "id": 14, - "url": "data:image/png;base64,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" - } - ] - } -} diff --git a/cypress/fixtures/aiAssistant/responses/apply_code_diff_response.json b/cypress/fixtures/aiAssistant/responses/apply_code_diff_response.json deleted file mode 100644 index 8d7ada0b402..00000000000 --- a/cypress/fixtures/aiAssistant/responses/apply_code_diff_response.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "data": { - "sessionId": "f9130bd7-c078-4862-a38a-369b27b0ff20-e96eb9f7-d581-4684-b6a9-fd3dfe9fe1fb-emTezIGat7bQsDdtIlbti", - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();" - } - } -} diff --git a/cypress/fixtures/aiAssistant/responses/code_diff_suggestion_response.json b/cypress/fixtures/aiAssistant/responses/code_diff_suggestion_response.json deleted file mode 100644 index 8ee5d647fd5..00000000000 --- a/cypress/fixtures/aiAssistant/responses/code_diff_suggestion_response.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "Hi there! Here is my top solution to fix the error in your **Code** node 👇" - }, - { - "type": "code-diff", - "description": "Fix the syntax error by changing '1asd' to a valid value. In this case, it seems like '1' was intended.", - "suggestionId": "1", - "codeDiff": "@@ -2,2 +2,2 @@\n item.json.myNewField = 1asd;\n+ item.json.myNewField = 1;\n", - "role": "assistant", - "quickReplies": [ - { - "text": "Give me another solution", - "type": "new-suggestion" - } - ] - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/code_snippet_response.json b/cypress/fixtures/aiAssistant/responses/code_snippet_response.json deleted file mode 100644 index b05f212de13..00000000000 --- a/cypress/fixtures/aiAssistant/responses/code_snippet_response.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "sessionId": "f1d19ed5-0d55-4bad-b49a-f0c56bd6f76f-705b5dbf-12d4-4805-87a3-1e5b3c716d29-W1JgVNrpfitpSNF9rAjB4", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "To use expressions in n8n, follow these steps:\n\n1. Hover over the parameter where you want to use an expression.\n2. Select **Expressions** in the **Fixed/Expression** toggle.\n3. Write your expression in the parameter, or select **Open expression editor** to open the expressions editor. You can browse the available data in the **Variable selector**. All expressions have the format `{{ your expression here }}`.\n\n### Example: Get data from webhook body\n\nIf your webhook data looks like this:\n\n```json\n[\n {\n \"headers\": {\n \"host\": \"n8n.instance.address\",\n ...\n },\n \"params\": {},\n \"query\": {},\n \"body\": {\n \"name\": \"Jim\",\n \"age\": 30,\n \"city\": \"New York\"\n }\n }\n]\n```\n\nYou can use the following expression to get the value of `city`:\n\n```js\n{{$json.body.city}}\n```\n\nThis expression accesses the incoming JSON-formatted data using n8n's custom `$json` variable and finds the value of `city` (in this example, \"New York\").", - "codeSnippet": "{{$json.body.city}}" - }, - { - "role": "assistant", - "type": "message", - "text": "Did this answer solve your question?", - "quickReplies": [ - { - "text": "Yes, thanks", - "type": "all-good", - "isFeedback": true - }, - { - "text": "No, I am still stuck", - "type": "still-stuck", - "isFeedback": true - } - ] - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/end_session_response.json b/cypress/fixtures/aiAssistant/responses/end_session_response.json deleted file mode 100644 index 9478c3adb34..00000000000 --- a/cypress/fixtures/aiAssistant/responses/end_session_response.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "title": "Glad to Help", - "text": "I'm glad I could help. If you have any more questions or need further assistance with your n8n workflows, feel free to ask!" - }, - { - "role": "assistant", - "type": "event", - "eventName": "end-session" - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/node_execution_error_response.json b/cypress/fixtures/aiAssistant/responses/node_execution_error_response.json deleted file mode 100644 index 5fabc170344..00000000000 --- a/cypress/fixtures/aiAssistant/responses/node_execution_error_response.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "It seems like my suggestion did not work. Do you want me to come up with a different suggestion? You can also provide more context via the chat.", - "quickReplies": [ - { - "text": "Yes", - "type": "new-suggestion" - }, - { - "text": "No, I don't think you can help", - "type": "event:end-session" - } - ] - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/node_execution_succeeded_response.json b/cypress/fixtures/aiAssistant/responses/node_execution_succeeded_response.json deleted file mode 100644 index 62caf2a6b5d..00000000000 --- a/cypress/fixtures/aiAssistant/responses/node_execution_succeeded_response.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "**Code** node ran successfully, did my solution help resolve your issue?", - "quickReplies": [ - { - "text": "Yes, thanks", - "type": "all-good", - "isFeedback": true - }, - { - "text": "No, I am still stuck", - "type": "still-stuck", - "isFeedback": true - } - ] - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/quick_reply_message_response.json b/cypress/fixtures/aiAssistant/responses/quick_reply_message_response.json deleted file mode 100644 index a3c1b958c4a..00000000000 --- a/cypress/fixtures/aiAssistant/responses/quick_reply_message_response.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "Hey, this is an assistant message", - "quickReplies": [ - { - "text": "Sure, let's do it", - "type": "yes" - }, - { - "text": "Nah, doesn't sound good", - "type": "no" - } - ] - } - ] -} diff --git a/cypress/fixtures/aiAssistant/responses/simple_message_response.json b/cypress/fixtures/aiAssistant/responses/simple_message_response.json deleted file mode 100644 index 11299b91f98..00000000000 --- a/cypress/fixtures/aiAssistant/responses/simple_message_response.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "sessionId": "1", - "messages": [ - { - "role": "assistant", - "type": "message", - "text": "Hey, this is an assistant message" - } - ] -} diff --git a/cypress/fixtures/aiAssistant/workflows/simple_http_request_workflow.json b/cypress/fixtures/aiAssistant/workflows/simple_http_request_workflow.json deleted file mode 100644 index 89e73b3751e..00000000000 --- a/cypress/fixtures/aiAssistant/workflows/simple_http_request_workflow.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "nodes": [ - { - "parameters": {}, - "id": "298d3dc9-5e99-4b3f-919e-05fdcdfbe2d0", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [360, 220] - }, - { - "parameters": { - "options": {} - }, - "id": "65c32346-e939-4ec7-88a9-1f9184e2258d", - "name": "HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 4.2, - "position": [580, 220] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "HTTP Request", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/fixtures/aiAssistant/workflows/test_workflow.json b/cypress/fixtures/aiAssistant/workflows/test_workflow.json deleted file mode 100644 index 7d8ec23e38e..00000000000 --- a/cypress/fixtures/aiAssistant/workflows/test_workflow.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "nodes": [ - { - "parameters": {}, - "id": "ebfced75-2ce1-4c41-a971-6c3b83522c4d", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 360, - 220 - ] - }, - { - "parameters": { - "errorMessage": "This is an error message" - }, - "id": "f2e60459-401a-49d5-acfc-7b2b31cfdcf7", - "name": "Stop and Error", - "type": "n8n-nodes-base.stopAndError", - "typeVersion": 1, - "position": [ - 1020, - 220 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1aaa;\n}\n\nreturn $input.all();" - }, - "id": "b54d4db9-b257-41a8-862f-26d293115bad", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 840, - 320 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "053ada73-f7db-4e6a-8cc8-85756cc6ca4e", - "name": "age", - "value": "={{ 32sad }}", - "type": "number" - } - ] - }, - "options": {} - }, - "id": "5fd89612-a871-4679-b7b0-d659e09c6a0e", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 600, - 100 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Stop and Error", - "type": "main", - "index": 0 - }, - { - "node": "Code", - "type": "main", - "index": 0 - }, - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": {} -} diff --git a/cypress/fixtures/expression_with_paired_item_in_multi_input_node.json b/cypress/fixtures/expression_with_paired_item_in_multi_input_node.json deleted file mode 100644 index f06c3ed3a5f..00000000000 --- a/cypress/fixtures/expression_with_paired_item_in_multi_input_node.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "meta": { - "instanceId": "abc" - }, - "nodes": [ - { - "parameters": {}, - "id": "bcb6abdf-d34b-4ea7-a8ed-58155b708c43", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 20, - 260 - ] - }, - { - "parameters": { - "jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\nitem.json.message_count = Math.min(item.json.messages.length, 3);\n}\n\nreturn $input.all();" - }, - "id": "59c3889c-3671-4f49-b258-6131df8587d8", - "name": "Set thread properties1", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - 500, - 520 - ] - }, - { - "parameters": { - "resource": "thread", - "operation": "get", - "threadId": "={{ $json.id }}", - "options": {} - }, - "id": "e102b72e-1e47-4004-a6b9-38cef75f44a1", - "name": "Get thread details1", - "type": "n8n-nodes-base.gmail", - "typeVersion": 2, - "position": [ - 300, - 520 - ] - }, - { - "parameters": { - "mode": "expression", - "output": "={{ $('Set thread properties1').item.json.message_count }}" - }, - "id": "f3e42f07-df82-42ba-8e99-97cda707a9d9", - "name": "Switch1", - "type": "n8n-nodes-base.switch", - "typeVersion": 1, - "position": [ - 1220, - 540 - ] - }, - { - "parameters": { - "conditions": { - "boolean": [ - { - "value1": true, - "value2": true - } - ] - } - }, - "id": "c7fe521e-8c02-44bf-8a14-482b39749508", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 720, - 520 - ] - }, - { - "parameters": {}, - "id": "3b9f6a05-7f19-46c5-95d1-5dec732f00ae", - "name": "No Operation, do nothing", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [ - 960, - 400 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Get thread details1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set thread properties1": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "Get thread details1": { - "main": [ - [ - { - "node": "Set thread properties1", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "No Operation, do nothing", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Switch1", - "type": "main", - "index": 0 - } - ] - ] - }, - "No Operation, do nothing": { - "main": [ - [ - { - "node": "Switch1", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/fixtures/manual-partial-execution.json b/cypress/fixtures/manual-partial-execution.json deleted file mode 100644 index 9e43cd525be..00000000000 --- a/cypress/fixtures/manual-partial-execution.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "meta": { - "templateCredsSetupCompleted": true - }, - "nodes": [ - { - "parameters": { - "options": {} - }, - "id": "f4467143-fdb9-46fa-8020-6417cc5eea7d", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1140, - 260 - ] - }, - { - "parameters": { - "path": "30ff316d-405f-4288-a0ac-e713546c9d4e", - "options": {} - }, - "id": "4760aafb-5d56-4633-99d3-7a97c576a216", - "name": "Webhook1", - "type": "n8n-nodes-base.webhook", - "typeVersion": 2, - "position": [ - 680, - 340 - ], - "webhookId": "30ff316d-405f-4288-a0ac-e713546c9d4e" - }, - { - "parameters": { - "articleId": "123", - "additionalFields": {} - }, - "id": "8c811eca-8978-44d9-b8f7-ef2c7725784c", - "name": "Hacker News", - "type": "n8n-nodes-base.hackerNews", - "typeVersion": 1, - "position": [ - 920, - 260 - ] - }, - { - "parameters": { - "path": "4a3398e4-1388-4e10-9d21-add90b804955", - "options": {} - }, - "id": "1c2c2d06-45c9-4712-9fa0-c655bef8d0e5", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 2, - "position": [ - 680, - 180 - ], - "webhookId": "4a3398e4-1388-4e10-9d21-add90b804955" - } - ], - "connections": { - "Webhook1": { - "main": [ - [ - { - "node": "Hacker News", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hacker News": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webhook": { - "main": [ - [ - { - "node": "Hacker News", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "pinData": { - "Webhook": [ - { - "name": "First item", - "code": 1 - } - ] - } -} diff --git a/cypress/fixtures/merge_node_inputs_paired_items.json b/cypress/fixtures/merge_node_inputs_paired_items.json deleted file mode 100644 index 2ee00f2c38f..00000000000 --- a/cypress/fixtures/merge_node_inputs_paired_items.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "name": "merge inputs paired items", - "nodes": [ - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "ad1d6260-3c25-49e6-a526-b6a6232d8a61", - "name": "Branch 1 Field", - "value": "Branch 1 Value", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - -220, - 20 - ], - "id": "769d7a98-bc7a-4aa8-9d05-b7c4b7e58d65", - "name": "Branch 1" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "ad1d6260-3c25-49e6-a526-b6a6232d8a61", - "name": "Branch 2 Field", - "value": "Branch 2 Value", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - -220, - 220 - ], - "id": "9a18c73a-5a27-4927-83fa-c3fe442ed7d1", - "name": "Branch 2" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "ad1d6260-3c25-49e6-a526-b6a6232d8a61", - "name": "Branch 3 Field", - "value": "Branch 3 Value", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - -220, - 420 - ], - "id": "3bfa4793-877b-42d3-9b01-10d83a32d26a", - "name": "Branch 3" - }, - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -560, - 220 - ], - "id": "c773e03a-a260-4e02-ae80-6b473ea03398", - "name": "When clicking ‘Execute workflow’" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "8a674ec9-1167-424b-8d99-7878707ab111", - "name": "=item_{{ $itemIndex }}", - "value": "={{ $(`Branch ${$itemIndex + 1}`).item.json[`Branch ${$itemIndex + 1} Field`]}}", - "type": "string" - } - ] - }, - "options": {} - }, - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 420, - 220 - ], - "id": "052f4630-5c8f-4847-8288-134e207f0917", - "name": "Edit Fields" - }, - { - "parameters": { - "numberInputs": 3 - }, - "type": "n8n-nodes-base.merge", - "typeVersion": 3, - "position": [ - 200, - 220 - ], - "id": "7bd63947-1a31-44bc-bc04-5e7fd8d3852b", - "name": "Merge V3, dynamic inputs" - } - ], - "pinData": {}, - "connections": { - "Branch 1": { - "main": [ - [ - { - "node": "Merge V3, dynamic inputs", - "type": "main", - "index": 0 - } - ] - ] - }, - "Branch 2": { - "main": [ - [ - { - "node": "Merge V3, dynamic inputs", - "type": "main", - "index": 1 - } - ] - ] - }, - "Branch 3": { - "main": [ - [ - { - "node": "Merge V3, dynamic inputs", - "type": "main", - "index": 2 - } - ] - ] - }, - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Branch 1", - "type": "main", - "index": 0 - }, - { - "node": "Branch 2", - "type": "main", - "index": 0 - }, - { - "node": "Branch 3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge V3, dynamic inputs": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "4990b19f-2b5f-4095-8ace-12579a08478a", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "be251a83c052a9862eeac953816fbb1464f89dfbf79d7ac490a8e336a8cc8bfd" - }, - "id": "9JwaG8aehuYypPc6", - "tags": [] -} diff --git a/cypress/fixtures/open_node_creator_for_connection.json b/cypress/fixtures/open_node_creator_for_connection.json deleted file mode 100644 index e98a97a47c2..00000000000 --- a/cypress/fixtures/open_node_creator_for_connection.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "name": "open_node_creator_for_connection", - "nodes": [ - { - "parameters": {}, - "id": "25ff0c17-7064-4e14-aec6-45c71d63201b", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 740, - 520 - ] - }, - { - "parameters": {}, - "id": "49f376ca-845b-4737-aac0-073d0e4fa95c", - "name": "Token Splitter", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1180, - 540 - ] - }, - { - "parameters": {}, - "id": "d1db5111-4b01-4620-8ccb-a16ea576c363", - "name": "Memory", - "type": "@n8n/n8n-nodes-langchain.memoryXata", - "typeVersion": 1.2, - "position": [ - 940, - 540 - ], - "credentials": { - "xataApi": { - "id": "q1ckaYlHTWCYDtF0", - "name": "Xata Api account" - } - } - }, - { - "parameters": {}, - "id": "b08b6d3a-bef8-42ac-9cef-ec9d4e5402b1", - "name": "Output Parser", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.1, - "position": [ - 1060, - 540 - ] - }, - { - "parameters": {}, - "id": "ee557938-9cf1-4b78-afef-c783c52fd307", - "name": "Tool", - "type": "@n8n/n8n-nodes-langchain.toolWikipedia", - "typeVersion": 1, - "position": [ - 1300, - 540 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "814f2e9c-cc7b-4f3c-89b4-d6eb82bc24df", - "name": "Embeddings", - "type": "@n8n/n8n-nodes-langchain.embeddingsHuggingFaceInference", - "typeVersion": 1, - "position": [ - 1420, - 540 - ] - }, - { - "parameters": { - "tableName": { - "__rl": true, - "mode": "list", - "value": "" - }, - "options": {} - }, - "id": "e8569b0b-a580-4249-9c5e-f1feed5c644e", - "name": "Vector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase", - "typeVersion": 1, - "position": [ - 1540, - 540 - ] - } - ], - "pinData": {}, - "connections": {}, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "8e90604c-f7e9-489d-8e43-1cc699b7db04", - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "L3tgfoW660UOSuX6", - "tags": [] -} diff --git a/cypress/fixtures/responses/execution-out-of-memory-server-response.json b/cypress/fixtures/responses/execution-out-of-memory-server-response.json deleted file mode 100644 index 377e8170d04..00000000000 --- a/cypress/fixtures/responses/execution-out-of-memory-server-response.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "data": { - "id": "29932", - "finished": false, - "mode": "manual", - "retryOf": null, - "retrySuccessId": null, - "status": "crashed", - "startedAt": "2024-05-27T09:54:23.848Z", - "stoppedAt": "2024-05-27T09:54:23.868Z", - "deletedAt": null, - "workflowId": "fGNYufZFmt9XRsNy", - "waitTill": null, - "data": "[{\"resultData\":\"1\"},{\"runData\":\"2\",\"error\":\"3\"},{\"When clicking \\\"Execute Workflow\\\"\":\"4\",\"Code\":\"5\"},{\"message\":\"6\",\"timestamp\":1716803796412,\"name\":\"7\",\"context\":\"8\"},[\"9\"],[\"10\"],\"Workflow did not finish, possible out-of-memory issue\",\"WorkflowOperationError\",{},{\"startTime\":0,\"executionTime\":0,\"source\":\"11\",\"executionStatus\":\"12\"},{\"startTime\":1716803663,\"executionTime\":19,\"source\":\"13\",\"executionStatus\":\"14\",\"data\":\"15\"},[null],\"unknown\",[null],\"success\",{\"main\":\"16\"},[\"17\"],[\"18\"],{\"json\":\"19\"},{\"isArtificialRecoveredEventItem\":true}]", - "workflowData": { - "id": "fGNYufZFmt9XRsNy", - "name": "My workflow 24", - "nodes": [ - { - "parameters": { - "notice": "" - }, - "id": "b4ef3357-de92-41c4-bc0d-526a736f463d", - "name": "When clicking \"Execute Workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 240, - 640 - ] - }, - { - "parameters": { - "mode": "runOnceForAllItems", - "language": "javaScript", - "jsCode": "\nif ($input.all().length == 1) {\n return {\n \"blob\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean pharetra ut ligula in commodo. Donec fermentum lacus ut faucibus egestas. Aliquam vitae vestibulum urna, a rutrum turpis. Ut consectetur sodales lorem quis mattis. Nullam rhoncus sapien ex, id ullamcorper neque viverra vel. Mauris vitae ex vitae augue pulvinar eleifend. Mauris ultricies neque eget sapien blandit tincidunt. Suspendisse cursus interdum bibendum. Morbi sodales posuere lobortis. Curabitur faucibus mollis lectus, ut sodales magna ultrices vel. Curabitur ligula sapien, porttitor eu dolor quis, vehicula placerat odio. Pellentesque iaculis rutrum nisi, nec cursus turpis ultricies sed. Sed convallis finibus tellus, et elementum lacus efficitur ut. Duis id ante malesuada ante tristique vulputate. Vivamus porta mauris id lorem semper tristique a venenatis dui. Fusce a sapien eget eros blandit pretium quis eu nisi. Donec sit amet odio maximus, eleifend mi sed, imperdiet ante. Sed sollicitudin nulla nec dolor gravida vulputate. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus dapibus suscipit ex tincidunt convallis. Fusce ut dignissim augue, vitae vehicula felis. Nullam ut ipsum vitae mi lacinia pharetra. Aenean venenatis imperdiet ipsum. Pellentesque malesuada ornare metus ac aliquet. Curabitur blandit tellus quis scelerisque dapibus. Nunc suscipit dignissim maximus. Etiam vehicula sapien et sapien lacinia cursus. Curabitur porta, risus nec finibus ultrices, nibh ante semper tellus, ut consequat velit nibh nec arcu. Duis eleifend eget quam in imperdiet. Donec bibendum erat tristique, dapibus quam ac, mattis justo. Praesent fermentum, erat in lobortis faucibus, lacus est posuere nisi, at feugiat erat risus eu erat. Etiam pellentesque, arcu nec ultrices fermentum, augue purus imperdiet quam, sit amet tempor lacus leo venenatis metus. Sed a commodo ex. Fusce eget vulputate sem. Duis tincidunt ultricies orci eu dictum. Integer placerat tellus ac sapien malesuada, vel malesuada ligula ornare. Cras massa nibh, tristique sed felis et, elementum tincidunt lectus. Nulla ullamcorper libero in dui laoreet, eget cursus mauris pulvinar. Curabitur porttitor tristique libero, in molestie ligula ullamcorper vitae. Phasellus ornare lacus a tellus hendrerit molestie. Suspendisse a tempor lectus. Morbi sapien arcu, imperdiet vel lacinia sit amet, fringilla non ligula. Phasellus rhoncus, dui a laoreet ultrices, eros ipsum varius massa, at ultricies enim neque ut arcu. Pellentesque mattis neque quis purus tincidunt mattis. Donec euismod ante id nulla accumsan, vitae interdum augue mollis. Quisque id vestibulum velit, sed fringilla magna. Sed sollicitudin justo eu odio porttitor, ac tincidunt purus interdum. Phasellus lobortis laoreet neque a auctor. Fusce id orci leo. Phasellus congue nec erat et aliquam. Nulla in nulla eu lacus tempus elementum. Fusce scelerisque eleifend ante at suscipit. Nunc nunc felis, vehicula eu porta at, dapibus quis sem. Vivamus vel facilisis justo. Vestibulum feugiat pretium turpis eu tempor. Nunc fermentum urna ac sem semper, vel scelerisque metus sodales. Suspendisse sit amet nisi justo. Nunc accumsan lacus pulvinar ipsum sollicitudin, id commodo mauris suscipit. Nam efficitur ultrices dolor, aliquet facilisis diam vehicula quis. Proin posuere at lorem vel dignissim. Vivamus in felis augue. Fusce vel nisl ex. Duis quis felis eu neque posuere tempus at nec mi. Mauris malesuada viverra arcu placerat ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed non varius felis, vitae bibendum nisl. Sed vitae hendrerit metus, efficitur venenatis dui. Integer ac aliquam arcu. Fusce nulla dui, posuere et vehicula at, lacinia et quam. Vivamus vestibulum placerat sem nec ultrices. Praesent eget est quis ex consequat congue. Pellentesque fringilla sem vitae nisi eleifend, sit amet mollis velit feugiat. Cras quis tincidunt nunc. Etiam elementum scelerisque nulla ac tempus. Praesent in nibh convallis, eleifend orci eget, semper lectus. Integer mollis, magna et rutrum consectetur, tortor urna eleifend mauris, a porttitor enim diam non risus. Maecenas ligula sapien, gravida condimentum quam vitae, dignissim varius ligula. Phasellus ultricies est ut maximus tempus. Praesent fringilla augue justo, vel vestibulum odio dictum luctus. Donec malesuada augue id enim finibus, a ullamcorper nisl posuere. Donec dignissim lacus ut justo rutrum, ut feugiat erat cursus. Pellentesque quam metus, efficitur ut leo quis, lobortis tempus diam. Suspendisse libero augue, auctor nec luctus at, venenatis vel urna. Morbi at aliquam sem. Vestibulum vitae porttitor nisi. In bibendum id sapien consectetur ornare. Vestibulum fermentum risus tellus, quis ornare ex pharetra sed. In imperdiet fermentum odio nec consequat. Aliquam ut diam sagittis, viverra sem at, mattis lorem. Pellentesque id sagittis erat. Proin vestibulum ligula vestibulum, molestie diam vel, auctor lorem. Pellentesque ullamcorper elementum nunc non mollis. Ut non sem ex. Duis imperdiet ligula finibus, dignissim magna quis, placerat velit. Ut in odio molestie, eleifend lectus non, vehicula augue. Nulla in turpis sit amet augue feugiat placerat ac non ligula. Fusce mauris nisl, imperdiet mattis neque quis, pellentesque consectetur ipsum. Donec lacinia tellus eget urna condimentum ornare vitae a urna. Nam at lacinia odio. Nunc in dignissim tortor, id scelerisque nisi. Suspendisse potenti. Etiam rhoncus urna id tortor rutrum commodo. Nunc ultrices mi semper neque pulvinar faucibus. Aliquam sit amet leo diam. Integer eget gravida sem, laoreet scelerisque arcu. Vivamus mattis cursus egestas. Nullam sagittis condimentum diam vitae porttitor. Integer at placerat mauris. Aliquam tempus eu nisi id suscipit. Nulla facilisi. Vivamus urna est, condimentum eu finibus et, porta non ligula. Vivamus eu sem id nunc sagittis dapibus sit amet at nisl. Vivamus aliquam, elit et ultricies congue, magna mi luctus tortor, vitae interdum orci mauris quis nunc. Vestibulum a felis at odio ornare aliquet sed id metus. Suspendisse mattis magna in tincidunt eleifend. Donec rhoncus velit purus, vitae blandit nunc maximus eu. Vivamus mattis mattis mauris, nec pretium tellus aliquam nec. Donec felis nulla, convallis tristique nibh et, facilisis tempus sem. Quisque nec erat felis. Mauris congue mi in egestas sollicitudin. Etiam ut lacus ac tortor lacinia consectetur. Maecenas facilisis justo id dui auctor, ac dapibus nunc convallis. Aliquam id dignissim lorem, vel sagittis metus. In ornare lorem vitae elit luctus volutpat. Donec scelerisque velit a gravida porta. Sed egestas justo felis, nec molestie erat venenatis in. Nulla sed felis vehicula, maximus turpis ac, porttitor neque. Nullam rhoncus consequat urna quis imperdiet. Etiam auctor ligula id nibh placerat, vitae laoreet urna fermentum. Praesent nec vestibulum odio, sed efficitur velit. In hac habitasse platea dictumst. Fusce pulvinar mi diam, ac scelerisque libero pulvinar nec. Vestibulum commodo quam leo. Proin molestie nisi eget lorem vehicula porttitor. Proin ut sem condimentum, convallis risus sed, vehicula dolor. Praesent varius mi ac aliquet cursus. Fusce nec mattis libero. Nullam pretium arcu in ante pellentesque, eu consectetur ex consequat. In orci ligula, bibendum eu pellentesque at, mattis ac felis. Nunc porta tortor id ornare interdum. Duis ac est lacinia, porta ante sed, molestie lorem. Curabitur efficitur non ligula sit amet rhoncus. Mauris nec vestibulum tellus, in accumsan libero. In tincidunt non est id vehicula. Vivamus quis tortor volutpat, dictum est placerat, rutrum tellus. Donec eros purus, congue in quam ut, sollicitudin imperdiet felis. Fusce et metus eget arcu dictum vestibulum. Donec in lacus nulla. Proin ac sem non lectus tempus efficitur vitae in turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam sodales porttitor lectus eleifend sodales. Aliquam erat volutpat. In pretium, odio nec interdum cursus, augue ligula euismod ligula, quis dapibus ex elit non libero. Nunc sodales enim erat, nec ultricies ipsum ullamcorper nec. Suspendisse ac purus vitae augue gravida varius. Pellentesque sed lorem eu nulla iaculis placerat. Pellentesque cursus et dolor sodales viverra. Phasellus commodo rhoncus libero eu varius. Aenean feugiat risus et elit commodo aliquam. Suspendisse vel interdum lectus, sit amet finibus tortor. Etiam eu neque nec dui pharetra vulputate. Ut rutrum sed sem a feugiat. Fusce luctus sit amet augue a facilisis. Curabitur faucibus neque non elementum iaculis. Vestibulum euismod nisl eget tellus convallis venenatis. Sed erat nibh, tincidunt vitae sodales eget, malesuada ut ante. Aenean vitae orci ut turpis sodales tincidunt. Aliquam semper hendrerit massa at pulvinar. Duis egestas eleifend massa, faucibus interdum erat consectetur sed. Nullam a vulputate diam, mollis sagittis nunc. Praesent in malesuada velit. Proin suscipit, erat ac aliquet malesuada, nulla turpis ornare urna, at viverra felis odio in dolor. Donec non fermentum nibh. Donec pharetra risus non sapien fringilla hendrerit. Quisque sed urna ante. Vestibulum lorem lacus, tempor nec ipsum ut, maximus lobortis purus. Donec pulvinar aliquet velit, eget accumsan nulla rhoncus vitae. Proin molestie at purus id laoreet. Fusce euismod viverra enim, a mattis erat elementum vitae. Sed vestibulum augue purus, ac tempor ligula fringilla nec. Etiam vel lorem lorem. Aenean vitae quam lorem. Ut egestas velit ut aliquam luctus. Sed eget nibh justo. Quisque id viverra sapien. Vestibulum molestie enim id nisi laoreet aliquam. Proin vestibulum nunc quis justo ullamcorper posuere. Ut eleifend, est id congue sagittis, magna lectus tincidunt metus, in ultricies augue purus non lectus. Vivamus vitae iaculis nisi. Curabitur in dolor imperdiet, aliquet est vel, cursus leo. Ut sagittis neque vitae arcu placerat fermentum. Mauris non sagittis ante. Ut aliquam accumsan dolor et rutrum. Integer lobortis eros vel nisl iaculis pulvinar. Morbi at sodales est. Cras et ullamcorper felis, non mattis dui. Maecenas laoreet tempus odio, eu finibus dolor rutrum ornare. Duis iaculis, est vitae mollis fringilla, nulla sapien vestibulum augue, at tempus nisl enim interdum velit. Pellentesque facilisis nec eros sed consectetur. Fusce a velit sit amet nulla porttitor molestie. Donec vehicula leo in dolor eleifend, in consectetur mi dictum. Donec non efficitur mi. Suspendisse dictum faucibus varius. Donec venenatis massa id arcu tincidunt laoreet. Sed ut tristique mauris. Curabitur condimentum quis risus sed vestibulum. Proin in iaculis mi. In sit amet felis nisi. In euismod, urna eget interdum iaculis, eros felis tincidunt lacus, sit amet imperdiet augue est et nisi. Vestibulum at leo at ex fringilla facilisis ac a lacus. Etiam sed bibendum dolor. Cras est neque, malesuada quis interdum a, sagittis et metus. Nunc commodo tincidunt porta. Vestibulum porta enim quis elit malesuada, eu auctor lorem tristique. Pellentesque ac ante vitae arcu dignissim consectetur eget hendrerit metus. Vestibulum nec posuere tellus. Phasellus mollis urna at erat sagittis, ut ornare odio pellentesque. Nam vel purus tristique, pharetra sapien ac, hendrerit massa. Aenean eget urna eget massa venenatis cursus quis vel risus. Nunc tempor nibh orci, ac tempus justo luctus nec. Maecenas interdum erat ligula, at sollicitudin urna ultrices in. Mauris consequat ipsum et diam maximus sodales. Donec eget risus metus. Fusce lobortis varius turpis a pulvinar. Phasellus diam sem, bibendum at nisl in, molestie condimentum mi. In non urna in mi elementum vestibulum. Proin ultrices nisl nulla, vel semper justo placerat in. Pellentesque sollicitudin faucibus nulla, eu porttitor lacus. Sed a ipsum ut tellus porttitor blandit. Nulla sodales nisi vel ligula pulvinar tempus. Praesent ornare viverra mauris et vulputate. In in nisl in urna pellentesque tincidunt. Maecenas lacus nibh, ultrices in magna ut, faucibus faucibus felis. Ut placerat vestibulum molestie. Cras cursus purus eget dui maximus, non cursus eros pellentesque. Morbi lacinia hendrerit dolor vitae varius. Sed lobortis nunc at ligula mollis, sed interdum lorem pretium. Praesent posuere nisi tortor, nec commodo lorem blandit in. Pellentesque sit amet nunc iaculis, maximus neque vel, finibus erat. Suspendisse interdum metus finibus, congue lorem vel, venenatis elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam ac massa nec diam laoreet consectetur. Nullam at fringilla neque. Fusce mollis, est et imperdiet euismod, tortor tellus scelerisque lorem, quis dictum enim risus volutpat sem. Etiam feugiat lacus non pellentesque tristique. Suspendisse odio elit, tristique ut enim id, gravida interdum massa. Integer eget bibendum purus. Proin sagittis erat vel interdum semper. Aenean aliquet posuere nisl, eleifend porta mi pharetra non. Aliquam tincidunt magna sit amet turpis iaculis varius. Maecenas quis velit ut felis tristique gravida. Vestibulum interdum odio et arcu bibendum posuere. Phasellus semper ut tellus a sodales. Phasellus dignissim eu elit vel accumsan. Nulla ut nisi sed lacus tempor vulputate. Suspendisse sagittis at sem a feugiat. Nunc accumsan velit urna, a pretium arcu sodales at. In tempor pretium odio, eget tristique nisl finibus ut. Praesent sed erat nunc. Mauris fringilla tortor sem, et pharetra enim volutpat vitae. Morbi eleifend congue erat, id accumsan quam efficitur quis. Quisque id diam sed sem dapibus rutrum. Phasellus vitae felis a lorem rhoncus tempus. Nullam faucibus purus nec dictum condimentum. Curabitur in finibus sapien. Maecenas malesuada consequat dignissim. Ut sed nunc ornare, egestas nulla vel, ultrices elit. Vestibulum a nibh nulla. Vivamus nec sem gravida mauris ultrices interdum. Quisque accumsan rutrum urna sed faucibus. Pellentesque vehicula ipsum ut nisl imperdiet blandit. Integer sit amet congue neque. Mauris vestibulum venenatis erat, id efficitur neque imperdiet a. Suspendisse pellentesque quis turpis sed luctus. Suspendisse potenti. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent ac accumsan diam. Mauris ut eros dapibus, ornare sem sed, porttitor ipsum. Morbi ac consequat mauris, nec fermentum ipsum. Vivamus libero sem, egestas non nisi venenatis, egestas posuere nibh. Quisque auctor libero augue, efficitur maximus nulla tincidunt vehicula. Duis viverra sapien quis turpis fringilla, vitae pharetra nisi sodales. Aliquam imperdiet augue non urna vulputate sollicitudin. In faucibus nulla in tincidunt fermentum. Donec hendrerit at quam pretium sagittis. Vestibulum vehicula sit amet felis ut gravida. Ut egestas, metus a pharetra varius, odio justo posuere diam, eget rhoncus magna mauris sed eros. Fusce felis dolor, tincidunt at fringilla ut, condimentum sit amet nulla. In rhoncus nisi mi, eget gravida magna blandit vitae. Aenean et suscipit ipsum, quis consectetur ex. Duis ligula urna, accumsan at sollicitudin id, volutpat vel diam. Nam dapibus mollis finibus. Nam consequat augue eu ultricies lobortis. Sed lorem augue, blandit blandit interdum eget, aliquet nec dolor. Donec convallis neque gravida dolor tincidunt ultricies. Vivamus feugiat nunc eu lorem commodo, ac blandit arcu convallis. Nunc eget ipsum vel urna lacinia vehicula non ac lorem. Nam varius scelerisque diam, vel pharetra orci pretium vitae. Ut ipsum augue, imperdiet fermentum mollis eu, rhoncus quis felis. Quisque at libero vitae augue vestibulum feugiat sed vel orci. Praesent commodo in libero id varius. Sed ac dolor pellentesque, efficitur massa a, egestas libero. Sed faucibus metus vel ultrices mattis. Vivamus eu augue ipsum. In nec felis ut ante ultricies varius. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam venenatis mi at porta consequat. Donec sit amet purus non ex hendrerit vulputate ut non tellus. Aenean consequat, sem quis molestie finibus, eros sapien porta ipsum, in condimentum tellus metus non lorem. Curabitur quis lorem quis enim porttitor luctus. Sed at ante non dolor ornare bibendum et eget ex. Cras volutpat dignissim nulla, ultricies tempus dui. Aliquam et ex in lorem fringilla fermentum in luctus nisl. Morbi ac arcu tempus, viverra leo vitae, cursus magna. Aliquam erat volutpat. Donec massa lacus, ullamcorper in laoreet et, venenatis at felis. Nulla aliquet ligula vel pretium vehicula. Nulla ac purus vitae sem commodo congue. Suspendisse suscipit lorem sit amet blandit sollicitudin. Curabitur et consectetur dui. Donec finibus placerat diam et rutrum. Aenean tellus quam, suscipit non elementum sed, bibendum nec nunc. Maecenas fermentum pulvinar nulla, a finibus velit consequat vitae. Vestibulum vehicula lobortis consequat. Sed in gravida est. Cras ac eros eget sem congue tincidunt. Aliquam sollicitudin venenatis erat, non ultricies est vulputate ut. Phasellus laoreet arcu at mattis faucibus. Aliquam convallis diam non nibh bibendum pellentesque. Nam rutrum erat vel augue gravida dictum. Nulla lorem urna, tempus rutrum semper sollicitudin, semper quis leo. Mauris lacinia, lacus in commodo placerat, libero nisl viverra magna, sed pellentesque ligula elit vel lorem. In tempor est interdum dui bibendum, ut imperdiet diam pulvinar. Vestibulum euismod convallis nunc ut viverra. Aenean pellentesque a turpis varius semper. Nunc pharetra ac ante eget rhoncus. Donec accumsan purus ipsum, eget elementum eros commodo a. Nunc eu leo id odio hendrerit pretium vitae ac neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec tempor, lorem nec placerat dictum, lacus quam laoreet dui, in accumsan massa erat eget sapien. Nullam aliquam iaculis purus ut sollicitudin. Nam sagittis nibh id felis luctus sollicitudin. Aenean a ante volutpat, dignissim augue vel, tristique arcu. Duis convallis posuere magna eu aliquam. Cras non ligula eget magna varius dignissim. Cras lectus ante, feugiat sit amet risus eget, consectetur vulputate metus. Cras et mauris ac sem dictum malesuada. Nam vel nisi purus. Suspendisse quis ullamcorper augue. Nulla sit amet eros bibendum, auctor dolor vitae, ultricies neque. In venenatis nec est a porta. Mauris justo dolor, egestas sit amet risus vitae, ultricies interdum enim. Proin pretium eleifend metus, non mollis tortor ullamcorper at. Quisque nibh mi, lobortis nec massa in, laoreet tincidunt nulla. Fusce eget maximus arcu. Nam quis metus risus. Donec arcu ipsum, feugiat nec velit in, vulputate gravida turpis. Maecenas nec erat elit. Pellentesque sollicitudin posuere elementum. Nam purus sapien, tincidunt non bibendum vitae, tincidunt sit amet orci. Quisque eget velit ut ligula ullamcorper viverra in sed nisi. Praesent facilisis, orci sed tempus ullamcorper, tellus lorem congue leo, sed mollis mauris magna eu libero. Morbi ut vehicula erat. Mauris non nisi mi. Aliquam erat volutpat. Phasellus varius risus eget turpis gravida commodo. Morbi magna neque, convallis eget dolor lacinia, vulputate ultrices eros. Duis et ligula semper, interdum felis eget, pulvinar ipsum. Quisque sed purus tristique, sollicitudin ex id, congue tellus. Aliquam viverra finibus est quis auctor. Aenean risus justo, semper elementum ultrices at, fringilla eget enim. Praesent ut consectetur quam. Duis at fringilla mauris. Duis vestibulum finibus feugiat. Aliquam fringilla luctus pretium. Integer in dui mattis, auctor nulla ac, varius quam. Pellentesque efficitur sollicitudin odio non sollicitudin. Sed ultrices venenatis sodales. Aliquam viverra semper diam at interdum. Nam leo velit, efficitur nec venenatis vitae, pulvinar non mi. Phasellus eleifend nulla id orci vehicula, non efficitur metus tempor. Mauris ac tempus massa, sed volutpat nisi. Vivamus maximus nibh quis maximus dapibus. Maecenas metus elit, viverra vel nisl ut, faucibus accumsan ante. Cras at odio id sapien tempor viverra. Integer rutrum mauris ut sapien porta bibendum. Vestibulum consequat dignissim metus eu varius. Praesent lacinia sit amet dui imperdiet rhoncus. Vivamus consequat nunc augue, sit amet feugiat urna dapibus eget. Etiam sed ex augue. Praesent ut massa finibus, hendrerit odio ac, sagittis elit. Cras arcu nibh, commodo nec sapien ac, dictum rhoncus nisi. Vestibulum pharetra massa in orci varius, vitae accumsan sapien convallis. Pellentesque pellentesque luctus lacus nec euismod. Integer elementum a elit in condimentum. Mauris id orci eros. Sed sed libero laoreet turpis commodo iaculis sit amet vel tortor. Integer purus libero, tristique vel justo in, efficitur vehicula metus. Maecenas non sodales nulla. Phasellus id sodales dui. Nam porta nisl sit amet elit ornare, a maximus orci iaculis. Nullam non tortor mi. Aliquam elit lorem, varius et mauris eget, luctus porta risus. Maecenas vulputate mollis purus, ac varius urna interdum at. In hac habitasse platea dictumst. Quisque eget mauris ultrices, ullamcorper nisl vitae, interdum ante. Integer leo tellus, molestie non dignissim nec, interdum a nibh. Morbi sed ex ut magna aliquam efficitur. Donec lobortis tellus tempor, fringilla arcu sit amet, sollicitudin sapien. Aenean felis purus, consequat vitae vulputate at, tincidunt ut magna. Etiam ac sapien orci. Phasellus sed arcu accumsan, rhoncus tellus a, porttitor ligula. Ut in felis accumsan, facilisis sem scelerisque, dictum nisl. Etiam laoreet pharetra scelerisque. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum a nisi mollis, aliquet dolor nec, tempor nunc. Nam vehicula posuere accumsan. Aenean eget pretium magna. Fusce porttitor neque eget tempus fermentum. Ut ut consectetur enim. Maecenas erat nulla, ultricies faucibus libero dignissim, interdum varius arcu. Vestibulum risus lorem, elementum et venenatis in, efficitur vitae lacus. Nunc vitae lorem at felis condimentum scelerisque vel vitae nulla. Aliquam pretium suscipit orci, eleifend condimentum ligula fermentum sit amet. Quisque aliquam eros eu neque porta, et efficitur orci suscipit. Nullam congue pharetra metus vel aliquet. Praesent pellentesque eget sem et tristique. Nunc facilisis nisi sed dolor semper, non consequat enim eleifend. Maecenas sagittis, turpis ut pellentesque rhoncus, erat massa iaculis nulla, at aliquet mauris nunc id nisl. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam quis ipsum pulvinar, tempus augue vitae, euismod ipsum. Maecenas tincidunt quam in pharetra consequat. Aenean sit amet ligula in ante viverra aliquet sit amet vel odio. Aliquam ac eros faucibus, mollis ipsum a, consequat massa. Phasellus rhoncus elit neque. Suspendisse finibus quam pulvinar rutrum mollis. In hac habitasse platea dictumst. Mauris lobortis ut sem non pellentesque. Sed non molestie lectus. Proin condimentum justo ac quam fermentum iaculis. Suspendisse non nunc porttitor, maximus orci at, efficitur elit. Maecenas risus mi, finibus ut consectetur quis, porta eget sapien. Etiam id diam tincidunt, volutpat felis et, finibus lectus. Pellentesque non laoreet lectus, non imperdiet arcu. Aenean eros ipsum, condimentum id velit id, aliquet consequat ipsum. Donec sodales ipsum id lobortis dictum. In eget magna mauris. Donec ornare ornare nunc a malesuada. Donec ac nunc vel nibh euismod placerat et at arcu. Nam vitae enim ut lectus lobortis varius. Integer sagittis tellus elit, eget condimentum quam sagittis sit amet. Proin pretium, enim eget commodo eleifend, massa nunc placerat massa, sed placerat dolor libero sagittis tortor. Integer ac sapien cursus, placerat sapien eget, venenatis mi. Aenean elementum risus ut risus accumsan ultrices. Sed elementum nec urna eu gravida. Curabitur dapibus dui elit, et laoreet ipsum consectetur sed. Nam maximus rhoncus maximus. Cras molestie laoreet lectus. Quisque eget posuere dui. Integer vitae nibh euismod, ultricies purus non, porttitor augue. Integer luctus odio felis. Donec pellentesque nunc in massa bibendum feugiat. Donec non nibh euismod, luctus elit sed, mattis enim. Duis commodo tristique augue, et ullamcorper sem pulvinar ut. Nunc egestas porttitor sem sed porttitor. Nam non maximus ipsum. Ut congue, velit in condimentum venenatis, orci nisl imperdiet enim, sit amet posuere justo erat eu justo. Integer nec ultricies velit, ut maximus risus. Sed pellentesque tristique urna eget varius. Vestibulum eu massa urna. Ut eget odio magna. Suspendisse ipsum justo, fermentum at ante in, elementum ultrices erat. Ut volutpat purus lacus, vitae ultricies nisi scelerisque et. Quisque hendrerit sagittis elit, eget fermentum dui. Nam blandit eget est eu ultricies. Nullam non dapibus nibh. Sed posuere molestie ligula at fringilla. Integer vel felis non turpis lacinia porttitor vitae ac metus. Vivamus a mauris et tellus imperdiet rutrum sit amet ac quam. Nam sed leo ultrices, ultrices lorem commodo, eleifend diam. Donec tortor dolor, accumsan facilisis tellus in, consequat vestibulum leo. Phasellus blandit, sem et aliquam facilisis, tellus leo congue velit, eu pretium nisi ligula ac arcu. Pellentesque diam diam, tincidunt vitae urna ut, auctor facilisis massa. Proin ex ex, molestie ac magna ut, rhoncus faucibus lectus. Proin ut placerat augue. Proin mollis mi eget urna finibus malesuada. Etiam tempus mollis feugiat. Morbi vitae lorem et purus sagittis dapibus. Suspendisse potenti. Sed leo sem, pharetra nec lorem viverra, faucibus pretium tortor. Nam eget nisl sit amet arcu malesuada pharetra at vitae erat. Morbi faucibus euismod arcu a pretium. Morbi vehicula risus tellus, in congue sapien sodales ut. Nunc non odio egestas, tristique tortor ac, egestas urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi ut vestibulum erat. Nullam porta mauris nulla, at accumsan tellus pharetra eget. Maecenas quis ornare leo. Sed vestibulum nisl sem, ut faucibus leo semper sit amet. Morbi sed metus dui. Pellentesque malesuada in massa quis varius. Suspendisse eget blandit velit, sed luctus mi. Pellentesque feugiat velit sit amet lorem vestibulum, nec ultrices orci tempor. Aliquam erat volutpat. Proin rhoncus gravida mauris ut tristique. Donec pellentesque arcu vitae leo maximus pellentesque. Aliquam faucibus tempus tincidunt. Phasellus sagittis ante sollicitudin egestas pulvinar. Suspendisse semper nulla eget turpis rutrum auctor. Phasellus ac mollis velit, quis finibus turpis. In pretium, tortor non lacinia ultricies, dui mi bibendum eros, at mollis ante orci a metus. In vel ante pellentesque, egestas lectus eget, ornare tellus. Phasellus varius euismod ipsum eget sodales. Mauris vitae lectus mauris. Sed lobortis ac mauris vel consequat. Praesent sollicitudin ligula magna, eget aliquam magna lobortis quis. In tincidunt imperdiet metus quis gravida. Vivamus mattis bibendum pulvinar. Praesent vulputate nibh in felis aliquet lacinia. Ut eget erat ut orci aliquam ornare. Etiam laoreet, neque nec ultrices commodo, ante sem aliquet tellus, sit amet vehicula leo turpis at ante. Donec pulvinar ligula vel enim viverra, nec sollicitudin ex bibendum. Ut vehicula turpis ipsum, fermentum condimentum nisl mattis id. Quisque egestas ex quis orci scelerisque, sit amet tristique metus rutrum. Aenean ac pretium velit. Morbi enim dui, lacinia et diam ac, ornare tincidunt erat. Etiam ultrices orci ut lectus imperdiet, in malesuada mauris tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer a turpis porttitor, sodales nulla et, finibus neque. Etiam in ipsum in augue viverra dictum. Etiam sit amet metus neque. Praesent sed consequat turpis. Vivamus rutrum nulla ut eleifend sodales. Donec posuere finibus scelerisque. Etiam maximus sollicitudin finibus. Nam mollis, felis eget vehicula laoreet, est libero cursus urna, sit amet malesuada nulla lectus a erat. In ac commodo nisl. Suspendisse sit amet tellus odio. Proin nec lorem tellus. Quisque vestibulum congue turpis vel fringilla. Maecenas eget malesuada elit. Nulla tincidunt iaculis sem nec tristique. Nunc eu lorem vitae arcu posuere pellentesque. Donec tempus mauris quam, ut molestie orci lobortis vitae. Duis nec dui est. Nam vestibulum magna eu lectus ornare, vitae blandit sem varius. Pellentesque vulputate elementum cursus. Sed at ullamcorper lectus. Aliquam erat volutpat. Aliquam sit amet ante nec ex feugiat gravida pharetra et dui. Quisque gravida varius augue, eget venenatis massa finibus at. Maecenas ut arcu non libero suscipit pharetra. Vivamus vulputate tempor est ut faucibus. Nullam tempus tellus eros, ut fermentum magna auctor sed. Sed ut orci quis purus rutrum luctus. Ut eros lacus, pharetra quis rutrum nec, posuere quis magna. Donec mollis, mauris sed pulvinar tempor, erat tortor volutpat enim, a fermentum enim sapien id ante. Nam semper libero quis laoreet pharetra. Curabitur cursus leo semper diam sollicitudin, id congue diam molestie. Suspendisse quam nisi, scelerisque non sollicitudin ut, pellentesque vel tellus. Morbi viverra nisl ut venenatis egestas. Morbi aliquam lectus sit amet neque mattis lacinia. Vivamus vitae vulputate augue. Nunc eget tincidunt urna. Nulla feugiat tempor elit, id scelerisque mauris laoreet vel. Ut at semper dui, nec auctor lorem. Aenean sed magna luctus, mollis tellus in, fringilla nisl. Aenean ante libero, pellentesque eu hendrerit vel, sollicitudin faucibus justo. Curabitur quis pretium turpis. Integer faucibus mi a faucibus iaculis. Cras lacus felis, blandit id hendrerit vel, eleifend eu mi. Donec porttitor aliquam nisi, quis viverra sem efficitur eu. Nam sollicitudin lacinia nulla. Pellentesque cursus quam vel orci aliquam, vitae rutrum urna fermentum. Sed eu elementum ligula. Morbi auctor elit id est lacinia, a consequat dui mattis. Quisque massa leo, laoreet non suscipit suscipit, venenatis nec lacus. Morbi elit velit, varius at varius euismod, blandit eget ipsum. Vivamus sit amet dui ac risus luctus congue. Phasellus dictum, lacus in lacinia malesuada, augue nisi rutrum tellus, a maximus metus neque ac velit. Nam pellentesque et nisi vel lobortis. Integer eleifend aliquam diam, et ultricies arcu ultrices quis. Suspendisse id erat efficitur, rutrum velit in, auctor justo. Donec efficitur dui in vehicula gravida.\"\n }\n}\n\nreturn $input.all().concat($input.all()) ", - "notice": "" - }, - "id": "e5fb96ab-2e0c-4283-96f8-ad2b02fc6eb7", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - } - ], - "connections": { - "When clicking \"Execute Workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "homeProject": null, - "sharedWithProjects": [], - "usedCredentials": [] - } - } -} diff --git a/cypress/fixtures/templates_search/all_templates_search_response.json b/cypress/fixtures/templates_search/all_templates_search_response.json deleted file mode 100644 index fe8ba3e3e42..00000000000 --- a/cypress/fixtures/templates_search/all_templates_search_response.json +++ /dev/null @@ -1,1071 +0,0 @@ -{ - "totalWorkflows": 506, - "workflows": [ - { - "id": 1, - "name": "test1 test1", - "totalViews": 120000000, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2019-08-30T16:39:31.362Z", - "nodes": [ - { - "id": 11, - "icon": "file:amqp.png", - "name": "n8n-nodes-base.amqpTrigger", - "defaults": { - "name": "AMQP Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB7UlEQVRoge2W4W3CMBCFj26QjkBHSEdIR4AR6Ah0BBgBRqAjhBFgBBghHaEVlV29PN0lDr+o9D7JEjhn+975bJ8JIYQQQgghhBBCCCGEEA9CY2bf0NaBW2uyu7UN2XSOzTyY60J2BzNbObbsH7eTmS2mhHJHE1wmCD7A93ngEAquHaHc2omCcysSXQW74g32BHfwfTEiuCoQm9vuDsEndPYpELxKjjBj0foCEXX6XdM3by3c7aOZPZvZzMzeaBzbIh9pzIuZXaG/RqNIMAq7Ur8XCHQ2kx3LC56DMQ39X4LI23zbAd88ruRHD09wTVF5p+/eBZI5g7O8w5FgXOvsZAI7PxRwS4HGIPbm8wRjBL/Sgp/QNyQYHWySmOxgJBgFeGnPfZHgDVyufET+YMEVCdo7gziCTBbGmRKlGQpCMXOnj+1L6B0JFsxndO3cjjZyjo6OnZeqGb5gqhTQS3qKeK1SwbesfB3IrF/awqu+g8Dgs5SLE37SciHiPUv8rLVp7k2wdl63tDDqgTs8lqpINWGXbSTKe9rlJgXME7C9I6V7oGAWsEzv2gzeN2TstkbCZyIJWBYKWUwtF4foKGU9TpRGdZDSdVDpDNXSVVBLt5TeucS9K6X/E3USX3rshBBCCCGEEEIIIYQQ4tExsx8PuuPnwhCIbgAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AMQP Trigger", - "typeVersion": 1 - }, - { - "id": 18, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilot", - "defaults": { - "name": "Autopilot" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:clearbit.svg", - "name": "n8n-nodes-base.clearbit", - "defaults": { - "name": "Clearbit" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTAlIiB4Mj0iMTAwJSIgeTE9IjAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0RFRjJGRSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0RCRjFGRSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMCUiIHgyPSI1MCUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM1N0JDRkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM1MUI1RkQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM3LjUlIiB4Mj0iNjIuNSUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMxQ0E3RkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxNDhDRkMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik03MiAzNnYxNi43N2wtLjAwNC44NjhjLS4wNiA2LjAzNS0uNzUgOC4zNTMtMiAxMC42ODhhMTMuNjMgMTMuNjMgMCAwMS01LjY3IDUuNjdsLS4zMjYuMTcxQzYxLjY1OCA3MS4zNjQgNTkuMTYgNzIgNTIuNzcgNzJIMzZWMzZoMzZ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTY0LjMyNiAyLjAwM2ExMy42MyAxMy42MyAwIDAxNS42NyA1LjY3bC4xNzEuMzI3QzcxLjM2NCAxMC4zNDIgNzIgMTIuODQgNzIgMTkuMjNWMzZIMzZWMGgxNi43N2M2LjY4NyAwIDkuMTEyLjY5NiAxMS41NTYgMi4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTM2IDB2NzJIMTkuMjNsLS44NjgtLjAwNGMtNi4wMzUtLjA2LTguMzUzLS43NS0xMC42ODgtMmExMy42MyAxMy42MyAwIDAxLTUuNjctNS42N0wxLjgzMiA2NEMuNjM2IDYxLjY1OCAwIDU5LjE2IDAgNTIuNzdWMTkuMjNjMC02LjY4Ny42OTYtOS4xMTIgMi4wMDMtMTEuNTU2YTEzLjYzIDEzLjYzIDAgMDE1LjY3LTUuNjdMOCAxLjgzMkMxMC4zNDIuNjM2IDEyLjg0IDAgMTkuMjMgMEgzNnoiLz48L2c+PC9zdmc+" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Clearbit", - "typeVersion": 1 - }, - { - "id": 51, - "icon": "file:convertKit.svg", - "name": "n8n-nodes-base.convertKitTrigger", - "defaults": { - "name": "ConvertKit Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTcyIiBoZWlnaHQ9IjE2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODIuNzIgMTI2LjMxNmMyOS43NyAwIDUyLjc4LTIyLjYyMiA1Mi43OC01MC41MjYgMC0yNi4xNDMtMjEuNjE3LTQyLjEwNi0zNS45MzUtNDIuMTA2LTE5Ljk0NSAwLTM1LjkzIDE0LjA4NC0zOC4xOTggMzQuOTg4LS40MTggMy44NTYtMy40NzYgNy4wOS03LjM1NSA3LjA2MS02LjQyMy0uMDQ2LTE1Ljc0Ni0uMS0yMS42NTgtLjA4LTIuNTU1LjAwOC00LjY2OS0yLjA2NS00LjU0My00LjYxOC44OS0xOC4xMjMgNi45MTQtMzUuMDcgMTguNDAyLTQ4LjA4N0M1OC45NzYgOC40ODggNzcuNTYxIDAgOTkuNTY1IDBjMzYuOTY5IDAgNzEuODY5IDMzLjc4NiA3MS44NjkgNzUuNzkgMCA0Ni41MDgtMzguMzEyIDg0LjIxLTg3LjkyNyA4NC4yMS0zNS4zODQgMC03MS4wMjEtMjMuMjU4LTgzLjQ2NC01NS43NzVhLjcwMi43MDIgMCAwMS0uMDMtLjM3N2MuMTY1LS45NjIuNDk0LTEuODQxLjgxOC0yLjcwNy40NzEtMS4yNTguOTMxLTIuNDg4Ljg2NC0zLjkwNmwtLjIxNS00LjUyOWE1LjUyMyA1LjUyMyAwIDAxMy4xOC01LjI2M2wxLjc5OC0uODQyYTYuOTgyIDYuOTgyIDAgMDAzLjkxMi01LjA3NSA2Ljk5MyA2Ljk5MyAwIDAxNi44ODctNS43MzZjNS4yODIgMCA5Ljg3NSAzLjUxNSAxMS41OSA4LjUxMiA4LjMwNyAyNC4yMTIgMjEuNTExIDQyLjAxNCA1My44NzMgNDIuMDE0eiIgZmlsbD0iI0ZCNjk3MCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - }, - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "ConvertKit Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 25, - "name": "test1 test1", - "totalViews": 120000000, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2019-08-18T18:17:58.358Z", - "nodes": [ - { - "id": 15, - "icon": "file:affinity.png", - "name": "n8n-nodes-base.affinity", - "defaults": { - "name": "Affinity" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Affinity", - "typeVersion": 1 - }, - { - "id": 21, - "icon": "file:comprehend.svg", - "name": "n8n-nodes-base.awsComprehend", - "defaults": { - "name": "AWS Comprehend" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NSA3NSI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNjE3LjQ2IiB5MT0iLTY3NC41MyIgeDI9IjcyMy41MyIgeTI9Ii01NjguNDYiIGdyYWRpZW50VHJhbnNmb3JtPSJyb3RhdGUoLTkwIDY4My41IDI0LjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMDU1ZjRlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNTZjMGE3Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZGF0YS1uYW1lPSJUdXJxdW9pc2UgR3JhZGllbnQiIGQ9Ik0wIDBoNzV2NzVIMHoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJNNDQuNSAzNC4ydi05LjdhMSAxIDAgMDAtLjI5LS43MWwtMTEtMTFhMSAxIDAgMDAtLjcxLS4yOWgtMTlhMSAxIDAgMDAtMSAxdjQzYTEgMSAwIDAwMSAxaDMwYTEgMSAwIDAwMS0xdi00LjQ0YTExLjggMTEuOCAwIDAxLTItMi4zdjUuNzRoLTI4di00MWgxN3YxMGExIDEgMCAwMDEgMWgxMHYxMWExMS41NiAxMS41NiAwIDAxMi0yLjN6bS0xMS0xMC43di03LjU5bDcuNTkgNy41OXptLTEwIDhoLTZ2LTJoNnptMTYgMGgtMTR2LTJoMTR6bTAgNmgtMjJ2LTJoMjJ6bTE1LjQ0IDI1aC00Ljg4YTEgMSAwIDAxLS45My0uNjJsLTEuMjEtM2ExIDEgMCAwMS4wOS0uOTQgMSAxIDAgMDEuODMtLjQ0aDcuMzJhMSAxIDAgMDEuODMuNDQgMSAxIDAgMDEuMDkuOTRsLTEuMjEgM2ExIDEgMCAwMS0uOTMuNjJ6bS00LjIxLTJoMy41NGwuNC0xaC00LjM0em0xMS42NC0xOWExMCAxMCAwIDAwLTE5Ljg3IDEuNjIgMTAgMTAgMCAwMDQuMjggOC4yIDMuODggMy44OCAwIDAxLjcyLjU5djMuNTlhMSAxIDAgMDAxIDFoOGExIDEgMCAwMDEtMXYtMy42YTQuMzMgNC4zMyAwIDAxLjcxLS41NyA5LjkyIDkuOTIgMCAwMDQuMjktOC4yIDEwLjE5IDEwLjE5IDAgMDAtLjEzLTEuNjV6bS01LjMyIDguMmMtLjU4LjQtMS41NSAxLjA3LTEuNTUgMi4xdjIuN2gtMnYtN2gydi0yaC02djJoMnY3aC0ydi0yLjY4YzAtMS0xLTEuNzMtMS41OC0yLjE0QTggOCAwIDExNTggMzcuMzJhNy44OSA3Ljg5IDAgMDEyLjM5IDQuNDcgOCA4IDAgMDEtMy4zNCA3Ljkxek0yOC41IDI1LjVoLTExdi0yaDExem0xIDE4aC0xMnYtMmgxMnptMTAgMGgtOHYtMmg4em0tOSA2aC0xM3YtMmgxM3oiIGRhdGEtbmFtZT0iSWNvbiBUZXN0IiBmaWxsPSIjZmZmIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Comprehend", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 16, - "name": "Create dynamic Twitter Profile Banner", - "totalViews": 120000, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2022-01-10T14:15:25.921Z", - "nodes": [] - }, - { - "id": 1073, - "name": "Scrape and Store Data from Multiple Pages Websites", - "totalViews": 2476, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-05-07T14:48:56.297Z", - "nodes": [ - { - "id": 13, - "icon": "file:asana.svg", - "name": "n8n-nodes-base.asanaTrigger", - "defaults": { - "name": "Asana Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGN4PSI1MCUiIGN5PSI1NSUiIGZ4PSI1MCUiIGZ5PSI1NSUiIHI9IjcyLjUwNyUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjkyNDA0IDAgMCAxIC4wMzggMCkiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZCOTAwIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NUQ4RiIgb2Zmc2V0PSI2MCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjk1MzUzIiBvZmZzZXQ9Ijk5LjkxJSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik00NS41OTQgMjguNWMtNi45OTQuMDAzLTEyLjY2NCA1LjY3My0xMi42NjcgMTIuNjY3LjAwMyA2Ljk5NSA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2OCA2Ljk5NS0uMDA0IDEyLjY2NC01LjY3MyAxMi42NjctMTIuNjY4LS4wMDMtNi45OTQtNS42NzItMTIuNjY0LTEyLjY2Ny0xMi42Njd6bS0zMi45MjcuMDAxQzUuNjczIDI4LjUwNS4wMDMgMzQuMTc0IDAgNDEuMTdjLjAwMyA2Ljk5NCA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2NyA2Ljk5NS0uMDAzIDEyLjY2NC01LjY3MyAxMi42NjgtMTIuNjY3LS4wMDQtNi45OTUtNS42NzMtMTIuNjY0LTEyLjY2OC0xMi42Njh6TTQxLjc5IDEyLjY2N2MtLjAwMiA2Ljk5NS01LjY3MSAxMi42NjUtMTIuNjY2IDEyLjY3LTYuOTk1LS4wMDQtMTIuNjY0LTUuNjc0LTEyLjY2Ny0xMi42N0MxNi40NiA1LjY3MyAyMi4xMy4wMDMgMjkuMTIzIDBjNi45OTQuMDA0IDEyLjY2MyA1LjY3MyAxMi42NjYgMTIuNjY3eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjczMiAyLjczMikiIGZpbGw9InVybCgjYSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Asana Trigger", - "typeVersion": 1 - }, - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 15, - "icon": "file:affinity.png", - "name": "n8n-nodes-base.affinity", - "defaults": { - "name": "Affinity" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAC/VBMVEUAAAAtTfMvVekpSN8rR+g2POglUecfWuY0PukdXeUoTucrS+c2POkfW+VGJusyQeghWOcjVecmUecNceQgWeY4OegiV+YeXOYxQ+gXZeUuR+gmUuc9MuoZYeZHJuszP+g4OulFKOsTauQpS+c7Ou02O+kvRegiVuZBLuoMdOQoTeoQbuQ9NekVaOVHJesQbeQhWOctR+gTauUyQuk9L+wqS+cjVeY0PugyQeg7NekXZeVDK+pHJesgWeYqTOglUugcYeg0PukNceRDK+tGJ+pFKOsyQeg4OekrSec2O+kyQOgkVOYOceQjVechWOY6NuglUecQbuQtSOchV+cxQek9MelAMOkcX+ZDKetEK+otR+dCL+oPZ+IcX+YSbOQ5OOgyQegKdeQUaeU3O+gcX+U2O+kdXeYgWuYmUeYZY+ZFJ+onT+gjVOcSbORFKesKdeMcXeYPbuMYZOQNbOYlUuYyQegcXuU4OehEKeopTechV+dHJusnUOdHJus0PukOceRGJuoPbeQyQegjVeY3O+kpTudGJ+svR+c6N+kcXuUVZ+VGJuoLdOMzQOgLdOQvRegKdeQPceQdXeQqTOZBLegQb+UiVuYeXOQlU+dBLelBLukPcOQTauQdXOUsSuYLd+MvR+hEK+otR+dDLOpHJusPceUiVeczQOkiVuU1Pek2POkgWOYeW+UfWucgY/c2RPcjXfQ3OugkVOc7PfU6NulMKfw4Q/kzQOlLKPgqTektSOclW/ZJKPM1Qe4iWu0YZegsUfUPePIkWvI2QfIeYe85O+1HJ+0tSeowRepAL+kiV+cySvgjXvYRdvQxSfMsTvAxRe09Ne0VbewMc+RILvsvTvk1Rvk7P/lDM/knWPcqVPYWb/Q6PfInVfAnU+xHJuseXuojV+obYOYZavQ3QfQMffMTcvNELvNAMvALe+8Odu8aZu0Mduo9M+oQcOkoUOgLdeU/OflIK/chYfY8OPIgXu8wQ+g8P/wsVPoeZfU6Ou8vSu5BL+0hWugSbea5VKRRAAAAqXRSTlMAAgQFBvkQ/fv+/f37+fv7+/v++/ng2b79/fz7/f35vfz7+0UV/fz8+/sj+Qv+/f38ek0uF/jtqIx1cGZfUU8eF/39/PTj4tvOy8Ozp5OIhnl4b2JQT0tGRDc1HA358O7p5NjU0sW6q6V5eG9rZlRDPDIuE/f26+ba2tHLx7+9urWuoaCamJeXlZGLin5kYllXKe/u6unf3dXTz8/Ix8XBurmdnJqVfnNZVQrS8AAABtNJREFUSMfllndQE0EUxveSCwES0rBEAggoRQRBwYqKvffee++99957712pwUgkVAGlSUdQsYJSLAj2ruPbC2HvxPFvZ9xMkne7+7tv79379g79K42ieHw+j6L+OMDjUX9DeYaITOMeUpV5gtIe/bZv7+cBM/gUQeHrOai5V/NBQ5kj0thTPDZ2SFSr1QU+HZs4I2Sg+QjNON0uQqfVRbRb3pwiNJulNyYkZyiVUqlxSOQdcU+9Bv4dfCT7bbytrURS77FOu2gQqpQSPnJenBNm4eDgIAXaWOD7qbMRdFIw0etZsZNTW1ugrSUS6wjdlN9pCnnvjW4YZhGWlpx2+3ZBa+PWgjtVayMKPk3vJjklOX3Pzn6r1UZIHksk2q2I4rK8xdENQ0XpCafq79xZv0vkdWMfwZWqnsgFNX1jaZmUdHffWa8ZXhvaax/Xq2etbY74nAvu/hnY6BMe+uPBY9UCH8GDhWOrds58ZWn56llPF6afnvI4XlIv3noo0YbIWaEwNY2eBCEfqgRWW/OqwEcc9+Dr++Bgy8zM/pAUPACntY4H6XMgR7LVI1elergMR3oFhGqqjX3sbS7bBAdnZg5CNKVXodGMCEh6O0+DNP4/9FCleDQEWNLVBa7b9/Lly8HBAxDN0lmlk0h0cNVk1Y4aECYXgrWb3Db2wXTcSBfErrYBOom1dgMEho6BUY7y3B4QEAWApSFA28ctdOHcF8928da65RAY4BZBjvLwaSyYAlgtDQHaPm7kUMRnwS7tI6wjlkJEYHdHBiYeqZ+m/BgCteYjfgDVwmfD8RimKuBZH4RVUrpDQNhkh4/KELX6OtBXME3yYxtvq1vFynYrsx+yqGps3RyLMIeM+Y3XdMbVQmj488q2tdVuZa/l+AehLOgSog1stCjMIjGxFhxBtRAa6x0ubtv27QDEI6ltFmgmjGrUCiLM9ooWiUQJCbUQTXNpyGPPu05ti9vTiCLKwxbkCYUfqhkhmgfsPVORKBSzkA9CwxgfPAYWy56C+Gxj9A00868SBDRCvXJVpqahoZiFRjG0L+MxBKxlklPxIh4jTLQnYjplSa+1Ex8qFKoyPcuhO25at+k9eCzp+2BQ48CoOtCyqJTwWLlG8agMs2RzWwG0OO7OmzfB2J/9DYsmM4AW+gtljnKNRqMoZ4m2Wuxrb2ODPUZYDj3hhom/n9/Nm/LYvhUs8ZgYTII91p+McbZAExN/TJMyJx5bd5UxqM37jiRXHOlWw5+Y+Af4+cnCL3BhOGqsZgxq87Ujjw2Tmpz8EqRBWxbUArS4q1qjZgxKPMZpwD61emICLUAYtQT2bA7bJ0MZEmLc2t7XhniMy9awsnpyIy9PGCBLqYZpsqY+yR+VypDIyEixL+Mx6rd1Tb9fo0aNa8PHLdhzQxiAa41sNMDCoyRR2WFUB8i54MpYqGyO7uwsV2CvDURGwyYEmulpvmHNOdhjGf0oI5qptU+N2TBFoWP37VyBZeSqExqveSr2Z8K3fszUFWqBr80VliMhalBk5+qa1QDRMJvQjI+mYo8lfGuJaAqPjS8Qix+M5+ynq4vs7O5vARYam0aYBY+ltzSMec73sbeP82DRw/aXuv0cMRd6uPTarpMeKRSExbXW86pYfKcp4pN0lbrVLeqGKTYtiwqPjZUrFGWPKlg4/ZBIePxCysglv3Crm9obQ4R+JwwQyuRyjVxDWAwbjYoUFIxnbb27YszNU6dDwKbhfoPFwKC4WAlMd4g0vt4ZIqIMMCizfdQj0AxbzD2/Ea4JtnKG9HoXlvLs123MY1Zzn1Wbv5hhgwJsxIGHZCil6sbsbI8uMb9VtxWrhwZ4OGPvfLwjs5+eyVLp7Yuki4e6FdYxjzlPcgo7+UvGY0I/9yhcLRWst0WiUpkI95nAM5/XudXmxQ6gKEBharOnVthjN7DH9LVGQYHRiNcpzcIhrSanuNFJoG+V9DZ0bMH+vGY1btxB7LHYA0PK+507pVuEWaTVYqUHwt2vX4N2zNHpu+fOndNsDOPPly2g0qu/w9WSP2mgt5F3rfWm6aKwhjlnAOD4eVch0OYvUt1GjPhZlGXnCmwDRDH7eRU/95vhsfMazXt4L9RU1DCnE8XxM9be8bykTh1z8zalpW520LJcG5T7aEKgUObu6KjJ16hU8ML1uZMLYUnSRheWAF0XmlvW/TFz9HcD6B557344QqXKVaqye+nrEWFZK6e3jX5eGBMTk5qaNaYZ0rPMzDkTq6SkBMWG5+aqus6qzJZr0DO3dVu5sltvmMF5QUHefbt3rd61e19n8tZfWZyEnC2OJJfiolx1Pg8av9LZKdzHvJX+7+0X6aNkPIGC7jsAAAAASUVORK5CYII=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Affinity", - "typeVersion": 1 - }, - { - "id": 19, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilotTrigger", - "defaults": { - "name": "Autopilot Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot Trigger", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 31, - "icon": "file:bitwarden.svg", - "name": "n8n-nodes-base.bitwarden", - "defaults": { - "name": "Bitwarden" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTUgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBkPSJNNTMuMzMzIDIuNjY3djMyYzAgMi4zODgtLjQ2NSA0Ljc1Ni0xLjM5NiA3LjEwM3MtMi4wODQgNC40My0zLjQ1OCA2LjI1LTMuMDE1IDMuNTktNC45MTcgNS4zMTItMy42NiAzLjE1My01LjI3MiA0LjI5MmwtNS4wNCAzLjIzLTMuNzMgMi4wNjItMS43Ny44MzRjLS4zMzMuMTY2LS42OTUuMjUtMS4wODMuMjVhMi40IDIuNCAwIDAxLTEuMDgzLS4yNWwtMS43Ny0uODM0LTMuNzMtMi4wNjItNS4wNDItMy4yM2MtMS42MS0xLjE0LTMuMzY4LTIuNTctNS4yNy00LjI5MnMtMy41NC0zLjQ5Mi00LjkxNi01LjMxMi0yLjUyOC0zLjkwMy0zLjQ2LTYuMjVTMCAzNy4wNTUgMCAzNC42Njd2LTMyQTIuNTYgMi41NiAwIDAxLjc5MS43OTIgMi41NiAyLjU2IDAgMDEyLjY2NiAwaDQ4Yy43MiAwIDEuMzQ2LjI2NCAxLjg3NC43OTJhMi41NiAyLjU2IDAgMDEuNzkyIDEuODc1bS04IDMyVjhIMjYuNjY2djQ3LjM3NWMzLjMwNS0xLjc1IDYuMjY0LTMuNjUzIDguODc1LTUuNzA4IDYuNTI3LTUuMTEgOS43OS0xMC4xMSA5Ljc5LTE1IiBzdHJva2U9Im5vbmUiIGZpbGw9IiMzYzhkYmMiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Bitwarden", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 39, - "icon": "file:circleCi.png", - "name": "n8n-nodes-base.circleCi", - "defaults": { - "name": "CircleCI" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAAmVBMVEUAAAAVFBUEAwQVExUAAAAAAAAVFBUWExYVFBUUFBQcHBwVFBUUFBQVExUVERURDxEVExUUExQVFBUUFBQVFBUVFBUUEhQUFBQVExUUFBQVFBUVExUUExQVExUWFhYZGRkVFRUVFBUVFBUVFBUVFBUVFBUUFBQWFBYWFhYTExMUFBQTExMUFBQVFBUVExUVFBUWFRYVFBUVFBX33+L1AAAAMnRSTlMA/QX5AwL7adxiCHqYux8QqUHn4cuOKZ9t79fEr4UiFAy19eyUgHJGLhpLNTPPWlI54+oyz24AAAM7SURBVFjDlJWJduIwDEUly3ZD2MtaylrWlnbaef//cYNLIIntAPNyTuDYyZWebCsUlVHurubdWn3QGDUG9Vq3pX+HDD0s7d44jKeJBZhxvknSGQ8dSD8Omde/4MRyEcOpX289CFJEPx3rwgszcjGLddzOkUg9ADmsABQQZdTpPh3eAylKNy4kI65sbpDe4hii/bOLeFsC7nXJmGpDM2cH9+QCbauMKVJNZsYjYuapIRWlLCZBUW6V6GtJKkbpQfC4BEk74GhaJh7lPmeSkiZP/YByn/MaJNNhwf9KeFSypeipisJnVXFqBY6mIcAxhFicZSVGYsg8L4+h11hhLON0rZNJsob7Z2PlaZK5WqpFLDkjyeZ72Fak2sPvTeKGIpw/V1vLZ3A4j9W+tAofTUBCWz11SaYeJMOWJ103p0zWVN3D+wSWgyrvSFUkw4yGY1BRSpMeBcYYf9NssSH+FMYUPTC0CziCbNH7YC8XN2PiH4wnn2OzvfyJgF8nVdmTZhA/9QNpohmLR1kVT5zRSpc6ZNPjCLuovifG23uOycqckzS1xH/h9QRvMYtYJ/m93hy8UNTFsfvZpuLQliWIS2niFbiX5gboZ/oCYN05Fly1X/x0Pojo/amsFuWLNABwPt+zQpUbkHJxto7uy1x/R8zC587LDdIXTLe86ILOeaOXlJ/Ycd7iOW8thtLytrfoU6h4DRjPaZanpiZs+XimN77DNUi0JSgasJQwL4sbmJGHaVwxOw8jrWpTXurWbe5ongye/6vF2nEQhmFoTRxPsCGBuEAlxJT7H45QF6UiH6d9wUvVJamT+v3+vQzeVHFPsY64/8Kn+oXjvx+FqzUM4iiWOQz5aN6PjOYooFDYSpXD1qsHtgwQZdaHCaI2pDN7E9L3EwyVCSZ2JQW6m6p0FzK684PItyUFuFcKNIRJeMwL27FX5vws+awJk6ZMusx+h0zCRVtTQtKPhJSahLQEbdgAhS1ocXmdvud2SOwrPOPWY7QRwm0ZbhJByyrJssIGmmshx2rnyepH7TweLsQDQKIOsaMOLf8NXsgJEW2HQlwevNgxEOn2WrK8aQzEvXnSaQ2lHBBKZRHZuSMiewPdyr8Dzj/WNwAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "CircleCI", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - }, - { - "id": 46, - "icon": "fa:file-archive", - "name": "n8n-nodes-base.compression", - "defaults": { - "name": "Compression", - "color": "#408000" - }, - "iconData": { - "icon": "file-archive", - "type": "icon" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Compression", - "typeVersion": 1 - }, - { - "id": 59, - "icon": "fa:clock", - "name": "n8n-nodes-base.dateTime", - "defaults": { - "name": "Date & Time", - "color": "#408000" - }, - "iconData": { - "icon": "clock", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Date & Time", - "typeVersion": 2 - }, - { - "id": 114, - "icon": "file:helpScout.svg", - "name": "n8n-nodes-base.helpScoutTrigger", - "defaults": { - "name": "HelpScout Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjMxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTE4LjQzMiAxODAuOTY5bDkwLjQ4NC05MC40ODVhNjMuNzE3IDYzLjcxNyAwIDAwMTguOTktNDUuNDI4QTY0LjI0NSA2NC4yNDUgMCAwMDEwOS40NzYgMEwxOC45OSA5MC40ODRBNjMuNzE3IDYzLjcxNyAwIDAwMCAxMzUuOTEzYzAgMTcuNjg3IDcuMDc1IDMzLjUxMiAxOC40MzIgNDUuMDU2em0yMTkuMTM2LTUyLjg3NmwtOTAuNDg0IDkwLjQ4NGE2My43MTcgNjMuNzE3IDAgMDAtMTguOTkgNDUuNDI5IDY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMSA0NS4wNTZsOTAuNDg0LTkwLjQ4NUE2My43MTcgNjMuNzE3IDAgMDAyNTYgMTczLjE1YzAtMTcuNjg3LTcuMDc1LTMzLjUxMy0xOC40MzItNDUuMDU2em0tLjU1OS0zNy40MjJBNjMuNzE3IDYzLjcxNyAwIDAwMjU2IDQ1LjI0MiA2NC4yNDUgNjQuMjQ1IDAgMDAyMzcuNTY4LjE4NkwxOC45OTEgMjE4LjU3N0M3LjI2IDIzMC4zMDcgMCAyNDYuMzIgMCAyNjQuMTkyYTY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMiA0NS4wNTZMMjM3LjAwOSA5MC42NzF6IiBmaWxsPSIjMTI5MkVFIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "HelpScout Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 226, - "name": "Receive Google Sheet data via REST API", - "totalViews": 2438, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-01-01T19:27:20.732Z", - "nodes": [ - { - "id": 18, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilot", - "defaults": { - "name": "Autopilot" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot", - "typeVersion": 1 - }, - { - "id": 47, - "icon": "file:coda.svg", - "name": "n8n-nodes-base.coda", - "defaults": { - "name": "Coda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2MCA2MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjAgNjA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRUU1QTI5O30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQ1LjIsMTYuMmMzLjMsMCw2LjUsMS4zLDguOCwzLjNjMS41LDEuMywzLjgsMC4yLDMuOC0xLjhWNC43YzAtMi41LTIuMS00LjctNC43LTQuN0g2LjMKCUMzLjcsMCwxLjYsMi4xLDEuNiw0Ljd2NTAuN2MwLDIuNSwyLjEsNC42LDQuNyw0LjZoNDYuOGMyLjUsMCw0LjctMi4xLDQuNy00LjdWNDIuM2MwLTItMi4zLTMuMS0zLjgtMS44Yy0yLjQsMi4xLTUuNCwzLjMtOC44LDMuMwoJYy03LjYsMC0xMy43LTYuMi0xMy43LTEzLjhDMzEuNiwyMi40LDM3LjcsMTYuMiw0NS4yLDE2LjJ6Ii8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Coda", - "typeVersion": 1 - } - ] - }, - { - "id": 156, - "name": "Get Execute Command Data and Transfer to JSON", - "totalViews": 1855, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2019-11-02T12:18:37.963Z", - "nodes": [ - { - "id": 13, - "icon": "file:asana.svg", - "name": "n8n-nodes-base.asanaTrigger", - "defaults": { - "name": "Asana Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGN4PSI1MCUiIGN5PSI1NSUiIGZ4PSI1MCUiIGZ5PSI1NSUiIHI9IjcyLjUwNyUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjkyNDA0IDAgMCAxIC4wMzggMCkiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZCOTAwIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NUQ4RiIgb2Zmc2V0PSI2MCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjk1MzUzIiBvZmZzZXQ9Ijk5LjkxJSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik00NS41OTQgMjguNWMtNi45OTQuMDAzLTEyLjY2NCA1LjY3My0xMi42NjcgMTIuNjY3LjAwMyA2Ljk5NSA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2OCA2Ljk5NS0uMDA0IDEyLjY2NC01LjY3MyAxMi42NjctMTIuNjY4LS4wMDMtNi45OTQtNS42NzItMTIuNjY0LTEyLjY2Ny0xMi42Njd6bS0zMi45MjcuMDAxQzUuNjczIDI4LjUwNS4wMDMgMzQuMTc0IDAgNDEuMTdjLjAwMyA2Ljk5NCA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2NyA2Ljk5NS0uMDAzIDEyLjY2NC01LjY3MyAxMi42NjgtMTIuNjY3LS4wMDQtNi45OTUtNS42NzMtMTIuNjY0LTEyLjY2OC0xMi42Njh6TTQxLjc5IDEyLjY2N2MtLjAwMiA2Ljk5NS01LjY3MSAxMi42NjUtMTIuNjY2IDEyLjY3LTYuOTk1LS4wMDQtMTIuNjY0LTUuNjc0LTEyLjY2Ny0xMi42N0MxNi40NiA1LjY3MyAyMi4xMy4wMDMgMjkuMTIzIDBjNi45OTQuMDA0IDEyLjY2MyA1LjY3MyAxMi42NjYgMTIuNjY3eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjczMiAyLjczMikiIGZpbGw9InVybCgjYSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Asana Trigger", - "typeVersion": 1 - }, - { - "id": 15, - "icon": "file:affinity.png", - "name": "n8n-nodes-base.affinity", - "defaults": { - "name": "Affinity" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Affinity", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - } - ] - }, - { - "id": 1, - "name": "Excel to Postgres", - "totalViews": 1757, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2019-08-31T00:05:02.587Z", - "nodes": [ - { - "id": 30, - "icon": "file:bitly.svg", - "name": "n8n-nodes-base.bitly", - "defaults": { - "name": "Bitly" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMjh2MTI4SDB6Ii8+PHBhdGggZD0iTTYzLjcwOCAwQzI4LjQ0MyAwIDAgMjguMzA2IDAgNjUuMzIyYzAgMTkuMTkzIDEwLjI2NiAzNy43MzYgMjQuNzAzIDQ4Ljg3NyAyLjc4IDIuMTQ1IDYuMDkxIDEuOTQ5IDcuOTg5LjEwOSAxLjU5OS0xLjU1IDEuNDY3LTUuMjgyLTEuNTA3LTcuODk3LTExLjU0MS0xMC4xNDktMTkuNTItMjUuNTE0LTE5LjUyLTQwLjg2MSAwLTI3LjU2NCAyNC40NzQtNTAuNzU2IDUyLjA0NC01MC43NTYgMzMuNTU4IDAgNTEuNTAzIDI3LjI1MiA1MS41MDMgNTAuMzUxIDAgMTQuMTE0LTYuOTAyIDMxLjE1NS0xOS4zNjEgNDIuMDI1LjAxOS0uMDQ5IDIuNTg4LTUuMTAxIDIuNTg4LTE0Ljk0IDAtMTYuNzQ4LTEwLjYxMi0yNS44MjEtMjIuOTI2LTI1LjgyMS04LjkxNCAwLTE0LjI1MSAzLjE4Ny0xNy44ODMgNi4xNTggMC02LjgyMi4yMjgtMTkuNTYzLjIyOC0xOS41NjMgMC04LjQwOS0yLjk0Ni0xNS4xNC0xMy4yMTMtMTUuMjg3LTUuOTQzLS4wODQtMTAuMzUzIDIuNjQxLTEzLjEwMyA4LjgwMy0uOTkxIDIuMzExLS42MjYgNC44MjIgMS4zMzMgNS45NiAxLjYyMS45NDEgNC4yODcuMjQzIDUuNjA2LTEuNTE3Ljg4MS0xLjEgMS4zNzUtMS4zMzUgMi4xNDEtMS4yNTIgMS4yNjEuMTM2IDEuMzA5IDIuMTY4IDEuMzU5IDMuNDY4LjAzOC45OTggMS4wMDggMTUuNDk0LjQ3NyA1Mi43NDYgMCAxMC4yNzUgOC4wNTkgMjIuMDc3IDI3LjM1NSAyMi4wNzcgOC4zMDcgMCAxNC42ODYtMi4zMjIgMjMuOTUzLTcuNTg3QzEwNy44NzEgMTEyLjM5OCAxMjggOTQuNjIgMTI4IDY0LjU1IDEyOCAyNi45NzcgOTcuNTcyIDAgNjMuNzA4IDB6bTYuMDUyIDExMy42MDJjLTcuMTgzLjEyNi0xMi40MjItMi4xODMtMTIuNzQzLTguNDYxLS4xMi0yLjM1Ni0uMDgyLTQuODY1LjAzMy02LjM3OC42OTUtOS4xNzQgNy4xMS0xNS43NzQgMTMuNDQzLTE3LjA0MSA3Ljg3Ni0xLjU3NiAxMy4xMjMgMi4wMjYgMTMuMTIzIDEyLjMzNy0uMDAxIDYuOTY4LTEuOTM1IDE5LjMzNC0xMy44NTYgMTkuNTQzeiIgZmlsbD0iI0RENUEyQiIvPjwvZz48L3N2Zz4=" - }, - "categories": [ - { - "id": 7, - "name": "Utility" - } - ], - "displayName": "Bitly", - "typeVersion": 1 - }, - { - "id": 31, - "icon": "file:bitwarden.svg", - "name": "n8n-nodes-base.bitwarden", - "defaults": { - "name": "Bitwarden" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTUgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBkPSJNNTMuMzMzIDIuNjY3djMyYzAgMi4zODgtLjQ2NSA0Ljc1Ni0xLjM5NiA3LjEwM3MtMi4wODQgNC40My0zLjQ1OCA2LjI1LTMuMDE1IDMuNTktNC45MTcgNS4zMTItMy42NiAzLjE1My01LjI3MiA0LjI5MmwtNS4wNCAzLjIzLTMuNzMgMi4wNjItMS43Ny44MzRjLS4zMzMuMTY2LS42OTUuMjUtMS4wODMuMjVhMi40IDIuNCAwIDAxLTEuMDgzLS4yNWwtMS43Ny0uODM0LTMuNzMtMi4wNjItNS4wNDItMy4yM2MtMS42MS0xLjE0LTMuMzY4LTIuNTctNS4yNy00LjI5MnMtMy41NC0zLjQ5Mi00LjkxNi01LjMxMi0yLjUyOC0zLjkwMy0zLjQ2LTYuMjVTMCAzNy4wNTUgMCAzNC42Njd2LTMyQTIuNTYgMi41NiAwIDAxLjc5MS43OTIgMi41NiAyLjU2IDAgMDEyLjY2NiAwaDQ4Yy43MiAwIDEuMzQ2LjI2NCAxLjg3NC43OTJhMi41NiAyLjU2IDAgMDEuNzkyIDEuODc1bS04IDMyVjhIMjYuNjY2djQ3LjM3NWMzLjMwNS0xLjc1IDYuMjY0LTMuNjUzIDguODc1LTUuNzA4IDYuNTI3LTUuMTEgOS43OS0xMC4xMSA5Ljc5LTE1IiBzdHJva2U9Im5vbmUiIGZpbGw9IiMzYzhkYmMiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Bitwarden", - "typeVersion": 1 - }, - { - "id": 41, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUp", - "defaults": { - "name": "ClickUp" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 980, - "name": "Loading Data Into Spreadsheet or Database", - "totalViews": 1553, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-03-11T11:20:25.787Z", - "nodes": [ - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 26, - "icon": "file:sns.svg", - "name": "n8n-nodes-base.awsSnsTrigger", - "defaults": { - "name": "AWS SNS Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQ5MCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDI1NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTk4Ljg3NSAyMzIuMDMzbC0yNi40MzMtNy40MDgtMjUuMDAxLTI4LjUwOCAzMS4yNzItLjg2MyAyMC4xNjIgMzYuNzc5bS02MS4xMjUtMTguOGwtMTQuODc1LTQuMTY2LTE0LjA1OC0xNi4wMzQgMTcuMDgyLTIuODA5IDExLjg1MSAyMy4wMDkiIGZpbGw9IiM5OTVCODAiLz48cGF0aCBkPSJNMCAxOTEuMDE3bDE1LjIwNCAzLjA5MSAyLjIwNy0zLjg4MlY1OC41MDNsLTIuMjA3LTIuNTYxTDAgNjQuNnYxMjYuNDE3IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTczLjkzMyA2OS43MDhMMTUuMjA4IDU1Ljk0MnYxMzguMTY2bDguNzk4LS44MTggMTMuNzQ0IDE5Ljk0MyAxMC42LTIyLjIwNSAyNS41ODMtMi4zNzhWNjkuNzA4IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTMzLjk1OCAxOTguMTMzbDI2LjA2MyA1LjI1IDEuNzE2LTQuMDQ1VjM3LjQ0bC0xLjcxNi0zLjY2NS0yNi4wNjMgMTMuMjA4djE1MS4xNSIgZmlsbD0iIzdCM0Y2NSIvPjxwYXRoIGQ9Ik0yMDguNzM0IDgxLjUxNkw2MC4wMjEgMzMuNzc1djE2OS42MTJsMTcuMjIxLTIuMjE2IDIxLjYzMyAzMC44NjIgMTcuMTI2LTM1Ljg1IDkyLjczMy0xMS45MzNWODEuNTE2IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTE4MS44MzMgMjU2LjQ5MmwtMzcuNTY2LTEwLjUyNS0zNS41MDktNDAuNSA0Ni4wMzMtLjQ2OCAyNy4wNDIgNTEuNDkzIiBmaWxsPSIjOTk1QjgwIi8+PHBhdGggZD0iTTg5LjU5MSAyMDguOTVsMzguMzMgNy40MTcgMi45NzctMi41NjZWNC4xMTdMMTI3LjkyMSAwbC0zOC4zMyAxOS4xNThWMjA4Ljk1IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTI1NiA2NC4wMzNMMTI3LjkyNSAwdjIxNi4zNjdsMjIuNTk3LTQuNTI4IDMxLjMxMSA0NC42NTMgMjYuOTAxLTU2LjMwOS0uMDE3LS4wMDJMMjU2IDE5MC43MDhWNjQuMDMzIiBmaWxsPSIjQzE3QjlEIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AWS SNS Trigger", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 225, - "name": "Trending \"Show HN\" to email", - "totalViews": 1459, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-01-01T18:56:31.672Z", - "nodes": [ - { - "id": 7, - "icon": "file:airtable.svg", - "name": "n8n-nodes-base.airtable", - "defaults": { - "name": "Airtable" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBkPSJNODkgNC44TDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiIGZpbGw9IiNmY2I0MDAiLz48cGF0aCBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42IiBmaWxsPSIjMThiZmZmIi8+PHBhdGggZD0iTTg2LjkgOTIuNmwtMjQuMiAxMS43LTIuNSAxLjJMOS4xIDEzMGMtMy4yIDEuNi03LjQtLjgtNy40LTQuNFY1Ny41YzAtMS4zLjctMi40IDEuNi0zLjMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS41IDQuMyA3LjEuNSA4LjkiIGZpbGw9IiNmODJiNjAiLz48cGF0aCBkPSJNODYuOSA5Mi42bC0yNC4yIDExLjctNTkuNC01MGMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS40IDQuMyA3IC41IDguOCIgZmlsbD0iI2JhMWU0NSIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Airtable", - "typeVersion": 2 - }, - { - "id": 11, - "icon": "file:amqp.png", - "name": "n8n-nodes-base.amqpTrigger", - "defaults": { - "name": "AMQP Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB7UlEQVRoge2W4W3CMBCFj26QjkBHSEdIR4AR6Ah0BBgBRqAjhBFgBBghHaEVlV29PN0lDr+o9D7JEjhn+975bJ8JIYQQQgghhBBCCCGEEA9CY2bf0NaBW2uyu7UN2XSOzTyY60J2BzNbObbsH7eTmS2mhHJHE1wmCD7A93ngEAquHaHc2omCcysSXQW74g32BHfwfTEiuCoQm9vuDsEndPYpELxKjjBj0foCEXX6XdM3by3c7aOZPZvZzMzeaBzbIh9pzIuZXaG/RqNIMAq7Ur8XCHQ2kx3LC56DMQ39X4LI23zbAd88ruRHD09wTVF5p+/eBZI5g7O8w5FgXOvsZAI7PxRwS4HGIPbm8wRjBL/Sgp/QNyQYHWySmOxgJBgFeGnPfZHgDVyufET+YMEVCdo7gziCTBbGmRKlGQpCMXOnj+1L6B0JFsxndO3cjjZyjo6OnZeqGb5gqhTQS3qKeK1SwbesfB3IrF/awqu+g8Dgs5SLE37SciHiPUv8rLVp7k2wdl63tDDqgTs8lqpINWGXbSTKe9rlJgXME7C9I6V7oGAWsEzv2gzeN2TstkbCZyIJWBYKWUwtF4foKGU9TpRGdZDSdVDpDNXSVVBLt5TeucS9K6X/E3USX3rshBBCCCGEEEIIIYQQ4tExsx8PuuPnwhCIbgAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AMQP Trigger", - "typeVersion": 1 - }, - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 19, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilotTrigger", - "defaults": { - "name": "Autopilot Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot Trigger", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 114, - "icon": "file:helpScout.svg", - "name": "n8n-nodes-base.helpScoutTrigger", - "defaults": { - "name": "HelpScout Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjMxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTE4LjQzMiAxODAuOTY5bDkwLjQ4NC05MC40ODVhNjMuNzE3IDYzLjcxNyAwIDAwMTguOTktNDUuNDI4QTY0LjI0NSA2NC4yNDUgMCAwMDEwOS40NzYgMEwxOC45OSA5MC40ODRBNjMuNzE3IDYzLjcxNyAwIDAwMCAxMzUuOTEzYzAgMTcuNjg3IDcuMDc1IDMzLjUxMiAxOC40MzIgNDUuMDU2em0yMTkuMTM2LTUyLjg3NmwtOTAuNDg0IDkwLjQ4NGE2My43MTcgNjMuNzE3IDAgMDAtMTguOTkgNDUuNDI5IDY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMSA0NS4wNTZsOTAuNDg0LTkwLjQ4NUE2My43MTcgNjMuNzE3IDAgMDAyNTYgMTczLjE1YzAtMTcuNjg3LTcuMDc1LTMzLjUxMy0xOC40MzItNDUuMDU2em0tLjU1OS0zNy40MjJBNjMuNzE3IDYzLjcxNyAwIDAwMjU2IDQ1LjI0MiA2NC4yNDUgNjQuMjQ1IDAgMDAyMzcuNTY4LjE4NkwxOC45OTEgMjE4LjU3N0M3LjI2IDIzMC4zMDcgMCAyNDYuMzIgMCAyNjQuMTkyYTY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMiA0NS4wNTZMMjM3LjAwOSA5MC42NzF6IiBmaWxsPSIjMTI5MkVFIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "HelpScout Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 524, - "name": "Get today's date and day using the Function node", - "totalViews": 1354, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-07-16T09:26:32.454Z", - "nodes": [ - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - } - ] - } - ], - "filters": [ - { - "counts": [ - { - "count": 66, - "highlighted": "Building Blocks", - "value": "Building Blocks" - }, - { - "count": 24, - "highlighted": "Sales", - "value": "Sales" - }, - { - "count": 24, - "highlighted": "Marketing & Growth", - "value": "Marketing & Growth" - }, - { - "count": 16, - "highlighted": "DevOps & IT", - "value": "DevOps & IT" - }, - { - "count": 12, - "highlighted": "HR & People Ops", - "value": "HR & People Ops" - }, - { - "count": 9, - "highlighted": "Development", - "value": "Development" - }, - { - "count": 9, - "highlighted": "Managed Service Providers", - "value": "Managed Service Providers" - }, - { - "count": 7, - "highlighted": "Finance & Accounting", - "value": "Finance & Accounting" - }, - { - "count": 6, - "highlighted": "Product & Project Management", - "value": "Product & Project Management" - }, - { - "count": 3, - "highlighted": "Customer Service", - "value": "Customer Service" - } - ], - "field_name": "categories", - "sampled": false, - "stats": { - "total_values": 11 - } - } - ] -} diff --git a/cypress/fixtures/templates_search/sales_templates_search_response.json b/cypress/fixtures/templates_search/sales_templates_search_response.json deleted file mode 100644 index d4f90991b31..00000000000 --- a/cypress/fixtures/templates_search/sales_templates_search_response.json +++ /dev/null @@ -1,1316 +0,0 @@ -{ - "totalWorkflows": 24, - "workflows": [ - { - "id": 837, - "name": "Automating Products Price Changes Tracking", - "totalViews": 1343, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-12-19T10:26:27.570Z", - "nodes": [ - { - "id": 7, - "icon": "file:airtable.svg", - "name": "n8n-nodes-base.airtable", - "defaults": { - "name": "Airtable" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBkPSJNODkgNC44TDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiIGZpbGw9IiNmY2I0MDAiLz48cGF0aCBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42IiBmaWxsPSIjMThiZmZmIi8+PHBhdGggZD0iTTg2LjkgOTIuNmwtMjQuMiAxMS43LTIuNSAxLjJMOS4xIDEzMGMtMy4yIDEuNi03LjQtLjgtNy40LTQuNFY1Ny41YzAtMS4zLjctMi40IDEuNi0zLjMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS41IDQuMyA3LjEuNSA4LjkiIGZpbGw9IiNmODJiNjAiLz48cGF0aCBkPSJNODYuOSA5Mi42bC0yNC4yIDExLjctNTkuNC01MGMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS40IDQuMyA3IC41IDguOCIgZmlsbD0iI2JhMWU0NSIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Airtable", - "typeVersion": 2 - }, - { - "id": 11, - "icon": "file:amqp.png", - "name": "n8n-nodes-base.amqpTrigger", - "defaults": { - "name": "AMQP Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB7UlEQVRoge2W4W3CMBCFj26QjkBHSEdIR4AR6Ah0BBgBRqAjhBFgBBghHaEVlV29PN0lDr+o9D7JEjhn+975bJ8JIYQQQgghhBBCCCGEEA9CY2bf0NaBW2uyu7UN2XSOzTyY60J2BzNbObbsH7eTmS2mhHJHE1wmCD7A93ngEAquHaHc2omCcysSXQW74g32BHfwfTEiuCoQm9vuDsEndPYpELxKjjBj0foCEXX6XdM3by3c7aOZPZvZzMzeaBzbIh9pzIuZXaG/RqNIMAq7Ur8XCHQ2kx3LC56DMQ39X4LI23zbAd88ruRHD09wTVF5p+/eBZI5g7O8w5FgXOvsZAI7PxRwS4HGIPbm8wRjBL/Sgp/QNyQYHWySmOxgJBgFeGnPfZHgDVyufET+YMEVCdo7gziCTBbGmRKlGQpCMXOnj+1L6B0JFsxndO3cjjZyjo6OnZeqGb5gqhTQS3qKeK1SwbesfB3IrF/awqu+g8Dgs5SLE37SciHiPUv8rLVp7k2wdl63tDDqgTs8lqpINWGXbSTKe9rlJgXME7C9I6V7oGAWsEzv2gzeN2TstkbCZyIJWBYKWUwtF4foKGU9TpRGdZDSdVDpDNXSVVBLt5TeucS9K6X/E3USX3rshBBCCCGEEEIIIYQQ4tExsx8PuuPnwhCIbgAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AMQP Trigger", - "typeVersion": 1 - }, - { - "id": 13, - "icon": "file:asana.svg", - "name": "n8n-nodes-base.asanaTrigger", - "defaults": { - "name": "Asana Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGN4PSI1MCUiIGN5PSI1NSUiIGZ4PSI1MCUiIGZ5PSI1NSUiIHI9IjcyLjUwNyUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjkyNDA0IDAgMCAxIC4wMzggMCkiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZCOTAwIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NUQ4RiIgb2Zmc2V0PSI2MCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjk1MzUzIiBvZmZzZXQ9Ijk5LjkxJSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik00NS41OTQgMjguNWMtNi45OTQuMDAzLTEyLjY2NCA1LjY3My0xMi42NjcgMTIuNjY3LjAwMyA2Ljk5NSA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2OCA2Ljk5NS0uMDA0IDEyLjY2NC01LjY3MyAxMi42NjctMTIuNjY4LS4wMDMtNi45OTQtNS42NzItMTIuNjY0LTEyLjY2Ny0xMi42Njd6bS0zMi45MjcuMDAxQzUuNjczIDI4LjUwNS4wMDMgMzQuMTc0IDAgNDEuMTdjLjAwMyA2Ljk5NCA1LjY3MyAxMi42NjQgMTIuNjY3IDEyLjY2NyA2Ljk5NS0uMDAzIDEyLjY2NC01LjY3MyAxMi42NjgtMTIuNjY3LS4wMDQtNi45OTUtNS42NzMtMTIuNjY0LTEyLjY2OC0xMi42Njh6TTQxLjc5IDEyLjY2N2MtLjAwMiA2Ljk5NS01LjY3MSAxMi42NjUtMTIuNjY2IDEyLjY3LTYuOTk1LS4wMDQtMTIuNjY0LTUuNjc0LTEyLjY2Ny0xMi42N0MxNi40NiA1LjY3MyAyMi4xMy4wMDMgMjkuMTIzIDBjNi45OTQuMDA0IDEyLjY2MyA1LjY3MyAxMi42NjYgMTIuNjY3eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjczMiAyLjczMikiIGZpbGw9InVybCgjYSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Asana Trigger", - "typeVersion": 1 - }, - { - "id": 15, - "icon": "file:affinity.png", - "name": "n8n-nodes-base.affinity", - "defaults": { - "name": "Affinity" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Affinity", - "typeVersion": 1 - }, - { - "id": 19, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilotTrigger", - "defaults": { - "name": "Autopilot Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot Trigger", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 31, - "icon": "file:bitwarden.svg", - "name": "n8n-nodes-base.bitwarden", - "defaults": { - "name": "Bitwarden" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNTUgNjYiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBkPSJNNTMuMzMzIDIuNjY3djMyYzAgMi4zODgtLjQ2NSA0Ljc1Ni0xLjM5NiA3LjEwM3MtMi4wODQgNC40My0zLjQ1OCA2LjI1LTMuMDE1IDMuNTktNC45MTcgNS4zMTItMy42NiAzLjE1My01LjI3MiA0LjI5MmwtNS4wNCAzLjIzLTMuNzMgMi4wNjItMS43Ny44MzRjLS4zMzMuMTY2LS42OTUuMjUtMS4wODMuMjVhMi40IDIuNCAwIDAxLTEuMDgzLS4yNWwtMS43Ny0uODM0LTMuNzMtMi4wNjItNS4wNDItMy4yM2MtMS42MS0xLjE0LTMuMzY4LTIuNTctNS4yNy00LjI5MnMtMy41NC0zLjQ5Mi00LjkxNi01LjMxMi0yLjUyOC0zLjkwMy0zLjQ2LTYuMjVTMCAzNy4wNTUgMCAzNC42Njd2LTMyQTIuNTYgMi41NiAwIDAxLjc5MS43OTIgMi41NiAyLjU2IDAgMDEyLjY2NiAwaDQ4Yy43MiAwIDEuMzQ2LjI2NCAxLjg3NC43OTJhMi41NiAyLjU2IDAgMDEuNzkyIDEuODc1bS04IDMyVjhIMjYuNjY2djQ3LjM3NWMzLjMwNS0xLjc1IDYuMjY0LTMuNjUzIDguODc1LTUuNzA4IDYuNTI3LTUuMTEgOS43OS0xMC4xMSA5Ljc5LTE1IiBzdHJva2U9Im5vbmUiIGZpbGw9IiMzYzhkYmMiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ltYm9sPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Bitwarden", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - }, - { - "id": 46, - "icon": "fa:file-archive", - "name": "n8n-nodes-base.compression", - "defaults": { - "name": "Compression", - "color": "#408000" - }, - "iconData": { - "icon": "file-archive", - "type": "icon" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - }, - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Compression", - "typeVersion": 1 - }, - { - "id": 62, - "icon": "file:discord.svg", - "name": "n8n-nodes-base.discord", - "defaults": { - "name": "Discord" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMTk5cHgiIHZpZXdCb3g9IjAgMCAyNTYgMTk5IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICAgIDxnPgogICAgICAgIDxwYXRoIGQ9Ik0yMTYuODU2MzM5LDE2LjU5NjYwMzEgQzIwMC4yODUwMDIsOC44NDMyODY2NSAxODIuNTY2MTQ0LDMuMjA4NDk4OCAxNjQuMDQxNTY0LDAgQzE2MS43NjY1MjMsNC4xMTMxODEwNiAxNTkuMTA4NjI0LDkuNjQ1NDk5MDggMTU3LjI3NjA5OSwxNC4wNDY0Mzc5IEMxMzcuNTgzOTk1LDExLjA4NDk4OTYgMTE4LjA3Mjk2NywxMS4wODQ5ODk2IDk4Ljc0MzAxNjMsMTQuMDQ2NDM3OSBDOTYuOTEwODQxNyw5LjY0NTQ5OTA4IDk0LjE5MjU4MzgsNC4xMTMxODEwNiA5MS44OTcxODk1LDAgQzczLjM1MjYwNjgsMy4yMDg0OTg4IDU1LjYxMzM5NDksOC44NjM5OTExNyAzOS4wNDIwNTgzLDE2LjYzNzY2MTIgQzUuNjE3NTIyOTMsNjcuMTQ2NTE0IC0zLjQ0MzMxOTEsMTE2LjQwMDgxMyAxLjA4NzExMDY5LDE2NC45NTU3MjEgQzIzLjI1NjAxOTYsMTgxLjUxMDkxNSA0NC43NDAzNjM0LDE5MS41Njc2OTcgNjUuODYyMTMyNSwxOTguMTQ4NTc2IEM3MS4wNzcyMTUxLDE5MC45NzExMjYgNzUuNzI4MzYyOCwxODMuMzQxMzM1IDc5LjczNTIxMzksMTc1LjMwMDI2MSBDNzIuMTA0MDE5LDE3Mi40MDA1NzUgNjQuNzk0OTcyNCwxNjguODIyMjAyIDU3Ljg4ODc4NjYsMTY0LjY2Nzk2MyBDNTkuNzIwOTYxMiwxNjMuMzEwNTg5IDYxLjUxMzEzMDQsMTYxLjg5MTQ1MiA2My4yNDQ1ODk4LDE2MC40MzEyNTcgQzEwNS4zNjc0MSwxODAuMTMzMTg3IDE1MS4xMzQ5MjgsMTgwLjEzMzE4NyAxOTIuNzU0NTIzLDE2MC40MzEyNTcgQzE5NC41MDYzMzYsMTYxLjg5MTQ1MiAxOTYuMjk4MTU0LDE2My4zMTA1ODkgMTk4LjExMDMyNiwxNjQuNjY3OTYzIEMxOTEuMTgzNzg3LDE2OC44NDI1NTYgMTgzLjg1NDczNywxNzIuNDIwOTI5IDE3Ni4yMjM1NDIsMTc1LjMyMDk2NSBDMTgwLjIzMDM5MywxODMuMzQxMzM1IDE4NC44NjE1MzgsMTkwLjk5MTgzMSAxOTAuMDk2NjI0LDE5OC4xNjg5MyBDMjExLjIzODc0NiwxOTEuNTg4MDUxIDIzMi43NDMwMjMsMTgxLjUzMTYxOSAyNTQuOTExOTQ5LDE2NC45NTU3MjEgQzI2MC4yMjc3NDcsMTA4LjY2ODIwMSAyNDUuODMxMDg3LDU5Ljg2NjI0MzIgMjE2Ljg1NjMzOSwxNi41OTY2MDMxIFogTTg1LjQ3Mzg3NTIsMTM1LjA5NDg5IEM3Mi44MjkwMjgxLDEzNS4wOTQ4OSA2Mi40NTkyMjE3LDEyMy4yOTAxNTUgNjIuNDU5MjIxNywxMDguOTE0OTAxIEM2Mi40NTkyMjE3LDk0LjUzOTY0NzIgNzIuNjA3NTk1LDgyLjcxNDU1ODcgODUuNDczODc1Miw4Mi43MTQ1NTg3IEM5OC4zNDA1MDY0LDgyLjcxNDU1ODcgMTA4LjcwOTk2Miw5NC41MTg5NDI3IDEwOC40ODg1MjksMTA4LjkxNDkwMSBDMTA4LjUwODUzMSwxMjMuMjkwMTU1IDk4LjM0MDUwNjQsMTM1LjA5NDg5IDg1LjQ3Mzg3NTIsMTM1LjA5NDg5IFogTTE3MC41MjUyMzcsMTM1LjA5NDg5IEMxNTcuODgwMzksMTM1LjA5NDg5IDE0Ny41MTA1ODQsMTIzLjI5MDE1NSAxNDcuNTEwNTg0LDEwOC45MTQ5MDEgQzE0Ny41MTA1ODQsOTQuNTM5NjQ3MiAxNTcuNjU4NjA2LDgyLjcxNDU1ODcgMTcwLjUyNTIzNyw4Mi43MTQ1NTg3IEMxODMuMzkxNTE4LDgyLjcxNDU1ODcgMTkzLjc2MTMyNCw5NC41MTg5NDI3IDE5My41Mzk4OTEsMTA4LjkxNDkwMSBDMTkzLjUzOTg5MSwxMjMuMjkwMTU1IDE4My4zOTE1MTgsMTM1LjA5NDg5IDE3MC41MjUyMzcsMTM1LjA5NDg5IFoiIGZpbGw9IiM1ODY1RjIiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Discord", - "typeVersion": 2 - }, - { - "id": 114, - "icon": "file:helpScout.svg", - "name": "n8n-nodes-base.helpScoutTrigger", - "defaults": { - "name": "HelpScout Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjMxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTE4LjQzMiAxODAuOTY5bDkwLjQ4NC05MC40ODVhNjMuNzE3IDYzLjcxNyAwIDAwMTguOTktNDUuNDI4QTY0LjI0NSA2NC4yNDUgMCAwMDEwOS40NzYgMEwxOC45OSA5MC40ODRBNjMuNzE3IDYzLjcxNyAwIDAwMCAxMzUuOTEzYzAgMTcuNjg3IDcuMDc1IDMzLjUxMiAxOC40MzIgNDUuMDU2em0yMTkuMTM2LTUyLjg3NmwtOTAuNDg0IDkwLjQ4NGE2My43MTcgNjMuNzE3IDAgMDAtMTguOTkgNDUuNDI5IDY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMSA0NS4wNTZsOTAuNDg0LTkwLjQ4NUE2My43MTcgNjMuNzE3IDAgMDAyNTYgMTczLjE1YzAtMTcuNjg3LTcuMDc1LTMzLjUxMy0xOC40MzItNDUuMDU2em0tLjU1OS0zNy40MjJBNjMuNzE3IDYzLjcxNyAwIDAwMjU2IDQ1LjI0MiA2NC4yNDUgNjQuMjQ1IDAgMDAyMzcuNTY4LjE4NkwxOC45OTEgMjE4LjU3N0M3LjI2IDIzMC4zMDcgMCAyNDYuMzIgMCAyNjQuMTkyYTY0LjI0NSA2NC4yNDUgMCAwMDE4LjQzMiA0NS4wNTZMMjM3LjAwOSA5MC42NzF6IiBmaWxsPSIjMTI5MkVFIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "HelpScout Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 1323, - "name": "Create Email Campaign From LinkedIn Post Interactions", - "totalViews": 942, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-11-15T14:48:51.258Z", - "nodes": [ - { - "id": 7, - "icon": "file:airtable.svg", - "name": "n8n-nodes-base.airtable", - "defaults": { - "name": "Airtable" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBkPSJNODkgNC44TDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiIGZpbGw9IiNmY2I0MDAiLz48cGF0aCBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42IiBmaWxsPSIjMThiZmZmIi8+PHBhdGggZD0iTTg2LjkgOTIuNmwtMjQuMiAxMS43LTIuNSAxLjJMOS4xIDEzMGMtMy4yIDEuNi03LjQtLjgtNy40LTQuNFY1Ny41YzAtMS4zLjctMi40IDEuNi0zLjMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS41IDQuMyA3LjEuNSA4LjkiIGZpbGw9IiNmODJiNjAiLz48cGF0aCBkPSJNODYuOSA5Mi42bC0yNC4yIDExLjctNTkuNC01MGMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS40IDQuMyA3IC41IDguOCIgZmlsbD0iI2JhMWU0NSIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Airtable", - "typeVersion": 2 - }, - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 76, - "icon": "fa:sign-in-alt", - "name": "n8n-nodes-base.executeWorkflow", - "defaults": { - "name": "Execute Workflow", - "color": "#ff6d5a" - }, - "iconData": { - "icon": "sign-in-alt", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Execute Workflow", - "typeVersion": 1 - } - ] - }, - { - "id": 467, - "name": "Funnel Users and Sales Data From Webhook to a Marketing Platform (We’d might like to generalize the workflow as it’s very specific to Teachable and Muatic integration)", - "totalViews": 658, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-07-09T20:34:27.156Z", - "nodes": [ - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 24, - "icon": "file:ses.svg", - "name": "n8n-nodes-base.awsSes", - "defaults": { - "name": "AWS SES" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNzQuMzc1IDg1IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIyLjE4OCIgeT0iMi41Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZT0ibm9uZSI+PHBhdGggZD0iTTE2LjU1OCAxMi43NUwwIDM4LjU5MWwxNi41NTggMjUuODQxIDEzLjIyNy0zLjMyNC42NTQtNDQuODY5LTEzLjg4MS0zLjQ4OXoiIGZpbGw9IiM4NzY5MjkiLz48cGF0aCBkPSJNMzUuMDQ5IDU5Ljc4NmwtMTguNDkxIDQuNjQ1VjEyLjc1bDE4LjQ5MSA0LjY0NXY0Mi4zOTF6IiBmaWxsPSIjZDlhNzQxIi8+PGcgZmlsbD0iIzg3NjkyOSI+PHBhdGggZD0iTTMyLjg0OSAyMS42MTRMMzUuMDUgODAgNzAgNjIuODY3bC0uMDEtNDMuNjE1LTguOTE0IDEuNDQ4LTI4LjIyOC45MTN6Ii8+PHBhdGggZD0iTTQ2LjE4NCAzMy4xNDlsMTAuOTA2LS42MzIgMTAuNzc4LTE5LjE2NEw0MC42MTIgMCAzMC40MzkgNC4zNjRsMTUuNzQ1IDI4Ljc4NXoiLz48L2c+PHBhdGggZD0iTTQwLjYxMiAwbDI3LjI1NiAxMy4zNTNMNTcuMDkgMzIuNTE3IDQwLjYxMiAweiIgZmlsbD0iI2Q5YTc0MSIvPjxwYXRoIGQ9Ik0zNS4wNDkgNS41MzlMNTcuMDkgNDQuNzQybDMuNzg4IDIyLjU5NUwzNS4wNDkgODBsLTEwLjQ2LTUuMTMxVjkuNjRsMTAuNDYtNC4xMDF6IiBmaWxsPSIjODc2OTI5Ii8+PHBhdGggZD0iTTY5Ljk5MSAxOS4yNTFMNzAgNjIuODY3IDM1LjA1IDgwVjUuNTM5bDIyLjA0MSAzOS4yMDNMNjkuOTkgMTkuMjUxeiIgZmlsbD0iI2Q5YTc0MSIvPjwvZz48L3N5bWJvbD48L3N2Zz4=" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AWS SES", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 42, - "icon": "file:clickup.svg", - "name": "n8n-nodes-base.clickUpTrigger", - "defaults": { - "name": "ClickUp Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMTAgMCAxNTUgMTU1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI2OC4wMSUiIHkyPSI2OC4wMSUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjODkzMEZEIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ5Q0NGOSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMDJGMCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4MDAiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0uNCAxMTkuMTJsMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik02NS4xOCAzOS44NEwyMi44IDc2LjM2IDMuMjEgNTMuNjQgNjUuMjcuMTZsNjEuNTcgNTMuNTItMTkuNjggMjIuNjR6Ii8+PC9nPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "ClickUp Trigger", - "typeVersion": 1 - }, - { - "id": 47, - "icon": "file:coda.svg", - "name": "n8n-nodes-base.coda", - "defaults": { - "name": "Coda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2MCA2MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjAgNjA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRUU1QTI5O30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQ1LjIsMTYuMmMzLjMsMCw2LjUsMS4zLDguOCwzLjNjMS41LDEuMywzLjgsMC4yLDMuOC0xLjhWNC43YzAtMi41LTIuMS00LjctNC43LTQuN0g2LjMKCUMzLjcsMCwxLjYsMi4xLDEuNiw0Ljd2NTAuN2MwLDIuNSwyLjEsNC42LDQuNyw0LjZoNDYuOGMyLjUsMCw0LjctMi4xLDQuNy00LjdWNDIuM2MwLTItMi4zLTMuMS0zLjgtMS44Yy0yLjQsMi4xLTUuNCwzLjMtOC44LDMuMwoJYy03LjYsMC0xMy43LTYuMi0xMy43LTEzLjhDMzEuNiwyMi40LDM3LjcsMTYuMiw0NS4yLDE2LjJ6Ii8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Coda", - "typeVersion": 1 - }, - { - "id": 112, - "icon": "file:harvest.png", - "name": "n8n-nodes-base.harvest", - "defaults": { - "name": "Harvest" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Harvest", - "typeVersion": 1 - }, - { - "id": 126, - "icon": "file:invoiceNinja.svg", - "name": "n8n-nodes-base.invoiceNinjaTrigger", - "defaults": { - "name": "Invoice Ninja Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE2LjI0NyAxMC4zMjZhMS4xNjQgMS4xNjQgMCAxMS0yLjMyOCAwIDEuMTY0IDEuMTY0IDAgMDEyLjMyOCAwem0tNi4yODggMGExLjE2NCAxLjE2NCAwIDExLTIuMzI5IDAgMS4xNjQgMS4xNjQgMCAwMTIuMzI5IDB6bS0uMTQgMTMuNTJjLTQuNzEyLS45OC04LjIyNy00LjI1Ny05LjQ4Mi04Ljg0Mi0uNDIxLTEuNTM3LS40MjEtNC40OSAwLTYuMDI3QzEuNTA2IDQuNzA5IDQuNzMgMS40ODUgOC45OTcuMzE2YzEuNTM4LS40MjEgNC40OS0uNDIxIDYuMDI4IDAgNC4yNjcgMS4xNjkgNy40OTIgNC4zOTMgOC42NiA4LjY2LjI0Ljg3NC4yOTQgMS40My4yOTQgMy4wMTQgMCAxLjU4NC0uMDU0IDIuMTQtLjI5MyAzLjAxNC0xLjE3IDQuMjcxLTQuNDM5IDcuNTM2LTguNjYxIDguNjUtMS4zOTEuMzY3LTMuOTE2LjQ2LTUuMjA2LjE5MnptNi42NC05LjMxNWMtMy4wNDctMS4zNDgtNC4wNTQtMS43MzctNC41LTEuNzM3LS40NDYgMC0xLjQzMy4zOC00LjM4IDEuNjg0LTIuMDkxLjkyNi0zLjgyOCAxLjc2LTMuODYgMS43OWgxNi42NjN6bS05Ljg3My0uMzYxYzEuNjIxLS43MjkgMy4wNi0xLjM4NyAzLjE5Ni0xLjQ2NC4yNTgtLjE0NS4zMzctLjA5LTUuMjg1LTMuNjgyLS41Ni0uMzU4LTEuMDIzLS42OTgtMS4wMjUtLjY1djcuMTlhNzkwLjEgNzkwLjEgMCAwMDMuMTE0LTEuMzk0em0xNC4wNzgtMi4xOTRWOC40MTdjMC0uMTEtMS42NzYuOTkzLTMuNDk2IDIuMTItMyAxLjg1NC0zLjI4MSAyLjA2LTMuMDA0IDIuMTg1IDEuMzQ1LjYxMSA2LjQyIDIuODYyIDYuNSAyLjg3MnptLTguMTY5LjExYy41NDUuMTI1LjY0My4xMDQgMS4yMjYtLjI2My4zNDktLjIyLjY1NS0uNDE5LjY4MS0uNDQyLjAyNi0uMDI0LS4wNS0uMTgxLS4xNjctLjM1LS4xMTgtLjE2OC0uMjE1LS41LS4yMTUtLjczOVY5Ljg2bC0uNTY5LjIxYy0uNzI2LjI2Ny0yLjI4LjI3LTMgLjAwNWwtLjU1Ni0uMjA1LjAxMy40NTJjLjAwNy4yNi0uMDg4LjU2My0uMjI1LjcxNS0uMjMyLjI1Ni0uMjIuMjc2LjQ1LjcyNi42NC40MzIuNzI1LjQ1NSAxLjIzLjMyN2EyLjM0OSAyLjM0OSAwIDAxMS4xMzItLjAwMnptLTQuMjMtMi42NWMtLjEwNS0uMTEzLTIuOTctLjk1NC0zLjAzMy0uODkxLS4wMy4wMy41MDQuNDE0IDEuMTg2Ljg1NGwxLjI0LjguMzQtLjM0NGMuMTg2LS4xODguMzA3LS4zNzcuMjY4LS40MnptOS43Ni0uMzczYy40NzMtLjMwNi44LS41NTUuNzI4LS41NTUtLjE1NSAwLTIuODc3LjgwNC0zLjAyNy44OTQtLjA1Ny4wMzQuMDMzLjIyOS4yLjQzM2wuMzA0LjM3LjQ3LS4yOTNjLjI1Ny0uMTYyLjg1NC0uNTQ0IDEuMzI2LS44NXptLTEuNjM2LS41NTVjMi4xMS0uNTkgMy44NjctMS4xMDIgMy45MDQtMS4xMzlIMy41OWMuMTg3LjE4NyA3Ljc3OSAyLjE5NSA4LjMyMyAyLjIwMi40MS4wMDUgMi4wMTQtLjM3NiA0LjQ3Ni0xLjA2M3oiLz48L3N2Zz4=" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Invoice Ninja Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 1206, - "name": "Process Shopify New Orders with CRM and Marketing Platforms", - "totalViews": 471, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-08-24T11:23:23.518Z", - "nodes": [ - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 43, - "icon": "file:clockify.svg", - "name": "n8n-nodes-base.clockifyTrigger", - "defaults": { - "name": "Clockify Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBkPSJNMTQgMGgyMjd2MjU2SDE0eiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTY1LjEyNCA4Ny45OWw1OC43NzctNTguODE0IDE2LjgyNSAxNi44MjMtNTguNzc4IDU4LjgxNS0xNi44MjQtMTYuODIzem0tMjMuODE3IDYwLjEwNWMtMTEuNTAzIDAtMjAuODIyLTkuMzYtMjAuODIyLTIwLjkxOCAwLTExLjU0NiA5LjMxOS0yMC45MTggMjAuODIyLTIwLjkxOCAxMS41MDMgMCAyMC44MjIgOS4zNzIgMjAuODIyIDIwLjkxOCAwIDExLjU1OC05LjMxOSAyMC45MTgtMjAuODIyIDIwLjkxOHpNMjQxIDIwOC44NDVsLTE2LjgyNCAxNi44MzUtNTguNzc4LTU4LjgxNiAxNi44MjUtMTYuODM1TDI0MSAyMDguODQ1eiIgZmlsbD0iIzIyMiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQxLjkxMyAyMTcuNjM3YzExLjg0OCAwIDIzLjEzNi0yLjM2NCAzMy40ODItNi41NjdsMjguNzA4IDI4Ljc0QzE4NS42OTIgMjUwLjA4OSAxNjQuNSAyNTYgMTQxLjkxMyAyNTYgNzEuMjc0IDI1NiAxNCAxOTguNjg5IDE0IDEyOC4wMDYgMTQgNTcuMzExIDcxLjI3NSAwIDE0MS45MTMgMGMyMi4zNjEgMCA0My4zNjIgNS43NjcgNjEuNjQxIDE1Ljg1NmwtMjguMjMxIDI4LjI2MWMtMTAuMzMzLTQuMTc5LTIxLjU4NS02LjU0My0zMy40MS02LjU0My00OS40NyAwLTg5LjU3NSA0MC4zMDktODkuNTc1IDkwLjAzOCAwIDQ5LjcxNiA0MC4xMDQgOTAuMDI1IDg5LjU3NSA5MC4wMjV6IiBmaWxsPSIjMDNBOUY0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - }, - { - "id": 7, - "name": "Utility" - } - ], - "displayName": "Clockify Trigger", - "typeVersion": 1 - }, - { - "id": 71, - "icon": "file:emelia.svg", - "name": "n8n-nodes-base.emelia", - "defaults": { - "name": "Emelia" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItMiAyIDQ1IDQ1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0yOS43MTQgNi41MzlIOS4wNzhhMi4xMDkgMi4xMDkgMCAwMC0yLjAwNyAyLjc2Mmw1LjQ4NCAxNi44NjMgNC4yMTktMS44MTdhMi42OSAyLjY5IDAgMDEtLjAyNC0uMzQgMi42NDEgMi42NDEgMCAxMTEuMDIzIDIuMDgxIDI0MTYuNzEgMjQxNi43MSAwIDAxLTQuNDE1IDIuNTQ1bDUuMTU2IDE1Ljg1MmEuODY1Ljg2NSAwIDAwMS42NDUgMGwxMS40OC0zNS4yOTNhMi4wMjYgMi4wMjYgMCAwMC0xLjkyNS0yLjY1M3oiIG9wYWNpdHk9Ii45IiBmaWxsPSIjZjRiNDU0Ii8+PHBhdGggZD0iTTM3LjE1NCAyMS4yNjFMMS4wNzEgMTIuNTc3YS44NjUuODY1IDAgMDAtLjg2MSAxLjRsMTAuOTA5IDEyLjggNS42NTYtMi40MzZhMi42OTQgMi42OTQgMCAwMS0uMDI0LS4zNCAyLjY0MSAyLjY0MSAwIDExMS4wMjMgMi4wODEgMjE3OC4xNSAyMTc4LjE1IDAgMDEtNC44NiAyLjhsMTEuMjkxIDEzLjI1NWEyLjExIDIuMTEgMCAwMDMuNC0uMjY0bDEwLjgtMTcuNTg2YTIuMDI2IDIuMDI2IDAgMDAtMS4yNTEtMy4wMjZ6IiBmaWxsPSIjZWY2ZDRhIiBvcGFjaXR5PSIuOSIvPjxwYXRoIGQ9Ik0zNy42MzYgMTIuNTc3TDEuNTUzIDIxLjI2MUEyLjAyNSAyLjAyNSAwIDAwLjMwMSAyNC4yOWwzLjQ3MiA1LjY1NiAxMy01LjZhMi42ODkgMi42ODkgMCAwMS0uMDI0LS4zNCAyLjY0MSAyLjY0MSAwIDExMS4wMjMgMi4wODFjLTMuMSAxLjc5MS05LjA3MyA1LjIzNC0xMi4xMDggNi45NGw1LjQzMiA4Ljg0OGEyLjExIDIuMTEgMCAwMDMuNC4yNjRsMjMuOTk1LTI4LjE2MWEuODY1Ljg2NSAwIDAwLS44NTUtMS40MDF6IiBmaWxsPSIjMjAzNTRjIiBvcGFjaXR5PSIuOSIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Emelia", - "typeVersion": 1 - }, - { - "id": 107, - "icon": "file:gotify.png", - "name": "n8n-nodes-base.gotify", - "defaults": { - "name": "Gotify" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Gotify", - "typeVersion": 1 - }, - { - "id": 225, - "icon": "file:strapi.svg", - "name": "n8n-nodes-base.strapi", - "defaults": { - "name": "Strapi" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNSIgaGVpZ2h0PSIxMDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0zNDEuMzI4IDB2MzQ0LjA2MWgzNDEuMzMzdjM0NC4wNmgzNDEuMzI5VjBIMzQxLjMyOHoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJNNjgzIDM0My43MjVIMzQzdjM0NC43MzJoMzQwVjM0My43MjV6IiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggZD0iTTM0MS4zMzMgMzQ0LjA2MUgwTDM0MS4zMzMgMHYzNDQuMDYxeiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Ik02ODIuMzY3IDEwMzEuMThWNjg3LjQ1N2gzNDIuMDAzTDY4Mi4zNjcgMTAzMS4xOHoiIGZpbGw9InVybCgjZCkiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzNjUuMTYyIDMxNC42NjMpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMzc0LjUwMiAzMTQuNjYzKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDM4My44NDMgMzE0LjY2MykiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzOTMuMTg0IDMxNC42NjMpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgNDAyLjUyNSAzMTQuNjYzKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDQxMS44NjYgMzE0LjY2MykiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSA0MjEuMjA2IDMxNC42NjMpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgNDMwLjU0NiAzMTQuNjYzKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDQzOS44ODcgMzE0LjY2MykiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSA0NDkuMjI4IDMxNC42NjMpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgNDU4LjU2OSAzMTQuNjYzKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDM2NS4xNjIgMzA2LjA0MSkiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzNzQuNTAyIDMwNi4wNDEpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMzgzLjg0MyAzMDYuMDQxKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDM5My4xODQgMzA2LjA0MSkiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSA0MDIuNTI1IDMwNi4wNDEpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgNDExLjg2NiAzMDYuMDQxKSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDQyMS4yMDYgMzA2LjA0MSkiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSA0MzAuNTQ2IDMwNi4wNDEpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMzY1LjE2MiAyOTcuNDE5KSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDM3NC41MDIgMjk3LjQxOSkiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzODMuODQzIDI5Ny40MTkpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMzkzLjE4NCAyOTcuNDE5KSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDQwMi41MjUgMjk3LjQxOSkiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIHI9IjEuNzk2IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzNjUuMTYyIDI4OC43OTYpIiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSByPSIxLjc5NiIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMzc0LjUwMiAyODguNzk3KSIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgcj0iMS43OTYiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDM4My44NDMgMjg4Ljc5NykiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MTYuMTYyIiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MjUuNTAyIiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MzQuODQzIiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NDQuMTg0IiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NTMuNTI1IiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NjIuODY2IiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NzIuMjA2IiBjeT0iNjM4Ljc5NiIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MTYuMTYyIiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MjUuNTAyIiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MzQuODQzIiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NDQuMTg0IiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NTMuNTI1IiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NjIuODY2IiBjeT0iNjQ3LjQxOSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MTYuMTYyIiBjeT0iNjU2LjA0MSIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3MjUuNTAyIiBjeT0iNjU2LjA0IiByPSIxLjc5NiIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgY3g9IjczNC44NDMiIGN5PSI2NTYuMDQiIHI9IjEuNzk2IiBmaWxsPSIjOTU2RkZGIi8+PGNpcmNsZSBjeD0iNzQ0LjE4NCIgY3k9IjY1Ni4wNCIgcj0iMS43OTYiIGZpbGw9IiM5NTZGRkYiLz48Y2lyY2xlIGN4PSI3NTMuNTI1IiBjeT0iNjU2LjA0IiByPSIxLjc5NiIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgY3g9IjcxNi4xNjIiIGN5PSI2NjQuNjY0IiByPSIxLjc5NiIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgY3g9IjcyNS41MDIiIGN5PSI2NjQuNjYzIiByPSIxLjc5NiIgZmlsbD0iIzk1NkZGRiIvPjxjaXJjbGUgY3g9IjczNC44NDMiIGN5PSI2NjQuNjYzIiByPSIxLjc5NiIgZmlsbD0iIzk1NkZGRiIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjEwNzIuMzYiIHkxPSItNTEuNDA3IiB4Mj0iNTUzLjAzMSIgeTI9IjQ0Ni45NDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4wMjEiIHN0b3AtY29sb3I9IiM5NTZGRkYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxQzFCN0UiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjYzNC4zNjUiIHkxPSIzOTYuNSIgeDI9IjI3Ny4xNzciIHkyPSI3MTIuOTAxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzk1NkZGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzFBMjY3MCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTcwLjY2NyIgeTE9IjAiIHgyPSIxNzAuNjY3IiB5Mj0iMzQ0LjA2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjAyMSIgc3RvcC1jb2xvcj0iIzk1NkZGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzFDMUI3RSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMTA4NS4xOCIgeTE9IjU1Ni4yMiIgeDI9IjY5NS42NTQiIHkyPSI5NjcuMDQyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzk1NkZGRiIvPjxzdG9wIG9mZnNldD0iLjgzOSIgc3RvcC1jb2xvcj0iIzFDMUI3RSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - }, - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Strapi", - "typeVersion": 1 - } - ] - }, - { - "id": 1207, - "name": "Run Weekly Inventories on Shopify Sales ", - "totalViews": 424, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-08-24T15:08:34.063Z", - "nodes": [ - { - "id": 7, - "icon": "file:airtable.svg", - "name": "n8n-nodes-base.airtable", - "defaults": { - "name": "Airtable" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBkPSJNODkgNC44TDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiIGZpbGw9IiNmY2I0MDAiLz48cGF0aCBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42IiBmaWxsPSIjMThiZmZmIi8+PHBhdGggZD0iTTg2LjkgOTIuNmwtMjQuMiAxMS43LTIuNSAxLjJMOS4xIDEzMGMtMy4yIDEuNi03LjQtLjgtNy40LTQuNFY1Ny41YzAtMS4zLjctMi40IDEuNi0zLjMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS41IDQuMyA3LjEuNSA4LjkiIGZpbGw9IiNmODJiNjAiLz48cGF0aCBkPSJNODYuOSA5Mi42bC0yNC4yIDExLjctNTkuNC01MGMuNC0uNC44LS43IDEuMi0uOSAxLjItLjcgMy0uOSA0LjQtLjNsNzcuNSAzMC43YzQgMS40IDQuMyA3IC41IDguOCIgZmlsbD0iI2JhMWU0NSIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Airtable", - "typeVersion": 2 - }, - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 18, - "icon": "file:autopilot.svg", - "name": "n8n-nodes-base.autopilot", - "defaults": { - "name": "Autopilot" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjM4IDI2IDM1IDM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMThkNGIyIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9IiMxOGQ0YjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDUuNCA0Mi42aDE5LjlsMy40LTQuOEg0MmwzLjQgNC44em0zLjEgOC4zaDEzLjFsMy40LTQuOEg0NS40bDMuMSA0Ljh6bTU0LS43Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "Autopilot", - "typeVersion": 1 - }, - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 26, - "icon": "file:sns.svg", - "name": "n8n-nodes-base.awsSnsTrigger", - "defaults": { - "name": "AWS SNS Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQ5MCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDI1NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTk4Ljg3NSAyMzIuMDMzbC0yNi40MzMtNy40MDgtMjUuMDAxLTI4LjUwOCAzMS4yNzItLjg2MyAyMC4xNjIgMzYuNzc5bS02MS4xMjUtMTguOGwtMTQuODc1LTQuMTY2LTE0LjA1OC0xNi4wMzQgMTcuMDgyLTIuODA5IDExLjg1MSAyMy4wMDkiIGZpbGw9IiM5OTVCODAiLz48cGF0aCBkPSJNMCAxOTEuMDE3bDE1LjIwNCAzLjA5MSAyLjIwNy0zLjg4MlY1OC41MDNsLTIuMjA3LTIuNTYxTDAgNjQuNnYxMjYuNDE3IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTczLjkzMyA2OS43MDhMMTUuMjA4IDU1Ljk0MnYxMzguMTY2bDguNzk4LS44MTggMTMuNzQ0IDE5Ljk0MyAxMC42LTIyLjIwNSAyNS41ODMtMi4zNzhWNjkuNzA4IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTMzLjk1OCAxOTguMTMzbDI2LjA2MyA1LjI1IDEuNzE2LTQuMDQ1VjM3LjQ0bC0xLjcxNi0zLjY2NS0yNi4wNjMgMTMuMjA4djE1MS4xNSIgZmlsbD0iIzdCM0Y2NSIvPjxwYXRoIGQ9Ik0yMDguNzM0IDgxLjUxNkw2MC4wMjEgMzMuNzc1djE2OS42MTJsMTcuMjIxLTIuMjE2IDIxLjYzMyAzMC44NjIgMTcuMTI2LTM1Ljg1IDkyLjczMy0xMS45MzNWODEuNTE2IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTE4MS44MzMgMjU2LjQ5MmwtMzcuNTY2LTEwLjUyNS0zNS41MDktNDAuNSA0Ni4wMzMtLjQ2OCAyNy4wNDIgNTEuNDkzIiBmaWxsPSIjOTk1QjgwIi8+PHBhdGggZD0iTTg5LjU5MSAyMDguOTVsMzguMzMgNy40MTcgMi45NzctMi41NjZWNC4xMTdMMTI3LjkyMSAwbC0zOC4zMyAxOS4xNThWMjA4Ljk1IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTI1NiA2NC4wMzNMMTI3LjkyNSAwdjIxNi4zNjdsMjIuNTk3LTQuNTI4IDMxLjMxMSA0NC42NTMgMjYuOTAxLTU2LjMwOS0uMDE3LS4wMDJMMjU2IDE5MC43MDhWNjQuMDMzIiBmaWxsPSIjQzE3QjlEIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AWS SNS Trigger", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:clearbit.svg", - "name": "n8n-nodes-base.clearbit", - "defaults": { - "name": "Clearbit" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTAlIiB4Mj0iMTAwJSIgeTE9IjAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0RFRjJGRSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0RCRjFGRSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMCUiIHgyPSI1MCUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM1N0JDRkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM1MUI1RkQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM3LjUlIiB4Mj0iNjIuNSUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMxQ0E3RkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxNDhDRkMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik03MiAzNnYxNi43N2wtLjAwNC44NjhjLS4wNiA2LjAzNS0uNzUgOC4zNTMtMiAxMC42ODhhMTMuNjMgMTMuNjMgMCAwMS01LjY3IDUuNjdsLS4zMjYuMTcxQzYxLjY1OCA3MS4zNjQgNTkuMTYgNzIgNTIuNzcgNzJIMzZWMzZoMzZ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTY0LjMyNiAyLjAwM2ExMy42MyAxMy42MyAwIDAxNS42NyA1LjY3bC4xNzEuMzI3QzcxLjM2NCAxMC4zNDIgNzIgMTIuODQgNzIgMTkuMjNWMzZIMzZWMGgxNi43N2M2LjY4NyAwIDkuMTEyLjY5NiAxMS41NTYgMi4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTM2IDB2NzJIMTkuMjNsLS44NjgtLjAwNGMtNi4wMzUtLjA2LTguMzUzLS43NS0xMC42ODgtMmExMy42MyAxMy42MyAwIDAxLTUuNjctNS42N0wxLjgzMiA2NEMuNjM2IDYxLjY1OCAwIDU5LjE2IDAgNTIuNzdWMTkuMjNjMC02LjY4Ny42OTYtOS4xMTIgMi4wMDMtMTEuNTU2YTEzLjYzIDEzLjYzIDAgMDE1LjY3LTUuNjdMOCAxLjgzMkMxMC4zNDIuNjM2IDEyLjg0IDAgMTkuMjMgMEgzNnoiLz48L2c+PC9zdmc+" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Clearbit", - "typeVersion": 1 - }, - { - "id": 221, - "icon": "file:stackby.png", - "name": "n8n-nodes-base.stackby", - "defaults": { - "name": "Stackby" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Stackby", - "typeVersion": 1 - }, - { - "id": 312, - "icon": "file:perspective.svg", - "name": "n8n-nodes-base.googlePerspective", - "defaults": { - "name": "Google Perspective" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iNiAxMCAxMjUgMTI1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc0IgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM4Ij4KICAgIDxjbGlwUGF0aAogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0iY2xpcFBhdGg5MzciPgogICAgICA8cmVjdAogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMGZmO2ZpbGwtcnVsZTpldmVub2RkIgogICAgICAgICBpZD0icmVjdDkzOSIKICAgICAgICAgd2lkdGg9IjEyMy40OTQ3IgogICAgICAgICBoZWlnaHQ9IjExOS4wMjc3MyIKICAgICAgICAgeD0iMTIuMjUiCiAgICAgICAgIHk9IjEyLjQ4MjI3MSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxnCiAgICAgaWQ9Imc1MzIiCiAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoOTM3KSI+CiAgICA8cGF0aAogICAgICAgZD0iTTEzMS41MyA3MmE1OS43OSA1OS43OSAwIDAgMS01My44MSA1OS40OXYtMTE5QTU5Ljc5IDU5Ljc5IDAgMCAxIDEzMS41MyA3MnpNMTIuMjUgNzh2NTMuNTFoNTMuNTJBNTkuODEgNTkuODEgMCAwIDAgMTIuMjUgNzh6bTAtMTJoNTMuNTJWMTIuNTFBNTkuODEgNTkuODEgMCAwIDAgMTIuMjUgNjZ6bTE3Ni44My0zNy4wNkgyMjNjMjEuNzcgMCAzNS44IDExLjMyIDM1LjggMjkuNjVzLTE0IDI5LjY0LTM1LjggMjkuNjRoLTE1LjIydjI2LjgyaC0xOC43em0zMy4zNCA0NGMxMS44MSAwIDE3LjM0LTQuNTUgMTcuMzQtMTQuMzlzLTUuNTMtMTQuNC0xNy4zNC0xNC40aC0xNC42NFY3M3ptMzcuMTQgMTEuNzJ2LS42MWMwLTE5LjkzIDEyLjkxLTMzIDMyLTMzIDE4IDAgMzEgMTIuNjcgMzEgMzMuNDZ2NC4xOGgtNDQuOWMxIDkuNzIgNiAxNC4yNyAxNC4xNCAxNC4yNyA1LjkxIDAgMTAuMDktMi41OCAxMS45NC03aDE4LjJjLTIuNyAxMi40Mi0xNC42NCAyMS0zMC4yNiAyMS0xOS44Mi4wNC0zMi4xMi0xMS45Ni0zMi4xMi0zMi4zem0xOC41Ny03Ljg3aDI2LjJjLTEuNzItOC4xMi02LjI3LTEyLjE4LTEyLjkxLTEyLjE4cy0xMS42OSAzLjk0LTEzLjI5IDEyLjE4em01NC43My0yMy43NGgxNy41OXY5LjQ3QzM1NC4yNiA1NS44OCAzNjEgNTIuMzEgMzcwIDUyLjMxaDMuNTZ2MTdoLTE1LjVjLTQuNjcgMC03LjEzIDIuNDYtNy4xMyA3djM4Ljc1aC0xOC4wN3pNMzc4LjEyIDk2SDM5NWMuNjIgNC45MiA0LjU1IDcuNSAxMy4yOSA3LjUgNy4zOCAwIDEwLjk0LTIuMzMgMTAuOTQtNS42NSAwLTIuNzEtMS43Mi0zLjk0LTYuMTUtNC44bC0xNC43OS0yLjg1Yy0xMy42NS0yLjQ2LTE5LjA2LTguMTItMTkuMDYtMTguMDggMC0xMi4zIDEwLTIxIDI3LjkyLTIxIDE2LjczIDAgMjguMTcgOC4zNyAyOSAyMC41NGgtMTYuODJjLS43NC00LjQyLTQuOC03LTEyLjMtNy03IDAtMTAuNDYgMi4yMi0xMC40NiA1LjU0IDAgMi41OCAxLjcyIDMuODEgNiA0LjY3bDE0Ljg4IDIuODNjMTMuNTMgMi40NiAxOC45NCA4LjEyIDE4Ljk0IDE4LjIxIDAgMTIuOTEtMTAuNDUgMjEuMTUtMjguMjkgMjEuMTUtMTguNzktLjA2LTI5LjM3LTguNzgtMjkuOTgtMjEuMDZ6bTY4LjEzLTQyLjk1aDE3LjU5djkuODRjMy43LTcuMzggMTAuNzEtMTEuNTYgMTkuNTYtMTEuNTYgMTQuODkgMCAyNi4zMyAxMS42OCAyNi4zMyAzMnYuNjJjMCAyMC4xNy0xMi4wNiAzMi44NC0yNi45NCAzMi44NC04LjEyIDAtMTQuNzYtMy4zMi0xOC40NS05LjQ3djMwLjYzaC0xOC4wOXpNNDkxIDg0LjQydi0xLjZjMC0xMS4zMi00LjkyLTE3LjM1LTEzLjE2LTE3LjM1LTguNjEgMC0xMy41MyA1LjkxLTEzLjUzIDE3LjIzdjIuN2MwIDEyLjE4IDUgMTcuMjIgMTMuMTYgMTcuMjIgNy45IDAgMTMuNTMtNi42MiAxMy41My0xOC4yem0yNi4xLjI0di0uNjFjMC0xOS45MyAxMi45Mi0zMyAzMi0zMyAxOCAwIDMxIDEyLjY3IDMxIDMzLjQ2djQuMThoLTQ0LjljMSA5LjcyIDYgMTQuMjcgMTQuMTUgMTQuMjcgNS45IDAgMTAuMDgtMi41OCAxMS45My03aDE4LjJjLTIuNyAxMi40Mi0xNC42MyAyMS0zMC4yNSAyMS0xOS44My4wNC0zMi4xMy0xMS45Ni0zMi4xMy0zMi4zem0xOC41Ny03Ljg3aDI2LjIxYy0xLjczLTguMTItNi4yOC0xMi4xOC0xMi45Mi0xMi4xOHMtMTEuNjkgMy45NC0xMy4yOSAxMi4xOHptNTEuNTMgNy43NXYtLjc0YzAtMTkuMzEgMTMuMTYtMzIuNzIgMzEuMzctMzIuNzIgMTYuMjQgMCAyNy44IDkuMzUgMjkuNCAyNC42aC0xNy43MWMtLjc0LTYuNjQtNS40Mi0xMC40NS0xMS40NC0xMC40NS03Ljg4IDAtMTMgNi41Mi0xMyAxOC4ydjEuNDhjMCAxMS44MSA1LjE2IDE4IDEyLjc5IDE4IDYuNTIgMCAxMC45NS00LjA2IDExLjgxLTExLjJoMTcuNzFjLTEuNiAxNS43NS0xMyAyNS4zNC0yOS43NyAyNS4zNEM2MDAgMTE3IDU4Ny4yIDEwNC4zNCA1ODcuMiA4NC41NHptNzYuMDEgOS4zNVY2Ny4zMmgtMTAuN1Y1My4wNWgxMC43di0xOGgxOHYxOGgxOC4yMXYxNC4yN2gtMTguMjV2MzAuNzVjMCAxLjcyLjc0IDIuNDYgMi40NiAyLjQ2aDE1Ljc1djE0LjUySDY4NS42Yy0xNC41MiAwLTIyLjM5LTcuNTEtMjIuMzktMjEuMTZ6bTQ2LTU4LjMxYTEwLjA5IDEwLjA5IDAgMCAxIDIwLjE3IDAgMTAuMDkgMTAuMDkgMCAxIDEtMjAuMTcgMHptMSAxNy40N2gxOC4wOHY2MmgtMTguMXptMjUuMTkgMEg3NTRsMTQuMzkgNDUuMjcgMTQuMjctNDUuMjdoMTcuNzFsLTIwLjkxIDYyaC0yMy4xNXptNjguODggMzEuNjF2LS42MWMwLTE5LjkzIDEyLjkyLTMzIDMyLTMzIDE4IDAgMzEgMTIuNjcgMzEgMzMuNDZ2NC4xOGgtNDQuOWMxIDkuNzIgNiAxNC4yNyAxNC4xNSAxNC4yNyA1LjkgMCAxMC4wOS0yLjU4IDExLjkzLTdoMTguMjFjLTIuNzEgMTIuNDItMTQuNjQgMjEtMzAuMjYgMjEtMTkuODMuMDQtMzIuMTMtMTEuOTYtMzIuMTMtMzIuM3ptMTguNTctNy44N2gyNi4yMWMtMS43My04LjEyLTYuMjgtMTIuMTgtMTIuOTItMTIuMThzLTExLjY5IDMuOTQtMTMuMjkgMTIuMTh6IgogICAgICAgZmlsbD0iIzQ1MTczNSIKICAgICAgIGlkPSJwYXRoMiIgLz4KICA8L2c+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 7, - "name": "Utility" - }, - { - "id": 10, - "name": "Analytics" - } - ], - "displayName": "Google Perspective", - "typeVersion": 1 - } - ] - }, - { - "id": 628, - "name": "Receive updates from HubSpot when a new contact is created", - "totalViews": 376, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2020-08-31T00:27:22.044Z", - "nodes": [ - { - "id": 303, - "icon": "file:notion.svg", - "name": "n8n-nodes-base.notionTrigger", - "defaults": { - "name": "Notion Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHdpZHRoPSIyNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjEyIDAuMTkgNDg3LjYxOSA1MTAuOTQxIj48cGF0aCBkPSJNOTYuMDg1IDkxLjExOGMxNS44MSAxMi44NDUgMjEuNzQxIDExLjg2NSA1MS40MyA5Ljg4NGwyNzkuODg4LTE2LjgwNmM1LjkzNiAwIDEtNS45MjItLjk4LTYuOTA2TDM3OS45NCA0My42ODZjLTguOTA3LTYuOTE1LTIwLjc3My0xNC44MzQtNDMuNTE2LTEyLjg1M0w2NS40MDggNTAuNmMtOS44ODQuOTgtMTEuODU4IDUuOTIyLTcuOTIyIDkuODgzem0xNi44MDQgNjUuMjI4djI5NC40OTFjMCAxNS44MjcgNy45MDkgMjEuNzQ4IDI1LjcxIDIwLjc2OWwzMDcuNTk3LTE3Ljc5OWMxNy44MS0uOTc5IDE5Ljc5NC0xMS44NjUgMTkuNzk0LTI0LjcyMlYxMzYuNTdjMC0xMi44MzYtNC45MzgtMTkuNzU4LTE1Ljg0LTE4Ljc3bC0zMjEuNDQyIDE4Ljc3Yy0xMS44NjMuOTk3LTE1LjgyIDYuOTMxLTE1LjgyIDE5Ljc3NnptMzAzLjY1OSAxNS43OTdjMS45NzIgOC45MDMgMCAxNy43OTgtOC45MiAxOC43OTlsLTE0LjgyIDIuOTUzdjIxNy40MTJjLTEyLjg2OCA2LjkxNi0yNC43MzQgMTAuODctMzQuNjIyIDEwLjg3LTE1LjgzMSAwLTE5Ljc5Ni00Ljk0NS0zMS42NTQtMTkuNzZsLTk2Ljk0NC0xNTIuMTl2MTQ3LjI0OGwzMC42NzcgNi45MjJzMCAxNy43OC0yNC43NSAxNy43OGwtNjguMjMgMy45NThjLTEuOTgyLTMuOTU4IDAtMTMuODMyIDYuOTIxLTE1LjgxbDE3LjgwNS00LjkzNVYyMTAuN2wtMjQuNzIxLTEuOTgxYy0xLjk4My04LjkwMyAyLjk1NS0yMS43NCAxNi44MTItMjIuNzM2bDczLjE5NS00LjkzNEwzNTguMTg2IDMzNS4yMlYxOTguODM2bC0yNS43MjMtMi45NTJjLTEuOTc0LTEwLjg4NCA1LjkyNy0xOC43ODcgMTUuODE5LTE5Ljc2N3pNNDIuNjUzIDIzLjkxOWwyODEuOS0yMC43NmMzNC42MTgtMi45NjkgNDMuNTI1LS45OCA2NS4yODMgMTQuODI1bDg5Ljk4NiA2My4yNDdjMTQuODQ4IDEwLjg3NiAxOS43OTcgMTMuODM3IDE5Ljc5NyAyNS42OTN2MzQ2Ljg4M2MwIDIxLjc0LTcuOTIgMzQuNTk3LTM1LjYwOCAzNi41NjRMMTM2LjY0IDUxMC4xNGMtMjAuNzg1Ljk5MS0zMC42NzctMS45NzEtNDEuNTYyLTE1LjgxNWwtNjYuMjY3LTg1Ljk3OEMxNi45MzggMzkyLjUyIDEyIDM4MC42OCAxMiAzNjYuODI4VjU4LjQ5NWMwLTE3Ljc3OCA3LjkyMi0zMi42MDggMzAuNjUzLTM0LjU3NnoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Notion Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 1344, - "name": "Save Email Attachments to Cloud Storage (Nextcloud)", - "totalViews": 362, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-11-29T13:59:16.771Z", - "nodes": [ - { - "id": 10, - "icon": "file:amqp.png", - "name": "n8n-nodes-base.amqp", - "defaults": { - "name": "AMQP Sender" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB7UlEQVRoge2W4W3CMBCFj26QjkBHSEdIR4AR6Ah0BBgBRqAjhBFgBBghHaEVlV29PN0lDr+o9D7JEjhn+975bJ8JIYQQQgghhBBCCCGEEA9CY2bf0NaBW2uyu7UN2XSOzTyY60J2BzNbObbsH7eTmS2mhHJHE1wmCD7A93ngEAquHaHc2omCcysSXQW74g32BHfwfTEiuCoQm9vuDsEndPYpELxKjjBj0foCEXX6XdM3by3c7aOZPZvZzMzeaBzbIh9pzIuZXaG/RqNIMAq7Ur8XCHQ2kx3LC56DMQ39X4LI23zbAd88ruRHD09wTVF5p+/eBZI5g7O8w5FgXOvsZAI7PxRwS4HGIPbm8wRjBL/Sgp/QNyQYHWySmOxgJBgFeGnPfZHgDVyufET+YMEVCdo7gziCTBbGmRKlGQpCMXOnj+1L6B0JFsxndO3cjjZyjo6OnZeqGb5gqhTQS3qKeK1SwbesfB3IrF/awqu+g8Dgs5SLE37SciHiPUv8rLVp7k2wdl63tDDqgTs8lqpINWGXbSTKe9rlJgXME7C9I6V7oGAWsEzv2gzeN2TstkbCZyIJWBYKWUwtF4foKGU9TpRGdZDSdVDpDNXSVVBLt5TeucS9K6X/E3USX3rshBBCCCGEEEIIIYQQ4tExsx8PuuPnwhCIbgAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AMQP Sender", - "typeVersion": 1 - }, - { - "id": 14, - "icon": "file:apiTemplateIo.svg", - "name": "n8n-nodes-base.apiTemplateIo", - "defaults": { - "name": "APITemplate.io" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDIzLjE2NyAyMS4xNjciPjxwYXRoIGZpbGw9IiM5MWJjZTUiIGQ9Ik0xOC42MTEuNTA0TDMuNDczIDExLjI0bDQuNTk3IDIuMjEzIDEuMDY2IDMuODgzIDMuMTcxLTIuMjI2IDIuODAyLjk1MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4xNzIgMTcuNTk3YS4yNjQuMjY0IDAgMDEtLjI5LS4xOTJsLTEuMDM1LTMuNzY3LTQuNDg4LTIuMTZhLjI2NS4yNjUgMCAwMS0uMDM5LS40NTRMMTguNDU4LjI4OGEuMjY0LjI2NCAwIDAxLjQxLjI3NGwtMy41IDE1LjU1NmEuMjY1LjI2NSAwIDAxLS4zNDQuMTkzbC0yLjY3NC0uOTA4LTMuMDYxIDIuMTVhLjI3My4yNzMgMCAwMS0uMTE3LjA0NHptLTUuMTgtNi40MDFsNC4xOTMgMi4wMTdjLjA2OS4wMzQuMTIuMDk1LjE0LjE2OWwuOTY3IDMuNTIgMi44NjMtMi4wMWEuMjY1LjI2NSAwIDAxLjIzNy0uMDMzbDIuNTI0Ljg1NkwxOC4yIDEuMTE5eiIvPjxwYXRoIGZpbGw9IiMzYTg0YzEiIGQ9Ik05LjMzOSAxNy4wNzlsLjk0Ni0yLjkxM0wxOC42NDIuNzI4IDguMjI2IDEzLjIzNXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNOS4zNTYgMTcuMjFhLjEzMi4xMzIgMCAwMS0uMTQzLS4xNzJsLjk0Ni0yLjkxM2EuMTYuMTYgMCAwMS4wMTQtLjAzbDcuMzkzLTExLjg4OC05LjQxOSAxMS4xNTZhLjEzMy4xMzMgMCAwMS0uMjAyLS4xNzFMMTguNTQuNjQyYS4xMzIuMTMyIDAgMDEuMjE0LjE1NmwtOC4zNDggMTMuNDI0LS45NDEgMi44OThhLjEzMi4xMzIgMCAwMS0uMTA5LjA5em0tMy4yMTUgMS4wNDVjLTEuMTY4LjAyOS0yLjMwMy0uMzczLTMuMDY3LTEuMjg3LS40ODUtLjU4LS42ODMtMS41NzQuMjc1LTEuNzA1Ljg1OS0uMTE5IDEuMjI5LjQ4NSAxLjQ4IDEuMTk2LjgwNCAyLjAyNi4xNiAyLjkzOC0xLjY4IDQuMjcyLS4xNDQuMDkuMDE1LjI5Ni4xNTkuMjA2IDEuMjE4LTEgMS44MjktMS40NjYgMi4xLTIuNDQ4LjEzNC0xLjM2LS40MDItMy4wOTEtMS4zODQtMy40MzYtMS4xMi0uMzgyLTIuMDYzLjUxNi0xLjQ5OSAxLjU4NS42OTkgMS4zMjQgMi4yMyAxLjkxNCAzLjY1MiAxLjg3OC4xNy0uMDA0LjEzMy0uMjY2LS4wMzYtLjI2MXoiLz48cGF0aCBmaWxsPSIjMWYyMTJiIiBkPSJNNy4yMzUgMTguMTRhMTQuOTUgMTQuOTUgMCAwMS0uNzU5LjA5Yy0uMTcuMDE3LS4xMzMuMjc5LjAzNi4yNjIuMjUzLS4wMjUuNTA3LS4wNTIuNzU4LS4wOS4xNjktLjAyNi4xMzMtLjI4OC0uMDM1LS4yNjJ6bTEuMTk0LS41MDRhOC40NiA4LjQ2IDAgMDEtLjg2NS4zNDRjLS4xNjIuMDU0LS4wNTcuMjk3LjEwNC4yNDNhOC4zNyA4LjM3IDAgMDAuODY1LS4zNDRjLjE1NC0uMDcxLjA1LS4zMTUtLjEwNC0uMjQzeiIvPjxwYXRoIGQ9Ik0xMi41OTkgMTUuMjJhLjEzMS4xMzEgMCAwMS0uMDctLjAxbC0yLjE2OC0uOTI0YS4xMzMuMTMzIDAgMDEuMTAzLS4yNDNsMi4xNjkuOTIzYS4xMzMuMTMzIDAgMDEtLjAzNC4yNTN6Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - } - ], - "displayName": "APITemplate.io", - "typeVersion": 1 - }, - { - "id": 25, - "icon": "file:sns.svg", - "name": "n8n-nodes-base.awsSns", - "defaults": { - "name": "AWS SNS" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQ5MCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDI1NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTk4Ljg3NSAyMzIuMDMzbC0yNi40MzMtNy40MDgtMjUuMDAxLTI4LjUwOCAzMS4yNzItLjg2MyAyMC4xNjIgMzYuNzc5bS02MS4xMjUtMTguOGwtMTQuODc1LTQuMTY2LTE0LjA1OC0xNi4wMzQgMTcuMDgyLTIuODA5IDExLjg1MSAyMy4wMDkiIGZpbGw9IiM5OTVCODAiLz48cGF0aCBkPSJNMCAxOTEuMDE3bDE1LjIwNCAzLjA5MSAyLjIwNy0zLjg4MlY1OC41MDNsLTIuMjA3LTIuNTYxTDAgNjQuNnYxMjYuNDE3IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTczLjkzMyA2OS43MDhMMTUuMjA4IDU1Ljk0MnYxMzguMTY2bDguNzk4LS44MTggMTMuNzQ0IDE5Ljk0MyAxMC42LTIyLjIwNSAyNS41ODMtMi4zNzhWNjkuNzA4IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTMzLjk1OCAxOTguMTMzbDI2LjA2MyA1LjI1IDEuNzE2LTQuMDQ1VjM3LjQ0bC0xLjcxNi0zLjY2NS0yNi4wNjMgMTMuMjA4djE1MS4xNSIgZmlsbD0iIzdCM0Y2NSIvPjxwYXRoIGQ9Ik0yMDguNzM0IDgxLjUxNkw2MC4wMjEgMzMuNzc1djE2OS42MTJsMTcuMjIxLTIuMjE2IDIxLjYzMyAzMC44NjIgMTcuMTI2LTM1Ljg1IDkyLjczMy0xMS45MzNWODEuNTE2IiBmaWxsPSIjQzE3QjlEIi8+PHBhdGggZD0iTTE4MS44MzMgMjU2LjQ5MmwtMzcuNTY2LTEwLjUyNS0zNS41MDktNDAuNSA0Ni4wMzMtLjQ2OCAyNy4wNDIgNTEuNDkzIiBmaWxsPSIjOTk1QjgwIi8+PHBhdGggZD0iTTg5LjU5MSAyMDguOTVsMzguMzMgNy40MTcgMi45NzctMi41NjZWNC4xMTdMMTI3LjkyMSAwbC0zOC4zMyAxOS4xNThWMjA4Ljk1IiBmaWxsPSIjN0IzRjY1Ii8+PHBhdGggZD0iTTI1NiA2NC4wMzNMMTI3LjkyNSAwdjIxNi4zNjdsMjIuNTk3LTQuNTI4IDMxLjMxMSA0NC42NTMgMjYuOTAxLTU2LjMwOS0uMDE3LS4wMDJMMjU2IDE5MC43MDhWNjQuMDMzIiBmaWxsPSIjQzE3QjlEIi8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - }, - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "AWS SNS", - "typeVersion": 1 - } - ] - }, - { - "id": 1225, - "name": "Export New Deals from CRM to Internal Messaging, Email and Database", - "totalViews": 309, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-09-10T14:28:58.405Z", - "nodes": [ - { - "id": 20, - "icon": "file:lambda.svg", - "name": "n8n-nodes-base.awsLambda", - "defaults": { - "name": "AWS Lambda" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0zLjAyMyAtMC4yMiA0MjAuOTIzIDQzMy41NCIgd2lkdGg9IjI0NDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwOC40NSAyMjcuODljLTEuNTkgMi4yNi0yLjkzIDQuMTItNC4yMiA2cS0zMC44NiA0NS40Mi02MS43IDkwLjgzLTI4LjY5IDQyLjI0LTU3LjQ0IDg0LjQzYTMuODggMy44OCAwIDAxLTIuNzMgMS41OXEtNDAuNTktLjM1LTgxLjE2LS44OGMtLjMgMC0uNjEtLjA5LTEuMi0uMThhMTQuNDQgMTQuNDQgMCAwMS43Ni0xLjY1cTI4LjMxLTQzLjg5IDU2LjYyLTg3Ljc2IDI1LjExLTM4Ljg4IDUwLjI1LTc3Ljc0IDI3Ljg2LTQzLjE4IDU1LjY5LTg2LjQyYzIuNzQtNC4yNSA1LjU5LTguNDIgOC4xOS0xMi43NWE1LjI2IDUuMjYgMCAwMC41Ni0zLjgzYy01LTE1Ljk0LTEwLjEtMzEuODQtMTUuMTktNDcuNzQtMi4xOC02LjgxLTQuNDYtMTMuNTgtNi41LTIwLjQzLS42Ni0yLjItMS43NS0yLjg3LTQtMi44Ni0xNyAuMDctMzMuOS4wNS01MC44NS4wNS0zLjIyIDAtMy4yMyAwLTMuMjMtMy4xOCAwLTIwLjg0IDAtNDEuNjgtLjA2LTYyLjUyIDAtMi4zMi43Ni0yLjg0IDIuOTQtMi44NHE1MS4xOS4wOSAxMDIuNCAwYTMuMjkgMy4yOSAwIDAxMy42IDIuNDNxMjcgNjcuOTEgNTQgMTM1Ljc3IDMxLjUgNzkuMTQgNjMgMTU4LjNjNi41MiAxNi4zOCAxMy4wOSAzMi43NSAxOS41NCA0OS4xNy43NyAyIDEuNTcgMi4zOCAzLjU5IDEuNzYgMTcuODktNS41MyAzNS44Mi0xMC45MSA1My43LTE2LjQ1IDIuMjUtLjcgMy4wNy0uMjMgMy43NyAyIDYuMSAxOS4xNyAxMi4zMiAzOC4zIDE4LjUgNTcuNDUuMjEuNjYuMzcgMS4zMy42MiAyLjI1LTEuMjguNDctMi40OCAxLTMuNzEgMS4zNHEtNjEgMTkuMzMtMTIxLjkzIDM4LjY4Yy0xLjk0LjYxLTIuNTItLjA1LTMuMTctMS42OHEtMTguNjEtNDcuMTYtMzcuMzEtOTQuMjgtMTguMjktNDYuMTQtMzYuNi05Mi4yOGMtMS44My00LjYyLTMuNjMtOS4yNi01LjQ2LTEzLjg4LS4yOS0uNzktLjY5LTEuNDgtMS4yNy0yLjd6IiBmaWxsPSIjZmE3ZTE0Ii8+PC9zdmc+" - }, - "categories": [ - { - "id": 5, - "name": "Development" - } - ], - "displayName": "AWS Lambda", - "typeVersion": 1 - }, - { - "id": 38, - "icon": "file:chargebee.png", - "name": "n8n-nodes-base.chargebeeTrigger", - "defaults": { - "name": "Chargebee Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAk1BMVEUAAAD9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azX9azXS0qjqAAAAMHRSTlMAAta1CPr3HAyb8mNPLBLq5MmGZ1wi28+soEQX7pZ9dkk/MijDurCMims54b6lb1YyU8hoAAACDklEQVRIx+2V2bKiMBBAmyTs+w6CIi64O/n/rxtKJwIjJPA4Nfc8acOpTnfSAX7493G2QZN6Zeml+GwVS0xiNSXtYeBIm6lKEaJf3C5kjrvz6SioFruVTKcIJEG1D8oBa1wXUy6+w2lVxhFFuU+0j4KOjwdOjUHQnHJ/DVZ4iaXXatTo2OuhPuEWXm9fLOhxPQjldeeuyV/NqGT+su1ucZuRkt5PMRElDmCEbdK2MNcmKnaZi2EUrd7GMEHEXGMPi8mYfFruqjd2NLrE+/P9oF9nyCuW+P4JhcorcBbL4dc2WSxyEcoBe9Vi5yJlEc8RyTp7ldVo0w8rkZyzN3ddExjR4sw7TmZhzSRhEddZ3m2TRar5+3z8hDZ/xlMSnzCPnbDu9NcPhLItzKAZG0hJnHVYYhnDYtSS2RksJ+fcQi0qAbDtKXknU84oWPQJtizvxanpmcCQJ3VtiA1lUlbdzk7rfs/bzwFSVR/bsaDhjHukvvfJsbBXm8S+UboXTwfDQFjXG6S0/dde18oGrN20TI4DOzHaA3drzAJWPqVy2Fa+5qTWDn05AKJJbS+eafsHtUlRUgAHB/dkJT+ddJzI7U+3kopjVgiGUwroF7J/IWAac+7RFeo0D6X3daQCiRBNZs2XVrmDr4e2zQ1aVhrMwwl9+Z1Zzw42ptQPHZiPFJv5IXENWXGvdRhL8MN/y2+uRpQ1fWz5HAAAAABJRU5ErkJggg==" - }, - "categories": [ - { - "id": 8, - "name": "Finance & Accounting" - } - ], - "displayName": "Chargebee Trigger", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:clearbit.svg", - "name": "n8n-nodes-base.clearbit", - "defaults": { - "name": "Clearbit" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTAlIiB4Mj0iMTAwJSIgeTE9IjAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0RFRjJGRSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0RCRjFGRSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMCUiIHgyPSI1MCUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM1N0JDRkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM1MUI1RkQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM3LjUlIiB4Mj0iNjIuNSUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMxQ0E3RkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxNDhDRkMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik03MiAzNnYxNi43N2wtLjAwNC44NjhjLS4wNiA2LjAzNS0uNzUgOC4zNTMtMiAxMC42ODhhMTMuNjMgMTMuNjMgMCAwMS01LjY3IDUuNjdsLS4zMjYuMTcxQzYxLjY1OCA3MS4zNjQgNTkuMTYgNzIgNTIuNzcgNzJIMzZWMzZoMzZ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTY0LjMyNiAyLjAwM2ExMy42MyAxMy42MyAwIDAxNS42NyA1LjY3bC4xNzEuMzI3QzcxLjM2NCAxMC4zNDIgNzIgMTIuODQgNzIgMTkuMjNWMzZIMzZWMGgxNi43N2M2LjY4NyAwIDkuMTEyLjY5NiAxMS41NTYgMi4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTM2IDB2NzJIMTkuMjNsLS44NjgtLjAwNGMtNi4wMzUtLjA2LTguMzUzLS43NS0xMC42ODgtMmExMy42MyAxMy42MyAwIDAxLTUuNjctNS42N0wxLjgzMiA2NEMuNjM2IDYxLjY1OCAwIDU5LjE2IDAgNTIuNzdWMTkuMjNjMC02LjY4Ny42OTYtOS4xMTIgMi4wMDMtMTEuNTU2YTEzLjYzIDEzLjYzIDAgMDE1LjY3LTUuNjdMOCAxLjgzMkMxMC4zNDIuNjM2IDEyLjg0IDAgMTkuMjMgMEgzNnoiLz48L2c+PC9zdmc+" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Clearbit", - "typeVersion": 1 - }, - { - "id": 76, - "icon": "fa:sign-in-alt", - "name": "n8n-nodes-base.executeWorkflow", - "defaults": { - "name": "Execute Workflow", - "color": "#ff6d5a" - }, - "iconData": { - "icon": "sign-in-alt", - "type": "icon" - }, - "categories": [ - { - "id": 9, - "name": "Core Nodes" - } - ], - "displayName": "Execute Workflow", - "typeVersion": 1 - }, - { - "id": 112, - "icon": "file:harvest.png", - "name": "n8n-nodes-base.harvest", - "defaults": { - "name": "Harvest" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Harvest", - "typeVersion": 1 - }, - { - "id": 303, - "icon": "file:notion.svg", - "name": "n8n-nodes-base.notionTrigger", - "defaults": { - "name": "Notion Trigger" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHdpZHRoPSIyNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjEyIDAuMTkgNDg3LjYxOSA1MTAuOTQxIj48cGF0aCBkPSJNOTYuMDg1IDkxLjExOGMxNS44MSAxMi44NDUgMjEuNzQxIDExLjg2NSA1MS40MyA5Ljg4NGwyNzkuODg4LTE2LjgwNmM1LjkzNiAwIDEtNS45MjItLjk4LTYuOTA2TDM3OS45NCA0My42ODZjLTguOTA3LTYuOTE1LTIwLjc3My0xNC44MzQtNDMuNTE2LTEyLjg1M0w2NS40MDggNTAuNmMtOS44ODQuOTgtMTEuODU4IDUuOTIyLTcuOTIyIDkuODgzem0xNi44MDQgNjUuMjI4djI5NC40OTFjMCAxNS44MjcgNy45MDkgMjEuNzQ4IDI1LjcxIDIwLjc2OWwzMDcuNTk3LTE3Ljc5OWMxNy44MS0uOTc5IDE5Ljc5NC0xMS44NjUgMTkuNzk0LTI0LjcyMlYxMzYuNTdjMC0xMi44MzYtNC45MzgtMTkuNzU4LTE1Ljg0LTE4Ljc3bC0zMjEuNDQyIDE4Ljc3Yy0xMS44NjMuOTk3LTE1LjgyIDYuOTMxLTE1LjgyIDE5Ljc3NnptMzAzLjY1OSAxNS43OTdjMS45NzIgOC45MDMgMCAxNy43OTgtOC45MiAxOC43OTlsLTE0LjgyIDIuOTUzdjIxNy40MTJjLTEyLjg2OCA2LjkxNi0yNC43MzQgMTAuODctMzQuNjIyIDEwLjg3LTE1LjgzMSAwLTE5Ljc5Ni00Ljk0NS0zMS42NTQtMTkuNzZsLTk2Ljk0NC0xNTIuMTl2MTQ3LjI0OGwzMC42NzcgNi45MjJzMCAxNy43OC0yNC43NSAxNy43OGwtNjguMjMgMy45NThjLTEuOTgyLTMuOTU4IDAtMTMuODMyIDYuOTIxLTE1LjgxbDE3LjgwNS00LjkzNVYyMTAuN2wtMjQuNzIxLTEuOTgxYy0xLjk4My04LjkwMyAyLjk1NS0yMS43NCAxNi44MTItMjIuNzM2bDczLjE5NS00LjkzNEwzNTguMTg2IDMzNS4yMlYxOTguODM2bC0yNS43MjMtMi45NTJjLTEuOTc0LTEwLjg4NCA1LjkyNy0xOC43ODcgMTUuODE5LTE5Ljc2N3pNNDIuNjUzIDIzLjkxOWwyODEuOS0yMC43NmMzNC42MTgtMi45NjkgNDMuNTI1LS45OCA2NS4yODMgMTQuODI1bDg5Ljk4NiA2My4yNDdjMTQuODQ4IDEwLjg3NiAxOS43OTcgMTMuODM3IDE5Ljc5NyAyNS42OTN2MzQ2Ljg4M2MwIDIxLjc0LTcuOTIgMzQuNTk3LTM1LjYwOCAzNi41NjRMMTM2LjY0IDUxMC4xNGMtMjAuNzg1Ljk5MS0zMC42NzctMS45NzEtNDEuNTYyLTE1LjgxNWwtNjYuMjY3LTg1Ljk3OEMxNi45MzggMzkyLjUyIDEyIDM4MC42OCAxMiAzNjYuODI4VjU4LjQ5NWMwLTE3Ljc3OCA3LjkyMi0zMi42MDggMzAuNjUzLTM0LjU3NnoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Notion Trigger", - "typeVersion": 1 - } - ] - }, - { - "id": 1221, - "name": "Send Reminders After Meetings", - "totalViews": 281, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-09-08T08:45:12.497Z", - "nodes": [ - { - "id": 28, - "icon": "file:beeminder.png", - "name": "n8n-nodes-base.beeminder", - "defaults": { - "name": "Beeminder" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAABelBMVEUAAAA6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw7Ozw7Oz46Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw6Ojw7Oz07Oz06Ojw6Ojw6Oj07Oz06Ojw6Ojw6Ojw6Ojw6Ojw7Ozw5OTw7Oz06Ojw6Oj06Ojw6Ojw6Ojw6Ojz/ywf/zgYyND03ODw1NjwvMj3/0wRCQUD2xxL/1Af/zwT/0QRPSz8vMj//0Qo9PUAyNUE0NTz/zwotMEAxM0BYUT5wZDp3ajn/0ggxND7vwxP/1QRGREA3OEBUTz5kWz2iiS6skCvtwBb4yQ7uvgw5OUI0NkFKRj9rYDx8bTiXgTG/oCPWsB3btBzhuBn0xBD6yw/9ywz/2QFSTT1cVDs6OjpsYDmCcTaZgzCTfTC6myfFoiTfthrovhlbUz1gWDxoXjqKdzSPejPCoSmylSm2mCjDoCHPqyD9zQz/0wv/1wR0ZjmpjizKpiPTrR/iuhjquw1UUEaPfD6tkjF8XVfuAAAAKXRSTlMA59K3oPqzMQkF9smWj0AsJ+7g2HpcGhGag2JSTPPMxq2piXRuNta/ZZKUy0EAAAOpSURBVEjH7ZVnW9pQGIbD0jqq1tm915NxEggBwpSNWFoHG7TuvbW7/e89SUA+kLbRr/X+ALmS685zzsl73sPc8D/zYhRwOUa0y2GHCxh9ad29DR3bSB8zbIPOc6vuEIBkkFDbPkBdEk0CeGVRHgSy66UYDx0+VloXgNsWZQdCO+fNskp4kSdErTQDsRB6LMrPILi3lPTa3G58eimSl5WKW4DTonwfEBfOuNoWGwjXNmve+gwPTFiUbw0AkdkE52VZllO4xOcI8OTWv72+KWPciM4qbIvAtAg80B72/S1x4qndZu+533sH/F6YbaN8yQKDI+MO++s390YYc3ofw6Af8G80L2VOpnPu74fOo3vm7h1AoB9HAIVMV6WW6w0cZYx7okgA3DUbsx3g1YXFPbcoABDdR2Gv5krb8ajmhKJL8XguKQD3u+W3Wi2Vw4nwt/1sSMvxx7dl1pvYmBdB8ec2PIFEIZ8FRrsX/gkEtZLWhil/yUX08PljObUaDGmxwdWUxNHpX+yLwMMu+RHERZnVkVL7ukKC8ZgeK/pKCc5YgC1VMClzwD8rXa7voU+3kgTarlp8J7EtGss8HCZy8ERh20jvVlUYCL7jgJdtE57m8dhEntvsyGy6PhOCztyvZsdlA4si7GbJJalTF1+XSTsZBx6lk7zCY8Bszvm2rNTXPvCa50/qvzunMtd6ayFHTLY2reeVQCu2PBMxCiUf9xMA/Idi3QhXvn4A7pm0D2QPLziOk87yqh4bmamkw5/don69W057OU45/8QDQ13yQ4C4j1KFVGnPr8WG3PmwxHmb1RW92nl1veIpbC0mgYE+xiyaROdz80E9Vvxx6Em9o9S2f7bmry7l1CS04G4m7aB6iECf5NpCxm2QyRRXIoKmE6L9mff/qbsuGJDYqfxp3tcic3JeVAUY2B8wf2B43Ol02sAveyS24LmkwV1szAEOp/P5w3+0sh4qN+gH60Cr9SQKDFk6qAS1qhVkx2XldT9cIxbkB639Vfv+Xuc7fU1jh8dYnwV5ktbaboPzVn3kIyV0EGalzaDVw8oJRI/TrHI6TVk4KHDc2Qxv9ZjsdYFkqhJtmxq0haTX/ECP9SOWj2132srsnABXr0V5aozavrJkuOFiUABeMFYZtlHbvSlrHa++GhG0Tm+d3lGAZOlBqaQWIgAGmaswOaB13qL8Te+948zVmOoBhGh8ibr9E8yVGQTAE8A2xFyDcWiMDTPXYmIM/U8nmRtuuD6/AQzW+dqtokXXAAAAAElFTkSuQmCC" - }, - "categories": [ - { - "id": 4, - "name": "Productivity" - } - ], - "displayName": "Beeminder", - "typeVersion": 1 - }, - { - "id": 40, - "icon": "file:clearbit.svg", - "name": "n8n-nodes-base.clearbit", - "defaults": { - "name": "Clearbit" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTAlIiB4Mj0iMTAwJSIgeTE9IjAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0RFRjJGRSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0RCRjFGRSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMCUiIHgyPSI1MCUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM1N0JDRkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM1MUI1RkQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM3LjUlIiB4Mj0iNjIuNSUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMxQ0E3RkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxNDhDRkMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik03MiAzNnYxNi43N2wtLjAwNC44NjhjLS4wNiA2LjAzNS0uNzUgOC4zNTMtMiAxMC42ODhhMTMuNjMgMTMuNjMgMCAwMS01LjY3IDUuNjdsLS4zMjYuMTcxQzYxLjY1OCA3MS4zNjQgNTkuMTYgNzIgNTIuNzcgNzJIMzZWMzZoMzZ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTY0LjMyNiAyLjAwM2ExMy42MyAxMy42MyAwIDAxNS42NyA1LjY3bC4xNzEuMzI3QzcxLjM2NCAxMC4zNDIgNzIgMTIuODQgNzIgMTkuMjNWMzZIMzZWMGgxNi43N2M2LjY4NyAwIDkuMTEyLjY5NiAxMS41NTYgMi4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTM2IDB2NzJIMTkuMjNsLS44NjgtLjAwNGMtNi4wMzUtLjA2LTguMzUzLS43NS0xMC42ODgtMmExMy42MyAxMy42MyAwIDAxLTUuNjctNS42N0wxLjgzMiA2NEMuNjM2IDYxLjY1OCAwIDU5LjE2IDAgNTIuNzdWMTkuMjNjMC02LjY4Ny42OTYtOS4xMTIgMi4wMDMtMTEuNTU2YTEzLjYzIDEzLjYzIDAgMDE1LjY3LTUuNjdMOCAxLjgzMkMxMC4zNDIuNjM2IDEyLjg0IDAgMTkuMjMgMEgzNnoiLz48L2c+PC9zdmc+" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Clearbit", - "typeVersion": 1 - }, - { - "id": 221, - "icon": "file:stackby.png", - "name": "n8n-nodes-base.stackby", - "defaults": { - "name": "Stackby" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAC91BMVEUAAAApJRwHBggfGxImIBjLeRIAjNFQqjnmQjZQqTgNKCUmIAQadHJOpTfvuhD6wxHlQjYAi9AyayNrHhlgMw8ANlEAd7K+NSsAbKL1vxDmQzfzvRAAh8ndQDT7wxFNojYAjNEAg8QAi9Dmsw9QqDjfrQ/kQjb4wRAAis5GlTHIOS9Ppzj3wBAAd7E/hiwAb6Y7fim3jgzdPzQAhshMozapgwvaPjMAhMWfewrQOzEAVH2JJx8AfLmKawiCJR7TPDFImjLMOi/hrg4Ae7hHlzEgRRZEki9RFhLIOC7ZqA1aRQVDkC8/iy3NoAu8NCngQTUAhcbaPzNLoDXVPTJKnTTVPTL5whEAgL7RPDH5wRFHlzIAfbvNOzAAerbiQTbEOC7Wpg7iQTUAic2+Ni3Row7hQTVCji8Acqv0vhDgQDVOpTe6NSzImw0/hiyyMyoAiMpNpTYAbKEAh8mvMikAZ5tNpDbdPzTxvBC/lAyoMCcAYpNMoTWiLiaxiQvaPzM6fCk2cyY2cyaXKyNLnzTrtw9KnjTptg8AgsIAgsKZdgrUPTIwZiJJnDPnsw7dqw5GlTEsXh8AT3YAf7/ksQ6FZwgASnB2Ihvhrw4ARWdHlzF6XgclThlxVwfIOS7bqg0dPhTTpAzrtxBLnjXptQ8AgsFKnDQAe7dPqDjdrA/bqg5PpzdFkjAAis1PpzdEkDD2vxBPpjf2vxD2vxAAicxPpze9Ny1OpjfMng29kwwAiMsAiMvfQDXzvRDeQDX0vhDEmA3eQDTyvBA9gisAhsgAaJvwuxDyvBA6fCkAZZemMCfvug/uuQ8AhcYAcakAhMbtuQ+7kQwAYI9LoDWwMymdLSXtuA8AXYsAT3YAW4gAg8MAWYWTKiLWPTIAV4KPKSKcegp2IhtJnDPmsw8ASW1JmjMsXh/ksQ7QPDErWx4AfrzPOzApWB0nVBsAfLoAQGAAQWEAeLQAd7JRqznoQzf9xBEAjdIAjtP7wxHmQjcAjNEAic1PqDjjQTarWRDCAAAA8nRSTlMAAwULDgX8+/jzEgkG/fn17+lfKRwbEg8J/vz8+/v7+fb08O/o5OHh3t7c2tfSu7eZlJKPj3Z0cWBcT09EQ0JBNCkmJSEdGBcWFhURCwoJ/vn39vXx8fDq6urm5OTa2dHR0MzJyMfHwL+7urq0rq6tqaWjn56enp6el4GBgYGAgH5zamlpXV1cUlJRUVBQSUdGQjk4ODc3Ly4rKycjHh0WDvXx8e/s5eHe2tPT0s7OzsfHxsTEwsG8vLu2trawrquqp6GalZWSjouLioSDgX19eXh3d3d3bWhnZWFhX1taWlVMSkRAPz86OjY1NS4tKycbGNIMkEAAAAMoSURBVEjHzdNVVBVRGIbh/wSIgIGA3Yog3SkpSIuEhS0WBiIigoKAiqBSiiISit3d3d3d3a0nKLnw1N7DrMXA7OMN3/27Zs0z/0CDXi9HpVPNJ1ob3ynZtrzeVSw2KVCq/R2jKhaLK810gXw/joilK6uK5ZNTbRfLV9bvESlVuhZqq8x+kbWtb3bFzz2vTtb+OaeK2vV3eGRt76OVYsWGvOASUo1GaaXJErKUk25AUf0kpLLDVO1jdQkv0qozarvM4qk4OJFQTVXFVE+5reaoGbqwbpfSqEri2gorIrRZUmVQVOMLwD2yQigUVkd5s6PSwlTTdMF1lFC2oATplXjc1mFNxVd53kOoWOhrgLy97Sx4rKgGPpZQNUdtcII3ZBmLRE1tGG/tyz5MNcwRfOLUUNv/Pk9l/mCRZN3smd43hqJaDu7HKlA79CWn9GozkWx6zkwfyYBGpVjFCBdYdaajSL7yw0w/Z4aWjOqyOscBUwVN0oYVE0So3bKQw/SR7TpLqB5q9LXFVB2me8NbY9yOWQaM07RSlVJZUlSJiEq6dqeK6/zQNyRUJ9piqmfc0mvNUNvUwq+e84RPY2lUMzuitpuNBtQTLxqO2moZVTl63c2IinE0Kh3IplF5JnvV1baiqEIT+SoL9FHbZnIxuO1uYs5nbktOY6pBc7mBtwbUpMo0Egg6pTDe9leKytAJfGlUmvO6CyQLa1E/1YF88Dhejlq9Vxx/68YC2cJza3/fSEwVpQMfd2Gqkc7gGd1IoJhp7bftqrjn4Ct0qkJwOyhA67mY4YM5NJdTaQQ+oKji/eCNEUr/jvvGeCC2anKqC/gi1yXxpFSKNZniVceJWFZH5ANk4VbPnus/uzFqQy6pQx3zuacNAIEXyzFVnxmYakOqBrCY70kZ1aFCWDmRRsVqHnskP2+8DuRspag+A9vl6a9J4nPSalAVAftl23MDKKpO5quBZDWpwlJ5RCmNqgWXrH2/A1Pt/ECWctI24da0iKwNuPsfVNaYam0KIRVk4ueGk1IBBKAnb8sF8vlHy6m+gzLz3C+5yLNeoNzcjEKS+aDsciRUDXj/AJL4Mhr51poGAAAAAElFTkSuQmCC" - }, - "categories": [ - { - "id": 3, - "name": "Data & Storage" - } - ], - "displayName": "Stackby", - "typeVersion": 1 - } - ] - }, - { - "id": 1205, - "name": "Promote New Shopify Products", - "totalViews": 219, - "recentViews": 0, - "user": { - "username": "admin" - }, - "createdAt": "2021-08-24T10:40:50.007Z", - "nodes": [ - { - "id": 49, - "icon": "file:contentful.png", - "name": "n8n-nodes-base.contentful", - "defaults": { - "name": "Contentful" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAACzVBMVEUAAAD//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v3wV1FOteFQteH/11/8/f79/v///f3xWlX///4tsN//12BYuOPwXljORzn/2GXwYFry+Pz/1lrwVk/++/lTtuHvPzXvLyD//fdhueNbuOP/12L/1En/1EXvSkPq8/rO5fT/+e5LtOE9suD/9doAd7wIgbYAgbb/2nD/113MSjz+9PTU5/T98O+72++22e+GxedHs+AzseAArN73v74Ae7IAbq7/5KT0m5m6so//22H/2lnwTUb/1DzvRDvOTjrMPzfKRTbvOS7wNCnvKhjIAQD2+v3i7/jc6/fF4PL87Oz86umWy+mSyuh2wOX/9eH74eA/suA4sd8mr98crt763Nz/8tf61tb/8NL50tGiu8/6zs04ncz4yskbjcAAiMD/6r8AfLcohLYdgrYIgrYvhbU0hbT2s7L0pKLzlJHzjYvyf3v/23npzHjxcW3/3l7/2VXuVlDwUUvZT0TUSj7JLTjuJQ3+9fX//Oun0eqbzeqZzOl/wub/+eVtveSsyN8Prd4ArN2Ludnd2ss4ksL2uLcRgrb2t7Xy0LQAcbHorar+4qbczaPiqaDgpJ3nl5T0yY7Juou1rYbyhYLxeHX/33P/32/4yWTyZmHwZmH4yVvtsVPpp1PeWFD/2k/PVk3xUkvMVEnppEjILUTIIDvnoTj/1SvmmRDWLA7KHADUAAA0tfvvAAAAQ3RSTlMA/vz6AgQIBQOJf3UV+fjCbF1aVxEH9+7r5dzXyoRnUEpFKSUc8ejhtq6fm3FvMCwiCryxr6WWjnphQD42DdLNxZg46i9pNgAABRtJREFUSMelloV700AYxpNUJ8wZG3PB3V2vtq50LbSTlm0wxsYYDHfXbbi7u7u7u7u729/Ad+nCJaE0PPDuedbker973+/ukivlVgqlUk7u1EqlgvpLyZUq/BES3zwmODimRUIrfKeC0SQFNvAvMbBGZGU/xMovvG3jYF9olMYBLR9YtRISqULDGPZLT1KpqXpNqyAsmieEFRGgplQKj7bR4RzImZLbisEezMtTdf1dfZFIXGMD3z/QcjUVFIqIp1s8LBYs3LAU5YUQQ1B3OINQTUold8NWxyzyKEx7Uarf4eoYlRSmxclVkPk31pjkklFE+1BKIRsIrIjkXxsFdCyfVlPxDDSK0W59pw8Y0H/6NDtcJ/HpMF9B3ZFIxmeTgBxwSr/AjJWfOSs3CRmNvFmrSmAFVQtYga39uN6cn6fTg3S6QYPNc3KJOc4YRIL7VuKHpjug3KzBeXq+5i+cbf9Fw16oqKLkZcZeqBxhOyB0du2aVTqw5IRxc+ZUQsNe4axDKghna8XwjT2HrckDKMNisWS4+Ix8HdDEWgHW2DiAXzGNLg7feKXnpmGrLFkZ+eaFgwdZLC7aPBAZiTVXdSTPWIN6PCjYXAjwJd35+XNmnxyYucjMuusHZdmB5qzxhIN5HbgmBac/GVWwpbCw54a1lv7dcMwp02Yt0lnyAM+086wrJVIK+KsJqYnxui+71xdu2bxh+AU74tRXvyAzK2vICWBJ7kDIraYa8Evu3Ct1zP31BQXXVyCuK3x0OzPk3JCBdgFcAxetqoIYYrxsXCfDmN2jRt3qgDsgDp+S279vEmFxoZF4uuvKEK/kEV07GQxj9r05DQN5ECBhITDXzfmLnL5rX7YhJbvLCGAlYFkdgIOQjBh3T01JMRiyuyyRhlEcwAF8eG4XSG3ondJdCoa0wQD78OEeuOSU1F6d4VrKudn/wrX+NXYQwIH/OmGxAMfxl6rzrtRsyN31pgjWJCcna4QwUxvgeFq8SXqP3rv3mIBOdo0ggCv4AlwvXLQ9e49+8erzPUwQNn350KUa3EK2Z2v2qKgvejBGv5x4+PD328BoyhKjGY+KJzt3HCXekLURHBwKylv4SI57OnHihKKi0rt9WBL3X2obbzWZjmwDawJHs49kexybvAwef/g0oWPHjkXfng2dgcn0xSMdB0xarfbA8z6cNcChCa53d4TwNfT1I4YnHXxXnLZz5MjtexwOE2a1abZ+YM2V7A+ZKS43CXSt9C0Lm0xpOQ7H+LGAYpnGP0Qaza/UAewLUC54ovG2vFP6vmjSof0YAGEQbK1jc+aBMQdXDoGCWevqfGsY/MaPQ6+BJUoz2SZbCQupvbAxa53AwC2fXqktNtk4T63Waht7ZAcULNghCu6ga4LPG0LTqN+2HGeOyWqzWm02a5qjZM9qxGNpwfmu5F6CxHzm1Z05zhKn01ky2bp9ZTpuI0dsG8hLztg4JKMFtAacZi4funXr5dWL+wj3NQPPBF5jQkchP4TEOCcWJaHZZRKompgGhJPo11Q78BX9DPNHoUhatAxVw91FtMIf+dFSLMNgVi1k2YaGSMZ4ZmVwRBFWmDwKoXIezBnYDLVIZjEdFw5F0X+sFkW0hIVxL/iiXhOE3IZnAC3nLSfz7I6m4hsxuCvD0GRxZHi40MaJXLke8ISoiq6YZUJYEU0T8ZcSkquhU4so/zASuXJ975Z4XDxTkjhrEFI7JtrH29snOrZOK4qHSksNXQXDua/1J0BR0xDIlyn3AAAAAElFTkSuQmCC" - }, - "categories": [ - { - "id": 1, - "name": "Marketing" - }, - { - "id": 5, - "name": "Development" - } - ], - "displayName": "Contentful", - "typeVersion": 1 - }, - { - "id": 107, - "icon": "file:gotify.png", - "name": "n8n-nodes-base.gotify", - "defaults": { - "name": "Gotify" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/png;base64,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" - }, - "categories": [ - { - "id": 6, - "name": "Communication" - } - ], - "displayName": "Gotify", - "typeVersion": 1 - }, - { - "id": 325, - "icon": "file:dropcontact.svg", - "name": "n8n-nodes-base.dropcontact", - "defaults": { - "name": "Dropcontact" - }, - "iconData": { - "type": "file", - "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTAgNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjkuNTY5MiAxNi4yMTlDMjguMTQ2OSAxNS41MzcxIDI2LjU1MzUgMTUuMTU1MiAyNC44NzA5IDE1LjE1NTJDMTguODYxNSAxNS4xNTUyIDEzLjk4OTkgMjAuMDI2OCAxMy45ODk5IDI2LjAzNjJDMTMuOTg5OSAzMi4wNDU2IDE4Ljg2MTUgMzYuOTE3MiAyNC44NzA5IDM2LjkxNzJDMjguOTYyMSAzNi45MTcyIDMyLjUyNiAzNC42NTkyIDM0LjM4NDMgMzEuMzIxNUwzMS43NjE0IDI5Ljg2NDNDMzAuNDE1NCAzMi4yODE4IDI3LjgzNDEgMzMuOTE3MiAyNC44NzA5IDMzLjkxNzJDMjAuNTE4MyAzMy45MTcyIDE2Ljk4OTkgMzAuMzg4OCAxNi45ODk5IDI2LjAzNjJDMTYuOTg5OSAyMS42ODM2IDIwLjUxODMgMTguMTU1MiAyNC44NzA5IDE4LjE1NTJDMjYuMDg5NiAxOC4xNTUyIDI3LjI0MzcgMTguNDMxOCAyOC4yNzM4IDE4LjkyNTdMMjkuNTY5MiAxNi4yMTlaTTM0Ljc3NzkgMS45ODQ0NFYyNy43NDYxSDMxLjY2OVYwLjg5OTM2M0MyOS41NDU5IDAuMzEzMTcxIDI3LjMwOTUgMCAyNSAwQzExLjE5MjkgMCAwIDExLjE5MjkgMCAyNUMwIDM4LjgwNzEgMTEuMTkyOSA1MCAyNSA1MEMzOC44MDcxIDUwIDUwIDM4LjgwNzEgNTAgMjVDNTAgMTQuNjYyNiA0My43MjU5IDUuNzkwNyAzNC43Nzc5IDEuOTg0NDRaIiBmaWxsPSIjMEFCQTlGIi8+Cjwvc3ZnPgo=" - }, - "categories": [ - { - "id": 2, - "name": "Sales" - } - ], - "displayName": "Dropcontact", - "typeVersion": 1 - } - ] - } - ], - "filters": [ - { - "counts": [ - { - "count": 24, - "highlighted": "Sales", - "value": "Sales" - }, - { - "count": 12, - "highlighted": "Marketing & Growth", - "value": "Marketing & Growth" - }, - { - "count": 6, - "highlighted": "Building Blocks", - "value": "Building Blocks" - }, - { - "count": 3, - "highlighted": "Finance & Accounting", - "value": "Finance & Accounting" - }, - { - "count": 2, - "highlighted": "HR & People Ops", - "value": "HR & People Ops" - } - ], - "field_name": "categories", - "sampled": false, - "stats": { - "total_values": 5 - } - } - ] -} diff --git a/cypress/fixtures/workflow-with-unknown-credentials.json b/cypress/fixtures/workflow-with-unknown-credentials.json deleted file mode 100644 index 41b64f3024c..00000000000 --- a/cypress/fixtures/workflow-with-unknown-credentials.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "meta": { - "instanceId": "123" - }, - "nodes": [ - { - "parameters": { - "resource": "credential", - "name": "123", - "credentialTypeName": "123" - }, - "id": "a01f79f6-e8c3-44c5-be5e-4bc482e23172", - "name": "n8n", - "type": "n8n-nodes-base.n8n", - "typeVersion": 1, - "position": [ - 540, - 240 - ], - "credentials": { - "n8nApi": { - "id": "10", - "name": "n8n account" - } - } - }, - { - "parameters": {}, - "id": "acdd1bdc-c642-4ea6-ad67-f4201b640cfa", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 300, - 240 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "n8n", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/fixtures/workflow-with-unknown-nodes.json b/cypress/fixtures/workflow-with-unknown-nodes.json deleted file mode 100644 index 5140a33b061..00000000000 --- a/cypress/fixtures/workflow-with-unknown-nodes.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "meta": { - "instanceId": "15bbf37b6a515ccc2f534cabcd8bd171ca33583ff7744b1e9420e5ce68e615bb" - }, - "nodes": [ - { - "parameters": {}, - "id": "40720511-19b6-4421-bdb0-3fb6efef4bc5", - "name": "When clicking ‘Execute workflow’", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 280, - 320 - ] - }, - { - "parameters": {}, - "id": "acdd1bdc-c642-4ea6-ad67-f4201b640cfa", - "name": "Unknown node 1", - "type": "n8n-nodes-base.thisNodeDoesntExist", - "typeVersion": 1, - "position": [ - 400, - 500 - ] - }, - { - "parameters": {}, - "id": "acdd1bdc-c642-4ea6-ad67-f4201b640ffa", - "name": "Unknown node 2", - "type": "n8n-nodes-base.thisNodeDoesntExistEither", - "typeVersion": 1, - "position": [ - 600, - 500 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "fbe5163b-7474-4741-980a-e4956789be0a", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 500, - 320 - ] - }, - { - "parameters": { - "options": {} - }, - "id": "163313b9-64ff-4ffc-b00f-09b267d8132c", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.2, - "position": [ - 720, - 320 - ] - } - ], - "connections": { - "When clicking ‘Execute workflow’": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Fields": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - } - } -} diff --git a/cypress/package.json b/cypress/package.json deleted file mode 100644 index d77048d4be1..00000000000 --- a/cypress/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "n8n-cypress", - "private": true, - "scripts": { - "typecheck": "tsc --noEmit", - "cypress:install": "cypress install", - "test:e2e:ui": "node scripts/run-e2e.js ui", - "test:e2e:dev": "node scripts/run-e2e.js dev", - "test:e2e:all": "node scripts/run-e2e.js all", - "test:flaky": "node scripts/run-e2e.js debugFlaky", - "format": "biome format --write .", - "format:check": "biome ci .", - "lint": "eslint . --quiet", - "lint:fix": "eslint . --fix", - "develop": "cd ..; pnpm dev:e2e:server", - "start": "cd ..; pnpm start" - }, - "devDependencies": { - "@cypress/grep": "^4.1.0", - "@n8n/api-types": "workspace:*", - "@types/lodash": "catalog:", - "eslint-plugin-cypress": "^4.3.0", - "mocha-junit-reporter": "^2.2.1", - "n8n-workflow": "workspace:*" - }, - "dependencies": { - "@ngneat/falso": "^7.3.0", - "@sinonjs/fake-timers": "^13.0.2", - "cypress": "^14.4.0", - "cypress-otp": "^1.0.3", - "cypress-real-events": "^1.14.0", - "flatted": "catalog:", - "lodash": "catalog:", - "nanoid": "catalog:", - "start-server-and-test": "^2.0.10" - } -} diff --git a/cypress/pages/base.ts b/cypress/pages/base.ts deleted file mode 100644 index dbcb65e5bde..00000000000 --- a/cypress/pages/base.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { IE2ETestPage } from '../types'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class BasePage implements IE2ETestPage { - getters = {}; - - actions = {}; -} diff --git a/cypress/pages/credentials.ts b/cypress/pages/credentials.ts deleted file mode 100644 index 17db21dc513..00000000000 --- a/cypress/pages/credentials.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { BasePage } from './base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class CredentialsPage extends BasePage { - url = '/home/credentials'; - - getters = { - emptyListCreateCredentialButton: () => cy.getByTestId('empty-resources-list').find('button'), - createCredentialButton: () => { - return cy.getByTestId('add-resource-credential'); - }, - searchInput: () => cy.getByTestId('resources-list-search'), - emptyList: () => cy.getByTestId('resources-list-empty'), - credentialCards: () => cy.getByTestId('resources-list-item'), - credentialCard: (credentialName: string) => - this.getters - .credentialCards() - .contains(credentialName) - .parents('[data-test-id="resources-list-item"]'), - credentialCardActions: (credentialName: string) => - this.getters.credentialCard(credentialName).findChildByTestId('credential-card-actions'), - credentialDeleteButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Delete'), - credentialMoveButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Change owner'), - sort: () => cy.getByTestId('resources-list-sort').first(), - sortOption: (label: string) => - cy.getByTestId('resources-list-sort-item').contains(label).first(), - filtersTrigger: () => cy.getByTestId('resources-list-filters-trigger'), - filtersDropdown: () => cy.getByTestId('resources-list-filters-dropdown'), - }; - - actions = { - search: (searchString: string) => { - const searchInput = this.getters.searchInput(); - searchInput.clear(); - - if (searchString) { - searchInput.type(searchString); - } - }, - sortBy: (type: 'nameAsc' | 'nameDesc' | 'lastUpdated' | 'lastCreated') => { - const sortTypes = { - nameAsc: 'Sort by name (A-Z)', - nameDesc: 'Sort by name (Z-A)', - lastUpdated: 'Sort by last updated', - lastCreated: 'Sort by last created', - }; - - this.getters.sort().click(); - this.getters.sortOption(sortTypes[type]).click(); - }, - }; -} diff --git a/cypress/pages/demo.ts b/cypress/pages/demo.ts deleted file mode 100644 index 7e67b79254b..00000000000 --- a/cypress/pages/demo.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Actions - */ - -export function visitDemoPage(theme?: 'dark' | 'light') { - const query = theme ? `?theme=${theme}` : ''; - cy.visit('/workflows/demo' + query); - cy.waitForLoad(); - cy.window().then((win) => { - win.preventNodeViewBeforeUnload = true; - }); -} - -export function importWorkflow(workflow: object) { - const OPEN_WORKFLOW = { command: 'openWorkflow', workflow }; - cy.window().then(($window) => { - const message = JSON.stringify(OPEN_WORKFLOW); - $window.postMessage(message, '*'); - }); -} diff --git a/cypress/pages/features/ai-assistant.ts b/cypress/pages/features/ai-assistant.ts deleted file mode 100644 index f162cff82fc..00000000000 --- a/cypress/pages/features/ai-assistant.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class AIAssistant extends BasePage { - url = '/workflows/new'; - - getters = { - askAssistantFloatingButton: () => cy.getByTestId('ask-assistant-floating-button'), - askAssistantCanvasActionButton: () => cy.getByTestId('ask-assistant-canvas-action-button'), - askAssistantSidebar: () => cy.getByTestId('ask-assistant-sidebar'), - askAssistantSidebarResizer: () => - this.getters.askAssistantSidebar().find('[class^=_resizer][data-dir=left]').first(), - askAssistantChat: () => cy.getByTestId('ask-assistant-chat'), - placeholderMessage: () => cy.getByTestId('placeholder-message'), - closeChatButton: () => cy.getByTestId('close-chat-button'), - chatInputWrapper: () => cy.getByTestId('chat-input-wrapper'), - chatInput: () => cy.getByTestId('chat-input'), - sendMessageButton: () => cy.getByTestId('send-message-button'), - chatMessagesAll: () => cy.get('[data-test-id^=chat-message]'), - chatMessagesAssistant: () => cy.getByTestId('chat-message-assistant'), - chatMessagesUser: () => cy.getByTestId('chat-message-user'), - chatMessagesSystem: () => cy.getByTestId('chat-message-system'), - quickReplies: () => cy.getByTestId('quick-replies'), - quickReplyButtons: () => this.getters.quickReplies().find('button'), - newAssistantSessionModal: () => cy.getByTestId('new-assistant-session-modal'), - codeDiffs: () => cy.getByTestId('code-diff-suggestion'), - applyCodeDiffButtons: () => cy.getByTestId('replace-code-button'), - undoReplaceCodeButtons: () => cy.getByTestId('undo-replace-button'), - codeReplacedMessage: () => cy.getByTestId('code-replaced-message'), - nodeErrorViewAssistantButton: () => - cy.getByTestId('node-error-view-ask-assistant-button').find('button').first(), - credentialEditAssistantButton: () => cy.getByTestId('credential-edit-ask-assistant-button'), - codeSnippet: () => cy.getByTestId('assistant-code-snippet-content'), - }; - - actions = { - enableAssistant: () => { - cy.enableFeature('aiAssistant'); - }, - disableAssistant: () => { - cy.disableFeature('aiAssistant'); - }, - sendMessage: (message: string) => { - this.getters.chatInput().type(message).type('{enter}'); - }, - closeChat: () => { - this.getters.closeChatButton().click(); - this.getters.askAssistantChat().should('not.be.visible'); - }, - openChatFromCanvas: () => { - this.getters.askAssistantCanvasActionButton().click(); - this.getters.askAssistantChat().should('be.visible'); - }, - openChatFromNdv: () => { - this.getters.askAssistantFloatingButton().click(); - this.getters.askAssistantChat().should('be.visible'); - }, - }; -} diff --git a/cypress/pages/features/node-creator.ts b/cypress/pages/features/node-creator.ts deleted file mode 100644 index 38c932468ff..00000000000 --- a/cypress/pages/features/node-creator.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class NodeCreator extends BasePage { - url = '/workflow/new'; - - getters = { - plusButton: () => cy.getByTestId('node-creator-plus-button'), - canvasAddButton: () => cy.getByTestId('canvas-add-button'), - searchBar: () => cy.getByTestId('search-bar'), - getCategoryItem: (label: string) => cy.get(`[data-keyboard-nav-id="${label}"]`), - getCreatorItem: (label: string) => - this.getters.creatorItem().contains(label).parents('[data-test-id="item-iterator-item"]'), - getNthCreatorItem: (n: number) => this.getters.creatorItem().eq(n), - nodeCreator: () => cy.getByTestId('node-creator'), - nodeCreatorTabs: () => cy.getByTestId('node-creator-type-selector'), - selectedTab: () => this.getters.nodeCreatorTabs().find('.is-active'), - categorizedItems: () => cy.getByTestId('categorized-items'), - creatorItem: () => cy.getByTestId('item-iterator-item'), - categoryItem: () => cy.getByTestId('node-creator-category-item'), - communityNodeTooltip: () => cy.getByTestId('node-item-community-tooltip'), - noResults: () => cy.getByTestId('node-creator-no-results'), - nodeItemName: () => cy.getByTestId('node-creator-item-name'), - nodeItemDescription: () => cy.getByTestId('node-creator-item-description'), - activeSubcategory: () => cy.getByTestId('nodes-list-header'), - expandedCategories: () => - this.getters.creatorItem().find('>div').filter('.active').invoke('text'), - }; - - actions = { - openNodeCreator: () => { - this.getters.plusButton().click(); - this.getters.nodeCreator().should('be.visible'); - }, - selectNode: (displayName: string) => { - this.getters.getCreatorItem(displayName).click(); - }, - }; -} diff --git a/cypress/pages/index.ts b/cypress/pages/index.ts deleted file mode 100644 index 93dd165621d..00000000000 --- a/cypress/pages/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './base'; -export * from './credentials'; -export * from './workflows'; -export * from './workflow'; -export * from './modals'; -export * from './settings-users'; -export * from './settings-log-streaming'; -export * from './sidebar'; -export * from './ndv'; -export * from './workflow-executions-tab'; -export * from './signin'; -export * from './workerView'; -export * from './settings-public-api'; diff --git a/cypress/pages/mfa-login.ts b/cypress/pages/mfa-login.ts deleted file mode 100644 index 884be7d75d7..00000000000 --- a/cypress/pages/mfa-login.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { BasePage } from './base'; -import { SigninPage } from './signin'; -import { WorkflowsPage } from './workflows'; -import { N8N_AUTH_COOKIE } from '../constants'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class MfaLoginPage extends BasePage { - url = '/mfa'; - - getters = { - form: () => cy.getByTestId('mfa-login-form'), - mfaCode: () => cy.getByTestId('mfaCode'), - mfaRecoveryCode: () => cy.getByTestId('mfaRecoveryCode'), - enterRecoveryCodeButton: () => cy.getByTestId('mfa-enter-recovery-code-button'), - }; - - actions = { - loginWithMfaCode: (email: string, password: string, mfaCode: string) => { - const signinPage = new SigninPage(); - const workflowsPage = new WorkflowsPage(); - - cy.session( - [mfaCode], - () => { - cy.visit(signinPage.url); - - signinPage.getters.form().within(() => { - signinPage.getters.email().type(email); - signinPage.getters.password().type(password); - signinPage.getters.submit().click(); - }); - - this.getters.form().within(() => { - this.getters.mfaCode().type(mfaCode); - }); - - // we should be redirected to /workflows - cy.url().should('include', workflowsPage.url); - }, - { - validate() { - cy.getCookie(N8N_AUTH_COOKIE).should('exist'); - }, - }, - ); - }, - loginWithMfaRecoveryCode: (email: string, password: string, mfaRecoveryCode: string) => { - const signinPage = new SigninPage(); - const workflowsPage = new WorkflowsPage(); - - cy.session( - [mfaRecoveryCode], - () => { - cy.visit(signinPage.url); - - signinPage.getters.form().within(() => { - signinPage.getters.email().type(email); - signinPage.getters.password().type(password); - signinPage.getters.submit().click(); - }); - - this.getters.enterRecoveryCodeButton().click(); - - this.getters.form().within(() => { - this.getters.mfaRecoveryCode().type(mfaRecoveryCode); - }); - - // we should be redirected to /workflows - cy.url().should('include', workflowsPage.url); - }, - { - validate() { - cy.getCookie(N8N_AUTH_COOKIE).should('exist'); - }, - }, - ); - }, - }; -} diff --git a/cypress/pages/modals/change-password-modal.ts b/cypress/pages/modals/change-password-modal.ts deleted file mode 100644 index 28c4d01d864..00000000000 --- a/cypress/pages/modals/change-password-modal.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BasePage } from './../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class ChangePasswordModal extends BasePage { - getters = { - modalContainer: () => cy.getByTestId('changePassword-modal').last(), - currentPasswordInput: () => cy.getByTestId('currentPassword').find('input').first(), - newPasswordInputContainer: () => cy.getByTestId('password'), - newPasswordInput: () => cy.getByTestId('password').find('input').first(), - repeatPasswordInput: () => cy.getByTestId('password2').find('input').first(), - changePasswordButton: () => cy.getByTestId('change-password-button'), - }; -} diff --git a/cypress/pages/modals/credentials-modal.ts b/cypress/pages/modals/credentials-modal.ts deleted file mode 100644 index 94b7af799e5..00000000000 --- a/cypress/pages/modals/credentials-modal.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { getCredentialSaveButton, saveCredential } from '../../composables/modals/credential-modal'; -import { getVisibleSelect } from '../../utils'; -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class CredentialsModal extends BasePage { - getters = { - newCredentialModal: () => cy.getByTestId('selectCredential-modal', { timeout: 5000 }), - editCredentialModal: () => cy.getByTestId('editCredential-modal', { timeout: 5000 }), - newCredentialTypeSelect: () => cy.getByTestId('new-credential-type-select'), - newCredentialTypeOption: (credentialType: string) => - cy.getByTestId('new-credential-type-select-option').contains(credentialType), - newCredentialTypeButton: () => cy.getByTestId('new-credential-type-button'), - connectionParameter: (fieldName: string) => - this.getters.credentialInputs().find(`:contains('${fieldName}') .n8n-input input`), - name: () => cy.getByTestId('credential-name'), - namePreview: () => - cy.getByTestId('credential-name').find('span[data-test-id=inline-edit-preview]'), - nameInput: () => cy.getByTestId('credential-name').find('input'), - deleteButton: () => cy.getByTestId('credential-delete-button'), - closeButton: () => this.getters.editCredentialModal().find('.el-dialog__close').first(), - oauthConnectButton: () => cy.getByTestId('oauth-connect-button'), - oauthConnectSuccessBanner: () => cy.getByTestId('oauth-connect-success-banner'), - credentialsEditModal: () => cy.getByTestId('credential-edit-dialog'), - credentialsAuthTypeSelector: () => cy.getByTestId('node-auth-type-selector'), - credentialAuthTypeRadioButtons: () => - this.getters.credentialsAuthTypeSelector().find('label.el-radio'), - credentialInputs: () => cy.getByTestId('credential-connection-parameter'), - menuItem: (name: string) => cy.getByTestId('menu-item').contains(name), - usersSelect: () => cy.getByTestId('project-sharing-select').filter(':visible'), - testSuccessTag: () => cy.getByTestId('credentials-config-container-test-success'), - }; - - actions = { - addUser: (email: string) => { - this.getters.usersSelect().click(); - getVisibleSelect().contains(email.toLowerCase()).click(); - }, - setName: (name: string) => { - this.getters.name().getByTestId('inline-edit-preview').click(); - this.getters.nameInput().clear().type(name); - }, - save: (test = false) => { - cy.intercept('POST', '/rest/credentials').as('saveCredential'); - saveCredential(); - - cy.wait('@saveCredential'); - if (test) cy.wait('@testCredential'); - getCredentialSaveButton().should('contain.text', 'Saved'); - }, - saveSharing: () => { - cy.intercept('PUT', '/rest/credentials/*/share').as('shareCredential'); - saveCredential(); - cy.wait('@shareCredential'); - getCredentialSaveButton().should('contain.text', 'Saved'); - }, - close: () => { - this.getters.closeButton().click(); - }, - fillCredentialsForm: (closeModal = true) => { - this.getters.credentialsEditModal().should('be.visible'); - this.getters.credentialInputs().should('have.length.greaterThan', 0); - this.getters - .credentialInputs() - .find('input[type=text], input[type=password]') - .filter(':not([readonly])') - .each(($el) => { - cy.wrap($el).type('test'); - }) - // wait for text input debounce - .wait(300); - saveCredential(); - if (closeModal) { - this.getters.closeButton().click(); - } - }, - fillField: (fieldName: string, value: string) => { - this.getters - .credentialInputs() - .getByTestId(`parameter-input-${fieldName}`) - .find('input') - .type(value); - }, - createNewCredential: (type: string, closeModal = true) => { - this.getters.newCredentialModal().should('be.visible'); - this.getters.newCredentialTypeSelect().should('be.visible'); - this.getters.newCredentialTypeOption(type).click(); - this.getters.newCredentialTypeButton().click(); - this.actions.fillCredentialsForm(closeModal); - }, - renameCredential: (newName: string) => { - this.getters.namePreview().click(); - this.getters.nameInput().type(newName); - this.getters.nameInput().type('{enter}'); - }, - changeTab: (tabName: 'Sharing') => { - this.getters.menuItem(tabName).click(); - }, - }; -} diff --git a/cypress/pages/modals/index.ts b/cypress/pages/modals/index.ts deleted file mode 100644 index 3d1981d027a..00000000000 --- a/cypress/pages/modals/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './credentials-modal'; -export * from './message-box'; -export * from './workflow-sharing-modal'; diff --git a/cypress/pages/modals/message-box.ts b/cypress/pages/modals/message-box.ts deleted file mode 100644 index 42f83d9a15c..00000000000 --- a/cypress/pages/modals/message-box.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class MessageBox extends BasePage { - getters = { - modal: () => cy.get('.el-message-box', { withinSubject: null }), - header: () => this.getters.modal().find('.el-message-box__title'), - content: () => this.getters.modal().find('.el-message-box__content'), - confirm: () => this.getters.modal().find('.btn--confirm').first(), - cancel: () => this.getters.modal().find('.btn--cancel').first(), - }; - - actions = { - confirm: () => { - this.getters.confirm().click({ force: true }); - }, - cancel: () => { - this.getters.cancel().click({ force: true }); - }, - }; -} diff --git a/cypress/pages/modals/mfa-setup-modal.ts b/cypress/pages/modals/mfa-setup-modal.ts deleted file mode 100644 index baa37f5f3a2..00000000000 --- a/cypress/pages/modals/mfa-setup-modal.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { BasePage } from './../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class MfaSetupModal extends BasePage { - getters = { - modalContainer: () => cy.getByTestId('changePassword-modal').last(), - tokenInput: () => cy.getByTestId('mfa-token-input'), - copySecretToClipboardButton: () => cy.getByTestId('mfa-secret-button'), - downloadRecoveryCodesButton: () => cy.getByTestId('mfa-recovery-codes-button'), - saveButton: () => cy.getByTestId('mfa-save-button'), - }; -} diff --git a/cypress/pages/modals/workflow-sharing-modal.ts b/cypress/pages/modals/workflow-sharing-modal.ts deleted file mode 100644 index 176cd84a7b8..00000000000 --- a/cypress/pages/modals/workflow-sharing-modal.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class WorkflowSharingModal extends BasePage { - getters = { - modal: () => cy.getByTestId('workflowShare-modal', { timeout: 5000 }), - usersSelect: () => cy.getByTestId('project-sharing-select'), - saveButton: () => cy.getByTestId('workflow-sharing-modal-save-button'), - closeButton: () => this.getters.modal().find('.el-dialog__close').first(), - }; - - actions = { - addUser: (email: string) => { - this.getters.usersSelect().click(); - this.getters - .usersSelect() - .get('.el-select-dropdown__item') - .contains(email.toLowerCase()) - .click(); - }, - save: () => { - this.getters.saveButton().click(); - }, - closeModal: () => { - this.getters.closeButton().click(); - }, - }; -} diff --git a/cypress/pages/ndv.ts b/cypress/pages/ndv.ts deleted file mode 100644 index caa2ead7374..00000000000 --- a/cypress/pages/ndv.ts +++ /dev/null @@ -1,360 +0,0 @@ -import { BasePage } from './base'; -import { getVisiblePopper, getVisibleSelect } from '../utils'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class NDV extends BasePage { - getters = { - container: () => cy.getByTestId('ndv'), - backToCanvas: () => cy.getByTestId('back-to-canvas'), - copyInput: () => cy.getByTestId('copy-input'), - credentialInput: (eq = 0) => cy.getByTestId('node-credentials-select').eq(eq), - nodeExecuteButton: () => cy.getByTestId('node-execute-button'), - triggerPanelExecuteButton: () => cy.getByTestId('trigger-execute-button'), - inputSelect: () => cy.getByTestId('ndv-input-select'), - inputOption: () => cy.getByTestId('ndv-input-option'), - inputPanel: () => cy.getByTestId('ndv-input-panel'), - outputPanel: () => cy.getByTestId('output-panel'), - executingLoader: () => cy.getByTestId('ndv-executing'), - inputDataContainer: () => this.getters.inputPanel().findChildByTestId('ndv-data-container'), - inputDisplayMode: () => - this.getters.inputPanel().findChildByTestId('ndv-run-data-display-mode').first(), - outputDataContainer: () => this.getters.outputPanel().findChildByTestId('ndv-data-container'), - outputDisplayMode: () => - this.getters.outputPanel().findChildByTestId('ndv-run-data-display-mode').first(), - pinDataButton: () => this.getters.outputPanel().findChildByTestId('ndv-pin-data'), - unpinDataLink: () => this.getters.outputPanel().findChildByTestId('ndv-unpin-data'), - editPinnedDataButton: () => cy.getByTestId('ndv-edit-pinned-data'), - pinnedDataEditor: () => this.getters.outputPanel().find('.cm-editor .cm-scroller .cm-content'), - runDataPaneHeader: () => cy.getByTestId('run-data-pane-header'), - aiOutputModeToggle: () => cy.getByTestId('ai-output-mode-select'), - nodeOutputHint: () => cy.getByTestId('ndv-output-run-node-hint'), - savePinnedDataButton: () => - this.getters.runDataPaneHeader().find('button').filter(':visible').contains('Save'), - inputLabel: () => cy.getByTestId('input-label'), - outputTableRows: () => this.getters.outputDataContainer().find('table tr'), - outputTableHeaders: () => this.getters.outputDataContainer().find('table thead th'), - outputTableHeaderByText: (text: string) => this.getters.outputTableHeaders().contains(text), - outputTableRow: (row: number) => this.getters.outputTableRows().eq(row), - outputTbodyCell: (row: number, col: number) => - this.getters.outputTableRow(row).find('td').eq(col), - inputTableRows: () => this.getters.inputDataContainer().find('table tr'), - inputTableHeaders: () => this.getters.inputDataContainer().find('table thead th'), - inputTableRow: (row: number) => this.getters.inputTableRows().eq(row), - inputTbodyCell: (row: number, col: number) => - this.getters.inputTableRow(row).find('td').eq(col), - inlineExpressionEditorInput: () => cy.getByTestId('inline-expression-editor-input'), - inlineExpressionEditorOutput: () => cy.getByTestId('inline-expression-editor-output'), - inlineExpressionEditorItemInput: () => - cy.getByTestId('inline-expression-editor-item-input').find('input'), - inlineExpressionEditorItemPrevButton: () => - cy.getByTestId('inline-expression-editor-item-prev'), - inlineExpressionEditorItemNextButton: () => - cy.getByTestId('inline-expression-editor-item-next'), - nodeParameters: () => cy.getByTestId('node-parameters'), - parameterInput: (parameterName: string) => cy.getByTestId(`parameter-input-${parameterName}`), - parameterInputIssues: (parameterName: string) => - cy - .getByTestId(`parameter-input-${parameterName}`) - .should('have.length', 1) - .findChildByTestId('parameter-issues'), - parameterExpressionPreview: (parameterName: string) => - this.getters - .nodeParameters() - .find(`[data-test-id="parameter-expression-preview-${parameterName}"]`), - nodeNameContainer: () => cy.getByTestId('node-title-container'), - nodeRenameInput: () => cy.getByTestId('node-rename-input'), - executePrevious: () => cy.getByTestId('execute-previous-node'), - httpRequestNotice: () => cy.getByTestId('node-parameters-http-notice'), - nodeCredentialsLabel: () => cy.getByTestId('credentials-label'), - nthParam: (n: number) => cy.getByTestId('node-parameters').find('.parameter-item').eq(n), - inputRunSelector: () => this.getters.inputPanel().findChildByTestId('run-selector'), - inputLinkRun: () => this.getters.inputPanel().findChildByTestId('link-run'), - outputRunSelector: () => this.getters.outputPanel().findChildByTestId('run-selector'), - outputLinkRun: () => this.getters.outputPanel().findChildByTestId('link-run'), - outputHoveringItem: () => this.getters.outputPanel().findChildByTestId('hovering-item'), - inputHoveringItem: () => this.getters.inputPanel().findChildByTestId('hovering-item'), - outputBranches: () => this.getters.outputPanel().findChildByTestId('branches'), - inputBranches: () => this.getters.inputPanel().findChildByTestId('branches'), - resourceLocator: (paramName: string) => cy.getByTestId(`resource-locator-${paramName}`), - resourceLocatorInput: (paramName: string) => - this.getters.resourceLocator(paramName).find('[data-test-id="rlc-input-container"]'), - resourceLocatorDropdown: (paramName: string) => - this.getters.resourceLocator(paramName).find('[data-test-id="resource-locator-dropdown"]'), - resourceLocatorErrorMessage: () => cy.getByTestId('rlc-error-container'), - resourceLocatorAddCredentials: () => this.getters.resourceLocatorErrorMessage().find('a'), - resourceLocatorModeSelector: (paramName: string) => - this.getters.resourceLocator(paramName).find('[data-test-id="rlc-mode-selector"]'), - resourceLocatorSearch: (paramName: string) => - this.getters - .resourceLocator(paramName) - .find('[aria-describedby]') - .then(($el) => cy.get(`#${$el.attr('aria-describedby')}`).findChildByTestId('rlc-search')), - resourceMapperFieldsContainer: () => cy.getByTestId('mapping-fields-container'), - resourceMapperSelectColumn: () => cy.getByTestId('matching-column-select'), - resourceMapperRemoveFieldButton: (fieldName: string) => - cy.getByTestId(`remove-field-button-${fieldName}`), - resourceMapperColumnsOptionsButton: () => - cy.getByTestId('columns-parameter-input-options-container'), - resourceMapperRemoveAllFieldsOption: () => cy.getByTestId('action-removeAllFields'), - sqlEditorContainer: () => cy.getByTestId('sql-editor-container'), - htmlEditorContainer: () => cy.getByTestId('html-editor-container'), - filterComponent: (paramName: string) => cy.getByTestId(`filter-${paramName}`), - filterCombinator: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-combinator-select').eq(index), - filterConditions: (paramName: string) => - this.getters.filterComponent(paramName).getByTestId('filter-condition'), - filterCondition: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-condition').eq(index), - filterConditionLeft: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-condition-left').eq(index), - filterConditionRight: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-condition-right').eq(index), - filterConditionOperator: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-operator-select').eq(index), - filterConditionRemove: (paramName: string, index = 0) => - this.getters.filterComponent(paramName).getByTestId('filter-remove-condition').eq(index), - filterConditionAdd: (paramName: string) => - this.getters.filterComponent(paramName).getByTestId('filter-add-condition'), - assignmentCollection: (paramName: string) => - cy.getByTestId(`assignment-collection-${paramName}`), - assignmentCollectionAdd: (paramName: string) => - this.getters.assignmentCollection(paramName).getByTestId('assignment-collection-drop-area'), - assignment: (paramName: string, index = 0) => - this.getters.assignmentCollection(paramName).getByTestId('assignment').eq(index), - assignmentRemove: (paramName: string, index = 0) => - this.getters.assignment(paramName, index).getByTestId('assignment-remove'), - assignmentName: (paramName: string, index = 0) => - this.getters.assignment(paramName, index).getByTestId('assignment-name'), - assignmentValue: (paramName: string, index = 0) => - this.getters.assignment(paramName, index).getByTestId('assignment-value'), - assignmentType: (paramName: string, index = 0) => - this.getters.assignment(paramName, index).getByTestId('assignment-type-select'), - searchInput: () => cy.getByTestId('ndv-search'), - pagination: () => cy.getByTestId('ndv-data-pagination'), - nodeVersion: () => cy.getByTestId('node-version'), - nodeSettingsTab: () => cy.getByTestId('tab-settings'), - codeEditorFullscreenButton: () => cy.getByTestId('code-editor-fullscreen-button'), - codeEditorDialog: () => cy.getByTestId('code-editor-fullscreen'), - codeEditorFullscreen: () => this.getters.codeEditorDialog().find('.cm-content'), - nodeRunTooltipIndicator: () => cy.getByTestId('node-run-info'), - nodeRunSuccessIndicator: () => cy.getByTestId('node-run-status-success'), - nodeRunErrorIndicator: () => cy.getByTestId('node-run-status-danger'), - nodeRunErrorMessage: () => cy.getByTestId('node-error-message'), - nodeRunErrorDescription: () => cy.getByTestId('node-error-description'), - fixedCollectionParameter: (paramName: string) => - cy.getByTestId(`fixed-collection-${paramName}`), - schemaViewNode: () => cy.getByTestId('run-data-schema-header'), - expressionExpanders: () => cy.getByTestId('expander'), - expressionModalOutput: () => cy.getByTestId('expression-modal-output'), - floatingNodes: () => cy.getByTestId('floating-node'), - floatingNodeByName: (name: string) => - cy.getByTestId('floating-node').filter(`[data-node-name="${name}"]`), - }; - - actions = { - pinData: () => { - this.getters.pinDataButton().click({ force: true }); - }, - unPinData: () => { - this.getters.unpinDataLink().click({ force: true }); - }, - editPinnedData: () => { - this.getters.editPinnedDataButton().click(); - }, - savePinnedData: () => { - this.getters.savePinnedDataButton().click(); - }, - execute: () => { - this.getters.nodeExecuteButton().first().click(); - }, - close: () => { - this.getters.backToCanvas().click({ force: true }); - }, - openInlineExpressionEditor: () => { - cy.contains('Expression').invoke('show').click(); - this.getters.inlineExpressionEditorInput().click(); - }, - setPinnedData: (data: object | string) => { - const pinnedData = typeof data === 'string' ? data : JSON.stringify(data); - this.getters.editPinnedDataButton().click(); - - this.getters.pinnedDataEditor().click(); - this.getters - .pinnedDataEditor() - .type(`{selectall}{backspace}${pinnedData.replace(new RegExp('{', 'g'), '{{}')}`); - - this.actions.savePinnedData(); - }, - pastePinnedData: (data: object) => { - this.getters.editPinnedDataButton().click(); - - this.getters.pinnedDataEditor().click(); - this.getters.pinnedDataEditor().invoke('text', '').paste(JSON.stringify(data)); - - this.actions.savePinnedData(); - }, - clearParameterInput: (parameterName: string) => { - this.getters.parameterInput(parameterName).type('{selectall}{backspace}'); - }, - typeIntoParameterInput: ( - parameterName: string, - content: string, - opts?: Partial, - ) => { - this.getters.parameterInput(parameterName).type(content, opts); - }, - selectOptionInParameterDropdown: (_: string, content: string) => { - getVisibleSelect().find('.option-headline').contains(content).click(); - }, - rename: (newName: string) => { - this.getters.nodeNameContainer().click(); - this.getters.nodeRenameInput().should('be.visible').type('{selectall}').type(newName); - cy.get('body').type('{enter}'); - }, - executePrevious: () => { - this.getters.executePrevious().click({ force: true }); - }, - mapDataFromHeader: (col: number, parameterName: string) => { - const draggable = `[data-test-id="ndv-input-panel"] [data-test-id="ndv-data-container"] table th:nth-child(${col})`; - const droppable = `[data-test-id="parameter-input-${parameterName}"]`; - cy.draganddrop(draggable, droppable); - }, - mapToParameter: (parameterName: string, position?: 'top' | 'center' | 'bottom') => { - const droppable = `[data-test-id="parameter-input-${parameterName}"]`; - cy.draganddrop('', droppable, { position }); - }, - switchInputMode: (type: 'Schema' | 'Table' | 'JSON' | 'Binary') => { - this.getters.inputDisplayMode().find('label').contains(type).click({ force: true }); - }, - switchOutputMode: (type: 'Schema' | 'Table' | 'JSON' | 'Binary') => { - this.getters.outputDisplayMode().find('label').contains(type).click({ force: true }); - }, - selectInputNode: (nodeName: string) => { - this.getters.inputSelect().find('.el-select').click(); - this.getters.inputOption().contains(nodeName).click(); - }, - addDefaultPinnedData: () => { - this.actions.editPinnedData(); - this.actions.savePinnedData(); - }, - changeInputRunSelector: (runName: string) => { - this.getters.inputRunSelector().click(); - getVisibleSelect().find('.el-select-dropdown__item').contains(runName).click(); - }, - changeOutputRunSelector: (runName: string) => { - this.getters.outputRunSelector().click(); - getVisibleSelect().find('.el-select-dropdown__item').contains(runName).click(); - }, - toggleOutputRunLinking: () => { - this.getters.outputLinkRun().click(); - }, - toggleInputRunLinking: () => { - this.getters.inputLinkRun().click(); - }, - switchOutputBranch: (name: string) => { - this.getters.outputBranches().get('span').contains(name).click(); - }, - switchInputBranch: (name: string) => { - this.getters.inputBranches().get('span').contains(name).click(); - }, - setRLCValue: (paramName: string, value: string) => { - this.getters.resourceLocatorModeSelector(paramName).click(); - getVisibleSelect().find('li').last().click(); - this.getters.resourceLocatorInput(paramName).type(value); - }, - validateExpressionPreview: (paramName: string, value: string) => { - this.getters - .parameterExpressionPreview(paramName) - .find('span') - .should('include.html', asEncodedHTML(value)); - }, - refreshResourceMapperColumns: () => { - this.getters.resourceMapperSelectColumn().realHover(); - this.getters - .resourceMapperSelectColumn() - .findChildByTestId('action-toggle') - .should('have.length', 1) - .click(); - - getVisiblePopper().find('li').last().click(); - }, - addFilterCondition: (paramName: string) => { - this.getters.filterConditionAdd(paramName).click({ force: true }); - }, - removeFilterCondition: (paramName: string, index: number) => { - this.getters.filterConditionRemove(paramName, index).click(); - }, - removeAssignment: (paramName: string, index: number) => { - this.getters.assignmentRemove(paramName, index).click(); - }, - setInvalidExpression: ({ - fieldName, - invalidExpression, - }: { - fieldName: string; - invalidExpression?: string; - }) => { - this.actions.typeIntoParameterInput(fieldName, '='); - this.actions.typeIntoParameterInput(fieldName, invalidExpression ?? "{{ $('unknown')", { - parseSpecialCharSequences: false, - }); - this.actions.validateExpressionPreview(fieldName, "node doesn't exist"); - }, - openSettings: () => { - this.getters.nodeSettingsTab().click(); - }, - - openCodeEditorFullscreen: () => { - this.getters.codeEditorFullscreenButton().click({ force: true }); - }, - changeNodeOperation: (operation: string) => { - this.getters.parameterInput('operation').click(); - cy.get('.el-select-dropdown__item') - .contains(new RegExp(`^${operation}$`)) - .click({ force: true }); - this.getters.parameterInput('operation').find('input').should('have.value', operation); - }, - expressionSelectItem: (index: number) => { - this.getters.inlineExpressionEditorItemInput().type(`{selectall}${index}`); - }, - expressionSelectNextItem: () => { - this.getters.inlineExpressionEditorItemNextButton().click(); - }, - expressionSelectPrevItem: () => { - this.getters.inlineExpressionEditorItemPrevButton().click(); - }, - addItemToFixedCollection: (paramName: string) => { - this.getters.fixedCollectionParameter(paramName).getByTestId('fixed-collection-add').click(); - }, - typeIntoFixedCollectionItem: (fixedCollectionName: string, index: number, content: string) => { - this.getters.fixedCollectionParameter(fixedCollectionName).within(() => { - cy.getByTestId('parameter-input').eq(index).type(content); - }); - }, - dragMainPanelToLeft: () => { - cy.drag('[data-test-id=panel-drag-button]', [-1000, 0], { moveTwice: true }); - }, - dragMainPanelToRight: () => { - cy.drag('[data-test-id=panel-drag-button]', [1000, 0], { moveTwice: true }); - }, - clickFloatingNode: (name: string) => { - this.getters.floatingNodeByName(name).realHover().click({ force: true }); - }, - }; -} - -function asEncodedHTML(str: string): string { - return String(str) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/ /g, ' '); -} diff --git a/cypress/pages/notifications.ts b/cypress/pages/notifications.ts deleted file mode 100644 index 3f5c6818775..00000000000 --- a/cypress/pages/notifications.ts +++ /dev/null @@ -1,42 +0,0 @@ -type CyGetOptions = Parameters<(typeof cy)['get']>[1]; - -/** - * Getters - */ -export const successToast = () => cy.get('.el-notification:has(.el-notification--success)'); -export const warningToast = () => cy.get('.el-notification:has(.el-notification--warning)'); -export const errorToast = (options?: CyGetOptions) => - cy.get('.el-notification:has(.el-notification--error)', options); -export const infoToast = () => cy.get('.el-notification:has(.el-notification--info)'); - -/** - * Actions - */ -export const clearNotifications = () => { - const notificationSelector = '.el-notification:has(.el-notification--success)'; - cy.get('body').then(($body) => { - if ($body.find(notificationSelector).length) { - cy.get(notificationSelector).each(($el) => { - if ($el.find('.el-notification__closeBtn').length) { - cy.wrap($el).find('.el-notification__closeBtn').click({ force: true }); - } - }); - } - }); -}; - -// Clears notifications without asserting their existence -export const clearAnyNotifications = () => { - const notificationSelector = '.el-notification:has(.el-notification--success)'; - cy.get('body') - .should('have.length.gte', 0) - .then(($body) => { - if ($body.find(notificationSelector).length) { - cy.get(notificationSelector).each(($el) => { - if ($el.find('.el-notification__closeBtn').length) { - cy.wrap($el).find('.el-notification__closeBtn').click({ force: true }); - } - }); - } - }); -}; diff --git a/cypress/pages/npsSurvey.ts b/cypress/pages/npsSurvey.ts deleted file mode 100644 index 295661b32ca..00000000000 --- a/cypress/pages/npsSurvey.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Getters - */ - -export const getNpsSurvey = () => cy.getByTestId('nps-survey-modal'); - -export const getNpsSurveyRatings = () => cy.getByTestId('nps-survey-ratings'); - -export const getNpsSurveyFeedback = () => cy.getByTestId('nps-survey-feedback'); -export const getNpsSurveySubmit = () => cy.getByTestId('nps-survey-feedback-button'); - -export const getNpsSurveyClose = () => - cy.getByTestId('nps-survey-modal').find('button.el-drawer__close-btn'); - -/** - * Actions - */ diff --git a/cypress/pages/settings-community-nodes.ts b/cypress/pages/settings-community-nodes.ts deleted file mode 100644 index fade3e6b44a..00000000000 --- a/cypress/pages/settings-community-nodes.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const getCommunityCards = () => { - return cy.getByTestId('community-package-card'); -}; - -export const visitCommunityNodesSettings = () => { - cy.visit('/settings/community-nodes'); -}; - -export const installFirstCommunityNode = (nodeName: string) => { - cy.getByTestId('action-box').find('button').click(); - cy.getByTestId('communityPackageInstall-modal').find('input').eq(0).type(nodeName); - cy.getByTestId('user-agreement-checkbox').click(); - cy.getByTestId('install-community-package-button').click(); -}; - -export const confirmCommunityNodeUpdate = () => { - cy.getByTestId('communityPackageManageConfirm-modal') - .contains('button', 'Confirm update') - .click(); -}; - -export const confirmCommunityNodeUninstall = () => { - cy.getByTestId('communityPackageManageConfirm-modal') - .contains('button', 'Confirm uninstall') - .click(); -}; diff --git a/cypress/pages/settings-log-streaming.ts b/cypress/pages/settings-log-streaming.ts deleted file mode 100644 index 959b18bce56..00000000000 --- a/cypress/pages/settings-log-streaming.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { BasePage } from './base'; -import { getVisibleSelect } from '../utils'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class SettingsLogStreamingPage extends BasePage { - url = '/settings/log-streaming'; - - getters = { - getActionBoxUnlicensed: () => cy.getByTestId('action-box-unlicensed'), - getActionBoxLicensed: () => cy.getByTestId('action-box-licensed'), - getDestinationModal: () => cy.getByTestId('destination-modal'), - getSelectDestinationType: () => cy.getByTestId('select-destination-type'), - getDestinationNameInput: () => cy.getByTestId('subtitle-showing-type'), - getSelectDestinationTypeItems: () => getVisibleSelect().find('.el-select-dropdown__item'), - getSelectDestinationButton: () => cy.getByTestId('select-destination-button'), - getContactUsButton: () => this.getters.getActionBoxUnlicensed().find('button'), - getAddFirstDestinationButton: () => this.getters.getActionBoxLicensed().find('button'), - getDestinationSaveButton: () => cy.getByTestId('destination-save-button').find('button'), - getDestinationDeleteButton: () => cy.getByTestId('destination-delete-button'), - getDestinationCards: () => cy.getByTestId('destination-card'), - }; - - actions = { - clickContactUs: () => this.getters.getContactUsButton().click(), - clickAddFirstDestination: () => this.getters.getAddFirstDestinationButton().click(), - clickSelectDestinationButton: () => this.getters.getSelectDestinationButton().click(), - }; -} diff --git a/cypress/pages/settings-personal.ts b/cypress/pages/settings-personal.ts deleted file mode 100644 index 681a89b4619..00000000000 --- a/cypress/pages/settings-personal.ts +++ /dev/null @@ -1,110 +0,0 @@ -import generateOTPToken from 'cypress-otp'; - -import { BasePage } from './base'; -import { ChangePasswordModal } from './modals/change-password-modal'; -import { MfaSetupModal } from './modals/mfa-setup-modal'; - -const changePasswordModal = new ChangePasswordModal(); -const mfaSetupModal = new MfaSetupModal(); - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class PersonalSettingsPage extends BasePage { - url = '/settings/personal'; - - secret = ''; - - getters = { - currentUserName: () => cy.getByTestId('current-user-name'), - firstNameInput: () => cy.getByTestId('firstName').find('input').first(), - lastNameInput: () => cy.getByTestId('lastName').find('input').first(), - emailInputContainer: () => cy.getByTestId('email'), - currentPasswordConfirmationInput: () => cy.getByTestId('currentPassword').find('input'), - emailInput: () => cy.getByTestId('email').find('input').first(), - changePasswordLink: () => cy.getByTestId('change-password-link').first(), - saveSettingsButton: () => cy.getByTestId('save-settings-button'), - enableMfaButton: () => cy.getByTestId('enable-mfa-button'), - disableMfaButton: () => cy.getByTestId('disable-mfa-button'), - mfaCodeOrMfaRecoveryCodeInput: () => cy.getByTestId('mfa-code-or-recovery-code-input'), - mfaSaveButton: () => cy.getByTestId('mfa-save-button'), - themeSelector: () => cy.getByTestId('theme-select'), - selectOptionsVisible: () => cy.get('.el-select-dropdown:visible .el-select-dropdown__item'), - }; - - actions = { - changeTheme: (theme: 'System default' | 'Dark' | 'Light') => { - this.getters.themeSelector().click(); - this.getters.selectOptionsVisible().should('have.length', 3); - this.getters.selectOptionsVisible().contains(theme).click(); - this.getters.saveSettingsButton().realClick(); - }, - loginAndVisit: (email: string, password: string) => { - cy.signin({ email, password }); - cy.visit(this.url); - }, - updateFirstAndLastName: (newFirstName: string, newLastName: string) => { - this.getters.firstNameInput().type('{selectall}').type(newFirstName); - this.getters.lastNameInput().type('{selectall}').type(newLastName); - this.getters.saveSettingsButton().realClick(); - }, - updatePassword: (oldPassword: string, newPassword: string) => { - changePasswordModal.getters.modalContainer().should('be.visible'); - changePasswordModal.getters.currentPasswordInput().type('{selectall}').type(oldPassword); - changePasswordModal.getters.newPasswordInput().type('{selectall}').type(newPassword); - changePasswordModal.getters.repeatPasswordInput().type('{selectall}').type(newPassword); - changePasswordModal.getters.changePasswordButton().click(); - }, - tryToSetWeakPassword: (oldPassword: string, newPassword: string) => { - this.actions.updatePassword(oldPassword, newPassword); - changePasswordModal.getters - .newPasswordInputContainer() - .find('div[class^="_errorInput"]') - .should('exist'); - }, - /** - * @param currentPassword only required if MFA is disabled - */ - updateEmail: (newEmail: string, currentPassword?: string) => { - this.getters.emailInput().type('{selectall}').type(newEmail).type('{enter}'); - if (currentPassword) { - this.getters.currentPasswordConfirmationInput().type(currentPassword).type('{enter}'); - } - }, - tryToSetInvalidEmail: (newEmail: string) => { - this.actions.updateEmail(newEmail); - this.getters.emailInputContainer().find('div[class^="_errorInput"]').should('exist'); - }, - loginWithNewData: (email: string, password: string) => { - cy.signout(); - this.actions.loginAndVisit(email, password); - cy.url().should('match', new RegExp(this.url)); - }, - enableMfa: () => { - cy.visit(this.url); - this.getters.enableMfaButton().click(); - cy.wait('@getMfaQrCode'); - mfaSetupModal.getters.copySecretToClipboardButton().should('be.visible'); - mfaSetupModal.getters.copySecretToClipboardButton().realClick(); - cy.readClipboard().then((secret) => { - const token = generateOTPToken(secret); - - mfaSetupModal.getters.tokenInput().type(token); - mfaSetupModal.getters.downloadRecoveryCodesButton().should('be.visible'); - mfaSetupModal.getters.downloadRecoveryCodesButton().click(); - mfaSetupModal.getters.saveButton().click(); - }); - }, - disableMfa: (mfaCodeOrRecoveryCode: string) => { - cy.visit(this.url); - this.getters.disableMfaButton().click(); - this.getters.mfaCodeOrMfaRecoveryCodeInput().type(mfaCodeOrRecoveryCode); - this.getters.mfaSaveButton().click(); - }, - }; -} diff --git a/cypress/pages/settings-public-api.ts b/cypress/pages/settings-public-api.ts deleted file mode 100644 index 1a7d6681367..00000000000 --- a/cypress/pages/settings-public-api.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const getPublicApiUpgradeCTA = () => cy.getByTestId('public-api-upgrade-cta'); - -export const visitPublicApiPage = () => { - cy.visit('/settings/api'); -}; diff --git a/cypress/pages/settings-users.ts b/cypress/pages/settings-users.ts deleted file mode 100644 index 449f5a5bd1f..00000000000 --- a/cypress/pages/settings-users.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { BasePage } from './base'; -import { MainSidebar } from './sidebar/main-sidebar'; -import { SettingsSidebar } from './sidebar/settings-sidebar'; -import { WorkflowPage } from './workflow'; -import { WorkflowsPage } from './workflows'; -import { expandSidebar } from '../composables/sidebar'; - -const workflowPage = new WorkflowPage(); -const workflowsPage = new WorkflowsPage(); -const mainSidebar = new MainSidebar(); -const settingsSidebar = new SettingsSidebar(); - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class SettingsUsersPage extends BasePage { - url = '/settings/users'; - - getters = { - setUpOwnerButton: () => cy.getByTestId('action-box').find('button').first(), - inviteButton: () => cy.getByTestId('settings-users-invite-button').last(), - inviteUsersModal: () => cy.getByTestId('inviteUser-modal').last(), - inviteUsersModalEmailsInput: () => cy.getByTestId('emails').find('input').first(), - userListItems: () => cy.get('[data-test-id="settings-users-table"] tbody tr'), - userItem: (email: string) => this.getters.userListItems().contains(email).closest('tr'), - userActionsToggle: (email: string) => - this.getters.userItem(email).find('[data-test-id="action-toggle"]'), - userRoleSelect: (email: string) => - this.getters.userItem(email).find('[data-test-id="user-role-dropdown"]'), - deleteUserAction: () => - cy.getByTestId('action-toggle-dropdown').find('li:contains("Delete"):visible'), - confirmDeleteModal: () => cy.getByTestId('deleteUser-modal').last(), - transferDataRadioButton: () => - this.getters.confirmDeleteModal().find('.el-radio .el-radio__input').first(), - deleteDataRadioButton: () => - this.getters.confirmDeleteModal().find('.el-radio .el-radio__input').last(), - userSelectDropDown: () => this.getters.confirmDeleteModal().find('.n8n-select'), - userSelectOptions: () => cy.get('.el-select-dropdown:visible .el-select-dropdown__item'), - deleteUserButton: () => this.getters.confirmDeleteModal().find('button:contains("Delete")'), - deleteDataInput: () => cy.getByTestId('delete-data-input').find('input').first(), - }; - - actions = { - goToOwnerSetup: () => this.getters.setUpOwnerButton().click(), - loginAndVisit: (email: string, password: string, isOwner: boolean) => { - cy.signin({ email, password }); - workflowPage.actions.visit(); - expandSidebar(); - mainSidebar.actions.goToSettings(); - if (isOwner) { - settingsSidebar.getters.users().click(); - cy.url().should('match', new RegExp(this.url)); - } else { - settingsSidebar.getters.users().should('not.exist'); - // Should be redirected to workflows page if trying to access UM url - cy.visit('/settings/users'); - cy.url().should('match', new RegExp(workflowsPage.url)); - } - }, - opedDeleteDialog: (email: string) => { - this.getters.userActionsToggle(email).should('be.visible').click(); - this.getters.deleteUserAction().click(); - this.getters.confirmDeleteModal().should('be.visible'); - }, - }; -} diff --git a/cypress/pages/sidebar/index.ts b/cypress/pages/sidebar/index.ts deleted file mode 100644 index 3bfa6a68015..00000000000 --- a/cypress/pages/sidebar/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './main-sidebar'; -export * from './settings-sidebar'; diff --git a/cypress/pages/sidebar/main-sidebar.ts b/cypress/pages/sidebar/main-sidebar.ts deleted file mode 100644 index 868a15693bd..00000000000 --- a/cypress/pages/sidebar/main-sidebar.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { expandSidebar } from '../../composables/sidebar'; -import { BasePage } from '../base'; -import { WorkflowsPage } from '../workflows'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class MainSidebar extends BasePage { - getters = { - menuItem: (id: string) => cy.getByTestId('menu-item').get('#' + id), - settings: () => this.getters.menuItem('settings'), - settingsBack: () => cy.getByTestId('settings-back'), - help: () => cy.getByTestId('help'), - templates: () => cy.getByTestId('templates'), - workflows: () => this.getters.menuItem('workflows'), - credentials: () => this.getters.menuItem('credentials'), - executions: () => this.getters.menuItem('executions'), - adminPanel: () => this.getters.menuItem('cloud-admin'), - whatsNew: () => this.getters.menuItem('whats-new'), - userMenu: () => cy.getByTestId('user-menu'), - logo: () => cy.getByTestId('n8n-logo'), - }; - - actions = { - goToSettings: () => { - this.getters.userMenu().click(); - cy.getByTestId('user-menu-item-settings').should('be.visible').click(); - }, - goToCredentials: () => { - this.getters.credentials().should('be.visible'); - cy.get('[data-old-overflow]').should('not.exist'); - this.getters.credentials().click(); - }, - openUserMenu: () => { - this.getters.userMenu().click(); - }, - closeSettings: () => { - this.getters.settingsBack().click(); - }, - signout: () => { - const workflowsPage = new WorkflowsPage(); - cy.visit(workflowsPage.url); - expandSidebar(); - this.actions.openUserMenu(); - cy.getByTestId('user-menu-item-logout').click(); - cy.wrap(Cypress.session.clearAllSavedSessions()); - }, - }; -} diff --git a/cypress/pages/sidebar/settings-sidebar.ts b/cypress/pages/sidebar/settings-sidebar.ts deleted file mode 100644 index 17bf5d10b7b..00000000000 --- a/cypress/pages/sidebar/settings-sidebar.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BasePage } from '../base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class SettingsSidebar extends BasePage { - getters = { - menuItem: (id: string) => cy.getByTestId('menu-item').get('#' + id), - users: () => this.getters.menuItem('settings-users'), - back: () => cy.getByTestId('settings-back'), - }; - - actions = { - goToUsers: () => { - this.getters.users().should('be.visible'); - // We must wait before ElementUI menu is done with its animations - cy.get('[data-old-overflow]').should('not.exist'); - this.getters.users().click(); - }, - back: () => this.getters.back().click(), - }; -} diff --git a/cypress/pages/signin.ts b/cypress/pages/signin.ts deleted file mode 100644 index 248ba49096e..00000000000 --- a/cypress/pages/signin.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { BasePage } from './base'; -import { WorkflowsPage } from './workflows'; -import { N8N_AUTH_COOKIE } from '../constants'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class SigninPage extends BasePage { - url = '/signin'; - - getters = { - form: () => cy.getByTestId('auth-form'), - email: () => cy.getByTestId('emailOrLdapLoginId'), - password: () => cy.getByTestId('password'), - submit: () => cy.get('button'), - }; - - actions = { - loginWithEmailAndPassword: (email: string, password: string) => { - const signinPage = new SigninPage(); - const workflowsPage = new WorkflowsPage(); - - cy.session( - [email, password], - () => { - cy.visit(signinPage.url); - - this.getters.form().within(() => { - this.getters.email().type(email); - this.getters.password().type(password); - this.getters.submit().click(); - }); - - // we should be redirected to /workflows - cy.url().should('include', workflowsPage.url); - }, - { - validate() { - cy.getCookie(N8N_AUTH_COOKIE).should('exist'); - }, - }, - ); - }, - }; -} diff --git a/cypress/pages/template-collection.ts b/cypress/pages/template-collection.ts deleted file mode 100644 index 9f3457eae97..00000000000 --- a/cypress/pages/template-collection.ts +++ /dev/null @@ -1,33 +0,0 @@ -export function visitTemplateCollectionPage(withFixture: Fixture) { - cy.intercept( - 'GET', - `https://api.n8n.io/api/templates/collections/${testData.ecommerceStarterPack.id}`, - { - fixture: withFixture.fixture, - }, - ).as('getTemplateCollection'); - - cy.visit(`/collections/${withFixture.id}`); - - cy.wait('@getTemplateCollection'); -} - -export function clickUseWorkflowButtonByTitle(workflowTitle: string) { - cy.getByTestId('template-card') - .contains('[data-test-id=template-card]', workflowTitle) - .realHover({ position: 'center' }) - .findChildByTestId('use-workflow-button') - .click({ force: true }); -} - -export type Fixture = { - id: number; - fixture: string; -}; - -export const testData = { - ecommerceStarterPack: { - id: 1, - fixture: 'Ecommerce_starter_pack_template_collection.json', - }, -}; diff --git a/cypress/pages/template-credential-setup.ts b/cypress/pages/template-credential-setup.ts deleted file mode 100644 index 70542ac75e7..00000000000 --- a/cypress/pages/template-credential-setup.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { CredentialsModal, MessageBox } from './modals'; -import * as formStep from '../composables/setup-template-form-step'; - -const credentialsModal = new CredentialsModal(); -const messageBox = new MessageBox(); - -export const getters = { - continueButton: () => cy.getByTestId('continue-button'), - skipLink: () => cy.get('a:contains("Skip")'), - title: (title: string) => cy.get(`h1:contains(${title})`), - infoCallout: () => cy.getByTestId('info-callout'), - - namePreview: () => - cy.getByTestId('credential-name').find('span[data-test-id=inline-edit-preview]'), - nameInput: () => cy.getByTestId('credential-name').find('input'), -}; - -export const visitTemplateCredentialSetupPage = (templateId: number) => { - cy.visit(`templates/${templateId}/setup`); - - formStep.getFormStep().eq(0).should('be.visible'); -}; - -/** - * Fills in dummy credentials for the given app name. - */ -export const fillInDummyCredentialsForApp = (appName: string) => { - formStep.getCreateAppCredentialsButton(appName).click(); - credentialsModal.getters.namePreview().click(); - credentialsModal.getters.nameInput().type('test'); - credentialsModal.actions.save(false); - credentialsModal.actions.close(); -}; - -/** - * Fills in dummy credentials for the given app name. Assumes - * that a confirmation message box will be shown, which will be - * handled. - */ -export const fillInDummyCredentialsForAppWithConfirm = (appName: string) => { - fillInDummyCredentialsForApp(appName); - messageBox.actions.cancel(); -}; - -/** - * Finishes the credential setup by clicking the continue button. - */ -export const finishCredentialSetup = () => { - cy.intercept('POST', '/rest/workflows').as('createWorkflow'); - getters.continueButton().should('be.enabled'); - getters.continueButton().click(); - cy.wait('@createWorkflow'); -}; diff --git a/cypress/pages/templates.ts b/cypress/pages/templates.ts deleted file mode 100644 index 8d8fdc15c53..00000000000 --- a/cypress/pages/templates.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BasePage } from './base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class TemplatesPage extends BasePage { - url = '/templates'; - - getters = { - useTemplateButton: () => cy.getByTestId('use-template-button'), - description: () => cy.getByTestId('template-description'), - templateCards: () => cy.getByTestId('template-card'), - firstTemplateCard: () => this.getters.templateCards().first(), - allCategoriesFilter: () => cy.getByTestId('template-filter-all-categories'), - searchInput: () => cy.getByTestId('template-search-input'), - categoryFilters: () => cy.get('[data-test-id^=template-filter]'), - categoryFilter: (category: string) => cy.getByTestId(`template-filter-${category}`), - collectionCountLabel: () => cy.getByTestId('collection-count-label'), - templateCountLabel: () => cy.getByTestId('template-count-label'), - templatesLoadingContainer: () => cy.getByTestId('templates-loading-container'), - }; - - actions = { - openOnboardingFlow: () => { - cy.intercept('POST', '/rest/workflows').as('createWorkflow'); - cy.intercept('GET', 'rest/workflows/**').as('getWorkflow'); - - cy.visit('/workflows/onboarding/1'); - cy.window().then((win) => { - win.preventNodeViewBeforeUnload = true; - }); - - cy.wait(['@getTemplate', '@createWorkflow', '@getWorkflow']); - }, - - importTemplate: () => { - cy.intercept('GET', 'rest/workflows/**').as('getWorkflow'); - - cy.visit('/workflows/templates/1'); - cy.window().then((win) => { - win.preventNodeViewBeforeUnload = true; - }); - - cy.wait(['@getTemplate', '@getWorkflow']); - }, - }; -} diff --git a/cypress/pages/variables.ts b/cypress/pages/variables.ts deleted file mode 100644 index 1bf344cbfc0..00000000000 --- a/cypress/pages/variables.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { BasePage } from './base'; - -import Chainable = Cypress.Chainable; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class VariablesPage extends BasePage { - url = '/variables'; - - getters = { - unavailableResourcesList: () => cy.getByTestId('unavailable-resources-list'), - emptyResourcesList: () => cy.getByTestId('empty-resources-list'), - resourcesList: () => cy.getByTestId('resources-list'), - goToUpgrade: () => cy.getByTestId('go-to-upgrade'), - actionBox: () => cy.getByTestId('action-box'), - emptyResourcesListNewVariableButton: () => this.getters.emptyResourcesList().find('button'), - searchBar: () => cy.getByTestId('resources-list-search'), - createVariableButton: () => cy.getByTestId('resources-list-add'), - variablesRows: () => cy.getByTestId('variables-row'), - variablesEditableRows: () => - cy.getByTestId('variables-row').filter((_, row) => !!row.querySelector('input')), - variableRow: (key: string) => - this.getters.variablesRows().contains(key).parents('[data-test-id="variables-row"]'), - editableRowCancelButton: (row: Chainable>) => - row.getByTestId('variable-row-cancel-button'), - editableRowSaveButton: (row: Chainable>) => - row.getByTestId('variable-row-save-button'), - }; - - actions = { - createVariable: (key: string, value: string) => { - this.getters.createVariableButton().click(); - - const editingRow = this.getters.variablesEditableRows().eq(0); - this.actions.setRowValue(editingRow, 'key', key); - this.actions.setRowValue(editingRow, 'value', value); - this.actions.saveRowEditing(editingRow); - }, - deleteVariable: (key: string) => { - const row = this.getters.variableRow(key); - row.within(() => { - cy.getByTestId('variable-row-delete-button').should('not.be.disabled').click(); - }); - - const modal = cy.get('[role="dialog"]'); - modal.should('be.visible'); - modal.get('.btn--confirm').click(); - }, - createVariableFromEmptyState: (key: string, value: string) => { - this.getters.emptyResourcesListNewVariableButton().click(); - - const editingRow = this.getters.variablesEditableRows().eq(0); - this.actions.setRowValue(editingRow, 'key', key); - this.actions.setRowValue(editingRow, 'value', value); - this.actions.saveRowEditing(editingRow); - }, - editRow: (key: string) => { - const row = this.getters.variableRow(key); - row.within(() => { - cy.getByTestId('variable-row-edit-button').should('not.be.disabled').click(); - }); - }, - setRowValue: (row: Chainable>, field: 'key' | 'value', value: string) => { - row.within(() => { - cy.getByTestId(`variable-row-${field}-input`) - .find('input, textarea') - .type('{selectAll}{del}') - .type(value); - }); - }, - cancelRowEditing: (row: Chainable>) => { - this.getters.editableRowCancelButton(row).click(); - }, - saveRowEditing: (row: Chainable>) => { - this.getters.editableRowSaveButton(row).click(); - }, - }; -} diff --git a/cypress/pages/workerView.ts b/cypress/pages/workerView.ts deleted file mode 100644 index ff56ab1ec5d..00000000000 --- a/cypress/pages/workerView.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { BasePage } from './base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class WorkerViewPage extends BasePage { - url = '/settings/workers'; - - getters = { - workerCards: () => cy.getByTestId('worker-card'), - workerCard: (workerId: string) => this.getters.workerCards().contains(workerId), - workerViewLicensed: () => cy.getByTestId('worker-view-licensed'), - workerViewUnlicensed: () => cy.getByTestId('worker-view-unlicensed'), - menuItems: () => cy.get('.el-menu-item'), - menuItem: () => this.getters.menuItems().get('#settings-workersview'), - }; - - actions = {}; -} diff --git a/cypress/pages/workflow-executions-tab.ts b/cypress/pages/workflow-executions-tab.ts deleted file mode 100644 index 1e9a6397651..00000000000 --- a/cypress/pages/workflow-executions-tab.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { BasePage } from './base'; -import { WorkflowPage } from './workflow'; - -const workflowPage = new WorkflowPage(); - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class WorkflowExecutionsTab extends BasePage { - getters = { - executionsTabButton: () => cy.getByTestId('radio-button-executions'), - executionsSidebar: () => cy.getByTestId('executions-sidebar'), - executionsEmptyList: () => cy.getByTestId('execution-list-empty'), - autoRefreshCheckBox: () => cy.getByTestId('auto-refresh-checkbox'), - executionsList: () => cy.getByTestId('current-executions-list'), - executionListItems: () => this.getters.executionsList().find('div.execution-card'), - successfulExecutionListItems: () => cy.get('[data-test-execution-status="success"]'), - failedExecutionListItems: () => cy.get('[data-test-execution-status="error"]'), - executionCard: (executionId: string) => cy.getByTestId(`execution-details-${executionId}`), - executionPreviewDetails: () => cy.get('[data-test-id^="execution-preview-details-"]'), - executionPreviewDeleteButton: () => cy.get('[data-test-id="execution-preview-delete-button"]'), - executionPreviewDetailsById: (executionId: string) => - cy.getByTestId(`execution-preview-details-${executionId}`), - executionPreviewTime: () => - this.getters.executionPreviewDetails().find('[data-test-id="execution-time"]'), - executionPreviewStatus: () => - this.getters.executionPreviewDetails().find('[data-test-id="execution-preview-label"]'), - executionPreviewId: () => - this.getters.executionPreviewDetails().find('[data-test-id="execution-preview-id"]'), - executionDebugButton: () => cy.getByTestId('execution-debug-button'), - workflowExecutionPreviewIframe: () => cy.getByTestId('workflow-preview-iframe'), - }; - - actions = { - toggleNodeEnabled: (nodeName: string) => { - cy.get('body').click(); // Cancel selection if it exists - workflowPage.getters.canvasNodeByName(nodeName).click(); - cy.get('body').type('d', { force: true }); - }, - createManualExecutions: (count: number) => { - for (let i = 0; i < count; i++) { - cy.intercept('POST', '/rest/workflows/**/run').as('workflowExecution'); - workflowPage.actions.executeWorkflow(); - cy.wait('@workflowExecution'); - } - }, - switchToExecutionsTab: () => { - this.getters.executionsTabButton().click(); - cy.url().should('include', '/executions'); - }, - switchToEditorTab: () => { - workflowPage.getters.editorTabButton().click(); - cy.url().should('match', /\/workflow\/[^\/]+$/); - }, - deleteExecutionInPreview: () => { - this.getters.executionPreviewDeleteButton().click(); - cy.get('button.btn--confirm').click(); - }, - }; -} diff --git a/cypress/pages/workflow.ts b/cypress/pages/workflow.ts deleted file mode 100644 index 71050884559..00000000000 --- a/cypress/pages/workflow.ts +++ /dev/null @@ -1,495 +0,0 @@ -import { BasePage } from './base'; -import { NodeCreator } from './features/node-creator'; -import { clickContextMenuAction, getCanvasPane, openContextMenu } from '../composables/workflow'; -import { CODE_NODE_ACTION, CODE_NODE_NAME, META_KEY } from '../constants'; -import type { OpenContextMenuOptions } from '../types'; -import { getVisibleSelect } from '../utils'; -import { getUniqueWorkflowName } from '../utils/workflowUtils'; - -const nodeCreator = new NodeCreator(); - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class WorkflowPage extends BasePage { - url = '/workflow/new'; - - getters = { - workflowNameInputContainer: () => cy.getByTestId('workflow-name-input', { timeout: 5000 }), - workflowNameInput: () => - this.getters.workflowNameInputContainer().then(($el) => cy.wrap($el.find('input'))), - workflowImportInput: () => cy.getByTestId('workflow-import-input'), - workflowTags: () => cy.getByTestId('workflow-tags'), - workflowTagsContainer: () => cy.getByTestId('workflow-tags-container'), - workflowTagsInput: () => - this.getters.workflowTagsContainer().then(($el) => cy.wrap($el.find('input').first())), - tagPills: () => - cy.get('[data-test-id="workflow-tags-container"] span.el-tag:not(.count-container)'), - nthTagPill: (n: number) => - cy.get(`[data-test-id="workflow-tags-container"] span.el-tag:nth-child(${n})`), - tagsDropdown: () => cy.getByTestId('workflow-tags-dropdown'), - tagsInDropdown: () => getVisibleSelect().find('li').filter('.tag'), - createTagButton: () => cy.getByTestId('new-tag-link'), - saveButton: () => cy.getByTestId('workflow-save-button'), - nodeCreatorSearchBar: () => cy.getByTestId('node-creator-search-bar'), - nodeCreatorPlusButton: () => cy.getByTestId('node-creator-plus-button'), - canvasPlusButton: () => cy.getByTestId('canvas-plus-button'), - canvasNodes: () => cy.getByTestId('canvas-node'), - canvasNodeByName: (nodeName: string) => - this.getters.canvasNodes().filter(`:contains(${nodeName})`), - nodeIssuesByName: (nodeName: string) => - this.getters - .canvasNodes() - .filter(`:contains(${nodeName})`) - .should('have.length.greaterThan', 0) - .findChildByTestId('node-issues'), - getEndpointSelector: (type: 'input' | 'output' | 'plus', nodeName: string, index = 0) => { - if (type === 'input') { - return `[data-test-id="canvas-node-input-handle"][data-node-name="${nodeName}"][data-index="${index}"]`; - } - if (type === 'output') { - return `[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"][data-index="${index}"]`; - } - return `[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"][data-index="${index}"] [data-test-id="canvas-handle-plus"]`; - }, - canvasNodeInputEndpointByName: (nodeName: string, index = 0) => { - return cy.get(this.getters.getEndpointSelector('input', nodeName, index)); - }, - canvasNodeOutputEndpointByName: (nodeName: string, index = 0) => { - return cy.get(this.getters.getEndpointSelector('output', nodeName, index)); - }, - canvasNodePlusEndpointByName: (nodeName: string, index = 0) => { - return cy - .get( - `[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, - ) - .eq(index); - }, - activatorSwitch: () => cy.getByTestId('workflow-activate-switch'), - workflowMenu: () => cy.getByTestId('workflow-menu'), - firstStepButton: () => cy.getByTestId('canvas-add-button'), - isWorkflowSaved: () => this.getters.saveButton().should('match', 'span'), // In Element UI, disabled button turn into spans 🤷‍♂️ - isWorkflowActivated: () => this.getters.activatorSwitch().should('have.class', 'is-checked'), - isWorkflowDeactivated: () => - this.getters.activatorSwitch().should('not.have.class', 'is-checked'), - expressionModalInput: () => cy.getByTestId('expression-modal-input').find('[role=textbox]'), - expressionModalOutput: () => cy.getByTestId('expression-modal-output'), - - nodeViewRoot: () => this.getters.nodeView(), - copyPasteInput: () => cy.getByTestId('hidden-copy-paste'), - nodeConnections: () => cy.getByTestId('edge'), - zoomToFitButton: () => cy.getByTestId('zoom-to-fit'), - nodeEndpoints: () => cy.get('.jtk-endpoint-connected'), - disabledNodes: () => cy.get('[data-canvas-node-render-type][class*="disabled"]'), - selectedNodes: () => this.getters.canvasNodes().parent().filter('.selected'), - // Workflow menu items - workflowMenuItemDuplicate: () => cy.getByTestId('workflow-menu-item-duplicate'), - workflowMenuItemDownload: () => cy.getByTestId('workflow-menu-item-download'), - workflowMenuItemImportFromURLItem: () => cy.getByTestId('workflow-menu-item-import-from-url'), - workflowMenuItemImportFromFile: () => cy.getByTestId('workflow-menu-item-import-from-file'), - workflowMenuItemSettings: () => cy.getByTestId('workflow-menu-item-settings'), - workflowMenuItemDelete: () => cy.getByTestId('workflow-menu-item-delete'), - workflowMenuItemArchive: () => cy.getByTestId('workflow-menu-item-archive'), - workflowMenuItemUnarchive: () => cy.getByTestId('workflow-menu-item-unarchive'), - workflowMenuItemGitPush: () => cy.getByTestId('workflow-menu-item-push'), - // Workflow settings dialog elements - workflowSettingsModal: () => cy.getByTestId('workflow-settings-dialog'), - workflowSettingsErrorWorkflowSelect: () => cy.getByTestId('workflow-settings-error-workflow'), - workflowSettingsTimezoneSelect: () => cy.getByTestId('workflow-settings-timezone'), - workflowSettingsSaveFiledExecutionsSelect: () => - cy.getByTestId('workflow-settings-save-failed-executions'), - workflowSettingsSaveSuccessExecutionsSelect: () => - cy.getByTestId('workflow-settings-save-success-executions'), - workflowSettingsSaveManualExecutionsSelect: () => - cy.getByTestId('workflow-settings-save-manual-executions'), - workflowSettingsSaveExecutionProgressSelect: () => - cy.getByTestId('workflow-settings-save-execution-progress'), - workflowSettingsTimeoutWorkflowSwitch: () => - cy.getByTestId('workflow-settings-timeout-workflow'), - workflowSettingsTimeoutForm: () => cy.getByTestId('workflow-settings-timeout-form'), - workflowSettingsSaveButton: () => - cy.getByTestId('workflow-settings-save-button').find('button'), - - archivedTag: () => cy.getByTestId('workflow-archived-tag'), - shareButton: () => cy.getByTestId('workflow-share-button'), - - duplicateWorkflowModal: () => cy.getByTestId('duplicate-modal'), - nodeViewBackground: () => cy.getByTestId('canvas'), - nodeView: () => cy.get('[data-test-id="canvas-wrapper"]'), - canvasViewport: () => cy.get('.vue-flow__transformationpane.vue-flow__container'), - inlineExpressionEditorInput: () => - cy.getByTestId('inline-expression-editor-input').find('[role=textbox]'), - inlineExpressionEditorOutput: () => cy.getByTestId('inline-expression-editor-output'), - zoomInButton: () => cy.getByTestId('zoom-in-button'), - zoomOutButton: () => cy.getByTestId('zoom-out-button'), - resetZoomButton: () => cy.getByTestId('reset-zoom-button'), - executeWorkflowButton: () => cy.getByTestId('execute-workflow-button'), - clearExecutionDataButton: () => cy.getByTestId('clear-execution-data-button'), - stopExecutionButton: () => cy.getByTestId('stop-execution-button'), - stopExecutionWaitingForWebhookButton: () => - cy.getByTestId('stop-execution-waiting-for-webhook-button'), - nodeCredentialsSelect: () => cy.getByTestId('node-credentials-select'), - nodeCredentialsCreateOption: () => cy.getByTestId('node-credentials-select-item-new'), - nodeCredentialsEditButton: () => cy.getByTestId('credential-edit-button'), - nodeCreatorItems: () => cy.getByTestId('item-iterator-item'), - nodeCreatorNodeItems: () => cy.getByTestId('node-creator-node-item'), - nodeCreatorActionItems: () => cy.getByTestId('node-creator-action-item'), - nodeCreatorCategoryItems: () => cy.getByTestId('node-creator-category-item'), - ndvParameters: () => cy.getByTestId('parameter-item'), - nodeCredentialsLabel: () => cy.getByTestId('credentials-label'), - getConnectionBetweenNodes: (sourceNodeName: string, targetNodeName: string) => - cy.get( - `[data-test-id="edge"][data-source-node-name="${sourceNodeName}"][data-target-node-name="${targetNodeName}"]`, - ), - getConnectionActionsBetweenNodes: (sourceNodeName: string, targetNodeName: string) => - cy.get( - `[data-test-id="edge-label"][data-source-node-name="${sourceNodeName}"][data-target-node-name="${targetNodeName}"] [data-test-id="canvas-edge-toolbar"]`, - ), - addStickyButton: () => cy.getByTestId('add-sticky-button'), - stickies: () => cy.getByTestId('sticky'), - editorTabButton: () => cy.getByTestId('radio-button-workflow'), - workflowHistoryButton: () => cy.getByTestId('workflow-history-button'), - colors: () => cy.getByTestId('color'), - contextMenuAction: (action: string) => cy.getByTestId(`context-menu-item-${action}`), - getNodeLeftPosition: (element: JQuery) => { - return parseFloat(element.parent().css('transform').split(',')[4]); - }, - getNodeTopPosition: (element: JQuery) => { - return parseFloat(element.parent().css('transform').split(',')[5]); - }, - inputURLImportWorkflowFromURL: () => cy.getByTestId('workflow-url-import-input'), - cancelActionImportWorkflowFromURL: () => cy.getByTestId('cancel-workflow-import-url-button'), - confirmActionImportWorkflowFromURL: () => cy.getByTestId('confirm-workflow-import-url-button'), - confirmModal: () => cy.get('div[role=dialog][aria-modal=true]'), - }; - - actions = { - visit: (preventNodeViewUnload = true, appDate?: number) => { - cy.visit(this.url); - if (appDate) { - cy.setAppDate(appDate); - } - cy.waitForLoad(); - cy.window().then((win) => { - win.preventNodeViewBeforeUnload = preventNodeViewUnload; - }); - }, - addInitialCodeNodeToCanvas(opts: { keepNdvOpen: boolean } = { keepNdvOpen: false }) { - this.addInitialNodeToCanvas(CODE_NODE_NAME, { - action: CODE_NODE_ACTION, - keepNdvOpen: opts.keepNdvOpen, - }); - }, - addInitialNodeToCanvas: ( - nodeDisplayName: string, - opts?: { keepNdvOpen?: boolean; action?: string; isTrigger?: boolean }, - ) => { - this.getters.canvasPlusButton().click(); - this.getters.nodeCreatorSearchBar().type(nodeDisplayName); - this.getters.nodeCreatorSearchBar().type('{enter}'); - if (opts?.action) { - const itemId = opts.isTrigger ? 'Triggers' : 'Actions'; - // Expand actions category if it's collapsed - nodeCreator.getters - .getCategoryItem(itemId) - .parent() - .then(($el) => { - if ($el.attr('data-category-collapsed') === 'true') { - nodeCreator.getters.getCategoryItem(itemId).click(); - } - }); - nodeCreator.getters.getCreatorItem(opts.action).click(); - } else if (!opts?.keepNdvOpen) { - cy.get('body').type('{esc}'); - } - }, - addCodeNodeToCanvas(plusButtonClick = true, preventNdvClose?: boolean) { - this.addNodeToCanvas(CODE_NODE_NAME, plusButtonClick, preventNdvClose, CODE_NODE_ACTION); - }, - addNodeToCanvas: ( - nodeDisplayName: string, - plusButtonClick = true, - preventNdvClose?: boolean, - action?: string, - ) => { - if (plusButtonClick) { - this.getters.nodeCreatorPlusButton().click(); - } - - this.getters.nodeCreatorSearchBar().type(nodeDisplayName); - this.getters.nodeCreatorSearchBar().type('{enter}'); - cy.get('body').then((body) => { - if (body.find('[data-test-id=node-creator]').length > 0) { - if (action) { - cy.get('[data-keyboard-nav-type="action"]').contains(action).click(); - } else { - // Select the first action - if (body.find('[data-keyboard-nav-type="action"]').length > 0) { - cy.get('[data-keyboard-nav-type="action"]').eq(0).click(); - } - } - } - }); - - if (!preventNdvClose) cy.get('body').type('{esc}'); - }, - openContextMenu: ( - nodeTypeName?: string, - { method = 'right-click', anchor = 'center' }: OpenContextMenuOptions = {}, - ) => { - openContextMenu(nodeTypeName, { method, anchor }); - }, - openNode: (nodeTypeName: string) => { - this.getters.canvasNodeByName(nodeTypeName).first().dblclick(); - }, - duplicateNode: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName); - clickContextMenuAction('duplicate'); - }, - deleteNodeFromContextMenu: (nodeTypeName: string, options?: OpenContextMenuOptions) => { - this.actions.openContextMenu(nodeTypeName, options); - clickContextMenuAction('delete'); - }, - executeNode: (nodeTypeName: string, options?: OpenContextMenuOptions) => { - this.actions.openContextMenu(nodeTypeName, options); - clickContextMenuAction('execute'); - }, - addStickyFromContextMenu: () => { - this.actions.openContextMenu(); - clickContextMenuAction('add_sticky'); - }, - renameNode: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName); - clickContextMenuAction('rename'); - }, - copyNode: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName); - clickContextMenuAction('copy'); - }, - contextMenuAction: (action: string) => { - this.getters.contextMenuAction(action).click(); - }, - disableNode: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName); - clickContextMenuAction('toggle_activation'); - }, - pinNode: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName); - clickContextMenuAction('toggle_pin'); - }, - openNodeFromContextMenu: (nodeTypeName: string) => { - this.actions.openContextMenu(nodeTypeName, { method: 'overflow-button' }); - clickContextMenuAction('open'); - }, - selectAllFromContextMenu: () => { - this.actions.openContextMenu(); - clickContextMenuAction('select_all'); - }, - deselectAll: () => { - getCanvasPane().click('topLeft'); - }, - openExpressionEditorModal: () => { - cy.contains('Expression').invoke('show').click(); - cy.getByTestId('expander').invoke('show').click(); - }, - openTagManagerModal: () => { - this.getters.createTagButton().click(); - this.getters.tagsDropdown().click(); - getVisibleSelect().find('li.manage-tags').first().click(); - }, - openInlineExpressionEditor: () => { - cy.contains('Expression').invoke('show').click(); - this.getters.inlineExpressionEditorInput().click(); - }, - openWorkflowMenu: () => { - this.getters.workflowMenu().click(); - }, - openShareModal: () => { - this.getters.shareButton().click(); - }, - saveWorkflowOnButtonClick: () => { - cy.intercept('POST', '/rest/workflows').as('createWorkflow'); - this.getters.saveButton().should('contain', 'Save'); - this.getters.saveButton().click(); - this.getters.saveButton().should('contain', 'Saved'); - cy.url().should('not.have.string', '/new'); - }, - saveWorkflowUsingKeyboardShortcut: () => { - cy.intercept('POST', '/rest/workflows').as('createWorkflow'); - this.actions.hitSaveWorkflow(); - }, - deleteNode: (name: string) => { - this.getters.canvasNodeByName(name).first().click(); - cy.get('body').type('{del}'); - }, - setWorkflowName: (name: string) => { - this.getters.workflowNameInput().parent().click(); - this.getters.workflowNameInput().should('be.enabled'); - this.getters.workflowNameInput().clear().type(name).type('{enter}'); - }, - clickWorkflowActivator: () => { - this.getters.activatorSwitch().find('input').first().should('be.enabled'); - this.getters.activatorSwitch().click(); - }, - activateWorkflow: () => { - cy.intercept('PATCH', '/rest/workflows/*').as('activateWorkflow'); - this.actions.clickWorkflowActivator(); - cy.wait('@activateWorkflow'); - cy.get('body').type('{esc}'); - }, - renameWorkflow: (newName: string) => { - this.getters.workflowNameInputContainer().click(); - cy.get('body').type('{selectall}'); - cy.get('body').type(newName); - cy.get('body').type('{enter}'); - }, - renameWithUniqueName: () => { - this.actions.renameWorkflow(getUniqueWorkflowName()); - }, - addTags: (tags: string | string[]) => { - if (!Array.isArray(tags)) tags = [tags]; - - tags.forEach((tag) => { - this.getters.workflowTagsInput().type(tag); - this.getters.workflowTagsInput().type('{enter}'); - }); - // For a brief moment the Element UI tag component shows the tags as(+X) string - // so we need to wait for it to disappear - this.getters.workflowTagsContainer().should('not.contain', `+${tags.length}`); - }, - zoomToFit: () => { - cy.getByTestId('zoom-to-fit').click(); - }, - pinchToZoom: (steps: number, mode: 'zoomIn' | 'zoomOut' = 'zoomIn') => { - cy.window().then((win) => { - // Pinch-to-zoom simulates a 'wheel' event with ctrlKey: true (same as zooming by scrolling) - getCanvasPane().trigger('wheel', { - force: true, - bubbles: true, - ctrlKey: true, - pageX: win.innerWidth / 2, - pageY: win.innerHeight / 2, - deltaMode: 1, - deltaY: mode === 'zoomOut' ? steps : -steps, - }); - }); - }, - /** Certain keyboard shortcuts are not possible on Cypress via a simple `.type`, and some delays are needed to emulate these events */ - hitComboShortcut: (modifier: string, key: string) => { - cy.get('body').wait(100).type(modifier, { delay: 100, release: false }).type(key); - }, - hitUndo: () => { - this.actions.hitComboShortcut(`{${META_KEY}}`, 'z'); - }, - hitRedo: () => { - cy.get('body').type(`{${META_KEY}+shift+z}`); - }, - hitSelectAll: () => { - this.actions.hitComboShortcut(`{${META_KEY}}`, 'a'); - }, - hitDeleteAllNodes: () => { - this.actions.hitSelectAll(); - cy.get('body').type('{backspace}'); - }, - hitDisableNodeShortcut: () => { - cy.get('body').type('d'); - }, - hitOpenAbout: () => { - cy.get('body').type(`{alt}{${META_KEY}}o`); - }, - hitCopy: () => { - this.actions.hitComboShortcut(`{${META_KEY}}`, 'c'); - }, - hitPinNodeShortcut: () => { - cy.get('body').type('p'); - }, - hitSaveWorkflow: () => { - cy.get('body').type(`{${META_KEY}+s}`); - }, - hitExecuteWorkflow: () => { - cy.get('body').type(`{${META_KEY}+enter}`); - }, - hitDuplicateNode: () => { - cy.get('body').type(`{${META_KEY}+d}`); - }, - hitAddSticky: () => { - cy.get('body').type('{shift+S}'); - }, - executeWorkflow: () => { - this.getters.executeWorkflowButton().click(); - }, - addNodeBetweenNodes: ( - sourceNodeName: string, - targetNodeName: string, - newNodeName: string, - action?: string, - ) => { - this.getters.getConnectionBetweenNodes(sourceNodeName, targetNodeName).first().realHover(); - const connectionsBetweenNodes = () => - this.getters.getConnectionActionsBetweenNodes(sourceNodeName, targetNodeName); - connectionsBetweenNodes() - .get('[data-test-id="add-connection-button"]') - .first() - .click({ force: true }); - - this.actions.addNodeToCanvas(newNodeName, false, false, action); - }, - deleteNodeBetweenNodes: (sourceNodeName: string, targetNodeName: string) => { - this.getters.getConnectionBetweenNodes(sourceNodeName, targetNodeName).first().realHover(); - const connectionsBetweenNodes = () => - this.getters.getConnectionActionsBetweenNodes(sourceNodeName, targetNodeName); - connectionsBetweenNodes() - .get('[data-test-id="delete-connection-button"]') - .first() - .click({ force: true }); - }, - addSticky: () => { - this.getters.addStickyButton().click(); - }, - deleteSticky: () => { - this.getters.stickies().eq(0).realHover().find('[data-test-id="delete-sticky"]').click(); - }, - toggleColorPalette: () => { - this.getters - .stickies() - .eq(0) - .realHover() - .find('[data-test-id="change-sticky-color"]') - .click({ force: true }); - }, - pickColor: () => { - this.getters.colors().eq(1).click(); - }, - editSticky: (content: string) => { - this.getters.stickies().dblclick().find('textarea').clear().type(content).type('{esc}'); - }, - clearSticky: () => { - this.getters.stickies().dblclick().find('textarea').clear().type('{esc}'); - }, - shouldHaveWorkflowName: (name: string) => { - this.getters.workflowNameInputContainer().invoke('attr', 'title').should('include', name); - }, - testLassoSelection: (from: [number, number], to: [number, number]) => { - cy.getByTestId('node-view-wrapper').trigger('mousedown', from[0], from[1], { force: true }); - cy.getByTestId('node-view-wrapper').trigger('mousemove', to[0], to[1], { force: true }); - cy.get('#select-box').should('be.visible'); - cy.getByTestId('node-view-wrapper').trigger('mouseup', to[0], to[1], { force: true }); - cy.get('#select-box').should('not.be.visible'); - }, - getNodePosition: (node: Cypress.Chainable>) => { - return node.then(($el) => ({ - left: +$el[0].style.left.replace('px', ''), - top: +$el[0].style.top.replace('px', ''), - })); - }, - acceptConfirmModal: () => { - this.getters.confirmModal().should('be.visible'); - cy.get('button.btn--confirm').should('be.visible').click(); - }, - }; -} diff --git a/cypress/pages/workflows.ts b/cypress/pages/workflows.ts deleted file mode 100644 index 644b596f8cd..00000000000 --- a/cypress/pages/workflows.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { BasePage } from './base'; - -/** - * @deprecated Use functional composables from @composables instead. - * If a composable doesn't exist for your use case, please create a new one in: - * cypress/composables - * - * This class-based approach is being phased out in favor of more modular functional composables. - * Each getter and action in this class should be moved to individual composable functions. - */ -export class WorkflowsPage extends BasePage { - url = '/home/workflows'; - - getters = { - newWorkflowButtonCard: () => cy.getByTestId('new-workflow-card'), - newWorkflowTemplateCard: () => cy.getByTestId('new-workflow-template-card'), - searchBar: () => cy.getByTestId('resources-list-search'), - createWorkflowButton: () => { - cy.getByTestId('add-resource-workflow').should('be.visible'); - return cy.getByTestId('add-resource-workflow'); - }, - workflowCards: () => cy.getByTestId('resources-list-item-workflow'), - workflowCard: (workflowName: string) => - this.getters - .workflowCards() - .contains(workflowName) - .parents('[data-test-id="resources-list-item-workflow"]'), - workflowTags: (workflowName: string) => - this.getters.workflowCard(workflowName).findChildByTestId('workflow-card-tags'), - workflowCardContent: (workflowName: string) => - this.getters.workflowCard(workflowName).findChildByTestId('card-content'), - workflowActivator: (workflowName: string) => - this.getters.workflowCard(workflowName).findChildByTestId('workflow-card-activator'), - workflowActivatorStatus: (workflowName: string) => - this.getters.workflowActivator(workflowName).findChildByTestId('workflow-activator-status'), - workflowCardActions: (workflowName: string) => - this.getters.workflowCard(workflowName).findChildByTestId('workflow-card-actions'), - workflowActionItem: (action: string) => cy.getByTestId(`action-${action}`).filter(':visible'), - workflowArchiveButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Archive'), - workflowUnarchiveButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Unarchive'), - workflowDeleteButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Delete'), - workflowMoveButton: () => - cy.getByTestId('action-toggle-dropdown').filter(':visible').contains('Move'), - workflowFilterButton: () => cy.getByTestId('resources-list-filters-trigger').filter(':visible'), - workflowTagsDropdown: () => cy.getByTestId('tags-dropdown'), - workflowTagItem: (tag: string) => cy.getByTestId('tag').contains(tag), - workflowStatusDropdown: () => cy.getByTestId('status-dropdown'), - workflowStatusItem: (status: string) => cy.getByTestId('status').contains(status), - workflowOwnershipDropdown: () => cy.getByTestId('user-select-trigger'), - workflowOwner: (email: string) => cy.getByTestId('user-email').contains(email), - workflowArchivedCheckbox: () => cy.getByTestId('show-archived-checkbox'), - workflowResetFilters: () => cy.getByTestId('workflows-filter-reset'), - workflowSortDropdown: () => cy.getByTestId('resources-list-sort'), - workflowSortItem: (sort: string) => - cy.getByTestId('resources-list-sort-item').contains(sort).parent(), - workflowPagination: () => cy.getByTestId('resources-list-pagination'), - workflowListPageSizeDropdown: () => this.getters.workflowPagination().find('.select-trigger'), - workflowListPageSizeItem: (pageSize: string, visible: boolean = true) => { - if (visible) { - return cy.get('[role=option]').filter(':visible').contains(`${pageSize}/page`); - } - return cy.get('[role=option]').contains(`${pageSize}/page`).parent(); - }, - workflowsListContainer: () => cy.getByTestId('resources-list-wrapper'), - // Not yet implemented - // myWorkflows: () => cy.getByTestId('my-workflows'), - // allWorkflows: () => cy.getByTestId('all-workflows'), - }; - - actions = { - createWorkflowFromCard: () => { - this.getters.newWorkflowButtonCard().click(); - }, - deleteWorkFlow: (name: string) => { - cy.visit(this.url); - this.getters.workflowCardActions(name).click(); - this.getters.workflowDeleteButton().click(); - cy.intercept('DELETE', '/rest/workflows/*').as('deleteWorkflow'); - - cy.get('button').contains('delete').click(); - cy.wait('@deleteWorkflow'); - }, - }; -} diff --git a/cypress/scripts/run-e2e.js b/cypress/scripts/run-e2e.js deleted file mode 100755 index db50583b71a..00000000000 --- a/cypress/scripts/run-e2e.js +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env node -const { spawn } = require('child_process'); -const { mkdirSync, mkdtempSync } = require('fs'); -const { tmpdir } = require('os'); -const { join } = require('path'); - -function runTests(options) { - const testsDir = join(tmpdir(), 'n8n-e2e/'); - mkdirSync(testsDir, { recursive: true }); - - const userFolder = mkdtempSync(testsDir); - - process.env.N8N_USER_FOLDER = userFolder; - process.env.E2E_TESTS = 'true'; - process.env.NODE_OPTIONS = '--dns-result-order=ipv4first'; - - // Automatically pass through any N8N_ENV_FEAT_* environment variables - Object.keys(process.env).forEach((key) => { - if (key.startsWith('N8N_ENV_FEAT_')) { - // These are already in process.env and will be inherited by the spawned process - console.log(`Passing through environment feature flag: ${key}=${process.env[key]}`); - } - }); - - if (options.customEnv) { - Object.keys(options.customEnv).forEach((key) => { - process.env[key] = options.customEnv[key]; - }); - } - - const cmd = `start-server-and-test ${options.startCommand} ${options.url} '${options.testCommand}'`; - const testProcess = spawn(cmd, [], { - stdio: 'inherit', - shell: true, - env: process.env, // TODO: Maybe pass only the necessary environment variables instead of all - }); - - // Listen for termination signals to properly kill the test process - process.on('SIGINT', () => { - testProcess.kill('SIGINT'); - }); - - process.on('SIGTERM', () => { - testProcess.kill('SIGTERM'); - }); - - testProcess.on('exit', (code) => { - process.exit(code); - }); -} - -const scenario = process.argv[2]; - -switch (scenario) { - case 'ui': - runTests({ - startCommand: 'start', - url: 'http://localhost:5678/favicon.ico', - testCommand: 'cypress open', - }); - break; - case 'dev': - runTests({ - startCommand: 'develop', - url: 'http://localhost:8080/favicon.ico', - testCommand: 'cypress open', - customEnv: { - CYPRESS_BASE_URL: 'http://localhost:8080', - }, - }); - break; - case 'all': - const specSuiteFilter = process.argv[3]; - const specParam = specSuiteFilter ? ` --spec **/*${specSuiteFilter}*` : ''; - - runTests({ - startCommand: 'start', - url: 'http://localhost:5678/favicon.ico', - testCommand: `cypress run --headless ${specParam}`, - }); - break; - case 'debugFlaky': { - const filter = process.argv[3]; - const burnCount = process.argv[4] || 5; - - const envArgs = [`burn=${burnCount}`]; - - if (filter) { - envArgs.push(`grep=${filter}`); - envArgs.push(`grepFilterSpecs=true`); - } - - const envString = envArgs.join(','); - const testCommand = `cypress run --headless --env "${envString}"`; - - console.log(`Executing test command: ${testCommand}`); - - runTests({ - startCommand: 'start', - url: 'http://localhost:5678/favicon.ico', - testCommand: testCommand, - failFast: true, - }); - break; - } - default: - console.error('Unknown scenario'); - process.exit(1); -} diff --git a/cypress/support/binaryTestFiles.ts b/cypress/support/binaryTestFiles.ts deleted file mode 100644 index 4dc99195496..00000000000 --- a/cypress/support/binaryTestFiles.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const cowBase64 = - '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'; diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts deleted file mode 100644 index 735a2fe7203..00000000000 --- a/cypress/support/commands.ts +++ /dev/null @@ -1,321 +0,0 @@ -import 'cypress-real-events'; -import type { FrontendSettings, N8nEnvFeatFlags } from '@n8n/api-types'; -import FakeTimers from '@sinonjs/fake-timers'; - -import { - BACKEND_BASE_URL, - INSTANCE_ADMIN, - INSTANCE_MEMBERS, - INSTANCE_OWNER, - N8N_AUTH_COOKIE, -} from '../constants'; -import { WorkflowPage } from '../pages'; - -Cypress.Commands.add('setAppDate', (targetDate: number | Date) => { - cy.window().then((win) => { - FakeTimers.withGlobal(win).install({ - now: targetDate, - toFake: ['Date'], - shouldAdvanceTime: true, - }); - }); -}); - -Cypress.Commands.add('getByTestId', (selector, ...args) => { - return cy.get(`[data-test-id="${selector}"]`, ...args); -}); - -Cypress.Commands.add('createFixtureWorkflow', (fixtureKey: string) => { - const workflowPage = new WorkflowPage(); - - // We need to force the click because the input is hidden - workflowPage.getters.workflowImportInput().selectFile(`fixtures/${fixtureKey}`, { force: true }); - - cy.waitForLoad(false); - workflowPage.actions.saveWorkflowOnButtonClick(); - workflowPage.getters.saveButton().should('contain', 'Saved'); - workflowPage.actions.zoomToFit(); -}); - -Cypress.Commands.addQuery('findChildByTestId', function (testId: string) { - return (subject: Cypress.Chainable) => subject.find(`[data-test-id="${testId}"]`); -}); - -Cypress.Commands.add('waitForLoad', (waitForIntercepts = true) => { - // These aliases are set-up before each test in cypress/support/e2e.ts - // we can't set them up here because at this point it would be too late - // and the requests would already have been made - if (waitForIntercepts) { - cy.wait(['@loadSettings', '@loadNodeTypes']); - } - cy.getByTestId('node-view-loader', { timeout: 20000 }).should('not.exist'); - cy.get('.el-loading-mask', { timeout: 20000 }).should('not.exist'); -}); - -Cypress.Commands.add('signin', ({ email, password }) => { - void Cypress.session.clearAllSavedSessions(); - cy.session([email, password], () => { - return cy - .request({ - method: 'POST', - url: `${BACKEND_BASE_URL}/rest/login`, - body: { emailOrLdapLoginId: email, password }, - failOnStatusCode: false, - }) - .then((response) => { - Cypress.env('currentUserId', response.body.data.id); - }); - }); -}); - -Cypress.Commands.add('signinAsOwner', () => cy.signin(INSTANCE_OWNER)); -Cypress.Commands.add('signinAsAdmin', () => cy.signin(INSTANCE_ADMIN)); -Cypress.Commands.add('signinAsMember', (index = 0) => cy.signin(INSTANCE_MEMBERS[index])); - -Cypress.Commands.add('signout', () => { - cy.request({ - method: 'POST', - url: `${BACKEND_BASE_URL}/rest/logout`, - headers: { 'browser-id': localStorage.getItem('n8n-browserId') }, - }); - cy.getCookie(N8N_AUTH_COOKIE).should('not.exist'); -}); - -export let settings: Partial; -Cypress.Commands.add('overrideSettings', (value: Partial) => { - settings = value; -}); - -const setFeature = (feature: string, enabled: boolean) => - cy.request('PATCH', `${BACKEND_BASE_URL}/rest/e2e/feature`, { - feature: `feat:${feature}`, - enabled, - }); - -const setQuota = (feature: string, value: number) => - cy.request('PATCH', `${BACKEND_BASE_URL}/rest/e2e/quota`, { - feature: `quota:${feature}`, - value, - }); - -const setQueueMode = (enabled: boolean) => - cy.request('PATCH', `${BACKEND_BASE_URL}/rest/e2e/queue-mode`, { - enabled, - }); - -Cypress.Commands.add('enableFeature', (feature: string) => setFeature(feature, true)); -Cypress.Commands.add('changeQuota', (feature: string, value: number) => setQuota(feature, value)); -Cypress.Commands.add('disableFeature', (feature: string) => setFeature(feature, false)); -Cypress.Commands.add('enableQueueMode', () => setQueueMode(true)); -Cypress.Commands.add('disableQueueMode', () => setQueueMode(false)); - -const setEnvFeatureFlags = (flags: N8nEnvFeatFlags) => - cy.request('PATCH', `${BACKEND_BASE_URL}/rest/e2e/env-feature-flags`, { - flags, - }); - -const getEnvFeatureFlags = () => - cy.request('GET', `${BACKEND_BASE_URL}/rest/e2e/env-feature-flags`); - -// Environment feature flags commands (using E2E API) -Cypress.Commands.add('setEnvFeatureFlags', (flags: N8nEnvFeatFlags) => - setEnvFeatureFlags(flags).then((response) => response.body.data), -); -Cypress.Commands.add('clearEnvFeatureFlags', () => - setEnvFeatureFlags({}).then((response) => response.body.data), -); -Cypress.Commands.add('getEnvFeatureFlags', () => - getEnvFeatureFlags().then((response) => response.body.data), -); - -Cypress.Commands.add('grantBrowserPermissions', (...permissions: string[]) => { - if (Cypress.isBrowser('chrome')) { - cy.wrap( - Cypress.automation('remote:debugger:protocol', { - command: 'Browser.grantPermissions', - params: { - permissions, - origin: window.location.origin, - }, - }), - ); - } -}); - -Cypress.Commands.add('readClipboard', () => - cy.window().then((win) => win.navigator.clipboard.readText()), -); - -Cypress.Commands.add('paste', { prevSubject: true }, (selector, pastePayload) => { - // https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event - cy.wrap(selector).then(($destination) => { - const pasteEvent = Object.assign(new Event('paste', { bubbles: true, cancelable: true }), { - clipboardData: { - getData: () => pastePayload, - }, - }); - $destination[0].dispatchEvent(pasteEvent); - }); -}); - -Cypress.Commands.add('drag', (selector, pos, options) => { - const index = options?.index ?? 0; - const [xDiff, yDiff] = pos; - const element = typeof selector === 'string' ? cy.get(selector).eq(index) : selector; - element.should('exist'); - - element.then(([$el]) => { - const originalLocation = $el.getBoundingClientRect(); - const newPosition = { - x: options?.abs ? xDiff : originalLocation.right + xDiff, - y: options?.abs ? yDiff : originalLocation.top + yDiff, - }; - if (options?.realMouse) { - element.realMouseDown(); - element.realMouseMove(0, 0); - element.realMouseMove(newPosition.x, newPosition.y); - element.realMouseUp(); - } else { - element.trigger('mousedown', { force: true }); - element.trigger('mousemove', { - which: 1, - pageX: newPosition.x, - pageY: newPosition.y, - force: true, - }); - if (options?.moveTwice) { - // first move like hover to trigger object to be visible - // like in main panel in ndv - element.trigger('mousemove', { - which: 1, - pageX: newPosition.x, - pageY: newPosition.y, - force: true, - }); - } - if (options?.clickToFinish) { - // Click to finish the drag - // For some reason, mouseup isn't working when moving nodes - cy.get('body').click(newPosition.x, newPosition.y); - } else { - element.trigger('mouseup', { force: true }); - } - } - }); -}); - -Cypress.Commands.add('draganddrop', (draggableSelector, droppableSelector, options) => { - if (draggableSelector) { - cy.get(draggableSelector).should('exist'); - } - cy.get(droppableSelector).should('exist'); - - cy.get(droppableSelector) - .first() - .then(([$el]) => { - const coords = $el.getBoundingClientRect(); - - const pageX = coords.left + coords.width / 2; - const pageY = coords.top + coords.height / 2; - - if (draggableSelector) { - cy.get(draggableSelector).realMouseDown(); - } - // We don't chain these commands to make sure cy.get is re-trying correctly - cy.get(droppableSelector).realMouseMove(0, 0); - cy.get(droppableSelector).realMouseMove(pageX, pageY); - cy.get(droppableSelector).realHover(); - cy.get(droppableSelector).realMouseUp({ position: options?.position ?? 'top' }); - if (draggableSelector) { - cy.get(draggableSelector).realMouseUp(); - } - }); -}); - -Cypress.Commands.add('push', (type, data) => { - cy.request('POST', `${BACKEND_BASE_URL}/rest/e2e/push`, { - type, - data, - }); -}); - -Cypress.Commands.add('shouldNotHaveConsoleErrors', () => { - cy.window().then((win) => { - const spy = cy.spy(win.console, 'error'); - cy.wrap(spy).should('not.have.been.called'); - }); -}); - -Cypress.Commands.add('resetDatabase', () => { - cy.request('POST', `${BACKEND_BASE_URL}/rest/e2e/reset`, { - owner: INSTANCE_OWNER, - members: INSTANCE_MEMBERS, - admin: INSTANCE_ADMIN, - }); -}); - -Cypress.Commands.add('clearIndexedDB', (dbName: string, storeName?: string) => { - cy.window().then((win) => { - return new Promise((resolve, reject) => { - if (!win.indexedDB) { - resolve(); - return; - } - - // If storeName is provided, clear specific store; otherwise delete entire database - if (storeName) { - const openRequest = win.indexedDB.open(dbName); - - openRequest.onsuccess = () => { - const db = openRequest.result; - - if (!db.objectStoreNames.contains(storeName)) { - db.close(); - resolve(); - return; - } - - const transaction = db.transaction([storeName], 'readwrite'); - const store = transaction.objectStore(storeName); - const clearRequest = store.clear(); - - clearRequest.onsuccess = () => { - db.close(); - resolve(); - }; - - clearRequest.onerror = () => { - db.close(); - // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors - reject(clearRequest.error); - }; - }; - - openRequest.onerror = () => { - resolve(); // Database doesn't exist, nothing to clear - }; - } else { - const deleteRequest = win.indexedDB.deleteDatabase(dbName); - - deleteRequest.onsuccess = () => resolve(); - deleteRequest.onerror = () => resolve(); // Ignore errors if DB doesn't exist - deleteRequest.onblocked = () => resolve(); // Ignore if blocked - } - }); - }); -}); - -Cypress.Commands.add('interceptNewTab', () => { - cy.window().then((win) => { - cy.stub(win, 'open').as('windowOpen'); - }); -}); - -Cypress.Commands.add('visitInterceptedTab', () => { - cy.get('@windowOpen') - .should('have.been.called') - .then((stub: any) => { - const url = stub.firstCall.args[0]; - cy.visit(url); - }); -}); diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts deleted file mode 100644 index 6a8a49e6d42..00000000000 --- a/cypress/support/e2e.ts +++ /dev/null @@ -1,113 +0,0 @@ -import registerCypressGrep from '@cypress/grep/src/support'; -import cloneDeep from 'lodash/cloneDeep'; -import merge from 'lodash/merge'; - -import { settings } from './commands'; - -registerCypressGrep(); - -before(() => { - cy.resetDatabase(); - - Cypress.on('uncaught:exception', (error) => { - return !error.message.includes('ResizeObserver'); - }); - - // Mock the clipboard API because in newer versions of cypress the clipboard API is flaky when the window is not focussed. - Cypress.on('window:before:load', (win) => { - let currentContent: string = ''; - Object.assign(win.navigator.clipboard, { - writeText: async (text: string) => { - currentContent = text; - return await Promise.resolve(); - }, - readText: async () => await Promise.resolve(currentContent), - }); - }); -}); - -beforeEach(() => { - cy.window().then((win): void => { - win.localStorage.setItem('N8N_THEME', 'light'); - win.localStorage.setItem('N8N_AUTOCOMPLETE_ONBOARDED', 'true'); - win.localStorage.setItem('N8N_MAPPING_ONBOARDED', 'true'); - }); - - // #region ===== Intercepts ===== - - cy.intercept('GET', '/rest/settings', (req) => { - // Disable cache - delete req.headers['if-none-match']; - req.on('response', (res) => { - const defaultSettings = res.body.data; - res.send({ data: merge(cloneDeep(defaultSettings), settings) }); - }); - }).as('loadSettings'); - - cy.intercept('GET', '/types/nodes.json').as('loadNodeTypes'); - - // Always intercept the request to test credentials and return a success - cy.intercept('POST', '/rest/credentials/test', { - data: { status: 'success', message: 'Tested successfully' }, - }).as('credentialTest'); - - cy.intercept('POST', '/rest/license/renew', { - data: { - usage: { - activeWorkflowTriggers: { - limit: -1, - value: 0, - warningThreshold: 0.8, - }, - }, - license: { - planId: '', - planName: 'Community', - }, - }, - }); - - cy.intercept({ pathname: '/api/health' }, { status: 'OK' }).as('healthCheck'); - cy.intercept({ pathname: '/api/versions/*' }, [ - { - name: '1.45.1', - createdAt: '2023-08-18T11:53:12.857Z', - hasSecurityIssue: null, - hasSecurityFix: null, - securityIssueFixVersion: null, - hasBreakingChange: null, - documentationUrl: 'https://docs.n8n.io/release-notes/#n8n131', - nodes: [], - description: 'Includes bug fixes', - }, - { - name: '1.0.5', - createdAt: '2023-07-24T10:54:56.097Z', - hasSecurityIssue: false, - hasSecurityFix: null, - securityIssueFixVersion: null, - hasBreakingChange: true, - documentationUrl: 'https://docs.n8n.io/release-notes/#n8n104', - nodes: [], - description: 'Includes core functionality and bug fixes', - }, - ]).as('getVersions'); - cy.intercept( - { pathname: '/api/whats-new' }, - { - id: 1, - title: "What's new", - calloutText: '', - footer: '', - createdAt: '2025-06-27T14:55:58.717Z', - updatedAt: '2025-06-27T15:06:44.092Z', - items: [], - }, - ).as('getWhatsNew'); - - // #endregion ===== Intercepts ===== - - if (!cy.config('disableAutoLogin')) { - cy.signinAsOwner(); - } -}); diff --git a/cypress/support/index.ts b/cypress/support/index.ts deleted file mode 100644 index 322a421d2a0..00000000000 --- a/cypress/support/index.ts +++ /dev/null @@ -1,100 +0,0 @@ -// Load type definitions that come with Cypress module -/// - -import type { FrontendSettings, PushPayload, PushType, N8nEnvFeatFlags } from '@n8n/api-types'; - -Cypress.Keyboard.defaults({ - keystrokeDelay: 0, -}); - -interface SigninPayload { - email: string; - password: string; -} - -interface DragAndDropOptions { - position: 'top' | 'center' | 'bottom'; -} - -declare global { - namespace Cypress { - interface SuiteConfigOverrides { - disableAutoLogin: boolean; - } - - interface Chainable { - config(key: keyof SuiteConfigOverrides): boolean; - getByTestId( - selector: string, - ...args: Array | undefined> - ): Chainable>; - findChildByTestId(childTestId: string): Chainable>; - /** - * Creates a workflow from the given fixture and optionally renames it. - * - * @param fixtureKey - */ - createFixtureWorkflow(fixtureKey: string): void; - /** @deprecated use signinAsOwner, signinAsAdmin or signinAsMember instead */ - signin(payload: SigninPayload): void; - signinAsOwner(): void; - signinAsAdmin(): void; - /** - * Omitting the index will default to index 0. - */ - signinAsMember(index?: number): void; - signout(): void; - overrideSettings(value: Partial): void; - enableFeature(feature: string): void; - disableFeature(feature: string): void; - enableQueueMode(): void; - disableQueueMode(): void; - changeQuota(feature: string, value: number): void; - setEnvFeatureFlags( - flags: N8nEnvFeatFlags, - ): Chainable<{ success: boolean; flags?: N8nEnvFeatFlags; error?: string }>; - clearEnvFeatureFlags(): Chainable<{ success: boolean; flags: N8nEnvFeatFlags }>; - getEnvFeatureFlags(): Chainable; - waitForLoad(waitForIntercepts?: boolean): void; - grantBrowserPermissions(...permissions: string[]): void; - readClipboard(): Chainable; - paste(pastePayload: string): void; - drag( - selector: string | Chainable>, - target: [number, number], - options?: { - abs?: boolean; - index?: number; - realMouse?: boolean; - clickToFinish?: boolean; - moveTwice?: boolean; - }, - ): void; - draganddrop( - draggableSelector: string, - droppableSelector: string, - options?: Partial, - ): void; - push(type: Type, data: PushPayload): void; - shouldNotHaveConsoleErrors(): void; - window(): Chainable< - AUTWindow & { - innerWidth: number; - innerHeight: number; - preventNodeViewBeforeUnload?: boolean; - maxPinnedDataSize?: number; - featureFlags: { - override: (feature: string, value: unknown) => void; - }; - } - >; - resetDatabase(): void; - clearIndexedDB(dbName: string, storeName?: string): Chainable; - setAppDate(targetDate: number | Date): void; - interceptNewTab(): Chainable; - visitInterceptedTab(): Chainable; - } - } -} - -export {}; diff --git a/cypress/support/types/cypress-grep.d.ts b/cypress/support/types/cypress-grep.d.ts deleted file mode 100644 index b27ed35246b..00000000000 --- a/cypress/support/types/cypress-grep.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module '@cypress/grep/src/support'; diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json deleted file mode 100644 index 12108657d40..00000000000 --- a/cypress/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "sourceMap": false, - "declaration": false, - "lib": ["esnext", "dom"], - "types": ["cypress", "node", "cypress-real-events"] - }, - "include": ["**/*.ts"], - "exclude": ["**/dist/**/*", "**/node_modules/**/*"], - "references": [{ "path": "../packages/workflow/tsconfig.build.esm.json" }] -} diff --git a/cypress/types.ts b/cypress/types.ts deleted file mode 100644 index 63f2ddb99e7..00000000000 --- a/cypress/types.ts +++ /dev/null @@ -1,29 +0,0 @@ -export type IE2ETestPageElement = ( - ...args: unknown[] -) => - | Cypress.Chainable> - | Cypress.Chainable> - | Cypress.Chainable>; - -type Getter = IE2ETestPageElement | ((key: string | number) => IE2ETestPageElement); - -export interface IE2ETestPage { - url?: string; - getters: Record; - actions: Record void>; -} - -interface Execution { - workflowId: string; -} - -export interface ExecutionResponse { - data: { - results: Execution[]; - }; -} - -export type OpenContextMenuOptions = { - method?: 'right-click' | 'overflow-button'; - anchor?: 'topRight' | 'topLeft' | 'center' | 'bottomRight' | 'bottomLeft'; -}; diff --git a/cypress/utils/index.ts b/cypress/utils/index.ts deleted file mode 100644 index bc60637a597..00000000000 --- a/cypress/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './modal'; -export * from './popper'; diff --git a/cypress/utils/modal.ts b/cypress/utils/modal.ts deleted file mode 100644 index 4b260ca9e85..00000000000 --- a/cypress/utils/modal.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getVisibleModalOverlay() { - return cy.get('.el-overlay .el-overlay-dialog').filter(':visible'); -} diff --git a/cypress/utils/popper.ts b/cypress/utils/popper.ts deleted file mode 100644 index 43ef2997cf7..00000000000 --- a/cypress/utils/popper.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function getPopper() { - return cy.get('.el-popper'); -} - -export function getVisiblePopper() { - return getPopper().filter('[aria-hidden="false"]'); -} - -export function getVisibleSelect() { - return getVisiblePopper().filter('.el-select__popper'); -} - -export function getVisibleDropdown() { - return getVisiblePopper().filter('.el-dropdown__popper'); -} diff --git a/cypress/utils/workflowUtils.ts b/cypress/utils/workflowUtils.ts deleted file mode 100644 index 5001dbe1b65..00000000000 --- a/cypress/utils/workflowUtils.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { nanoid } from 'nanoid'; - -export function getUniqueWorkflowName(workflowNamePrefix?: string) { - return workflowNamePrefix ? `${workflowNamePrefix} ${nanoid(12)}` : nanoid(12); -} diff --git a/package.json b/package.json index 3ddd547edeb..334556a1f8e 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,6 @@ "dev:ai": "turbo run dev --parallel --env-mode=loose --filter=@n8n/nodes-langchain --filter=n8n --filter=n8n-core", "dev:fe": "run-p start \"dev:fe:editor --filter=@n8n/design-system\"", "dev:fe:editor": "turbo run dev --parallel --env-mode=loose --filter=n8n-editor-ui", - "dev:e2e": "cd cypress && pnpm run test:e2e:dev", - "debug:flaky:e2e": "cd cypress && pnpm run test:flaky", - "dev:e2e:server": "run-p start dev:fe:editor", "clean": "turbo run clean", "reset": "node scripts/ensure-zx.mjs && zx scripts/reset.mjs", "format": "turbo run format && node scripts/format.mjs", diff --git a/packages/@n8n/eslint-config/src/configs/base.ts b/packages/@n8n/eslint-config/src/configs/base.ts index a5f3de08dd7..b83cc25d488 100644 --- a/packages/@n8n/eslint-config/src/configs/base.ts +++ b/packages/@n8n/eslint-config/src/configs/base.ts @@ -18,7 +18,6 @@ export const baseConfig = tseslint.config( 'eslint.config.mjs', 'tsup.config.ts', 'jest.config.js', - 'cypress.config.js', 'vite.config.ts', 'vitest.config.ts', ]), diff --git a/packages/frontend/@n8n/chat/.gitignore b/packages/frontend/@n8n/chat/.gitignore index 286644387f0..354bf1f359e 100644 --- a/packages/frontend/@n8n/chat/.gitignore +++ b/packages/frontend/@n8n/chat/.gitignore @@ -14,9 +14,6 @@ dist-ssr coverage *.local -/cypress/videos/ -/cypress/screenshots/ - # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/packages/frontend/editor-ui/README.md b/packages/frontend/editor-ui/README.md index 75b8026fb8b..0098f17a1f7 100644 --- a/packages/frontend/editor-ui/README.md +++ b/packages/frontend/editor-ui/README.md @@ -41,7 +41,7 @@ pnpm lint ### Run your end-to-end tests ``` -pnpm test:e2e +pnpm --filter=n8n-playwright test:local ``` ### Run your unit tests diff --git a/packages/frontend/editor-ui/src/Interface.ts b/packages/frontend/editor-ui/src/Interface.ts index c31bcd3369d..abdaddf4c33 100644 --- a/packages/frontend/editor-ui/src/Interface.ts +++ b/packages/frontend/editor-ui/src/Interface.ts @@ -113,7 +113,6 @@ declare global { getVariant: (name: string) => string | boolean | undefined; override: (name: string, value: string) => void; }; - Cypress: unknown; } } diff --git a/packages/frontend/editor-ui/src/features/settings/orchestration.ee/components/WorkerList.vue b/packages/frontend/editor-ui/src/features/settings/orchestration.ee/components/WorkerList.vue index b5da967d39a..58a3a2322a7 100644 --- a/packages/frontend/editor-ui/src/features/settings/orchestration.ee/components/WorkerList.vue +++ b/packages/frontend/editor-ui/src/features/settings/orchestration.ee/components/WorkerList.vue @@ -47,20 +47,12 @@ onMounted(() => { }); onBeforeMount(() => { - if (window.Cypress !== undefined) { - return; - } - pushConnection.initialize(); pushStore.pushConnect(); orchestrationManagerStore.startWorkerStatusPolling(); }); onBeforeUnmount(() => { - if (window.Cypress !== undefined) { - return; - } - orchestrationManagerStore.stopWorkerStatusPolling(); pushStore.pushDisconnect(); pushConnection.terminate(); diff --git a/packages/testing/playwright/migration.md b/packages/testing/playwright/migration.md deleted file mode 100644 index e2bce578585..00000000000 --- a/packages/testing/playwright/migration.md +++ /dev/null @@ -1,56 +0,0 @@ -# Cypress to Playwright Migration Guide - -## Migration Process - -### 1. Review Original Test -- Examine the Cypress test file to understand what functionality it's testing -- Note the test structure, assertions, and user interactions -- Identify any special setup or teardown requirements - -### 2. Scaffold New Test -- Create Playwright test file with exact same test names as Cypress -- Add commented descriptions of what each test is trying to achieve -- Keep the same test structure and organization - -### 3. Analyze Dependencies -- Review what page models, composables, and helpers the Cypress test uses -- Check existing Playwright infrastructure in `composables/`, `helpers/`, `pages/` -- Identify which components are already available vs need to be created - -### 4. Study Building Blocks -- Review existing Playwright tests to understand correct patterns -- Check how similar functionality is implemented in other migrated tests -- Follow established conventions for page objects and test structure - -### 5. Plan Migration Approach -- Determine the best strategy for translating Cypress commands to Playwright -- Plan any new page objects or helpers needed -- Consider test data requirements and setup - -### 6. Execute Migration -- Migrate tests one at a time -- Maintain original test intent and coverage -- Follow Playwright best practices and n8n conventions - -### 7. Verify Results -- Test using `pnpm test:local --grep "test-name" --reporter=line` -- Ensure all assertions pass and behavior matches original -- Validate test runs reliably and consistently - -## Key Differences: Cypress vs Playwright - -- **Selectors**: Cypress uses `cy.get()` → Playwright uses `page.locator()` -- **Assertions**: Cypress auto-waits → Playwright uses `expect()` with built-in waiting -- **Page Navigation**: `cy.visit()` → `page.goto()` -- **Element Interaction**: `cy.click()` → `locator.click()` -- **Text Content**: `cy.contains()` → `expect(locator).toContainText()` - -## Testing Commands - -```bash -# Run specific test with grep -pnpm --filter n8n-playwright test:local --grep "test-name" --reporter=line - -# Run full test suite in directory -pnpm --filter n8n-playwright test:local --reporter=line -``` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0215f722891..e51f1dce24a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -354,55 +354,6 @@ importers: specifier: ^8.1.4 version: 8.1.4 - cypress: - dependencies: - '@ngneat/falso': - specifier: ^7.3.0 - version: 7.4.0 - '@sinonjs/fake-timers': - specifier: ^13.0.2 - version: 13.0.2 - cypress: - specifier: ^14.4.0 - version: 14.4.0 - cypress-otp: - specifier: ^1.0.3 - version: 1.0.3 - cypress-real-events: - specifier: ^1.14.0 - version: 1.14.0(cypress@14.4.0) - flatted: - specifier: 'catalog:' - version: 3.2.7 - lodash: - specifier: 'catalog:' - version: 4.17.21 - nanoid: - specifier: 'catalog:' - version: 3.3.8 - start-server-and-test: - specifier: ^2.0.10 - version: 2.0.10 - devDependencies: - '@cypress/grep': - specifier: ^4.1.0 - version: 4.1.0(@babel/core@7.28.4)(cypress@14.4.0) - '@n8n/api-types': - specifier: workspace:* - version: link:../packages/@n8n/api-types - '@types/lodash': - specifier: 'catalog:' - version: 4.17.17 - eslint-plugin-cypress: - specifier: ^4.3.0 - version: 4.3.0(eslint@9.29.0(jiti@2.6.1)) - mocha-junit-reporter: - specifier: ^2.2.1 - version: 2.2.1(mocha@11.7.1) - n8n-workflow: - specifier: workspace:* - version: link:../packages/workflow - packages/@n8n/ai-workflow-builder.ee: dependencies: '@langchain/anthropic': @@ -1098,7 +1049,7 @@ importers: version: 4.3.0 '@getzep/zep-cloud': specifier: 1.0.12 - version: 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d)) + version: 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(ca377405f102dc2905a39d54ecb4d621)) '@getzep/zep-js': specifier: 0.9.0 version: 0.9.0 @@ -1125,7 +1076,7 @@ importers: version: 0.3.4(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13) '@langchain/community': specifier: 'catalog:' - version: 0.3.50(a75c8af281af8c64873764a9c6c64007) + version: 0.3.50(a14f1c0904e0abadfde97956245c3242) '@langchain/core': specifier: 'catalog:' version: 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)) @@ -1248,7 +1199,7 @@ importers: version: 23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) langchain: specifier: 0.3.33 - version: 0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d) + version: 0.3.33(ca377405f102dc2905a39d54ecb4d621) lodash: specifier: 'catalog:' version: 4.17.21 @@ -4593,18 +4544,6 @@ packages: resolution: {integrity: sha512-m2znwZx+y6Z62d03sfC3wv67bqcMzr4HOuh+aG9a6d1rlpbrc8sx+8NzNSAQmuSuBNrrBJXoVSG7G/uj0E2mLA==} hasBin: true - '@cypress/grep@4.1.0': - resolution: {integrity: sha512-yUscMiUgM28VDPrNxL19/BhgHZOVrAPrzVsuEcy6mqPqDYt8H8fIaHeeGQPW4CbMu/ry9sehjH561WDDBIXOIg==} - peerDependencies: - cypress: '>=10' - - '@cypress/request@3.0.8': - resolution: {integrity: sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==} - engines: {node: '>= 6'} - - '@cypress/xvfb@1.2.4': - resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} - '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -5106,12 +5045,6 @@ packages: engines: {node: '>=6'} hasBin: true - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@huggingface/inference@4.0.5': resolution: {integrity: sha512-/Qc45BGrN+FBA3JfdeoHfafxfNShH/dxvOsXbBdcxyxIRIYOyefeiXSlShZGVCaiqYpm+10na28D0YtvjKPTlw==} engines: {node: '>=18'} @@ -6247,9 +6180,6 @@ packages: '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@ngneat/falso@7.4.0': - resolution: {integrity: sha512-7MzPP0YGNHDrohf/epmz6SVIjHGhKyHbh0bm+iZ1z/7KVW4xZi9Dx6Tl9NMPy6a4lWh/t3WXSsCGkgkuJ/eroQ==} - '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} @@ -7309,15 +7239,6 @@ packages: '@sevinf/maybe@0.5.0': resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - '@sinclair/typebox@0.25.21': resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} @@ -7340,9 +7261,6 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@sinonjs/fake-timers@13.0.2': - resolution: {integrity: sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==} - '@smithy/abort-controller@4.0.2': resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} engines: {node: '>=18.0.0'} @@ -8251,12 +8169,6 @@ packages: '@types/showdown@1.9.4': resolution: {integrity: sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w==} - '@types/sinonjs__fake-timers@8.1.1': - resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - - '@types/sizzle@2.3.3': - resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} - '@types/ssh2-sftp-client@9.0.5': resolution: {integrity: sha512-cpUO6okDusnfLw2hnmaBiomlSchIWNVcCdpywLRsg/h9Q1TTiUSrzhkn5sJeeyTM8h6xRbZEZZjgWtUXFDogHg==} @@ -8368,9 +8280,6 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@types/yauzl@2.10.0': - resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} - '@typescript-eslint/eslint-plugin@8.35.0': resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -9017,9 +8926,6 @@ packages: aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -9198,10 +9104,6 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -9221,9 +9123,6 @@ packages: resolution: {integrity: sha512-jyn9tfd9J3h7pgJSk4qQ/1c1Tk5qiXrvmdCDON2UjcFplqRu/KpmKmpi+Ess8ZKmmqK12U4Y3VHrfwQs1xSMZA==} engines: {node: '>=0.11'} - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - aws-ssl-profiles@1.1.1: resolution: {integrity: sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==} engines: {node: '>= 6.0.0'} @@ -9371,9 +9270,6 @@ packages: bl@6.0.12: resolution: {integrity: sha512-EnEYHilP93oaOa2MnmNEjAcovPS3JlQZOyzGXi3EyEpPhm9qWvdDp7BmAVEVusGzp8LlwQK56Av+OkDoRjzE0w==} - blob-util@2.0.2: - resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} - bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -9429,9 +9325,6 @@ packages: browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -9481,9 +9374,6 @@ packages: engines: {node: '>=16.20.1'} deprecated: a critical bug affecting only useBigInt64=true deserialization usage is fixed in bson@6.10.3 - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -9574,10 +9464,6 @@ packages: cacheable@1.10.3: resolution: {integrity: sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==} - cachedir@2.3.0: - resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} - engines: {node: '>=6'} - caching-transform@4.0.0: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} @@ -9635,9 +9521,6 @@ packages: capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chai@5.2.0: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} @@ -9791,18 +9674,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-table3@0.6.1: - resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} - engines: {node: 10.* || >= 12.*} - cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} @@ -9881,9 +9756,6 @@ packages: colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} @@ -9944,10 +9816,6 @@ packages: commist@3.2.0: resolution: {integrity: sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==} - common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -10058,9 +9926,6 @@ packages: core-js@3.40.0: resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -10243,19 +10108,6 @@ packages: currency-codes@2.1.0: resolution: {integrity: sha512-aASwFNP8VjZ0y0PWlSW7c9N/isYTLxK6OCbm7aVuQMk7dWO2zgup9KGiFQgeL9OGL5P/ulvCHcjQizmuEeZXtw==} - cypress-otp@1.0.3: - resolution: {integrity: sha512-o7LssfI0HRHa+TkaOE5/Aukv6M9vsoZAtYESr9m7Ky2i+HRNb2p/IRelE7Z0wJ/UK2f+nXAGZIfXqraf9EPDqw==} - - cypress-real-events@1.14.0: - resolution: {integrity: sha512-XmI8y3OZLh6cjRroPalzzS++iv+pGCaD9G9kfIbtspgv7GVsDt30dkZvSXfgZb4rAN+3pOkMVB7e0j4oXydW7Q==} - peerDependencies: - cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x || ^13.x || ^14.x - - cypress@14.4.0: - resolution: {integrity: sha512-/I59Fqxo7fqdiDi3IM2QKA65gZ7+PVejXg404/I8ZSq+NOnrmw+2pnMUJzpoNyg7KABcEBmgpkfAqhV98p7wJA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} @@ -10438,10 +10290,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -10626,10 +10474,6 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} - diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} @@ -10845,10 +10689,6 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} - enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} @@ -11055,11 +10895,6 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-cypress@4.3.0: - resolution: {integrity: sha512-CgS/S940MJlT8jtnWGKI0LvZQBGb/BB0QCpgBOxFMM/Z6znD+PZUwBhCTwHKN2GEr5AOny3xB92an0QfzBGooQ==} - peerDependencies: - eslint: '>=9' - eslint-plugin-eslint-plugin@7.0.0: resolution: {integrity: sha512-EgiW9zf4PbqA+yN9T6Z8bHx46+fWtAIXFrYkL4nSTnI84LnTKmzjh+cIJaVAyFVZveKUSG8LcVe1suGG78qZPw==} engines: {node: ^20.19.0 || ^22.13.1 || >=24.0.0} @@ -11225,9 +11060,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter2@6.4.7: - resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -11257,10 +11089,6 @@ packages: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} - execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -11269,10 +11097,6 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} - executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} - exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -11342,15 +11166,6 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - fake-indexeddb@6.0.0: resolution: {integrity: sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==} engines: {node: '>=18'} @@ -11410,9 +11225,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -11492,10 +11304,6 @@ packages: find-package-json@1.2.0: resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==} - find-test-names@1.29.7: - resolution: {integrity: sha512-Ps/+M9+rvYqR/gzvfjsfrdeypfSViGZ7Cn7clOGllTlwBcKVGqwfgllGBJ4XwzGp+PaEZZ1MbG4qT1qp4AD9DQ==} - hasBin: true - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -11558,9 +11366,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} @@ -11615,10 +11420,6 @@ packages: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -11732,10 +11533,6 @@ packages: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -11810,10 +11607,6 @@ packages: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} - global-dirs@3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -11834,10 +11627,6 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - globals@16.2.0: resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} engines: {node: '>=18'} @@ -12083,10 +11872,6 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http-signature@1.4.0: - resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} - engines: {node: '>=0.10'} - http2-client@1.3.5: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} @@ -12105,10 +11890,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -12227,10 +12008,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - inquirer@7.3.3: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} engines: {node: '>=8.0.0'} @@ -12361,10 +12138,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -12399,14 +12172,6 @@ packages: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -12922,9 +12687,6 @@ packages: resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} engines: {node: '>= 0.6.0'} - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - join-component@1.1.0: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} @@ -13073,10 +12835,6 @@ packages: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} - jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} - jssha@3.3.0: resolution: {integrity: sha512-w9OtT4ALL+fbbwG3gw7erAO0jvS5nfvrukGPMWIAoea359B26ALXGpzy4YJSp9yGnpUvuvOw1nSjSoHDfWSr1w==} @@ -13409,15 +13167,6 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - listr2@3.14.0: - resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13516,10 +13265,6 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - logform@2.6.1: resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} engines: {node: '>= 12.0.0'} @@ -14014,11 +13759,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -14051,16 +13791,6 @@ packages: mobx@6.12.0: resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==} - mocha-junit-reporter@2.2.1: - resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==} - peerDependencies: - mocha: '>=2.2.5' - - mocha@11.7.1: - resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - mockserver-client@5.15.0: resolution: {integrity: sha512-t0DiypyKH60cX1L9ubUMNnJz+XxmwTYHVdFePQMUNnrwBgERcA5WNqKyuttxRMf7P/WiWO3nWHNHSlPirIFEPw==} engines: {node: '>= 0.8.0'} @@ -14603,9 +14333,6 @@ packages: resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} deprecated: This package is no longer supported. - ospath@1.2.2: - resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} - otpauth@9.1.1: resolution: {integrity: sha512-XhimxmkREwf6GJvV4svS9OVMFJ/qRGz+QBEGwtW5OMf9jZlx9yw25RZMXdrO6r7DHgfIaETJb1lucZXZtn3jgw==} @@ -14823,18 +14550,12 @@ packages: resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} engines: {node: '>=8'} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} perfect-scrollbar@1.5.5: resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==} - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} @@ -15269,9 +14990,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.0.0: - resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -15627,9 +15345,6 @@ packages: replacestream@4.0.3: resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==} - request-progress@3.0.0: - resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -15941,9 +15656,6 @@ packages: scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - seedrandom@3.0.5: - resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} - selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -16093,10 +15805,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-bin-help@1.8.0: - resolution: {integrity: sha512-0LxHn+P1lF5r2WwVB/za3hLRIsYoLaNq1CXqjbrs3ZvLuvlWnRKrUjEWzV7umZL7hpQ7xULiQMV+0iXdRa5iFg==} - engines: {node: '>=14.16'} - simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -16129,10 +15837,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -16298,11 +16002,6 @@ packages: standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - start-server-and-test@2.0.10: - resolution: {integrity: sha512-nZphcfcqGqwk74lbZkqSwClkYz+M5ZPGOMgWxNVJrdztPKN96qe6HooRu6L3TpwITn0lKJJdKACqHbJtqythOQ==} - engines: {node: '>=16'} - hasBin: true - static-eval@2.0.2: resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} @@ -16677,9 +16376,6 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - throttleit@1.0.0: - resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -16733,13 +16429,6 @@ packages: resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} hasBin: true - tldts-core@6.1.86: - resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - - tldts@6.1.86: - resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} - hasBin: true - tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -16787,10 +16476,6 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} - engines: {node: '>=16'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -17276,10 +16961,6 @@ packages: unrs-resolver@1.9.2: resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -17406,10 +17087,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - vite-node@3.1.3: resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -17703,11 +17380,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wait-on@8.0.2: - resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} - engines: {node: '>=12.0.0'} - hasBin: true - walkdir@0.4.1: resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} engines: {node: '>=6.0.0'} @@ -17886,9 +17558,6 @@ packages: worker-timers@7.1.8: resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} - workerpool@9.3.4: - resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -18055,10 +17724,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -18079,9 +17744,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -18141,7 +17803,7 @@ snapshots: '@acuminous/bitsyntax@0.1.2': dependencies: buffer-more-ints: 1.0.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 safe-buffer: 5.1.2 transitivePeerDependencies: - supports-color @@ -19273,7 +18935,7 @@ snapshots: '@babel/traverse': 7.26.10 '@babel/types': 7.27.6 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 7.7.2 @@ -19293,7 +18955,7 @@ snapshots: '@babel/types': 7.28.4 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 7.7.3 @@ -19353,7 +19015,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -19579,11 +19241,6 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -20106,7 +19763,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.26.9 '@babel/types': 7.27.6 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -20119,7 +19776,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -20411,44 +20068,6 @@ snapshots: - supports-color - utf-8-validate - '@cypress/grep@4.1.0(@babel/core@7.28.4)(cypress@14.4.0)': - dependencies: - cypress: 14.4.0 - debug: 4.4.0 - find-test-names: 1.29.7(@babel/core@7.28.4) - globby: 11.1.0 - transitivePeerDependencies: - - '@babel/core' - - supports-color - - '@cypress/request@3.0.8': - dependencies: - aws-sign2: 0.7.0 - aws4: 1.11.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 4.0.4 - http-signature: 1.4.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - performance-now: 2.1.0 - qs: 6.14.0 - safe-buffer: 5.2.1 - tough-cookie: 5.1.2 - tunnel-agent: 0.6.0 - uuid: 8.3.2 - - '@cypress/xvfb@1.2.4(supports-color@8.1.1)': - dependencies: - debug: 3.2.7(supports-color@8.1.1) - lodash.once: 4.1.1 - transitivePeerDependencies: - - supports-color - '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -20740,7 +20359,7 @@ snapshots: '@gar/promisify@1.1.3': optional: true - '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d))': + '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(ca377405f102dc2905a39d54ecb4d621))': dependencies: form-data: 4.0.4 node-fetch: 2.7.0(encoding@0.1.13) @@ -20749,7 +20368,7 @@ snapshots: zod: 3.25.67 optionalDependencies: '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)) - langchain: 0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d) + langchain: 0.3.33(ca377405f102dc2905a39d54ecb4d621) transitivePeerDependencies: - encoding @@ -20843,12 +20462,6 @@ snapshots: protobufjs: 7.4.0 yargs: 17.7.2 - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - '@huggingface/inference@4.0.5': dependencies: '@huggingface/jinja': 0.5.1 @@ -20900,7 +20513,7 @@ snapshots: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 kolorist: 1.8.0 local-pkg: 0.5.0 mlly: 1.7.4 @@ -21416,7 +21029,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -21447,7 +21060,7 @@ snapshots: - aws-crt - encoding - '@langchain/community@0.3.50(a75c8af281af8c64873764a9c6c64007)': + '@langchain/community@0.3.50(a14f1c0904e0abadfde97956245c3242)': dependencies: '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.56.0)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))(utf-8-validate@5.0.10)(zod@3.25.67) '@ibm-cloud/watsonx-ai': 1.1.2 @@ -21459,7 +21072,7 @@ snapshots: flat: 5.0.2 ibm-cloud-sdk-core: 5.3.2 js-yaml: 4.1.0 - langchain: 0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d) + langchain: 0.3.33(ca377405f102dc2905a39d54ecb4d621) langsmith: 0.3.55(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)) openai: 5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67) uuid: 10.0.0 @@ -21473,7 +21086,7 @@ snapshots: '@aws-sdk/credential-provider-node': 3.808.0 '@azure/storage-blob': 12.26.0 '@browserbasehq/sdk': 2.6.0(encoding@0.1.13) - '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d)) + '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.33(ca377405f102dc2905a39d54ecb4d621)) '@getzep/zep-js': 0.9.0 '@google-ai/generativelanguage': 3.4.0(encoding@0.1.13) '@google-cloud/storage': 7.12.1(encoding@0.1.13) @@ -21839,7 +21452,7 @@ snapshots: async-mutex: 0.5.0 chalk: 4.1.2 dayjs: 1.11.10 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 dotenv: 16.6.1 glob: 10.4.5 mkdirp: 2.1.3 @@ -21932,11 +21545,6 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@ngneat/falso@7.4.0': - dependencies: - seedrandom: 3.0.5 - uuid: 8.3.2 - '@noble/hashes@1.8.0': {} '@nodelib/fs.scandir@2.1.5': @@ -22978,14 +22586,6 @@ snapshots: '@sevinf/maybe@0.5.0': {} - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - '@sinclair/typebox@0.25.21': {} '@sinclair/typebox@0.27.8': {} @@ -23008,10 +22608,6 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers@13.0.2': - dependencies: - '@sinonjs/commons': 3.0.1 - '@smithy/abort-controller@4.0.2': dependencies: '@smithy/types': 4.2.0 @@ -24191,10 +23787,6 @@ snapshots: '@types/showdown@1.9.4': {} - '@types/sinonjs__fake-timers@8.1.1': {} - - '@types/sizzle@2.3.3': {} - '@types/ssh2-sftp-client@9.0.5': dependencies: '@types/ssh2': 1.11.6 @@ -24314,11 +23906,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.0 - '@types/yauzl@2.10.0': - dependencies: - '@types/node': 20.19.11 - optional: true - '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.29.0(jiti@2.6.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -24352,7 +23939,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.9.2) '@typescript-eslint/types': 8.35.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -24404,7 +23991,7 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -24957,7 +24544,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -25092,8 +24679,6 @@ snapshots: aproba@2.0.0: optional: true - arch@2.2.0: {} - archiver-utils@5.0.2: dependencies: glob: 10.4.5 @@ -25319,8 +24904,6 @@ snapshots: asynckit@0.4.0: {} - at-least-node@1.0.0: {} - atomic-sleep@1.0.0: {} autoprefixer@10.4.19(postcss@8.4.49): @@ -25339,8 +24922,6 @@ snapshots: avsc@5.7.6: {} - aws-sign2@0.7.0: {} - aws-ssl-profiles@1.1.1: {} aws4@1.11.0: {} @@ -25360,14 +24941,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.12.0(debug@4.4.0): - dependencies: - follow-redirects: 1.15.11(debug@4.4.0) - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.12.0(debug@4.4.1): dependencies: follow-redirects: 1.15.11(debug@4.4.1) @@ -25376,14 +24949,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.12.0(debug@4.4.3): - dependencies: - follow-redirects: 1.15.11(debug@4.4.3) - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - b4a@1.6.7: {} babel-jest@29.6.2(@babel/core@7.26.10): @@ -25569,8 +25134,6 @@ snapshots: inherits: 2.0.4 readable-stream: 4.5.2 - blob-util@2.0.2: {} - bluebird@2.11.0: {} bluebird@3.4.7: {} @@ -25628,8 +25191,6 @@ snapshots: dependencies: resolve: 1.22.10 - browser-stdout@1.3.1: {} - browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -25709,8 +25270,6 @@ snapshots: bson@6.10.0: {} - buffer-crc32@0.2.13: {} - buffer-crc32@1.0.0: {} buffer-equal-constant-time@1.0.1: {} @@ -25841,8 +25400,6 @@ snapshots: hookified: 1.11.0 keyv: 5.5.0 - cachedir@2.3.0: {} - caching-transform@4.0.0: dependencies: hasha: 5.2.2 @@ -25907,8 +25464,6 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 - caseless@0.12.0: {} - chai@5.2.0: dependencies: assertion-error: 2.0.1 @@ -26083,23 +25638,12 @@ snapshots: cli-spinners@2.9.2: {} - cli-table3@0.6.1: - dependencies: - string-width: 4.2.3 - optionalDependencies: - colors: 1.4.0 - cli-table3@0.6.5: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - cli-width@3.0.0: {} cliui@6.0.0: @@ -26200,8 +25744,6 @@ snapshots: colorette@1.4.0: {} - colorette@2.0.19: {} - colors@1.4.0: {} colorspace@1.1.4: @@ -26239,8 +25781,6 @@ snapshots: commist@3.2.0: {} - common-tags@1.8.2: {} - commondir@1.0.1: {} compare-versions@6.1.1: {} @@ -26361,8 +25901,6 @@ snapshots: core-js@3.40.0: {} - core-util-is@1.0.2: {} - core-util-is@1.0.3: {} cors@2.8.5: @@ -26604,60 +26142,6 @@ snapshots: first-match: 0.0.1 nub: 0.0.0 - cypress-otp@1.0.3: - dependencies: - otplib: 12.0.1 - - cypress-real-events@1.14.0(cypress@14.4.0): - dependencies: - cypress: 14.4.0 - - cypress@14.4.0: - dependencies: - '@cypress/request': 3.0.8 - '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.3 - arch: 2.2.0 - blob-util: 2.0.2 - bluebird: 3.7.2 - buffer: 5.7.1 - cachedir: 2.3.0 - chalk: 4.1.2 - check-more-types: 2.24.0 - ci-info: 4.2.0 - cli-cursor: 3.1.0 - cli-table3: 0.6.1 - commander: 6.2.1 - common-tags: 1.8.2 - dayjs: 1.11.10 - debug: 4.4.1(supports-color@8.1.1) - enquirer: 2.3.6 - eventemitter2: 6.4.7 - execa: 4.1.0 - executable: 4.1.1 - extract-zip: 2.0.1(supports-color@8.1.1) - figures: 3.2.0 - fs-extra: 9.1.0 - getos: 3.2.1 - is-installed-globally: 0.4.0 - lazy-ass: 1.6.0 - listr2: 3.14.0(enquirer@2.3.6) - lodash: 4.17.21 - log-symbols: 4.1.0 - minimist: 1.2.8 - ospath: 1.2.2 - pretty-bytes: 5.6.0 - process: 0.11.10 - proxy-from-env: 1.0.0 - request-progress: 3.0.0 - semver: 7.7.2 - supports-color: 8.1.1 - tmp: 0.2.4 - tree-kill: 1.2.2 - untildify: 4.0.0 - yauzl: 2.10.0 - d3-color@3.1.0: {} d3-dispatch@3.0.1: {} @@ -26782,12 +26266,6 @@ snapshots: optionalDependencies: supports-color: 5.5.0 - debug@3.2.7(supports-color@8.1.1): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 8.1.1 - debug@4.3.4: dependencies: ms: 2.1.2 @@ -26810,18 +26288,14 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - debug@4.4.3(supports-color@8.1.1): + debug@4.4.3: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 8.1.1 debuglog@1.0.1: {} decamelize@1.2.0: {} - decamelize@4.0.0: {} - decimal.js@10.4.3: {} decko@1.2.0: {} @@ -26999,8 +26473,6 @@ snapshots: diff@5.2.0: {} - diff@7.0.0: {} - diff@8.0.2: {} diffie-hellman@5.0.3: @@ -27023,7 +26495,7 @@ snapshots: docker-modem@5.0.6: dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 readable-stream: 3.6.0 split-ca: 1.0.1 ssh2: 1.15.0 @@ -27247,10 +26719,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.2 - enquirer@2.3.6: - dependencies: - ansi-colors: 4.1.3 - entities@2.2.0: {} entities@3.0.1: {} @@ -27465,7 +26933,7 @@ snapshots: esbuild-register@3.5.0(esbuild@0.25.9): dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 esbuild: 0.25.9 transitivePeerDependencies: - supports-color @@ -27634,11 +27102,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-cypress@4.3.0(eslint@9.29.0(jiti@2.6.1)): - dependencies: - eslint: 9.29.0(jiti@2.6.1) - globals: 15.15.0 - eslint-plugin-eslint-plugin@7.0.0(eslint@9.29.0(jiti@2.6.1)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.6.1)) @@ -27877,8 +27340,6 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter2@6.4.7: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} @@ -27908,18 +27369,6 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 - execa@4.1.0: - dependencies: - cross-spawn: 7.0.6 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -27947,10 +27396,6 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - executable@4.1.1: - dependencies: - pify: 2.3.0 - exit@0.1.2: {} expand-template@2.0.3: {} @@ -28069,18 +27514,6 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.2.4 - extract-zip@2.0.1(supports-color@8.1.1): - dependencies: - debug: 4.4.1(supports-color@8.1.1) - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.0 - transitivePeerDependencies: - - supports-color - - extsprintf@1.3.0: {} - fake-indexeddb@6.0.0: {} fake-xml-http-request@2.1.2: {} @@ -28138,10 +27571,6 @@ snapshots: dependencies: bser: 2.1.1 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -28234,18 +27663,6 @@ snapshots: find-package-json@1.2.0: {} - find-test-names@1.29.7(@babel/core@7.28.4): - dependencies: - '@babel/parser': 7.27.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.28.4) - acorn-walk: 8.3.4 - debug: 4.4.1(supports-color@8.1.1) - globby: 11.1.0 - simple-bin-help: 1.8.0 - transitivePeerDependencies: - - '@babel/core' - - supports-color - find-up-simple@1.0.1: {} find-up@4.1.0: @@ -28289,18 +27706,10 @@ snapshots: optionalDependencies: debug: 4.3.6 - follow-redirects@1.15.11(debug@4.4.0): - optionalDependencies: - debug: 4.4.0 - follow-redirects@1.15.11(debug@4.4.1): optionalDependencies: debug: 4.4.1(supports-color@8.1.1) - follow-redirects@1.15.11(debug@4.4.3): - optionalDependencies: - debug: 4.4.3(supports-color@8.1.1) - for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -28317,8 +27726,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - forever-agent@0.6.1: {} - form-data-encoder@1.7.2: {} form-data-encoder@4.0.2: {} @@ -28368,13 +27775,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.0 - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -28526,10 +27926,6 @@ snapshots: dependencies: pump: 3.0.0 - get-stream@5.2.0: - dependencies: - pump: 3.0.0 - get-stream@6.0.1: {} get-stream@9.0.1: @@ -28635,10 +28031,6 @@ snapshots: minipass: 4.2.8 path-scurry: 1.11.1 - global-dirs@3.0.0: - dependencies: - ini: 2.0.0 - global-modules@2.0.0: dependencies: global-prefix: 3.0.0 @@ -28657,8 +28049,6 @@ snapshots: globals@14.0.0: {} - globals@15.15.0: {} - globals@16.2.0: {} globalthis@1.0.4: @@ -28965,7 +28355,7 @@ snapshots: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color optional: true @@ -28974,7 +28364,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -29004,12 +28394,6 @@ snapshots: transitivePeerDependencies: - debug - http-signature@1.4.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 2.0.2 - sshpk: 1.18.0 - http2-client@1.3.5: {} https-browserify@1.0.0: {} @@ -29017,14 +28401,14 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -29035,8 +28419,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@1.1.1: {} - human-signals@2.1.0: {} human-signals@8.0.1: {} @@ -29052,9 +28434,9 @@ snapshots: '@types/debug': 4.1.12 '@types/node': 20.19.21 '@types/tough-cookie': 4.0.5 - axios: 1.12.0(debug@4.4.3) + axios: 1.12.0(debug@4.4.1) camelcase: 6.3.0 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 dotenv: 16.6.1 extend: 3.0.2 file-type: 16.5.4 @@ -29062,7 +28444,7 @@ snapshots: isstream: 0.1.2 jsonwebtoken: 9.0.2 mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.12.0) + retry-axios: 2.6.0(axios@1.12.0(debug@4.4.3)) tough-cookie: 4.1.4 transitivePeerDependencies: - supports-color @@ -29158,8 +28540,6 @@ snapshots: ini@1.3.8: {} - ini@2.0.0: {} - inquirer@7.3.3: dependencies: ansi-escapes: 4.3.2 @@ -29320,11 +28700,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-installed-globally@0.4.0: - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 - is-interactive@1.0.0: {} is-lambda@1.0.1: @@ -29350,10 +28725,6 @@ snapshots: is-obj@1.0.1: {} - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -29513,7 +28884,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -29522,7 +28893,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.30 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -30281,14 +29652,6 @@ snapshots: jmespath@0.16.0: {} - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - join-component@1.1.0: {} jose@4.15.9: @@ -30467,13 +29830,6 @@ snapshots: ms: 2.1.3 semver: 7.7.2 - jsprim@2.0.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jssha@3.3.0: {} jssha@3.3.1: {} @@ -30544,7 +29900,7 @@ snapshots: kuler@2.0.0: {} - langchain@0.3.33(5cc28a029307bb3da1dcaf370c8a2b8d): + langchain@0.3.33(ca377405f102dc2905a39d54ecb4d621): dependencies: '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)) '@langchain/openai': 0.6.16(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) @@ -30770,19 +30126,6 @@ snapshots: dependencies: uc.micro: 2.1.0 - listr2@3.14.0(enquirer@2.3.6): - dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.19 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.3.0 - rxjs: 7.8.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - optionalDependencies: - enquirer: 2.3.6 - load-tsconfig@0.2.5: {} local-pkg@0.5.0: @@ -30859,13 +30202,6 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - log-update@4.0.0: - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - logform@2.6.1: dependencies: '@colors/colors': 1.6.0 @@ -31554,8 +30890,6 @@ snapshots: mkdirp@2.1.3: {} - mkdirp@3.0.1: {} - mlly@1.7.4: dependencies: acorn: 8.14.0 @@ -31581,40 +30915,6 @@ snapshots: mobx@6.12.0: {} - mocha-junit-reporter@2.2.1(mocha@11.7.1): - dependencies: - debug: 4.4.1(supports-color@8.1.1) - md5: 2.3.0 - mkdirp: 3.0.1 - mocha: 11.7.1 - strip-ansi: 6.0.1 - xml: 1.0.1 - transitivePeerDependencies: - - supports-color - - mocha@11.7.1: - dependencies: - browser-stdout: 1.3.1 - chokidar: 4.0.3 - debug: 4.4.3(supports-color@8.1.1) - diff: 7.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 10.4.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 9.0.5 - ms: 2.1.3 - picocolors: 1.1.1 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 9.3.4 - yargs: 17.7.2 - yargs-parser: 21.1.1 - yargs-unparser: 2.0.0 - mockserver-client@5.15.0: dependencies: browser-or-node: 2.1.1 @@ -31661,7 +30961,7 @@ snapshots: mqtt-packet@9.0.0: dependencies: bl: 6.0.12 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 process-nextick-args: 2.0.1 transitivePeerDependencies: - supports-color @@ -32041,7 +31341,7 @@ snapshots: number-allocator@1.0.14: dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 js-sdsl: 4.3.0 transitivePeerDependencies: - supports-color @@ -32286,8 +31586,6 @@ snapshots: os-homedir: 1.0.2 os-tmpdir: 1.0.2 - ospath@1.2.2: {} - otpauth@9.1.1: dependencies: jssha: 3.3.0 @@ -32502,14 +31800,10 @@ snapshots: peek-readable@4.1.0: {} - pend@1.2.0: {} - perfect-debounce@1.0.0: {} perfect-scrollbar@1.5.5: {} - performance-now@2.1.0: {} - pg-cloudflare@1.1.1: optional: true @@ -32945,8 +32239,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.0.0: {} - proxy-from-env@1.1.0: {} ps-tree@1.2.0: @@ -33430,17 +32722,13 @@ snapshots: object-assign: 4.1.1 readable-stream: 2.3.7 - request-progress@3.0.0: - dependencies: - throttleit: 1.0.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} require-in-the-middle@7.4.0: dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 module-details-from-path: 1.0.3 resolve: 1.22.10 transitivePeerDependencies: @@ -33484,7 +32772,7 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - retry-axios@2.6.0(axios@1.12.0): + retry-axios@2.6.0(axios@1.12.0(debug@4.4.3)): dependencies: axios: 1.12.0(debug@4.4.1) @@ -33554,7 +32842,7 @@ snapshots: '@babel/types': 7.28.4 ast-kit: 2.1.3 birpc: 2.6.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 dts-resolver: 2.1.2 get-tsconfig: 4.10.1 magic-string: 0.30.19 @@ -33814,8 +33102,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - seedrandom@3.0.5: {} - selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -34021,8 +33307,6 @@ snapshots: signal-exit@4.1.0: {} - simple-bin-help@1.8.0: {} - simple-concat@1.0.1: {} simple-get@4.0.1: @@ -34053,7 +33337,7 @@ snapshots: simple-websocket@9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 queue-microtask: 1.2.3 randombytes: 2.1.0 readable-stream: 3.6.0 @@ -34067,12 +33351,6 @@ snapshots: slash@3.0.0: {} - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -34137,7 +33415,7 @@ snapshots: socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -34303,19 +33581,6 @@ snapshots: standard-as-callback@2.1.0: {} - start-server-and-test@2.0.10: - dependencies: - arg: 5.0.2 - bluebird: 3.7.2 - check-more-types: 2.24.0 - debug: 4.4.0 - execa: 5.1.1 - lazy-ass: 1.6.0 - ps-tree: 1.2.0 - wait-on: 8.0.2(debug@4.4.0) - transitivePeerDependencies: - - supports-color - static-eval@2.0.2: dependencies: escodegen: 1.14.3 @@ -34659,7 +33924,7 @@ snapshots: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.4 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 fast-safe-stringify: 2.1.1 form-data: 4.0.4 formidable: 3.5.4 @@ -34900,8 +34165,6 @@ snapshots: dependencies: real-require: 0.2.0 - throttleit@1.0.0: {} - through@2.3.8: {} timeago.js@4.0.2: {} @@ -34942,12 +34205,6 @@ snapshots: tlds@1.248.0: {} - tldts-core@6.1.86: {} - - tldts@6.1.86: - dependencies: - tldts-core: 6.1.86 - tmp-promise@3.0.3: dependencies: tmp: 0.2.4 @@ -34997,10 +34254,6 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - tough-cookie@5.1.2: - dependencies: - tldts: 6.1.86 - tr46@0.0.3: {} tr46@1.0.1: @@ -35178,7 +34431,7 @@ snapshots: ansis: 4.2.0 cac: 6.7.14 chokidar: 4.0.3 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 @@ -35529,8 +34782,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 - untildify@4.0.0: {} - update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -35651,12 +34902,6 @@ snapshots: vary@1.1.2: {} - verror@1.10.0: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - vite-node@3.1.3(@types/node@20.19.21)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3): dependencies: cac: 6.7.14 @@ -35871,7 +35116,7 @@ snapshots: vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.6.1)): dependencies: - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 eslint: 9.29.0(jiti@2.6.1) eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -35959,16 +35204,6 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wait-on@8.0.2(debug@4.4.0): - dependencies: - axios: 1.12.0(debug@4.4.0) - joi: 17.13.3 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.1 - transitivePeerDependencies: - - debug - walkdir@0.4.1: {} walker@1.0.8: @@ -36219,8 +35454,6 @@ snapshots: worker-timers-broker: 6.1.8 worker-timers-worker: 7.0.71 - workerpool@9.3.4: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -36347,13 +35580,6 @@ snapshots: yargs-parser@21.1.1: {} - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -36408,11 +35634,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - yn@3.1.1: optional: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7fa4fcbab8f..a9cefd9d78a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,6 @@ packages: - packages/@n8n/* - packages/frontend/** - packages/extensions/** - - cypress - packages/testing/** minimumReleaseAge: 2880 # 2 days diff --git a/renovate.json b/renovate.json index 358f5872b91..4627ae22329 100644 --- a/renovate.json +++ b/renovate.json @@ -60,7 +60,6 @@ "matchPackageNames": [ "*vitest*", "*playwright*", - "*cypress*", "@testing-library/**", "*jest*" ], diff --git a/scripts/format.mjs b/scripts/format.mjs index 69bbfce0150..8d2b4484daf 100644 --- a/scripts/format.mjs +++ b/scripts/format.mjs @@ -19,7 +19,7 @@ const prettierConfig = path.resolve('.prettierrc.js'); const biomeConfig = path.resolve('biome.jsonc'); const ignore = path.resolve('.prettierignore'); -const ROOT_DIRS_TO_SKIP = ['.git', 'node_modules', 'packages', '.turbo', 'cypress']; +const ROOT_DIRS_TO_SKIP = ['.git', 'node_modules', 'packages', '.turbo']; const EXTENSIONS_TO_FORMAT_WITH_PRETTIER = ['.yml']; const EXTENSIONS_TO_FORMAT_WITH_BIOME = ['.js', '.json', '.ts']; diff --git a/scripts/run-e2e.js b/scripts/run-e2e.js deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tsconfig.json b/tsconfig.json index 89241741f9f..9e9f6f14875 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./packages/@n8n/typescript-config/tsconfig.common.json", - "exclude": ["**/dist/**/*", "**/node_modules/**/*", "cypress"] + "exclude": ["**/dist/**/*", "**/node_modules/**/*"] }